ETH Price: $3,831.93 (+5.54%)

Token

ERC-20: Vice City (GTA6)
 

Overview

Max Total Supply

1,000,000,000 GTA6

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,995,847.65056668247947171 GTA6

Value
$0.00
0x8dea6bebcafa5abccad7f4be45f88e2748207e03
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:
ViceCity

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Vice City

// https://vicecity.club/
// https://t.me/vicecityGTA6

// $GTA6

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

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

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

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

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



//SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.17;




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

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

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

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

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

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;
}

contract ViceCity is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public swapTokensAtAmount = 500000 * (10**18);
    uint256 public maxTransactionAmount = 20000000 * (10**18);
    uint256 public maxWalletToken = 20000000 * (10**18);

    uint256 public liquidityFee = 3;
    uint256 public marketingFee = 1;
    uint256 public teamFee = 1;
    uint256 private totalFees = liquidityFee+marketingFee+teamFee;
    uint256 private _totalSupply = 1000000000 * (10**18); // 1 Billion tokens
    

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    address payable public marketingWallet = payable(0x9C29fCe80B857CE96fE757B93AedE86A95F22e43);
    address payable public teamWallet = payable(0x3B675FB4bC5f4b7C86597C57826085996D037EF6);

    // exlcude from fees and max wallet
    mapping (address => bool) private _isExcludedFromFees;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event ExcludeFromFees(address indexed account, bool isExcluded);
   
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20("Vice City", "GTA6") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees or having max wallet limit
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(teamWallet, true);
        excludeFromFees(address(this), true);
        
        /*
            _mint is internal function that's called only once during deployment to mint maxSupply. No more tokens
            can be created ever by any means.
        */
        _mint(owner(), _totalSupply);
    }

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

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

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

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(amount <= maxTransactionAmount, "amount must be less than or equal to maxTx limit");
        }

        if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to==uniswapV2Pair && 
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(
            !_isExcludedFromFees[from] && 
            !_isExcludedFromFees[to] &&
            (from==uniswapV2Pair || to==uniswapV2Pair)
        ) {
            uint256 fees = amount*totalFees/100;
            amount = amount-fees;

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

        super._transfer(from, to, amount);

    }

    //handle tax tokens conversion for autoLP and Wallets

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance*liquidityFee/totalFees;
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity/2;
        uint256 otherHalf = tokensForLiquidity-half;

        // capture the contract's current ETH balance.
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); 

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

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

        emit SwapAndLiquify(half, newBalance);

        // swap and Send ether to team and marketing wallets
        
        swapTokensForEth(contractTokenBalance-tokensForLiquidity);
        uint256 walletEth = address(this).balance;
        uint256 teamShare = walletEth*teamFee/(totalFees-liquidityFee);
        (bool teamS,) = teamWallet.call{value: teamShare}("");
        require (teamS, "eth to team wallet failed");
        (bool marketS,) = marketingWallet.call{value: walletEth - teamShare}("");
        require (marketS, "eth to marketing wallet failed");
        
    }

    //converts taxed tokens to eth 

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
   
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setMaxWalletLimit(uint256 _newLimit) public onlyOwner {
        maxWalletToken = _newLimit;
        require(maxWalletToken >= totalSupply()/500, "value too low");
    }

    function updateFee(uint256 _liqFee, uint256 _markFee, uint256 _teamFee) public onlyOwner {
        liquidityFee = _liqFee;
        marketingFee = _markFee;
        teamFee = _teamFee;
        totalFees = liquidityFee+marketingFee+teamFee;
        require(totalFees <= 6, "tax too high");
    }

    function updateWallets(address payable _marketing, address payable _team) public onlyOwner {
        require (_marketing != address(0) || _team != address(0) , "marketing or team wallet can't be a zero address");
        marketingWallet = _marketing;
        teamWallet = _team;
    }
 // function to clear stucked ether from contract
     function clearStuckedEther () external onlyOwner {
        uint256 balance = address(this).balance;
        (bool sent,) = owner().call{value: balance}("");
        require (sent, "transfer failed");
    }
 // function to claim other erc20 token from contract if accidently sent by someone.
    function claimOtherERC20token (address _token) external onlyOwner {
        require (_token != address(0), "not a valid token");
        IERC20 otherErc20Token = IERC20 (_token);
        uint256 balance = otherErc20Token.balanceOf(address(this));
        otherErc20Token.transfer(owner(), balance);

    }

      receive() external payable {

  	}


  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"address","name":"_token","type":"address"}],"name":"claimOtherERC20token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckedEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"},{"internalType":"address payable","name":"_team","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526969e10de76676d08000006007556a108b2a2c280290940000006008556a108b2a2c280290940000006009556003600a556001600b556001600c55600c54600b54600a546200005491906200093b565b6200006091906200093b565b600d556b033b2e3c9fd0803ce8000000600e556001600f60016101000a81548160ff021916908315150217905550739c29fce80b857ce96fe757b93aede86a95f22e43600f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733b675fb4bc5f4b7c86597c57826085996d037ef6601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200014557600080fd5b506040518060400160405280600981526020017f56696365204369747900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f47544136000000000000000000000000000000000000000000000000000000008152508160039081620001c3919062000be6565b508060049081620001d5919062000be6565b505050620001f8620001ec620004b960201b60201c565b620004c160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000285919062000d37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000d37565b6040518363ffffffff1660e01b81526004016200033292919062000d7a565b6020604051808303816000875af115801562000352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000378919062000d37565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000411620004036200058760201b60201c565b6001620005b160201b60201c565b62000446600f60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b160201b60201c565b6200047b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b160201b60201c565b6200048e306001620005b160201b60201c565b620004b1620004a26200058760201b60201c565b600e546200078060201b60201c565b505062000f9c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c1620004b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e76200058760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000640576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006379062000e08565b60405180910390fd5b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cc9062000ea0565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000774919062000edf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e99062000f4c565b60405180910390fd5b6200080660008383620008f860201b60201c565b80600260008282546200081a91906200093b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200087191906200093b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d8919062000f7f565b60405180910390a3620008f460008383620008fd60201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009488262000902565b9150620009558362000902565b925082820190508082111562000970576200096f6200090c565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009f857607f821691505b60208210810362000a0e5762000a0d620009b0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a39565b62000a84868362000a39565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000ac762000ac162000abb8462000902565b62000a9c565b62000902565b9050919050565b6000819050919050565b62000ae38362000aa6565b62000afb62000af28262000ace565b84845462000a46565b825550505050565b600090565b62000b1262000b03565b62000b1f81848462000ad8565b505050565b5b8181101562000b475762000b3b60008262000b08565b60018101905062000b25565b5050565b601f82111562000b965762000b608162000a14565b62000b6b8462000a29565b8101602085101562000b7b578190505b62000b9362000b8a8562000a29565b83018262000b24565b50505b505050565b600082821c905092915050565b600062000bbb6000198460080262000b9b565b1980831691505092915050565b600062000bd6838362000ba8565b9150826002028217905092915050565b62000bf18262000976565b67ffffffffffffffff81111562000c0d5762000c0c62000981565b5b62000c198254620009df565b62000c2682828562000b4b565b600060209050601f83116001811462000c5e576000841562000c49578287015190505b62000c55858262000bc8565b86555062000cc5565b601f19841662000c6e8662000a14565b60005b8281101562000c985784890151825560018201915060208501945060208101905062000c71565b8683101562000cb8578489015162000cb4601f89168262000ba8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cff8262000cd2565b9050919050565b62000d118162000cf2565b811462000d1d57600080fd5b50565b60008151905062000d318162000d06565b92915050565b60006020828403121562000d505762000d4f62000ccd565b5b600062000d608482850162000d20565b91505092915050565b62000d748162000cf2565b82525050565b600060408201905062000d91600083018562000d69565b62000da0602083018462000d69565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000df060208362000da7565b915062000dfd8262000db8565b602082019050919050565b6000602082019050818103600083015262000e238162000de1565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000e88602a8362000da7565b915062000e958262000e2a565b604082019050919050565b6000602082019050818103600083015262000ebb8162000e79565b9050919050565b60008115159050919050565b62000ed98162000ec2565b82525050565b600060208201905062000ef6600083018462000ece565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f34601f8362000da7565b915062000f418262000efc565b602082019050919050565b6000602082019050818103600083015262000f678162000f25565b9050919050565b62000f798162000902565b82525050565b600060208201905062000f96600083018462000f6e565b92915050565b608051613e8862000fd460003960008181610bd901528181611cfd01528181611e9401528181611fbb01526120100152613e886000f3fe6080604052600436106101fd5760003560e01c806375f0a8741161010d578063c49b9a80116100a0578063e2f456051161006f578063e2f4560514610746578063e6c75f7114610771578063e8ba854f1461079c578063f2fde38b146107c5578063fc061a4f146107ee57610204565b8063c49b9a801461068a578063c8c8ebe4146106b3578063d7c94efd146106de578063dd62ed3e1461070957610204565b806398118cb4116100dc57806398118cb4146105bc578063a457c2d7146105e7578063a9059cbb14610624578063c02466681461066157610204565b806375f0a87414610524578063891ad0f21461054f5780638da5cb5b1461056657806395d89b411461059157610204565b806349bd5a5e116101905780636b67c4df1161015f5780636b67c4df1461045357806370a082311461047e578063715018a6146104bb578063728d41c9146104d2578063750c11b6146104fb57610204565b806349bd5a5e146103955780634a74bb02146103c05780634fbee193146103eb578063599270441461042857610204565b806318160ddd116101cc57806318160ddd146102c557806323b872dd146102f0578063313ce5671461032d578063395093511461035857610204565b806306fdde0314610209578063095ea7b3146102345780630d2ce36e146102715780631694505e1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610817565b60405161022b9190612a99565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612b54565b6108a9565b6040516102689190612baf565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612bca565b6108cc565b005b3480156102a657600080fd5b506102af610ac5565b6040516102bc9190612c56565b60405180910390f35b3480156102d157600080fd5b506102da610aeb565b6040516102e79190612c80565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612c9b565b610af5565b6040516103249190612baf565b60405180910390f35b34801561033957600080fd5b50610342610b24565b60405161034f9190612d0a565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612b54565b610b2d565b60405161038c9190612baf565b60405180910390f35b3480156103a157600080fd5b506103aa610bd7565b6040516103b79190612d34565b60405180910390f35b3480156103cc57600080fd5b506103d5610bfb565b6040516103e29190612baf565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612bca565b610c0e565b60405161041f9190612baf565b60405180910390f35b34801561043457600080fd5b5061043d610c64565b60405161044a9190612d70565b60405180910390f35b34801561045f57600080fd5b50610468610c8a565b6040516104759190612c80565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612bca565b610c90565b6040516104b29190612c80565b60405180910390f35b3480156104c757600080fd5b506104d0610cd8565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d8b565b610d60565b005b34801561050757600080fd5b50610522600480360381019061051d9190612d8b565b610e3f565b005b34801561053057600080fd5b50610539610ec5565b6040516105469190612d70565b60405180910390f35b34801561055b57600080fd5b50610564610eeb565b005b34801561057257600080fd5b5061057b611023565b6040516105889190612d34565b60405180910390f35b34801561059d57600080fd5b506105a661104d565b6040516105b39190612a99565b60405180910390f35b3480156105c857600080fd5b506105d16110df565b6040516105de9190612c80565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612b54565b6110e5565b60405161061b9190612baf565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190612b54565b6111cf565b6040516106589190612baf565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190612de4565b6111f2565b005b34801561069657600080fd5b506106b160048036038101906106ac9190612e24565b6113a9565b005b3480156106bf57600080fd5b506106c8611479565b6040516106d59190612c80565b60405180910390f35b3480156106ea57600080fd5b506106f361147f565b6040516107009190612c80565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190612e51565b611485565b60405161073d9190612c80565b60405180910390f35b34801561075257600080fd5b5061075b61150c565b6040516107689190612c80565b60405180910390f35b34801561077d57600080fd5b50610786611512565b6040516107939190612c80565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190612ebd565b611518565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612bca565b6116c2565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612efd565b6117b9565b005b60606003805461082690612f7f565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612f7f565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b6000806108b46118b8565b90506108c18185856118c0565b600191505092915050565b6108d46118b8565b73ffffffffffffffffffffffffffffffffffffffff166108f2611023565b73ffffffffffffffffffffffffffffffffffffffff1614610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90613068565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109f79190612d34565b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a38919061309d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610a5e611023565b836040518363ffffffff1660e01b8152600401610a7c9291906130ca565b6020604051808303816000875af1158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abf9190613108565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b600080610b006118b8565b9050610b0d858285611a89565b610b18858585611b15565b60019150509392505050565b60006012905090565b600080610b386118b8565b9050610bcc818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bc79190613164565b6118c0565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60019054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce06118b8565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611023565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90612ffc565b60405180910390fd5b610d5e60006120ba565b565b610d686118b8565b73ffffffffffffffffffffffffffffffffffffffff16610d86611023565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390612ffc565b60405180910390fd5b806009819055506101f4610dee610aeb565b610df891906131c7565b6009541015610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613244565b60405180910390fd5b50565b610e476118b8565b73ffffffffffffffffffffffffffffffffffffffff16610e65611023565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290612ffc565b60405180910390fd5b8060078190555050565b600f60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ef36118b8565b73ffffffffffffffffffffffffffffffffffffffff16610f11611023565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90612ffc565b60405180910390fd5b60004790506000610f76611023565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f9990613295565b60006040518083038185875af1925050503d8060008114610fd6576040519150601f19603f3d011682016040523d82523d6000602084013e610fdb565b606091505b505090508061101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906132f6565b60405180910390fd5b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461105c90612f7f565b80601f016020809104026020016040519081016040528092919081815260200182805461108890612f7f565b80156110d55780601f106110aa576101008083540402835291602001916110d5565b820191906000526020600020905b8154815290600101906020018083116110b857829003601f168201915b5050505050905090565b600a5481565b6000806110f06118b8565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613388565b60405180910390fd5b6111c382868684036118c0565b60019250505092915050565b6000806111da6118b8565b90506111e7818585611b15565b600191505092915050565b6111fa6118b8565b73ffffffffffffffffffffffffffffffffffffffff16611218611023565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612ffc565b60405180910390fd5b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f79061341a565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161139d9190612baf565b60405180910390a25050565b6113b16118b8565b73ffffffffffffffffffffffffffffffffffffffff166113cf611023565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90612ffc565b60405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161146e9190612baf565b60405180910390a150565b60085481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b60095481565b6115206118b8565b73ffffffffffffffffffffffffffffffffffffffff1661153e611023565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806115fd5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906134ac565b60405180910390fd5b81600f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116ca6118b8565b73ffffffffffffffffffffffffffffffffffffffff166116e8611023565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a49061353e565b60405180910390fd5b6117b6816120ba565b50565b6117c16118b8565b73ffffffffffffffffffffffffffffffffffffffff166117df611023565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90612ffc565b60405180910390fd5b82600a8190555081600b8190555080600c81905550600c54600b54600a5461185d9190613164565b6118679190613164565b600d819055506006600d5411156118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa906135aa565b60405180910390fd5b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061363c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361199e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611995906136ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a7c9190612c80565b60405180910390a3505050565b6000611a958484611485565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b0f5781811015611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061373a565b60405180910390fd5b611b0e84848484036118c0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906137cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea9061385e565b60405180910390fd5b60008103611c0c57611c0783836000612180565b6120b5565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611cb05750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cfb57600854811115611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906138f0565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611da05750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611df65750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5a576000611e0683610c90565b90506009548282611e179190613164565b1115611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613982565b60405180910390fd5b505b6000611e6530610c90565b905060006007548210159050808015611e8b5750600f60009054906101000a900460ff16155b8015611ee257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611efa5750600f60019054906101000a900460ff165b15611f0e576007549150611f0d826123ff565b5b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fb25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561205f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061205e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b5b156120a75760006064600d548561207691906139a2565b61208091906131c7565b9050808461208e91906139e4565b935060008111156120a5576120a4863083612180565b5b505b6120b2858585612180565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e6906137cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122559061385e565b60405180910390fd5b6122698383836126ce565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690613a8a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123829190613164565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e69190612c80565b60405180910390a36123f98484846126d3565b50505050565b6001600f60006101000a81548160ff0219169083151502179055506000600d54600a548361242d91906139a2565b61243791906131c7565b9050600060028261244891906131c7565b90506000818361245891906139e4565b90506000479050612468836126d8565b6000814761247691906139e4565b90506124828382612951565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516124b3929190613aaa565b60405180910390a16124cf85876124ca91906139e4565b6126d8565b60004790506000600a54600d546124e691906139e4565b600c54836124f491906139a2565b6124fe91906131c7565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161254890613295565b60006040518083038185875af1925050503d8060008114612585576040519150601f19603f3d011682016040523d82523d6000602084013e61258a565b606091505b50509050806125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613b1f565b60405180910390fd5b6000600f60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838561261591906139e4565b60405161262190613295565b60006040518083038185875af1925050503d806000811461265e576040519150601f19603f3d011682016040523d82523d6000602084013e612663565b606091505b50509050806126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e90613b8b565b60405180910390fd5b5050505050505050506000600f60006101000a81548160ff02191690831515021790555050565b505050565b505050565b6000600267ffffffffffffffff8111156126f5576126f4613bab565b5b6040519080825280602002602001820160405280156127235781602001602082028036833780820191505090505b509050308160008151811061273b5761273a613bda565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190613c1e565b8160018151811061281a57612819613bda565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611485565b10156128b7576128b630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196118c0565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161291b959493929190613d44565b600060405180830381600087803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061299d611023565b426040518863ffffffff1660e01b81526004016129bf96959493929190613d9e565b60606040518083038185885af11580156129dd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a029190613dff565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a43578082015181840152602081019050612a28565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a6b82612a09565b612a758185612a14565b9350612a85818560208601612a25565b612a8e81612a4f565b840191505092915050565b60006020820190508181036000830152612ab38184612a60565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aeb82612ac0565b9050919050565b612afb81612ae0565b8114612b0657600080fd5b50565b600081359050612b1881612af2565b92915050565b6000819050919050565b612b3181612b1e565b8114612b3c57600080fd5b50565b600081359050612b4e81612b28565b92915050565b60008060408385031215612b6b57612b6a612abb565b5b6000612b7985828601612b09565b9250506020612b8a85828601612b3f565b9150509250929050565b60008115159050919050565b612ba981612b94565b82525050565b6000602082019050612bc46000830184612ba0565b92915050565b600060208284031215612be057612bdf612abb565b5b6000612bee84828501612b09565b91505092915050565b6000819050919050565b6000612c1c612c17612c1284612ac0565b612bf7565b612ac0565b9050919050565b6000612c2e82612c01565b9050919050565b6000612c4082612c23565b9050919050565b612c5081612c35565b82525050565b6000602082019050612c6b6000830184612c47565b92915050565b612c7a81612b1e565b82525050565b6000602082019050612c956000830184612c71565b92915050565b600080600060608486031215612cb457612cb3612abb565b5b6000612cc286828701612b09565b9350506020612cd386828701612b09565b9250506040612ce486828701612b3f565b9150509250925092565b600060ff82169050919050565b612d0481612cee565b82525050565b6000602082019050612d1f6000830184612cfb565b92915050565b612d2e81612ae0565b82525050565b6000602082019050612d496000830184612d25565b92915050565b6000612d5a82612ac0565b9050919050565b612d6a81612d4f565b82525050565b6000602082019050612d856000830184612d61565b92915050565b600060208284031215612da157612da0612abb565b5b6000612daf84828501612b3f565b91505092915050565b612dc181612b94565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b60008060408385031215612dfb57612dfa612abb565b5b6000612e0985828601612b09565b9250506020612e1a85828601612dcf565b9150509250929050565b600060208284031215612e3a57612e39612abb565b5b6000612e4884828501612dcf565b91505092915050565b60008060408385031215612e6857612e67612abb565b5b6000612e7685828601612b09565b9250506020612e8785828601612b09565b9150509250929050565b612e9a81612d4f565b8114612ea557600080fd5b50565b600081359050612eb781612e91565b92915050565b60008060408385031215612ed457612ed3612abb565b5b6000612ee285828601612ea8565b9250506020612ef385828601612ea8565b9150509250929050565b600080600060608486031215612f1657612f15612abb565b5b6000612f2486828701612b3f565b9350506020612f3586828701612b3f565b9250506040612f4686828701612b3f565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f9757607f821691505b602082108103612faa57612fa9612f50565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fe6602083612a14565b9150612ff182612fb0565b602082019050919050565b6000602082019050818103600083015261301581612fd9565b9050919050565b7f6e6f7420612076616c696420746f6b656e000000000000000000000000000000600082015250565b6000613052601183612a14565b915061305d8261301c565b602082019050919050565b6000602082019050818103600083015261308181613045565b9050919050565b60008151905061309781612b28565b92915050565b6000602082840312156130b3576130b2612abb565b5b60006130c184828501613088565b91505092915050565b60006040820190506130df6000830185612d25565b6130ec6020830184612c71565b9392505050565b60008151905061310281612db8565b92915050565b60006020828403121561311e5761311d612abb565b5b600061312c848285016130f3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316f82612b1e565b915061317a83612b1e565b925082820190508082111561319257613191613135565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131d282612b1e565b91506131dd83612b1e565b9250826131ed576131ec613198565b5b828204905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061322e600d83612a14565b9150613239826131f8565b602082019050919050565b6000602082019050818103600083015261325d81613221565b9050919050565b600081905092915050565b50565b600061327f600083613264565b915061328a8261326f565b600082019050919050565b60006132a082613272565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006132e0600f83612a14565b91506132eb826132aa565b602082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613372602583612a14565b915061337d82613316565b604082019050919050565b600060208201905081810360008301526133a181613365565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613404602a83612a14565b915061340f826133a8565b604082019050919050565b60006020820190508181036000830152613433816133f7565b9050919050565b7f6d61726b6574696e67206f72207465616d2077616c6c65742063616e2774206260008201527f652061207a65726f206164647265737300000000000000000000000000000000602082015250565b6000613496603083612a14565b91506134a18261343a565b604082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613528602683612a14565b9150613533826134cc565b604082019050919050565b600060208201905081810360008301526135578161351b565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613594600c83612a14565b915061359f8261355e565b602082019050919050565b600060208201905081810360008301526135c381613587565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613626602483612a14565b9150613631826135ca565b604082019050919050565b6000602082019050818103600083015261365581613619565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b8602283612a14565b91506136c38261365c565b604082019050919050565b600060208201905081810360008301526136e7816136ab565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613724601d83612a14565b915061372f826136ee565b602082019050919050565b6000602082019050818103600083015261375381613717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137b6602583612a14565b91506137c18261375a565b604082019050919050565b600060208201905081810360008301526137e5816137a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613848602383612a14565b9150613853826137ec565b604082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61785478206c696d697400000000000000000000000000000000602082015250565b60006138da603083612a14565b91506138e58261387e565b604082019050919050565b60006020820190508181036000830152613909816138cd565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061396c602483612a14565b915061397782613910565b604082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b60006139ad82612b1e565b91506139b883612b1e565b92508282026139c681612b1e565b915082820484148315176139dd576139dc613135565b5b5092915050565b60006139ef82612b1e565b91506139fa83612b1e565b9250828203905081811115613a1257613a11613135565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a74602683612a14565b9150613a7f82613a18565b604082019050919050565b60006020820190508181036000830152613aa381613a67565b9050919050565b6000604082019050613abf6000830185612c71565b613acc6020830184612c71565b9392505050565b7f65746820746f207465616d2077616c6c6574206661696c656400000000000000600082015250565b6000613b09601983612a14565b9150613b1482613ad3565b602082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f65746820746f206d61726b6574696e672077616c6c6574206661696c65640000600082015250565b6000613b75601e83612a14565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613c1881612af2565b92915050565b600060208284031215613c3457613c33612abb565b5b6000613c4284828501613c09565b91505092915050565b6000819050919050565b6000613c70613c6b613c6684613c4b565b612bf7565b612b1e565b9050919050565b613c8081613c55565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cbb81612ae0565b82525050565b6000613ccd8383613cb2565b60208301905092915050565b6000602082019050919050565b6000613cf182613c86565b613cfb8185613c91565b9350613d0683613ca2565b8060005b83811015613d37578151613d1e8882613cc1565b9750613d2983613cd9565b925050600181019050613d0a565b5085935050505092915050565b600060a082019050613d596000830188612c71565b613d666020830187613c77565b8181036040830152613d788186613ce6565b9050613d876060830185612d25565b613d946080830184612c71565b9695505050505050565b600060c082019050613db36000830189612d25565b613dc06020830188612c71565b613dcd6040830187613c77565b613dda6060830186613c77565b613de76080830185612d25565b613df460a0830184612c71565b979650505050505050565b600080600060608486031215613e1857613e17612abb565b5b6000613e2686828701613088565b9350506020613e3786828701613088565b9250506040613e4886828701613088565b915050925092509256fea26469706673582212200c763566cc44edd47667daa3409b986949ad9856a3eac5d7e96eaa6017931be764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806375f0a8741161010d578063c49b9a80116100a0578063e2f456051161006f578063e2f4560514610746578063e6c75f7114610771578063e8ba854f1461079c578063f2fde38b146107c5578063fc061a4f146107ee57610204565b8063c49b9a801461068a578063c8c8ebe4146106b3578063d7c94efd146106de578063dd62ed3e1461070957610204565b806398118cb4116100dc57806398118cb4146105bc578063a457c2d7146105e7578063a9059cbb14610624578063c02466681461066157610204565b806375f0a87414610524578063891ad0f21461054f5780638da5cb5b1461056657806395d89b411461059157610204565b806349bd5a5e116101905780636b67c4df1161015f5780636b67c4df1461045357806370a082311461047e578063715018a6146104bb578063728d41c9146104d2578063750c11b6146104fb57610204565b806349bd5a5e146103955780634a74bb02146103c05780634fbee193146103eb578063599270441461042857610204565b806318160ddd116101cc57806318160ddd146102c557806323b872dd146102f0578063313ce5671461032d578063395093511461035857610204565b806306fdde0314610209578063095ea7b3146102345780630d2ce36e146102715780631694505e1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610817565b60405161022b9190612a99565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612b54565b6108a9565b6040516102689190612baf565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612bca565b6108cc565b005b3480156102a657600080fd5b506102af610ac5565b6040516102bc9190612c56565b60405180910390f35b3480156102d157600080fd5b506102da610aeb565b6040516102e79190612c80565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612c9b565b610af5565b6040516103249190612baf565b60405180910390f35b34801561033957600080fd5b50610342610b24565b60405161034f9190612d0a565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612b54565b610b2d565b60405161038c9190612baf565b60405180910390f35b3480156103a157600080fd5b506103aa610bd7565b6040516103b79190612d34565b60405180910390f35b3480156103cc57600080fd5b506103d5610bfb565b6040516103e29190612baf565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612bca565b610c0e565b60405161041f9190612baf565b60405180910390f35b34801561043457600080fd5b5061043d610c64565b60405161044a9190612d70565b60405180910390f35b34801561045f57600080fd5b50610468610c8a565b6040516104759190612c80565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612bca565b610c90565b6040516104b29190612c80565b60405180910390f35b3480156104c757600080fd5b506104d0610cd8565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d8b565b610d60565b005b34801561050757600080fd5b50610522600480360381019061051d9190612d8b565b610e3f565b005b34801561053057600080fd5b50610539610ec5565b6040516105469190612d70565b60405180910390f35b34801561055b57600080fd5b50610564610eeb565b005b34801561057257600080fd5b5061057b611023565b6040516105889190612d34565b60405180910390f35b34801561059d57600080fd5b506105a661104d565b6040516105b39190612a99565b60405180910390f35b3480156105c857600080fd5b506105d16110df565b6040516105de9190612c80565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612b54565b6110e5565b60405161061b9190612baf565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190612b54565b6111cf565b6040516106589190612baf565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190612de4565b6111f2565b005b34801561069657600080fd5b506106b160048036038101906106ac9190612e24565b6113a9565b005b3480156106bf57600080fd5b506106c8611479565b6040516106d59190612c80565b60405180910390f35b3480156106ea57600080fd5b506106f361147f565b6040516107009190612c80565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190612e51565b611485565b60405161073d9190612c80565b60405180910390f35b34801561075257600080fd5b5061075b61150c565b6040516107689190612c80565b60405180910390f35b34801561077d57600080fd5b50610786611512565b6040516107939190612c80565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190612ebd565b611518565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612bca565b6116c2565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612efd565b6117b9565b005b60606003805461082690612f7f565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612f7f565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b6000806108b46118b8565b90506108c18185856118c0565b600191505092915050565b6108d46118b8565b73ffffffffffffffffffffffffffffffffffffffff166108f2611023565b73ffffffffffffffffffffffffffffffffffffffff1614610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90613068565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109f79190612d34565b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a38919061309d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610a5e611023565b836040518363ffffffff1660e01b8152600401610a7c9291906130ca565b6020604051808303816000875af1158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abf9190613108565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b600080610b006118b8565b9050610b0d858285611a89565b610b18858585611b15565b60019150509392505050565b60006012905090565b600080610b386118b8565b9050610bcc818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bc79190613164565b6118c0565b600191505092915050565b7f000000000000000000000000ab3d98e5ffd64e0860ca79e1f521590db3a8209981565b600f60019054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce06118b8565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611023565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90612ffc565b60405180910390fd5b610d5e60006120ba565b565b610d686118b8565b73ffffffffffffffffffffffffffffffffffffffff16610d86611023565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390612ffc565b60405180910390fd5b806009819055506101f4610dee610aeb565b610df891906131c7565b6009541015610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613244565b60405180910390fd5b50565b610e476118b8565b73ffffffffffffffffffffffffffffffffffffffff16610e65611023565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290612ffc565b60405180910390fd5b8060078190555050565b600f60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ef36118b8565b73ffffffffffffffffffffffffffffffffffffffff16610f11611023565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90612ffc565b60405180910390fd5b60004790506000610f76611023565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f9990613295565b60006040518083038185875af1925050503d8060008114610fd6576040519150601f19603f3d011682016040523d82523d6000602084013e610fdb565b606091505b505090508061101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906132f6565b60405180910390fd5b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461105c90612f7f565b80601f016020809104026020016040519081016040528092919081815260200182805461108890612f7f565b80156110d55780601f106110aa576101008083540402835291602001916110d5565b820191906000526020600020905b8154815290600101906020018083116110b857829003601f168201915b5050505050905090565b600a5481565b6000806110f06118b8565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613388565b60405180910390fd5b6111c382868684036118c0565b60019250505092915050565b6000806111da6118b8565b90506111e7818585611b15565b600191505092915050565b6111fa6118b8565b73ffffffffffffffffffffffffffffffffffffffff16611218611023565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612ffc565b60405180910390fd5b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f79061341a565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161139d9190612baf565b60405180910390a25050565b6113b16118b8565b73ffffffffffffffffffffffffffffffffffffffff166113cf611023565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90612ffc565b60405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161146e9190612baf565b60405180910390a150565b60085481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b60095481565b6115206118b8565b73ffffffffffffffffffffffffffffffffffffffff1661153e611023565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806115fd5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906134ac565b60405180910390fd5b81600f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116ca6118b8565b73ffffffffffffffffffffffffffffffffffffffff166116e8611023565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590612ffc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a49061353e565b60405180910390fd5b6117b6816120ba565b50565b6117c16118b8565b73ffffffffffffffffffffffffffffffffffffffff166117df611023565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90612ffc565b60405180910390fd5b82600a8190555081600b8190555080600c81905550600c54600b54600a5461185d9190613164565b6118679190613164565b600d819055506006600d5411156118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa906135aa565b60405180910390fd5b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061363c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361199e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611995906136ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a7c9190612c80565b60405180910390a3505050565b6000611a958484611485565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b0f5781811015611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061373a565b60405180910390fd5b611b0e84848484036118c0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906137cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea9061385e565b60405180910390fd5b60008103611c0c57611c0783836000612180565b6120b5565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611cb05750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cfb57600854811115611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906138f0565b60405180910390fd5b5b7f000000000000000000000000ab3d98e5ffd64e0860ca79e1f521590db3a8209973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611da05750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611df65750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5a576000611e0683610c90565b90506009548282611e179190613164565b1115611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613982565b60405180910390fd5b505b6000611e6530610c90565b905060006007548210159050808015611e8b5750600f60009054906101000a900460ff16155b8015611ee257507f000000000000000000000000ab3d98e5ffd64e0860ca79e1f521590db3a8209973ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611efa5750600f60019054906101000a900460ff165b15611f0e576007549150611f0d826123ff565b5b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fb25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561205f57507f000000000000000000000000ab3d98e5ffd64e0860ca79e1f521590db3a8209973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061205e57507f000000000000000000000000ab3d98e5ffd64e0860ca79e1f521590db3a8209973ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b5b156120a75760006064600d548561207691906139a2565b61208091906131c7565b9050808461208e91906139e4565b935060008111156120a5576120a4863083612180565b5b505b6120b2858585612180565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e6906137cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122559061385e565b60405180910390fd5b6122698383836126ce565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690613a8a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123829190613164565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e69190612c80565b60405180910390a36123f98484846126d3565b50505050565b6001600f60006101000a81548160ff0219169083151502179055506000600d54600a548361242d91906139a2565b61243791906131c7565b9050600060028261244891906131c7565b90506000818361245891906139e4565b90506000479050612468836126d8565b6000814761247691906139e4565b90506124828382612951565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516124b3929190613aaa565b60405180910390a16124cf85876124ca91906139e4565b6126d8565b60004790506000600a54600d546124e691906139e4565b600c54836124f491906139a2565b6124fe91906131c7565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161254890613295565b60006040518083038185875af1925050503d8060008114612585576040519150601f19603f3d011682016040523d82523d6000602084013e61258a565b606091505b50509050806125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613b1f565b60405180910390fd5b6000600f60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838561261591906139e4565b60405161262190613295565b60006040518083038185875af1925050503d806000811461265e576040519150601f19603f3d011682016040523d82523d6000602084013e612663565b606091505b50509050806126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e90613b8b565b60405180910390fd5b5050505050505050506000600f60006101000a81548160ff02191690831515021790555050565b505050565b505050565b6000600267ffffffffffffffff8111156126f5576126f4613bab565b5b6040519080825280602002602001820160405280156127235781602001602082028036833780820191505090505b509050308160008151811061273b5761273a613bda565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190613c1e565b8160018151811061281a57612819613bda565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611485565b10156128b7576128b630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196118c0565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161291b959493929190613d44565b600060405180830381600087803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061299d611023565b426040518863ffffffff1660e01b81526004016129bf96959493929190613d9e565b60606040518083038185885af11580156129dd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a029190613dff565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a43578082015181840152602081019050612a28565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a6b82612a09565b612a758185612a14565b9350612a85818560208601612a25565b612a8e81612a4f565b840191505092915050565b60006020820190508181036000830152612ab38184612a60565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aeb82612ac0565b9050919050565b612afb81612ae0565b8114612b0657600080fd5b50565b600081359050612b1881612af2565b92915050565b6000819050919050565b612b3181612b1e565b8114612b3c57600080fd5b50565b600081359050612b4e81612b28565b92915050565b60008060408385031215612b6b57612b6a612abb565b5b6000612b7985828601612b09565b9250506020612b8a85828601612b3f565b9150509250929050565b60008115159050919050565b612ba981612b94565b82525050565b6000602082019050612bc46000830184612ba0565b92915050565b600060208284031215612be057612bdf612abb565b5b6000612bee84828501612b09565b91505092915050565b6000819050919050565b6000612c1c612c17612c1284612ac0565b612bf7565b612ac0565b9050919050565b6000612c2e82612c01565b9050919050565b6000612c4082612c23565b9050919050565b612c5081612c35565b82525050565b6000602082019050612c6b6000830184612c47565b92915050565b612c7a81612b1e565b82525050565b6000602082019050612c956000830184612c71565b92915050565b600080600060608486031215612cb457612cb3612abb565b5b6000612cc286828701612b09565b9350506020612cd386828701612b09565b9250506040612ce486828701612b3f565b9150509250925092565b600060ff82169050919050565b612d0481612cee565b82525050565b6000602082019050612d1f6000830184612cfb565b92915050565b612d2e81612ae0565b82525050565b6000602082019050612d496000830184612d25565b92915050565b6000612d5a82612ac0565b9050919050565b612d6a81612d4f565b82525050565b6000602082019050612d856000830184612d61565b92915050565b600060208284031215612da157612da0612abb565b5b6000612daf84828501612b3f565b91505092915050565b612dc181612b94565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b60008060408385031215612dfb57612dfa612abb565b5b6000612e0985828601612b09565b9250506020612e1a85828601612dcf565b9150509250929050565b600060208284031215612e3a57612e39612abb565b5b6000612e4884828501612dcf565b91505092915050565b60008060408385031215612e6857612e67612abb565b5b6000612e7685828601612b09565b9250506020612e8785828601612b09565b9150509250929050565b612e9a81612d4f565b8114612ea557600080fd5b50565b600081359050612eb781612e91565b92915050565b60008060408385031215612ed457612ed3612abb565b5b6000612ee285828601612ea8565b9250506020612ef385828601612ea8565b9150509250929050565b600080600060608486031215612f1657612f15612abb565b5b6000612f2486828701612b3f565b9350506020612f3586828701612b3f565b9250506040612f4686828701612b3f565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f9757607f821691505b602082108103612faa57612fa9612f50565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fe6602083612a14565b9150612ff182612fb0565b602082019050919050565b6000602082019050818103600083015261301581612fd9565b9050919050565b7f6e6f7420612076616c696420746f6b656e000000000000000000000000000000600082015250565b6000613052601183612a14565b915061305d8261301c565b602082019050919050565b6000602082019050818103600083015261308181613045565b9050919050565b60008151905061309781612b28565b92915050565b6000602082840312156130b3576130b2612abb565b5b60006130c184828501613088565b91505092915050565b60006040820190506130df6000830185612d25565b6130ec6020830184612c71565b9392505050565b60008151905061310281612db8565b92915050565b60006020828403121561311e5761311d612abb565b5b600061312c848285016130f3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316f82612b1e565b915061317a83612b1e565b925082820190508082111561319257613191613135565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131d282612b1e565b91506131dd83612b1e565b9250826131ed576131ec613198565b5b828204905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061322e600d83612a14565b9150613239826131f8565b602082019050919050565b6000602082019050818103600083015261325d81613221565b9050919050565b600081905092915050565b50565b600061327f600083613264565b915061328a8261326f565b600082019050919050565b60006132a082613272565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006132e0600f83612a14565b91506132eb826132aa565b602082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613372602583612a14565b915061337d82613316565b604082019050919050565b600060208201905081810360008301526133a181613365565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613404602a83612a14565b915061340f826133a8565b604082019050919050565b60006020820190508181036000830152613433816133f7565b9050919050565b7f6d61726b6574696e67206f72207465616d2077616c6c65742063616e2774206260008201527f652061207a65726f206164647265737300000000000000000000000000000000602082015250565b6000613496603083612a14565b91506134a18261343a565b604082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613528602683612a14565b9150613533826134cc565b604082019050919050565b600060208201905081810360008301526135578161351b565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613594600c83612a14565b915061359f8261355e565b602082019050919050565b600060208201905081810360008301526135c381613587565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613626602483612a14565b9150613631826135ca565b604082019050919050565b6000602082019050818103600083015261365581613619565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b8602283612a14565b91506136c38261365c565b604082019050919050565b600060208201905081810360008301526136e7816136ab565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613724601d83612a14565b915061372f826136ee565b602082019050919050565b6000602082019050818103600083015261375381613717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137b6602583612a14565b91506137c18261375a565b604082019050919050565b600060208201905081810360008301526137e5816137a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613848602383612a14565b9150613853826137ec565b604082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61785478206c696d697400000000000000000000000000000000602082015250565b60006138da603083612a14565b91506138e58261387e565b604082019050919050565b60006020820190508181036000830152613909816138cd565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061396c602483612a14565b915061397782613910565b604082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b60006139ad82612b1e565b91506139b883612b1e565b92508282026139c681612b1e565b915082820484148315176139dd576139dc613135565b5b5092915050565b60006139ef82612b1e565b91506139fa83612b1e565b9250828203905081811115613a1257613a11613135565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a74602683612a14565b9150613a7f82613a18565b604082019050919050565b60006020820190508181036000830152613aa381613a67565b9050919050565b6000604082019050613abf6000830185612c71565b613acc6020830184612c71565b9392505050565b7f65746820746f207465616d2077616c6c6574206661696c656400000000000000600082015250565b6000613b09601983612a14565b9150613b1482613ad3565b602082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f65746820746f206d61726b6574696e672077616c6c6574206661696c65640000600082015250565b6000613b75601e83612a14565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613c1881612af2565b92915050565b600060208284031215613c3457613c33612abb565b5b6000613c4284828501613c09565b91505092915050565b6000819050919050565b6000613c70613c6b613c6684613c4b565b612bf7565b612b1e565b9050919050565b613c8081613c55565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cbb81612ae0565b82525050565b6000613ccd8383613cb2565b60208301905092915050565b6000602082019050919050565b6000613cf182613c86565b613cfb8185613c91565b9350613d0683613ca2565b8060005b83811015613d37578151613d1e8882613cc1565b9750613d2983613cd9565b925050600181019050613d0a565b5085935050505092915050565b600060a082019050613d596000830188612c71565b613d666020830187613c77565b8181036040830152613d788186613ce6565b9050613d876060830185612d25565b613d946080830184612c71565b9695505050505050565b600060c082019050613db36000830189612d25565b613dc06020830188612c71565b613dcd6040830187613c77565b613dda6060830186613c77565b613de76080830185612d25565b613df460a0830184612c71565b979650505050505050565b600080600060608486031215613e1857613e17612abb565b5b6000613e2686828701613088565b9350506020613e3786828701613088565b9250506040613e4886828701613088565b915050925092509256fea26469706673582212200c763566cc44edd47667daa3409b986949ad9856a3eac5d7e96eaa6017931be764736f6c63430008110033

Deployed Bytecode Sourcemap

25665:8926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9270:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11621:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34223:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25708:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27895:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12402:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10232:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13106:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25756:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26287:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32639:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26435:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10561:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2693:103;;;;;;;;;;;;;:::i;:::-;;33081:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32954:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26336:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33922:209;;;;;;;;;;;;;:::i;:::-;;2042:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9489:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13849:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10894:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32337:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32775:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25863:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26063:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11150:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25803:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33576:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2951:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33269:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9270:100;9324:13;9357:5;9350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9270:100;:::o;11621:201::-;11704:4;11721:13;11737:12;:10;:12::i;:::-;11721:28;;11760:32;11769:5;11776:7;11785:6;11760:8;:32::i;:::-;11810:4;11803:11;;;11621:201;;;;:::o;34223:311::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34327:1:::1;34309:20;;:6;:20;;::::0;34300:51:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34362:22;34395:6;34362:40;;34413:15;34431;:25;;;34465:4;34431:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34413:58;;34482:15;:24;;;34507:7;:5;:7::i;:::-;34516;34482:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34289:245;;34223:311:::0;:::o;25708:41::-;;;;;;;;;;;;;:::o;27895:108::-;27956:7;27983:12;;27976:19;;27895:108;:::o;12402:295::-;12533:4;12550:15;12568:12;:10;:12::i;:::-;12550:30;;12591:38;12607:4;12613:7;12622:6;12591:15;:38::i;:::-;12640:27;12650:4;12656:2;12660:6;12640:9;:27::i;:::-;12685:4;12678:11;;;12402:295;;;;;:::o;10232:93::-;10290:5;10315:2;10308:9;;10232:93;:::o;13106:240::-;13194:4;13211:13;13227:12;:10;:12::i;:::-;13211:28;;13250:66;13259:5;13266:7;13305:10;13275:11;:18;13287:5;13275:18;;;;;;;;;;;;;;;:27;13294:7;13275:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;13250:8;:66::i;:::-;13334:4;13327:11;;;13106:240;;;;:::o;25756:38::-;;;:::o;26287:40::-;;;;;;;;;;;;;:::o;32639:125::-;32704:4;32728:19;:28;32748:7;32728:28;;;;;;;;;;;;;;;;;;;;;;;;;32721:35;;32639:125;;;:::o;26435:87::-;;;;;;;;;;;;;:::o;26025:31::-;;;;:::o;10561:127::-;10635:7;10662:9;:18;10672:7;10662:18;;;;;;;;;;;;;;;;10655:25;;10561:127;;;:::o;2693:103::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2758:30:::1;2785:1;2758:18;:30::i;:::-;2693:103::o:0;33081:180::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33172:9:::1;33155:14;:26;;;;33232:3;33218:13;:11;:13::i;:::-;:17;;;;:::i;:::-;33200:14;;:35;;33192:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33081:180:::0;:::o;32954:119::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33055:10:::1;33034:18;:31;;;;32954:119:::0;:::o;26336:92::-;;;;;;;;;;;;;:::o;33922:209::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33982:15:::1;34000:21;33982:39;;34033:9;34047:7;:5;:7::i;:::-;:12;;34067:7;34047:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34032:47;;;34099:4;34090:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;33971:160;;33922:209::o:0;2042:87::-;2088:7;2115:6;;;;;;;;;;;2108:13;;2042:87;:::o;9489:104::-;9545:13;9578:7;9571:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9489:104;:::o;25987:31::-;;;;:::o;13849:438::-;13942:4;13959:13;13975:12;:10;:12::i;:::-;13959:28;;13998:24;14025:11;:18;14037:5;14025:18;;;;;;;;;;;;;;;:27;14044:7;14025:27;;;;;;;;;;;;;;;;13998:54;;14091:15;14071:16;:35;;14063:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14184:60;14193:5;14200:7;14228:15;14209:16;:34;14184:8;:60::i;:::-;14275:4;14268:11;;;;13849:438;;;;:::o;10894:193::-;10973:4;10990:13;11006:12;:10;:12::i;:::-;10990:28;;11029;11039:5;11046:2;11050:6;11029:9;:28::i;:::-;11075:4;11068:11;;;10894:193;;;;:::o;32337:290::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32462:8:::1;32430:40;;:19;:28;32450:7;32430:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;32422:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32559:8;32528:19;:28;32548:7;32528:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32601:7;32585:34;;;32610:8;32585:34;;;;;;:::i;:::-;;;;;;;;32337:290:::0;;:::o;32775:171::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32876:8:::1;32852:21;;:32;;;;;;;;;;;;;;;;;;32900:38;32929:8;32900:38;;;;;;:::i;:::-;;;;;;;;32775:171:::0;:::o;25863:57::-;;;;:::o;26063:26::-;;;;:::o;11150:151::-;11239:7;11266:11;:18;11278:5;11266:18;;;;;;;;;;;;;;;:27;11285:7;11266:27;;;;;;;;;;;;;;;;11259:34;;11150:151;;;;:::o;25803:53::-;;;;:::o;25927:51::-;;;;:::o;33576:288::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33709:1:::1;33687:24;;:10;:24;;;;:47;;;;33732:1;33715:19;;:5;:19;;;;33687:47;33678:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33817:10;33799:15;;:28;;;;;;;;;;;;;;;;;;33851:5;33838:10;;:18;;;;;;;;;;;;;;;;;;33576:288:::0;;:::o;2951:201::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3060:1:::1;3040:22;;:8;:22;;::::0;3032:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3116:28;3135:8;3116:18;:28::i;:::-;2951:201:::0;:::o;33269:299::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33384:7:::1;33369:12;:22;;;;33417:8;33402:12;:23;;;;33446:8;33436:7;:18;;;;33503:7;;33490:12;;33477;;:25;;;;:::i;:::-;:33;;;;:::i;:::-;33465:9;:45;;;;33542:1;33529:9;;:14;;33521:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;33269:299:::0;;;:::o;766:98::-;819:7;846:10;839:17;;766:98;:::o;17495:380::-;17648:1;17631:19;;:5;:19;;;17623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17729:1;17710:21;;:7;:21;;;17702:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17813:6;17783:11;:18;17795:5;17783:18;;;;;;;;;;;;;;;:27;17802:7;17783:27;;;;;;;;;;;;;;;:36;;;;17851:7;17835:32;;17844:5;17835:32;;;17860:6;17835:32;;;;;;:::i;:::-;;;;;;;;17495:380;;;:::o;18162:453::-;18297:24;18324:25;18334:5;18341:7;18324:9;:25::i;:::-;18297:52;;18384:17;18364:16;:37;18360:248;;18446:6;18426:16;:26;;18418:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18530:51;18539:5;18546:7;18574:6;18555:16;:25;18530:8;:51::i;:::-;18360:248;18286:329;18162:453;;;:::o;28011:1820::-;28159:1;28143:18;;:4;:18;;;28135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28236:1;28222:16;;:2;:16;;;28214:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28304:1;28294:6;:11;28291:92;;28322:28;28338:4;28344:2;28348:1;28322:15;:28::i;:::-;28365:7;;28291:92;28399:19;:25;28419:4;28399:25;;;;;;;;;;;;;;;;;;;;;;;;;28398:26;:54;;;;;28429:19;:23;28449:2;28429:23;;;;;;;;;;;;;;;;;;;;;;;;;28428:24;28398:54;28395:177;;;28487:20;;28477:6;:30;;28469:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28395:177;28593:13;28587:19;;:4;:19;;;:49;;;;;28611:19;:25;28631:4;28611:25;;;;;;;;;;;;;;;;;;;;;;;;;28610:26;28587:49;:77;;;;;28641:19;:23;28661:2;28641:23;;;;;;;;;;;;;;;;;;;;;;;;;28640:24;28587:77;28584:271;;;28680:32;28715:13;28725:2;28715:9;:13::i;:::-;28680:48;;28788:14;;28778:6;28751:24;:33;;;;:::i;:::-;:51;;28743:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28665:190;28584:271;28864:28;28895:24;28913:4;28895:9;:24::i;:::-;28864:55;;28940:24;28991:18;;28967:20;:42;;28940:69;;29046:19;:53;;;;;29083:16;;;;;;;;;;;29082:17;29046:53;:87;;;;;29120:13;29116:17;;:2;:17;;;29046:87;:126;;;;;29151:21;;;;;;;;;;;29046:126;29029:274;;;29222:18;;29199:41;;29255:36;29270:20;29255:14;:36::i;:::-;29029:274;29419:19;:25;29439:4;29419:25;;;;;;;;;;;;;;;;;;;;;;;;;29418:26;:68;;;;;29463:19;:23;29483:2;29463:23;;;;;;;;;;;;;;;;;;;;;;;;;29462:24;29418:68;:127;;;;;29510:13;29504:19;;:4;:19;;;:40;;;;29531:13;29527:17;;:2;:17;;;29504:40;29418:127;29401:375;;;29572:12;29604:3;29594:9;;29587:6;:16;;;;:::i;:::-;:20;;;;:::i;:::-;29572:35;;29638:4;29631:6;:11;;;;:::i;:::-;29622:20;;29669:1;29662:4;:8;29659:91;;;29691:42;29707:4;29721;29728;29691:15;:42::i;:::-;29659:91;29557:219;29401:375;29788:33;29804:4;29810:2;29814:6;29788:15;:33::i;:::-;28124:1707;;28011:1820;;;;:::o;3312:191::-;3386:16;3405:6;;;;;;;;;;;3386:25;;3431:8;3422:6;;:17;;;;;;;;;;;;;;;;;;3486:8;3455:40;;3476:8;3455:40;;;;;;;;;;;;3375:128;3312:191;:::o;14766:671::-;14913:1;14897:18;;:4;:18;;;14889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14990:1;14976:16;;:2;:16;;;14968:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15045:38;15066:4;15072:2;15076:6;15045:20;:38::i;:::-;15096:19;15118:9;:15;15128:4;15118:15;;;;;;;;;;;;;;;;15096:37;;15167:6;15152:11;:21;;15144:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15284:6;15270:11;:20;15252:9;:15;15262:4;15252:15;;;;;;;;;;;;;;;:38;;;;15329:6;15312:9;:13;15322:2;15312:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15368:2;15353:26;;15362:4;15353:26;;;15372:6;15353:26;;;;;;:::i;:::-;;;;;;;;15392:37;15412:4;15418:2;15422:6;15392:19;:37::i;:::-;14878:559;14766:671;;;:::o;29901:1300::-;26891:4;26872:16;;:23;;;;;;;;;;;;;;;;;;29986:26:::1;30049:9;;30036:12;;30015:20;:33;;;;:::i;:::-;:43;;;;:::i;:::-;29986:72;;30127:12;30161:1;30142:18;:20;;;;:::i;:::-;30127:35;;30173:17;30212:4;30193:18;:23;;;;:::i;:::-;30173:43;;30285:22;30310:21;30285:46;;30376:22;30393:4;30376:16;:22::i;:::-;30460:18;30503:14;30481:21;:36;;;;:::i;:::-;30460:57;;30567:35;30580:9;30591:10;30567:12;:35::i;:::-;30620:32;30635:4;30641:10;30620:32;;;;;;;:::i;:::-;;;;;;;;30737:57;30775:18;30754:20;:39;;;;:::i;:::-;30737:16;:57::i;:::-;30805:17;30825:21;30805:41;;30857:17;30906:12;;30896:9;;:22;;;;:::i;:::-;30887:7;;30877:9;:17;;;;:::i;:::-;:42;;;;:::i;:::-;30857:62;;30931:10;30946;;;;;;;;;;;:15;;30969:9;30946:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30930:53;;;31003:5;30994:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31050:12;31067:15;;;;;;;;;;;:20;;31107:9;31095;:21;;;;:::i;:::-;31067:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31049:72;;;31141:7;31132:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29975:1226;;;;;;;;;26937:5:::0;26918:16;;:24;;;;;;;;;;;;;;;;;;29901:1300;:::o;19215:125::-;;;;:::o;19944:124::-;;;;:::o;31248:692::-;31374:21;31412:1;31398:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31374:40;;31443:4;31425;31430:1;31425:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31469:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31459:4;31464:1;31459:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31560:11;31507:50;31525:4;31540:15;;;;;;;;;;;31507:9;:50::i;:::-;:64;31504:156;;;31586:62;31603:4;31618:15;;;;;;;;;;;31645:1;31636:11;31586:8;:62::i;:::-;31504:156;31698:15;;;;;;;;;;;:66;;;31779:11;31805:1;31849:4;31876;31896:15;31698:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31303:637;31248:692;:::o;31948:381::-;32059:15;;;;;;;;;;;:31;;;32098:9;32131:4;32151:11;32177:1;32220;32263:7;:5;:7::i;:::-;32285:15;32059:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31948:381;;:::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;1430:117::-;1539:1;1536;1529: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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:104::-;6563:7;6592:24;6610:5;6592:24;:::i;:::-;6581:35;;6518:104;;;:::o;6628:142::-;6731:32;6757:5;6731:32;:::i;:::-;6726:3;6719:45;6628:142;;:::o;6776:254::-;6885:4;6923:2;6912:9;6908:18;6900:26;;6936:87;7020:1;7009:9;7005:17;6996:6;6936:87;:::i;:::-;6776:254;;;;:::o;7036:329::-;7095:6;7144:2;7132:9;7123:7;7119:23;7115:32;7112:119;;;7150:79;;:::i;:::-;7112:119;7270:1;7295:53;7340:7;7331:6;7320:9;7316:22;7295:53;:::i;:::-;7285:63;;7241:117;7036:329;;;;:::o;7371:116::-;7441:21;7456:5;7441:21;:::i;:::-;7434:5;7431:32;7421:60;;7477:1;7474;7467:12;7421:60;7371:116;:::o;7493:133::-;7536:5;7574:6;7561:20;7552:29;;7590:30;7614:5;7590:30;:::i;:::-;7493:133;;;;:::o;7632:468::-;7697:6;7705;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7851:117;8007:2;8033:50;8075:7;8066:6;8055:9;8051:22;8033:50;:::i;:::-;8023:60;;7978:115;7632:468;;;;;:::o;8106:323::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8308:114;8106:323;;;;:::o;8435:474::-;8503:6;8511;8560:2;8548:9;8539:7;8535:23;8531:32;8528:119;;;8566:79;;:::i;:::-;8528:119;8686:1;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8657:117;8813:2;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8784:118;8435:474;;;;;:::o;8915:138::-;8996:32;9022:5;8996:32;:::i;:::-;8989:5;8986:43;8976:71;;9043:1;9040;9033:12;8976:71;8915:138;:::o;9059:155::-;9113:5;9151:6;9138:20;9129:29;;9167:41;9202:5;9167:41;:::i;:::-;9059:155;;;;:::o;9220:506::-;9304:6;9312;9361:2;9349:9;9340:7;9336:23;9332:32;9329:119;;;9367:79;;:::i;:::-;9329:119;9487:1;9512:61;9565:7;9556:6;9545:9;9541:22;9512:61;:::i;:::-;9502:71;;9458:125;9622:2;9648:61;9701:7;9692:6;9681:9;9677:22;9648:61;:::i;:::-;9638:71;;9593:126;9220:506;;;;;:::o;9732:619::-;9809:6;9817;9825;9874:2;9862:9;9853:7;9849:23;9845:32;9842:119;;;9880:79;;:::i;:::-;9842:119;10000:1;10025:53;10070:7;10061:6;10050:9;10046:22;10025:53;:::i;:::-;10015:63;;9971:117;10127:2;10153:53;10198:7;10189:6;10178:9;10174:22;10153:53;:::i;:::-;10143:63;;10098:118;10255:2;10281:53;10326:7;10317:6;10306:9;10302:22;10281:53;:::i;:::-;10271:63;;10226:118;9732:619;;;;;:::o;10357:180::-;10405:77;10402:1;10395:88;10502:4;10499:1;10492:15;10526:4;10523:1;10516:15;10543:320;10587:6;10624:1;10618:4;10614:12;10604:22;;10671:1;10665:4;10661:12;10692:18;10682:81;;10748:4;10740:6;10736:17;10726:27;;10682:81;10810:2;10802:6;10799:14;10779:18;10776:38;10773:84;;10829:18;;:::i;:::-;10773:84;10594:269;10543:320;;;:::o;10869:182::-;11009:34;11005:1;10997:6;10993:14;10986:58;10869:182;:::o;11057:366::-;11199:3;11220:67;11284:2;11279:3;11220:67;:::i;:::-;11213:74;;11296:93;11385:3;11296:93;:::i;:::-;11414:2;11409:3;11405:12;11398:19;;11057:366;;;:::o;11429:419::-;11595:4;11633:2;11622:9;11618:18;11610:26;;11682:9;11676:4;11672:20;11668:1;11657:9;11653:17;11646:47;11710:131;11836:4;11710:131;:::i;:::-;11702:139;;11429:419;;;:::o;11854:167::-;11994:19;11990:1;11982:6;11978:14;11971:43;11854:167;:::o;12027:366::-;12169:3;12190:67;12254:2;12249:3;12190:67;:::i;:::-;12183:74;;12266:93;12355:3;12266:93;:::i;:::-;12384:2;12379:3;12375:12;12368:19;;12027:366;;;:::o;12399:419::-;12565:4;12603:2;12592:9;12588:18;12580:26;;12652:9;12646:4;12642:20;12638:1;12627:9;12623:17;12616:47;12680:131;12806:4;12680:131;:::i;:::-;12672:139;;12399:419;;;:::o;12824:143::-;12881:5;12912:6;12906:13;12897:22;;12928:33;12955:5;12928:33;:::i;:::-;12824:143;;;;:::o;12973:351::-;13043:6;13092:2;13080:9;13071:7;13067:23;13063:32;13060:119;;;13098:79;;:::i;:::-;13060:119;13218:1;13243:64;13299:7;13290:6;13279:9;13275:22;13243:64;:::i;:::-;13233:74;;13189:128;12973:351;;;;:::o;13330:332::-;13451:4;13489:2;13478:9;13474:18;13466:26;;13502:71;13570:1;13559:9;13555:17;13546:6;13502:71;:::i;:::-;13583:72;13651:2;13640:9;13636:18;13627:6;13583:72;:::i;:::-;13330:332;;;;;:::o;13668:137::-;13722:5;13753:6;13747:13;13738:22;;13769:30;13793:5;13769:30;:::i;:::-;13668:137;;;;:::o;13811:345::-;13878:6;13927:2;13915:9;13906:7;13902:23;13898:32;13895:119;;;13933:79;;:::i;:::-;13895:119;14053:1;14078:61;14131:7;14122:6;14111:9;14107:22;14078:61;:::i;:::-;14068:71;;14024:125;13811:345;;;;:::o;14162:180::-;14210:77;14207:1;14200:88;14307:4;14304:1;14297:15;14331:4;14328:1;14321:15;14348:191;14388:3;14407:20;14425:1;14407:20;:::i;:::-;14402:25;;14441:20;14459:1;14441:20;:::i;:::-;14436:25;;14484:1;14481;14477:9;14470:16;;14505:3;14502:1;14499:10;14496:36;;;14512:18;;:::i;:::-;14496:36;14348:191;;;;:::o;14545:180::-;14593:77;14590:1;14583:88;14690:4;14687:1;14680:15;14714:4;14711:1;14704:15;14731:185;14771:1;14788:20;14806:1;14788:20;:::i;:::-;14783:25;;14822:20;14840:1;14822:20;:::i;:::-;14817:25;;14861:1;14851:35;;14866:18;;:::i;:::-;14851:35;14908:1;14905;14901:9;14896:14;;14731:185;;;;:::o;14922:163::-;15062:15;15058:1;15050:6;15046:14;15039:39;14922:163;:::o;15091:366::-;15233:3;15254:67;15318:2;15313:3;15254:67;:::i;:::-;15247:74;;15330:93;15419:3;15330:93;:::i;:::-;15448:2;15443:3;15439:12;15432:19;;15091:366;;;:::o;15463:419::-;15629:4;15667:2;15656:9;15652:18;15644:26;;15716:9;15710:4;15706:20;15702:1;15691:9;15687:17;15680:47;15744:131;15870:4;15744:131;:::i;:::-;15736:139;;15463:419;;;:::o;15888:147::-;15989:11;16026:3;16011:18;;15888:147;;;;:::o;16041:114::-;;:::o;16161:398::-;16320:3;16341:83;16422:1;16417:3;16341:83;:::i;:::-;16334:90;;16433:93;16522:3;16433:93;:::i;:::-;16551:1;16546:3;16542:11;16535:18;;16161:398;;;:::o;16565:379::-;16749:3;16771:147;16914:3;16771:147;:::i;:::-;16764:154;;16935:3;16928:10;;16565:379;;;:::o;16950:165::-;17090:17;17086:1;17078:6;17074:14;17067:41;16950:165;:::o;17121:366::-;17263:3;17284:67;17348:2;17343:3;17284:67;:::i;:::-;17277:74;;17360:93;17449:3;17360:93;:::i;:::-;17478:2;17473:3;17469:12;17462:19;;17121:366;;;:::o;17493:419::-;17659:4;17697:2;17686:9;17682:18;17674:26;;17746:9;17740:4;17736:20;17732:1;17721:9;17717:17;17710:47;17774:131;17900:4;17774:131;:::i;:::-;17766:139;;17493:419;;;:::o;17918:224::-;18058:34;18054:1;18046:6;18042:14;18035:58;18127:7;18122:2;18114:6;18110:15;18103:32;17918:224;:::o;18148:366::-;18290:3;18311:67;18375:2;18370:3;18311:67;:::i;:::-;18304:74;;18387:93;18476:3;18387:93;:::i;:::-;18505:2;18500:3;18496:12;18489:19;;18148:366;;;:::o;18520:419::-;18686:4;18724:2;18713:9;18709:18;18701:26;;18773:9;18767:4;18763:20;18759:1;18748:9;18744:17;18737:47;18801:131;18927:4;18801:131;:::i;:::-;18793:139;;18520:419;;;:::o;18945:229::-;19085:34;19081:1;19073:6;19069:14;19062:58;19154:12;19149:2;19141:6;19137:15;19130:37;18945:229;:::o;19180:366::-;19322:3;19343:67;19407:2;19402:3;19343:67;:::i;:::-;19336:74;;19419:93;19508:3;19419:93;:::i;:::-;19537:2;19532:3;19528:12;19521:19;;19180:366;;;:::o;19552:419::-;19718:4;19756:2;19745:9;19741:18;19733:26;;19805:9;19799:4;19795:20;19791:1;19780:9;19776:17;19769:47;19833:131;19959:4;19833:131;:::i;:::-;19825:139;;19552:419;;;:::o;19977:235::-;20117:34;20113:1;20105:6;20101:14;20094:58;20186:18;20181:2;20173:6;20169:15;20162:43;19977:235;:::o;20218:366::-;20360:3;20381:67;20445:2;20440:3;20381:67;:::i;:::-;20374:74;;20457:93;20546:3;20457:93;:::i;:::-;20575:2;20570:3;20566:12;20559:19;;20218:366;;;:::o;20590:419::-;20756:4;20794:2;20783:9;20779:18;20771:26;;20843:9;20837:4;20833:20;20829:1;20818:9;20814:17;20807:47;20871:131;20997:4;20871:131;:::i;:::-;20863:139;;20590:419;;;:::o;21015:225::-;21155:34;21151:1;21143:6;21139:14;21132:58;21224:8;21219:2;21211:6;21207:15;21200:33;21015:225;:::o;21246:366::-;21388:3;21409:67;21473:2;21468:3;21409:67;:::i;:::-;21402:74;;21485:93;21574:3;21485:93;:::i;:::-;21603:2;21598:3;21594:12;21587:19;;21246:366;;;:::o;21618:419::-;21784:4;21822:2;21811:9;21807:18;21799:26;;21871:9;21865:4;21861:20;21857:1;21846:9;21842:17;21835:47;21899:131;22025:4;21899:131;:::i;:::-;21891:139;;21618:419;;;:::o;22043:162::-;22183:14;22179:1;22171:6;22167:14;22160:38;22043:162;:::o;22211:366::-;22353:3;22374:67;22438:2;22433:3;22374:67;:::i;:::-;22367:74;;22450:93;22539:3;22450:93;:::i;:::-;22568:2;22563:3;22559:12;22552:19;;22211:366;;;:::o;22583:419::-;22749:4;22787:2;22776:9;22772:18;22764:26;;22836:9;22830:4;22826:20;22822:1;22811:9;22807:17;22800:47;22864:131;22990:4;22864:131;:::i;:::-;22856:139;;22583:419;;;:::o;23008:223::-;23148:34;23144:1;23136:6;23132:14;23125:58;23217:6;23212:2;23204:6;23200:15;23193:31;23008:223;:::o;23237:366::-;23379:3;23400:67;23464:2;23459:3;23400:67;:::i;:::-;23393:74;;23476:93;23565:3;23476:93;:::i;:::-;23594:2;23589:3;23585:12;23578:19;;23237:366;;;:::o;23609:419::-;23775:4;23813:2;23802:9;23798:18;23790:26;;23862:9;23856:4;23852:20;23848:1;23837:9;23833:17;23826:47;23890:131;24016:4;23890:131;:::i;:::-;23882:139;;23609:419;;;:::o;24034:221::-;24174:34;24170:1;24162:6;24158:14;24151:58;24243:4;24238:2;24230:6;24226:15;24219:29;24034:221;:::o;24261:366::-;24403:3;24424:67;24488:2;24483:3;24424:67;:::i;:::-;24417:74;;24500:93;24589:3;24500:93;:::i;:::-;24618:2;24613:3;24609:12;24602:19;;24261:366;;;:::o;24633:419::-;24799:4;24837:2;24826:9;24822:18;24814:26;;24886:9;24880:4;24876:20;24872:1;24861:9;24857:17;24850:47;24914:131;25040:4;24914:131;:::i;:::-;24906:139;;24633:419;;;:::o;25058:179::-;25198:31;25194:1;25186:6;25182:14;25175:55;25058:179;:::o;25243:366::-;25385:3;25406:67;25470:2;25465:3;25406:67;:::i;:::-;25399:74;;25482:93;25571:3;25482:93;:::i;:::-;25600:2;25595:3;25591:12;25584:19;;25243:366;;;:::o;25615:419::-;25781:4;25819:2;25808:9;25804:18;25796:26;;25868:9;25862:4;25858:20;25854:1;25843:9;25839:17;25832:47;25896:131;26022:4;25896:131;:::i;:::-;25888:139;;25615:419;;;:::o;26040:224::-;26180:34;26176:1;26168:6;26164:14;26157:58;26249:7;26244:2;26236:6;26232:15;26225:32;26040:224;:::o;26270:366::-;26412:3;26433:67;26497:2;26492:3;26433:67;:::i;:::-;26426:74;;26509:93;26598:3;26509:93;:::i;:::-;26627:2;26622:3;26618:12;26611:19;;26270:366;;;:::o;26642:419::-;26808:4;26846:2;26835:9;26831:18;26823:26;;26895:9;26889:4;26885:20;26881:1;26870:9;26866:17;26859:47;26923:131;27049:4;26923:131;:::i;:::-;26915:139;;26642:419;;;:::o;27067:222::-;27207:34;27203:1;27195:6;27191:14;27184:58;27276:5;27271:2;27263:6;27259:15;27252:30;27067:222;:::o;27295:366::-;27437:3;27458:67;27522:2;27517:3;27458:67;:::i;:::-;27451:74;;27534:93;27623:3;27534:93;:::i;:::-;27652:2;27647:3;27643:12;27636:19;;27295:366;;;:::o;27667:419::-;27833:4;27871:2;27860:9;27856:18;27848:26;;27920:9;27914:4;27910:20;27906:1;27895:9;27891:17;27884:47;27948:131;28074:4;27948:131;:::i;:::-;27940:139;;27667:419;;;:::o;28092:235::-;28232:34;28228:1;28220:6;28216:14;28209:58;28301:18;28296:2;28288:6;28284:15;28277:43;28092:235;:::o;28333:366::-;28475:3;28496:67;28560:2;28555:3;28496:67;:::i;:::-;28489:74;;28572:93;28661:3;28572:93;:::i;:::-;28690:2;28685:3;28681:12;28674:19;;28333:366;;;:::o;28705:419::-;28871:4;28909:2;28898:9;28894:18;28886:26;;28958:9;28952:4;28948:20;28944:1;28933:9;28929:17;28922:47;28986:131;29112:4;28986:131;:::i;:::-;28978:139;;28705:419;;;:::o;29130:223::-;29270:34;29266:1;29258:6;29254:14;29247:58;29339:6;29334:2;29326:6;29322:15;29315:31;29130:223;:::o;29359:366::-;29501:3;29522:67;29586:2;29581:3;29522:67;:::i;:::-;29515:74;;29598:93;29687:3;29598:93;:::i;:::-;29716:2;29711:3;29707:12;29700:19;;29359:366;;;:::o;29731:419::-;29897:4;29935:2;29924:9;29920:18;29912:26;;29984:9;29978:4;29974:20;29970:1;29959:9;29955:17;29948:47;30012:131;30138:4;30012:131;:::i;:::-;30004:139;;29731:419;;;:::o;30156:410::-;30196:7;30219:20;30237:1;30219:20;:::i;:::-;30214:25;;30253:20;30271:1;30253:20;:::i;:::-;30248:25;;30308:1;30305;30301:9;30330:30;30348:11;30330:30;:::i;:::-;30319:41;;30509:1;30500:7;30496:15;30493:1;30490:22;30470:1;30463:9;30443:83;30420:139;;30539:18;;:::i;:::-;30420:139;30204:362;30156:410;;;;:::o;30572:194::-;30612:4;30632:20;30650:1;30632:20;:::i;:::-;30627:25;;30666:20;30684:1;30666:20;:::i;:::-;30661:25;;30710:1;30707;30703:9;30695:17;;30734:1;30728:4;30725:11;30722:37;;;30739:18;;:::i;:::-;30722:37;30572:194;;;;:::o;30772:225::-;30912:34;30908:1;30900:6;30896:14;30889:58;30981:8;30976:2;30968:6;30964:15;30957:33;30772:225;:::o;31003:366::-;31145:3;31166:67;31230:2;31225:3;31166:67;:::i;:::-;31159:74;;31242:93;31331:3;31242:93;:::i;:::-;31360:2;31355:3;31351:12;31344:19;;31003:366;;;:::o;31375:419::-;31541:4;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31375:419;;;:::o;31800:332::-;31921:4;31959:2;31948:9;31944:18;31936:26;;31972:71;32040:1;32029:9;32025:17;32016:6;31972:71;:::i;:::-;32053:72;32121:2;32110:9;32106:18;32097:6;32053:72;:::i;:::-;31800:332;;;;;:::o;32138:175::-;32278:27;32274:1;32266:6;32262:14;32255:51;32138:175;:::o;32319:366::-;32461:3;32482:67;32546:2;32541:3;32482:67;:::i;:::-;32475:74;;32558:93;32647:3;32558:93;:::i;:::-;32676:2;32671:3;32667:12;32660:19;;32319:366;;;:::o;32691:419::-;32857:4;32895:2;32884:9;32880:18;32872:26;;32944:9;32938:4;32934:20;32930:1;32919:9;32915:17;32908:47;32972:131;33098:4;32972:131;:::i;:::-;32964:139;;32691:419;;;:::o;33116:180::-;33256:32;33252:1;33244:6;33240:14;33233:56;33116:180;:::o;33302:366::-;33444:3;33465:67;33529:2;33524:3;33465:67;:::i;:::-;33458:74;;33541:93;33630:3;33541:93;:::i;:::-;33659:2;33654:3;33650:12;33643:19;;33302:366;;;:::o;33674:419::-;33840:4;33878:2;33867:9;33863:18;33855:26;;33927:9;33921:4;33917:20;33913:1;33902:9;33898:17;33891:47;33955:131;34081:4;33955:131;:::i;:::-;33947:139;;33674:419;;;:::o;34099:180::-;34147:77;34144:1;34137:88;34244:4;34241:1;34234:15;34268:4;34265:1;34258:15;34285:180;34333:77;34330:1;34323:88;34430:4;34427:1;34420:15;34454:4;34451:1;34444:15;34471:143;34528:5;34559:6;34553:13;34544:22;;34575:33;34602:5;34575:33;:::i;:::-;34471:143;;;;:::o;34620:351::-;34690:6;34739:2;34727:9;34718:7;34714:23;34710:32;34707:119;;;34745:79;;:::i;:::-;34707:119;34865:1;34890:64;34946:7;34937:6;34926:9;34922:22;34890:64;:::i;:::-;34880:74;;34836:128;34620:351;;;;:::o;34977:85::-;35022:7;35051:5;35040:16;;34977:85;;;:::o;35068:158::-;35126:9;35159:61;35177:42;35186:32;35212:5;35186:32;:::i;:::-;35177:42;:::i;:::-;35159:61;:::i;:::-;35146:74;;35068:158;;;:::o;35232:147::-;35327:45;35366:5;35327:45;:::i;:::-;35322:3;35315:58;35232:147;;:::o;35385:114::-;35452:6;35486:5;35480:12;35470:22;;35385:114;;;:::o;35505:184::-;35604:11;35638:6;35633:3;35626:19;35678:4;35673:3;35669:14;35654:29;;35505:184;;;;:::o;35695:132::-;35762:4;35785:3;35777:11;;35815:4;35810:3;35806:14;35798:22;;35695:132;;;:::o;35833:108::-;35910:24;35928:5;35910:24;:::i;:::-;35905:3;35898:37;35833:108;;:::o;35947:179::-;36016:10;36037:46;36079:3;36071:6;36037:46;:::i;:::-;36115:4;36110:3;36106:14;36092:28;;35947:179;;;;:::o;36132:113::-;36202:4;36234;36229:3;36225:14;36217:22;;36132:113;;;:::o;36281:732::-;36400:3;36429:54;36477:5;36429:54;:::i;:::-;36499:86;36578:6;36573:3;36499:86;:::i;:::-;36492:93;;36609:56;36659:5;36609:56;:::i;:::-;36688:7;36719:1;36704:284;36729:6;36726:1;36723:13;36704:284;;;36805:6;36799:13;36832:63;36891:3;36876:13;36832:63;:::i;:::-;36825:70;;36918:60;36971:6;36918:60;:::i;:::-;36908:70;;36764:224;36751:1;36748;36744:9;36739:14;;36704:284;;;36708:14;37004:3;36997:10;;36405:608;;;36281:732;;;;:::o;37019:831::-;37282:4;37320:3;37309:9;37305:19;37297:27;;37334:71;37402:1;37391:9;37387:17;37378:6;37334:71;:::i;:::-;37415:80;37491:2;37480:9;37476:18;37467:6;37415:80;:::i;:::-;37542:9;37536:4;37532:20;37527:2;37516:9;37512:18;37505:48;37570:108;37673:4;37664:6;37570:108;:::i;:::-;37562:116;;37688:72;37756:2;37745:9;37741:18;37732:6;37688:72;:::i;:::-;37770:73;37838:3;37827:9;37823:19;37814:6;37770:73;:::i;:::-;37019:831;;;;;;;;:::o;37856:807::-;38105:4;38143:3;38132:9;38128:19;38120:27;;38157:71;38225:1;38214:9;38210:17;38201:6;38157:71;:::i;:::-;38238:72;38306:2;38295:9;38291:18;38282:6;38238:72;:::i;:::-;38320:80;38396:2;38385:9;38381:18;38372:6;38320:80;:::i;:::-;38410;38486:2;38475:9;38471:18;38462:6;38410:80;:::i;:::-;38500:73;38568:3;38557:9;38553:19;38544:6;38500:73;:::i;:::-;38583;38651:3;38640:9;38636:19;38627:6;38583:73;:::i;:::-;37856:807;;;;;;;;;:::o;38669:663::-;38757:6;38765;38773;38822:2;38810:9;38801:7;38797:23;38793:32;38790:119;;;38828:79;;:::i;:::-;38790:119;38948:1;38973:64;39029:7;39020:6;39009:9;39005:22;38973:64;:::i;:::-;38963:74;;38919:128;39086:2;39112:64;39168:7;39159:6;39148:9;39144:22;39112:64;:::i;:::-;39102:74;;39057:129;39225:2;39251:64;39307:7;39298:6;39287:9;39283:22;39251:64;:::i;:::-;39241:74;;39196:129;38669:663;;;;;:::o

Swarm Source

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