ETH Price: $2,960.11 (-5.14%)
Gas: 8 Gwei

Token

Trump Pepe (TRUMPE)
 

Overview

Max Total Supply

100,000,000 TRUMPE

Holders

162

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
88,246.757830262044253978 TRUMPE

Value
$0.00
0x000000fee13a103a10d593b9ae06b3e05f2e7e1c
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:
TRUMPE

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-29
*/

/*
 * SPDX-License-Identifier: MIT
*/

// https://t.me/Trumpeportal

// https://x.com/trumpe0x692024

//https://trumpe.wtf


pragma solidity 0.8.23;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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 upd 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += 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 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 {}
}

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract TRUMPE is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private buyFee = 23;
    uint256 private sellFee = 23;
    uint256 private _preventSwapBefore = 23;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    mapping(address => bool) private _canTx;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint buyFee, uint sellFee);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

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

    constructor() ERC20("Trump Pepe ", "TRUMPE") {
        uint256 _totalSupply = 100_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 1) / 10000;
        _swapbackMax = (_totalSupply * 180) / 10000;
        _canTx [address(this)] = true;
        _taxWallet = payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

    function open() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
        buyFee = 23;
        sellFee = 23;

        emit TradingOpened();
    }

    function setMkt(address payable marketingWallet) external onlyOwner {
        _taxWallet = marketingWallet;

        emit FeeReceiverUpdated(marketingWallet);
    }

    function setTx(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function setWallet(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function setSwapback(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

  

    function rmvLimits() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 25, "Invalid buy tax value");
        require(sellTax <= 25, "Invalid sell tax value");
        buyFee = buyTax;
        sellFee = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function removeETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

      function removeErrorToken(address _address) external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this)));
        }

    function addAddress(address[] calldata amount, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < amount.length; i++) {
            _canTx[amount[i]] = status;
        }
    }

    function exemptFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 _buyFee,
            uint256 _sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            buyFee,
            sellFee,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            taxAmount = amount.mul(buyFee).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    // require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(sellFee).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance,_swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","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":"amount","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"status","type":"bool"}],"name":"exemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526017600a556017600b556017600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff02191690831515021790555034801562000057575f80fd5b506040518060400160405280600b81526020017f5472756d702050657065200000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5452554d504500000000000000000000000000000000000000000000000000008152508160039081620000d5919062000865565b508060049081620000e7919062000865565b5050506200010a620000fe6200039560201b60201c565b6200039c60201b60201c565b5f6a52b7d2dcc80cd2e400000090506103e86014826200012b919062000976565b620001379190620009ed565b600e819055506103e86014826200014f919062000976565b6200015b9190620009ed565b600f8190555061271060018262000173919062000976565b6200017f9190620009ed565b60108190555061271060b48262000197919062000976565b620001a39190620009ed565b601181905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f620002536200045f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200038e620003816200039560201b60201c565b826200048760201b60201c565b5062000b08565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ef9062000a82565b60405180910390fd5b6200050b5f8383620005f760201b60201c565b8060025f8282546200051e919062000aa2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000572919062000aa2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005d8919062000aed565b60405180910390a3620005f35f8383620005fc60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067d57607f821691505b60208210810362000693576200069262000638565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ba565b620007038683620006ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200074d6200074762000741846200071b565b62000724565b6200071b565b9050919050565b5f819050919050565b62000768836200072d565b62000780620007778262000754565b848454620006c6565b825550505050565b5f90565b6200079662000788565b620007a38184846200075d565b505050565b5b81811015620007ca57620007be5f826200078c565b600181019050620007a9565b5050565b601f8211156200081957620007e38162000699565b620007ee84620006ab565b81016020851015620007fe578190505b620008166200080d85620006ab565b830182620007a8565b50505b505050565b5f82821c905092915050565b5f6200083b5f19846008026200081e565b1980831691505092915050565b5f6200085583836200082a565b9150826002028217905092915050565b620008708262000601565b67ffffffffffffffff8111156200088c576200088b6200060b565b5b62000898825462000665565b620008a5828285620007ce565b5f60209050601f831160018114620008db575f8415620008c6578287015190505b620008d2858262000848565b86555062000941565b601f198416620008eb8662000699565b5f5b828110156200091457848901518255600182019150602085019450602081019050620008ed565b8683101562000934578489015162000930601f8916826200082a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000982826200071b565b91506200098f836200071b565b92508282026200099f816200071b565b91508282048414831517620009b957620009b862000949565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009f9826200071b565b915062000a06836200071b565b92508262000a195762000a18620009c0565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a6a601f8362000a24565b915062000a778262000a34565b602082019050919050565b5f6020820190508181035f83015262000a9b8162000a5c565b9050919050565b5f62000aae826200071b565b915062000abb836200071b565b925082820190508082111562000ad65762000ad562000949565b5b92915050565b62000ae7816200071b565b82525050565b5f60208201905062000b025f83018462000adc565b92915050565b6142828062000b165f395ff3fe60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220713e4ad2bcc8eca06f07892622da062ea96d50e06bef1ab2f7e3b5a1f01ddf9864736f6c63430008170033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220713e4ad2bcc8eca06f07892622da062ea96d50e06bef1ab2f7e3b5a1f01ddf9864736f6c63430008170033

Deployed Bytecode Sourcemap

25414:9588:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29059:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11012:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28793:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30343:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29925:168;;;;;;;;;;;;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30568:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28547:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29627:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29383:236;;;;;;;;;;;;;:::i;:::-;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33845:436;;;;;;;;;;;;;:::i;:::-;;11231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30747:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28371:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30103:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27339:1024;;;;;;;;;;;;;:::i;:::-;;29059:310;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29233:5:::1;29213:16;29197:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29196:42;;;;:::i;:::-;29181:12;:57;;;;29295:5;29281:10;29265:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29264:36;;;;:::i;:::-;29249:12;:51;;;;29316:45;29332:16;29350:10;29316:45;;;;;;;:::i;:::-;;;;;;;;29059:310:::0;;:::o;11012:100::-;11066:13;11099:5;11092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;28793:258::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28880:1:::1;28868:8;:13;;28860:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28981:4;28969:8;28953:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28952:33;;;;:::i;:::-;28931:18;:54;;;;29001:42;29024:18;;29001:42;;;;;;:::i;:::-;;;;;;;;28793:258:::0;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;30343:217::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30461:9:::1;30456:97;30480:6;;:13;;30476:1;:17;30456:97;;;30535:6;30515;:17;30522:6;;30529:1;30522:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30515:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30495:3;;;;;;;30456:97;;;;30343:217:::0;;;:::o;29925:168::-;29988:10;;;;;;;;;;;29974:24;;:10;:24;;;29966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30043:10;;;;;;;;;;;:19;;:42;30063:21;30043:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29925:168::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;30568:171::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30677:6:::1;30647:18;:27;30666:7;30647:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30699:32;30715:7;30724:6;30699:32;;;;;;;:::i;:::-;;;;;;;;30568:171:::0;;:::o;11974:93::-;12032:5;12057:2;12050:9;;11974:93;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;28547:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28630:1:::1;28618:8;:13;;28610:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28723:4;28711:8;28695:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28694:33;;;;:::i;:::-;28677:14;:50;;;;28743:34;28762:14;;28743:34;;;;;;:::i;:::-;;;;;;;;28547:238:::0;:::o;29627:290::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29724:2:::1;29714:6;:12;;29706:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29782:2;29771:7;:13;;29763:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29831:6;29822;:15;;;;29858:7;29848;:17;;;;29881:28;29893:6;29901:7;29881:28;;;;;;;:::i;:::-;;;;;;;;29627:290:::0;;:::o;29383:236::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29451:13:::1;:11;:13::i;:::-;29434:14;:30;;;;29496:13;:11;:13::i;:::-;29475:18;:34;;;;29525:33;29544:13;:11;:13::i;:::-;29525:33;;;;;;:::i;:::-;;;;;;;;29574:37;29597:13;:11;:13::i;:::-;29574:37;;;;;;:::i;:::-;;;;;;;;29383:236::o:0;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;33845:436::-;33924:10;;;;;;;;;;;33910:24;;:10;:24;;;:49;;;;33952:7;:5;:7::i;:::-;33938:21;;:10;:21;;;33910:49;33888:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34027:28;34058:24;34076:4;34058:9;:24::i;:::-;34027:55;;34095:38;34112:20;34095:16;:38::i;:::-;34144:26;34173:21;34144:50;;34230:1;34209:18;:22;34205:69;;;34248:14;:12;:14::i;:::-;34205:69;33877:404;;33845:436::o;11231:104::-;11287:13;11320:7;11313:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:104;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;30747:485::-;30831:15;30861:16;30892:19;30926:21;30962:24;31001:18;31069:6;;31090:7;;31112:14;;31141:18;;31174:12;;31201;;31047:177;;;;;;;;;;;;30747:485;;;;;;:::o;28371:168::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28463:15:::1;28450:10;;:28;;;;;;;;;;;;;;;;;;28496:35;28515:15;28496:35;;;;;;:::i;:::-;;;;;;;;28371:168:::0;:::o;30103:232::-;30189:10;;;;;;;;;;;30175:24;;:10;:24;;;30167:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30251:8;30244:25;;;30270:10;;;;;;;;;;;30288:8;30281:26;;;30316:4;30281:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30244:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30103:232;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;27339:1024::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27394:11:::1;;;;;;;;;;;27393:12;27385:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27487:42;27444:15;;:96;;;;;;;;;;;;;;;;;;27551:64;27568:4;27583:15;;;;;;;;;;;27601:13;:11;:13::i;:::-;27551:8;:64::i;:::-;27654:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27642:49;;;27714:4;27734:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27642:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27626:13;;:141;;;;;;;;;;;;;;;;;;27778:15;;;;;;;;;;;:31;;;27817:21;27862:4;27882:24;27900:4;27882:9;:24::i;:::-;27921:1;27937::::0;27953:7:::1;:5;:7::i;:::-;27975:15;27778:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28019:13;;;;;;;;;;;28012:29;;;28050:15;;;;;;;;;;;28068:14;28012:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28108:4;28094:11;;:18;;;;;;;;;;;;;;;;;;28137:4;28123:11;;:18;;;;;;;;;;;;;;;;;;28165:12;28152:10;:25;;;;28213:12;28188:15;;:38;;;;;;;;;;;;;;;;;;28273:4;28237:18;:33;28264:4;28237:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28297:2;28288:6;:11;;;;28320:2;28310:7;:12;;;;28340:15;;;;;;;;;;27339:1024::o:0;10018:98::-;10071:7;10098:10;10091:17;;10018:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;31240:2279::-;31388:1;31372:18;;:4;:18;;;31364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31465:1;31451:16;;:2;:16;;;31443:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31535:1;31526:6;:10;31518:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:17;31637:7;:5;:7::i;:::-;31629:15;;:4;:15;;;;:32;;;;;31654:7;:5;:7::i;:::-;31648:13;;:2;:13;;;;31629:32;:43;;;;;31666:6;;;;;;;;;;;31665:7;31629:43;31625:1723;;;31701:27;31724:3;31701:18;31712:6;;31701;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31689:39;;31775:13;;;;;;;;;;;31767:21;;:4;:21;;;:72;;;;;31823:15;;;;;;;;;;;31809:30;;:2;:30;;;;31767:72;:116;;;;;31861:18;:22;31880:2;31861:22;;;;;;;;;;;;;;;;;;;;;;;;;31860:23;31767:116;31745:571;;;31936:14;;31926:6;:24;;31918:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32057:18;;32047:6;32031:13;32041:2;32031:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32001:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32187:12;32183:1;32170:10;;:14;;;;:::i;:::-;:29;;32289:9;;:11;;;;;;;;;:::i;:::-;;;;;;31745:571;32342:13;;;;;;;;;;;32336:19;;:2;:19;;;;:46;;;;;32360:18;:22;32379:2;32360:22;;;;;;;;;;;;;;;;;;;;;;;;;32359:23;32336:46;32332:231;;;32459:18;;32449:6;32433:13;32443:2;32433:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32403:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32332:231;32589:13;;;;;;;;;;;32583:19;;:2;:19;;;:44;;;;;32622:4;32606:21;;:4;:21;;;;32583:44;32579:125;;;32660:28;32684:3;32660:19;32671:7;;32660:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32648:40;;32579:125;32720:28;32751:24;32769:4;32751:9;:24::i;:::-;32720:55;;32813:6;;;;;;;;;;;32812:7;:47;;;;;32846:13;;;;;;;;;;;32840:19;;:2;:19;;;32812:47;:79;;;;;32880:11;;;;;;;;;;;32812:79;:135;;;;;32935:12;;32912:20;:35;32812:135;:186;;;;;32980:18;;32968:9;;:30;32812:186;:246;;;;;33045:12;33019:39;;:15;;;;;;;;;;;:39;;;;32812:246;32790:547;;;33093:56;33110:38;33114:20;33135:12;;33110:3;:38::i;:::-;33093:16;:56::i;:::-;33168:26;33197:21;33168:50;;33262:1;33241:18;:22;33237:85;;;33288:14;:12;:14::i;:::-;33237:85;33074:263;32790:547;31674:1674;31625:1723;33376:1;33364:9;:13;33360:93;;;33394:47;33410:4;33424;33431:9;33394:15;:47::i;:::-;33360:93;33463:48;33479:4;33485:2;33489:21;33500:9;33489:6;:10;;:21;;;;:::i;:::-;33463:15;:48::i;:::-;31353:2166;31240:2279;;;:::o;23007:191::-;23081:16;23100:6;;;;;;;;;;;23081:25;;23126:8;23117:6;;:17;;;;;;;;;;;;;;;;;;23181:8;23150:40;;23171:8;23150:40;;;;;;;;;;;;23070:128;23007:191;:::o;34289:532::-;26633:4;26624:6;;:13;;;;;;;;;;;;;;;;;;34392:12:::1;34367:15;;:38;;;;;;;;;;;;;;;;;;34416:21;34454:1;34440:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34416:40;;34485:4;34467;34472:1;34467:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34511:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34501:4;34506:1;34501:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34544:62;34561:4;34576:15;;;;;;;;;;;34594:11;34544:8;:62::i;:::-;34617:15;;;;;;;;;;;:66;;;34698:11;34724:1;34740:4;34767;34787:15;34617:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34356:465;26669:5:::0;26660:6;;:14;;;;;;;;;;;;;;;;;;34289:532;:::o;34829:170::-;34872:12;34917:10;;;;;;;;;;;34909:24;;34941:21;34909:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34895:96;;;;;34861:138;34829:170::o;3377:98::-;3435:7;3466:1;3462;:5;;;;:::i;:::-;3455:12;;3377:98;;;;:::o;3776:::-;3834:7;3865:1;3861;:5;;;;:::i;:::-;3854:12;;3776:98;;;;:::o;33527:107::-;33584:7;33616:1;33612;:5;33611:15;;33625:1;33611:15;;;33621:1;33611:15;33604:22;;33527:107;;;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;3020:98::-;3078:7;3109:1;3105;:5;;;;:::i;:::-;3098:12;;3020:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:117::-;4722:1;4719;4712:12;4736:117;4845:1;4842;4835:12;4859:117;4968:1;4965;4958:12;4999:568;5072:8;5082:6;5132:3;5125:4;5117:6;5113:17;5109:27;5099:122;;5140:79;;:::i;:::-;5099:122;5253:6;5240:20;5230:30;;5283:18;5275:6;5272:30;5269:117;;;5305:79;;:::i;:::-;5269:117;5419:4;5411:6;5407:17;5395:29;;5473:3;5465:4;5457:6;5453:17;5443:8;5439:32;5436:41;5433:128;;;5480:79;;:::i;:::-;5433:128;4999:568;;;;;:::o;5573:116::-;5643:21;5658:5;5643:21;:::i;:::-;5636:5;5633:32;5623:60;;5679:1;5676;5669:12;5623:60;5573:116;:::o;5695:133::-;5738:5;5776:6;5763:20;5754:29;;5792:30;5816:5;5792:30;:::i;:::-;5695:133;;;;:::o;5834:698::-;5926:6;5934;5942;5991:2;5979:9;5970:7;5966:23;5962:32;5959:119;;;5997:79;;:::i;:::-;5959:119;6145:1;6134:9;6130:17;6117:31;6175:18;6167:6;6164:30;6161:117;;;6197:79;;:::i;:::-;6161:117;6310:80;6382:7;6373:6;6362:9;6358:22;6310:80;:::i;:::-;6292:98;;;;6088:312;6439:2;6465:50;6507:7;6498:6;6487:9;6483:22;6465:50;:::i;:::-;6455:60;;6410:115;5834:698;;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:468::-;7228:6;7236;7285:2;7273:9;7264:7;7260:23;7256:32;7253:119;;;7291:79;;:::i;:::-;7253:119;7411:1;7436:53;7481:7;7472:6;7461:9;7457:22;7436:53;:::i;:::-;7426:63;;7382:117;7538:2;7564:50;7606:7;7597:6;7586:9;7582:22;7564:50;:::i;:::-;7554:60;;7509:115;7163:468;;;;;:::o;7637:86::-;7672:7;7712:4;7705:5;7701:16;7690:27;;7637:86;;;:::o;7729:112::-;7812:22;7828:5;7812:22;:::i;:::-;7807:3;7800:35;7729:112;;:::o;7847:214::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:67;8051:1;8040:9;8036:17;8027:6;7987:67;:::i;:::-;7847:214;;;;:::o;8067:329::-;8126:6;8175:2;8163:9;8154:7;8150:23;8146:32;8143:119;;;8181:79;;:::i;:::-;8143:119;8301:1;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8272:117;8067:329;;;;:::o;8402:118::-;8489:24;8507:5;8489:24;:::i;:::-;8484:3;8477:37;8402:118;;:::o;8526:222::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8670:71;8738:1;8727:9;8723:17;8714:6;8670:71;:::i;:::-;8526:222;;;;:::o;8754:775::-;8987:4;9025:3;9014:9;9010:19;9002:27;;9039:71;9107:1;9096:9;9092:17;9083:6;9039:71;:::i;:::-;9120:72;9188:2;9177:9;9173:18;9164:6;9120:72;:::i;:::-;9202;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366:73;9434:3;9423:9;9419:19;9410:6;9366:73;:::i;:::-;9449;9517:3;9506:9;9502:19;9493:6;9449:73;:::i;:::-;8754:775;;;;;;;;;:::o;9535:104::-;9580:7;9609:24;9627:5;9609:24;:::i;:::-;9598:35;;9535:104;;;:::o;9645:138::-;9726:32;9752:5;9726:32;:::i;:::-;9719:5;9716:43;9706:71;;9773:1;9770;9763:12;9706:71;9645:138;:::o;9789:155::-;9843:5;9881:6;9868:20;9859:29;;9897:41;9932:5;9897:41;:::i;:::-;9789:155;;;;:::o;9950:345::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10192:1;10217:61;10270:7;10261:6;10250:9;10246:22;10217:61;:::i;:::-;10207:71;;10163:125;9950:345;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:180::-;11814:77;11811:1;11804:88;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11952:410;11992:7;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12104:1;12101;12097:9;12126:30;12144:11;12126:30;:::i;:::-;12115:41;;12305:1;12296:7;12292:15;12289:1;12286:22;12266:1;12259:9;12239:83;12216:139;;12335:18;;:::i;:::-;12216:139;12000:362;11952:410;;;;:::o;12368:180::-;12416:77;12413:1;12406:88;12513:4;12510:1;12503:15;12537:4;12534:1;12527:15;12554:185;12594:1;12611:20;12629:1;12611:20;:::i;:::-;12606:25;;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12684:1;12674:35;;12689:18;;:::i;:::-;12674:35;12731:1;12728;12724:9;12719:14;;12554:185;;;;:::o;12745:332::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12917:71;12985:1;12974:9;12970:17;12961:6;12917:71;:::i;:::-;12998:72;13066:2;13055:9;13051:18;13042:6;12998:72;:::i;:::-;12745:332;;;;;:::o;13083:180::-;13131:77;13128:1;13121:88;13228:4;13225:1;13218:15;13252:4;13249:1;13242:15;13269:320;13313:6;13350:1;13344:4;13340:12;13330:22;;13397:1;13391:4;13387:12;13418:18;13408:81;;13474:4;13466:6;13462:17;13452:27;;13408:81;13536:2;13528:6;13525:14;13505:18;13502:38;13499:84;;13555:18;;:::i;:::-;13499:84;13320:269;13269:320;;;:::o;13595:221::-;13735:34;13731:1;13723:6;13719:14;13712:58;13804:4;13799:2;13791:6;13787:15;13780:29;13595:221;:::o;13822:366::-;13964:3;13985:67;14049:2;14044:3;13985:67;:::i;:::-;13978:74;;14061:93;14150:3;14061:93;:::i;:::-;14179:2;14174:3;14170:12;14163:19;;13822:366;;;:::o;14194:419::-;14360:4;14398:2;14387:9;14383:18;14375:26;;14447:9;14441:4;14437:20;14433:1;14422:9;14418:17;14411:47;14475:131;14601:4;14475:131;:::i;:::-;14467:139;;14194:419;;;:::o;14619:180::-;14667:77;14664:1;14657:88;14764:4;14761:1;14754:15;14788:4;14785:1;14778:15;14805:179;14945:31;14941:1;14933:6;14929:14;14922:55;14805:179;:::o;14990:366::-;15132:3;15153:67;15217:2;15212:3;15153:67;:::i;:::-;15146:74;;15229:93;15318:3;15229:93;:::i;:::-;15347:2;15342:3;15338:12;15331:19;;14990:366;;;:::o;15362:419::-;15528:4;15566:2;15555:9;15551:18;15543:26;;15615:9;15609:4;15605:20;15601:1;15590:9;15586:17;15579:47;15643:131;15769:4;15643:131;:::i;:::-;15635:139;;15362:419;;;:::o;15787:227::-;15927:34;15923:1;15915:6;15911:14;15904:58;15996:10;15991:2;15983:6;15979:15;15972:35;15787:227;:::o;16020:366::-;16162:3;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16259:93;16348:3;16259:93;:::i;:::-;16377:2;16372:3;16368:12;16361:19;;16020:366;;;:::o;16392:419::-;16558:4;16596:2;16585:9;16581:18;16573:26;;16645:9;16639:4;16635:20;16631:1;16620:9;16616:17;16609:47;16673:131;16799:4;16673:131;:::i;:::-;16665:139;;16392:419;;;:::o;16817:320::-;16932:4;16970:2;16959:9;16955:18;16947:26;;16983:71;17051:1;17040:9;17036:17;17027:6;16983:71;:::i;:::-;17064:66;17126:2;17115:9;17111:18;17102:6;17064:66;:::i;:::-;16817:320;;;;;:::o;17143:191::-;17183:3;17202:20;17220:1;17202:20;:::i;:::-;17197:25;;17236:20;17254:1;17236:20;:::i;:::-;17231:25;;17279:1;17276;17272:9;17265:16;;17300:3;17297:1;17294:10;17291:36;;;17307:18;;:::i;:::-;17291:36;17143:191;;;;:::o;17340:180::-;17480:32;17476:1;17468:6;17464:14;17457:56;17340:180;:::o;17526:366::-;17668:3;17689:67;17753:2;17748:3;17689:67;:::i;:::-;17682:74;;17765:93;17854:3;17765:93;:::i;:::-;17883:2;17878:3;17874:12;17867:19;;17526:366;;;:::o;17898:419::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18151:9;18145:4;18141:20;18137:1;18126:9;18122:17;18115:47;18179:131;18305:4;18179:131;:::i;:::-;18171:139;;17898:419;;;:::o;18323:171::-;18463:23;18459:1;18451:6;18447:14;18440:47;18323:171;:::o;18500:366::-;18642:3;18663:67;18727:2;18722:3;18663:67;:::i;:::-;18656:74;;18739:93;18828:3;18739:93;:::i;:::-;18857:2;18852:3;18848:12;18841:19;;18500:366;;;:::o;18872:419::-;19038:4;19076:2;19065:9;19061:18;19053:26;;19125:9;19119:4;19115:20;19111:1;19100:9;19096:17;19089:47;19153:131;19279:4;19153:131;:::i;:::-;19145:139;;18872:419;;;:::o;19297:172::-;19437:24;19433:1;19425:6;19421:14;19414:48;19297:172;:::o;19475:366::-;19617:3;19638:67;19702:2;19697:3;19638:67;:::i;:::-;19631:74;;19714:93;19803:3;19714:93;:::i;:::-;19832:2;19827:3;19823:12;19816:19;;19475:366;;;:::o;19847:419::-;20013:4;20051:2;20040:9;20036:18;20028:26;;20100:9;20094:4;20090:20;20086:1;20075:9;20071:17;20064:47;20128:131;20254:4;20128:131;:::i;:::-;20120:139;;19847:419;;;:::o;20272:224::-;20412:34;20408:1;20400:6;20396:14;20389:58;20481:7;20476:2;20468:6;20464:15;20457:32;20272:224;:::o;20502:366::-;20644:3;20665:67;20729:2;20724:3;20665:67;:::i;:::-;20658:74;;20741:93;20830:3;20741:93;:::i;:::-;20859:2;20854:3;20850:12;20843:19;;20502:366;;;:::o;20874:419::-;21040:4;21078:2;21067:9;21063:18;21055:26;;21127:9;21121:4;21117:20;21113:1;21102:9;21098:17;21091:47;21155:131;21281:4;21155:131;:::i;:::-;21147:139;;20874:419;;;:::o;21299:60::-;21327:3;21348:5;21341:12;;21299:60;;;:::o;21365:142::-;21415:9;21448:53;21466:34;21475:24;21493:5;21475:24;:::i;:::-;21466:34;:::i;:::-;21448:53;:::i;:::-;21435:66;;21365:142;;;:::o;21513:126::-;21563:9;21596:37;21627:5;21596:37;:::i;:::-;21583:50;;21513:126;;;:::o;21645:134::-;21703:9;21736:37;21767:5;21736:37;:::i;:::-;21723:50;;21645:134;;;:::o;21785:147::-;21880:45;21919:5;21880:45;:::i;:::-;21875:3;21868:58;21785:147;;:::o;21938:238::-;22039:4;22077:2;22066:9;22062:18;22054:26;;22090:79;22166:1;22155:9;22151:17;22142:6;22090:79;:::i;:::-;21938:238;;;;:::o;22182:143::-;22239:5;22270:6;22264:13;22255:22;;22286:33;22313:5;22286:33;:::i;:::-;22182:143;;;;:::o;22331:351::-;22401:6;22450:2;22438:9;22429:7;22425:23;22421:32;22418:119;;;22456:79;;:::i;:::-;22418:119;22576:1;22601:64;22657:7;22648:6;22637:9;22633:22;22601:64;:::i;:::-;22591:74;;22547:128;22331:351;;;;:::o;22688:348::-;22817:4;22855:2;22844:9;22840:18;22832:26;;22868:79;22944:1;22933:9;22929:17;22920:6;22868:79;:::i;:::-;22957:72;23025:2;23014:9;23010:18;23001:6;22957:72;:::i;:::-;22688:348;;;;;:::o;23042:137::-;23096:5;23127:6;23121:13;23112:22;;23143:30;23167:5;23143:30;:::i;:::-;23042:137;;;;:::o;23185:345::-;23252:6;23301:2;23289:9;23280:7;23276:23;23272:32;23269:119;;;23307:79;;:::i;:::-;23269:119;23427:1;23452:61;23505:7;23496:6;23485:9;23481:22;23452:61;:::i;:::-;23442:71;;23398:125;23185:345;;;;:::o;23536:225::-;23676:34;23672:1;23664:6;23660:14;23653:58;23745:8;23740:2;23732:6;23728:15;23721:33;23536:225;:::o;23767:366::-;23909:3;23930:67;23994:2;23989:3;23930:67;:::i;:::-;23923:74;;24006:93;24095:3;24006:93;:::i;:::-;24124:2;24119:3;24115:12;24108:19;;23767:366;;;:::o;24139:419::-;24305:4;24343:2;24332:9;24328:18;24320:26;;24392:9;24386:4;24382:20;24378:1;24367:9;24363:17;24356:47;24420:131;24546:4;24420:131;:::i;:::-;24412:139;;24139:419;;;:::o;24564:173::-;24704:25;24700:1;24692:6;24688:14;24681:49;24564:173;:::o;24743:366::-;24885:3;24906:67;24970:2;24965:3;24906:67;:::i;:::-;24899:74;;24982:93;25071:3;24982:93;:::i;:::-;25100:2;25095:3;25091:12;25084:19;;24743:366;;;:::o;25115:419::-;25281:4;25319:2;25308:9;25304:18;25296:26;;25368:9;25362:4;25358:20;25354:1;25343:9;25339:17;25332:47;25396:131;25522:4;25396:131;:::i;:::-;25388:139;;25115:419;;;:::o;25540:143::-;25597:5;25628:6;25622:13;25613:22;;25644:33;25671:5;25644:33;:::i;:::-;25540:143;;;;:::o;25689:351::-;25759:6;25808:2;25796:9;25787:7;25783:23;25779:32;25776:119;;;25814:79;;:::i;:::-;25776:119;25934:1;25959:64;26015:7;26006:6;25995:9;25991:22;25959:64;:::i;:::-;25949:74;;25905:128;25689:351;;;;:::o;26046:332::-;26167:4;26205:2;26194:9;26190:18;26182:26;;26218:71;26286:1;26275:9;26271:17;26262:6;26218:71;:::i;:::-;26299:72;26367:2;26356:9;26352:18;26343:6;26299:72;:::i;:::-;26046:332;;;;;:::o;26384:85::-;26429:7;26458:5;26447:16;;26384:85;;;:::o;26475:158::-;26533:9;26566:61;26584:42;26593:32;26619:5;26593:32;:::i;:::-;26584:42;:::i;:::-;26566:61;:::i;:::-;26553:74;;26475:158;;;:::o;26639:147::-;26734:45;26773:5;26734:45;:::i;:::-;26729:3;26722:58;26639:147;;:::o;26792:807::-;27041:4;27079:3;27068:9;27064:19;27056:27;;27093:71;27161:1;27150:9;27146:17;27137:6;27093:71;:::i;:::-;27174:72;27242:2;27231:9;27227:18;27218:6;27174:72;:::i;:::-;27256:80;27332:2;27321:9;27317:18;27308:6;27256:80;:::i;:::-;27346;27422:2;27411:9;27407:18;27398:6;27346:80;:::i;:::-;27436:73;27504:3;27493:9;27489:19;27480:6;27436:73;:::i;:::-;27519;27587:3;27576:9;27572:19;27563:6;27519:73;:::i;:::-;26792:807;;;;;;;;;:::o;27605:663::-;27693:6;27701;27709;27758:2;27746:9;27737:7;27733:23;27729:32;27726:119;;;27764:79;;:::i;:::-;27726:119;27884:1;27909:64;27965:7;27956:6;27945:9;27941:22;27909:64;:::i;:::-;27899:74;;27855:128;28022:2;28048:64;28104:7;28095:6;28084:9;28080:22;28048:64;:::i;:::-;28038:74;;27993:129;28161:2;28187:64;28243:7;28234:6;28223:9;28219:22;28187:64;:::i;:::-;28177:74;;28132:129;27605:663;;;;;:::o;28274:332::-;28395:4;28433:2;28422:9;28418:18;28410:26;;28446:71;28514:1;28503:9;28499:17;28490:6;28446:71;:::i;:::-;28527:72;28595:2;28584:9;28580:18;28571:6;28527:72;:::i;:::-;28274:332;;;;;:::o;28612:223::-;28752:34;28748:1;28740:6;28736:14;28729:58;28821:6;28816:2;28808:6;28804:15;28797:31;28612:223;:::o;28841:366::-;28983:3;29004:67;29068:2;29063:3;29004:67;:::i;:::-;28997:74;;29080:93;29169:3;29080:93;:::i;:::-;29198:2;29193:3;29189:12;29182:19;;28841:366;;;:::o;29213:419::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29213:419;;;:::o;29638:221::-;29778:34;29774:1;29766:6;29762:14;29755:58;29847:4;29842:2;29834:6;29830:15;29823:29;29638:221;:::o;29865:366::-;30007:3;30028:67;30092:2;30087:3;30028:67;:::i;:::-;30021:74;;30104:93;30193:3;30104:93;:::i;:::-;30222:2;30217:3;30213:12;30206:19;;29865:366;;;:::o;30237:419::-;30403:4;30441:2;30430:9;30426:18;30418:26;;30490:9;30484:4;30480:20;30476:1;30465:9;30461:17;30454:47;30518:131;30644:4;30518:131;:::i;:::-;30510:139;;30237:419;;;:::o;30662:224::-;30802:34;30798:1;30790:6;30786:14;30779:58;30871:7;30866:2;30858:6;30854:15;30847:32;30662:224;:::o;30892:366::-;31034:3;31055:67;31119:2;31114:3;31055:67;:::i;:::-;31048:74;;31131:93;31220:3;31131:93;:::i;:::-;31249:2;31244:3;31240:12;31233:19;;30892:366;;;:::o;31264:419::-;31430:4;31468:2;31457:9;31453:18;31445:26;;31517:9;31511:4;31507:20;31503:1;31492:9;31488:17;31481:47;31545:131;31671:4;31545:131;:::i;:::-;31537:139;;31264:419;;;:::o;31689:222::-;31829:34;31825:1;31817:6;31813:14;31806:58;31898:5;31893:2;31885:6;31881:15;31874:30;31689:222;:::o;31917:366::-;32059:3;32080:67;32144:2;32139:3;32080:67;:::i;:::-;32073:74;;32156:93;32245:3;32156:93;:::i;:::-;32274:2;32269:3;32265:12;32258:19;;31917:366;;;:::o;32289:419::-;32455:4;32493:2;32482:9;32478:18;32470:26;;32542:9;32536:4;32532:20;32528:1;32517:9;32513:17;32506:47;32570:131;32696:4;32570:131;:::i;:::-;32562:139;;32289:419;;;:::o;32714:228::-;32854:34;32850:1;32842:6;32838:14;32831:58;32923:11;32918:2;32910:6;32906:15;32899:36;32714:228;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:177::-;33885:29;33881:1;33873:6;33869:14;33862:53;33745:177;:::o;33928:366::-;34070:3;34091:67;34155:2;34150:3;34091:67;:::i;:::-;34084:74;;34167:93;34256:3;34167:93;:::i;:::-;34285:2;34280:3;34276:12;34269:19;;33928:366;;;:::o;34300:419::-;34466:4;34504:2;34493:9;34489:18;34481:26;;34553:9;34547:4;34543:20;34539:1;34528:9;34524:17;34517:47;34581:131;34707:4;34581:131;:::i;:::-;34573:139;;34300:419;;;:::o;34725:176::-;34865:28;34861:1;34853:6;34849:14;34842:52;34725:176;:::o;34907:366::-;35049:3;35070:67;35134:2;35129:3;35070:67;:::i;:::-;35063:74;;35146:93;35235:3;35146:93;:::i;:::-;35264:2;35259:3;35255:12;35248:19;;34907:366;;;:::o;35279:419::-;35445:4;35483:2;35472:9;35468:18;35460:26;;35532:9;35526:4;35522:20;35518:1;35507:9;35503:17;35496:47;35560:131;35686:4;35560:131;:::i;:::-;35552:139;;35279:419;;;:::o;35704:233::-;35743:3;35766:24;35784:5;35766:24;:::i;:::-;35757:33;;35812:66;35805:5;35802:77;35799:103;;35882:18;;:::i;:::-;35799:103;35929:1;35922:5;35918:13;35911:20;;35704:233;;;:::o;35943:180::-;35991:77;35988:1;35981:88;36088:4;36085:1;36078:15;36112:4;36109:1;36102:15;36129:114;36196:6;36230:5;36224:12;36214:22;;36129:114;;;:::o;36249:184::-;36348:11;36382:6;36377:3;36370:19;36422:4;36417:3;36413:14;36398:29;;36249:184;;;;:::o;36439:132::-;36506:4;36529:3;36521:11;;36559:4;36554:3;36550:14;36542:22;;36439:132;;;:::o;36577:108::-;36654:24;36672:5;36654:24;:::i;:::-;36649:3;36642:37;36577:108;;:::o;36691:179::-;36760:10;36781:46;36823:3;36815:6;36781:46;:::i;:::-;36859:4;36854:3;36850:14;36836:28;;36691:179;;;;:::o;36876:113::-;36946:4;36978;36973:3;36969:14;36961:22;;36876:113;;;:::o;37025:732::-;37144:3;37173:54;37221:5;37173:54;:::i;:::-;37243:86;37322:6;37317:3;37243:86;:::i;:::-;37236:93;;37353:56;37403:5;37353:56;:::i;:::-;37432:7;37463:1;37448:284;37473:6;37470:1;37467:13;37448:284;;;37549:6;37543:13;37576:63;37635:3;37620:13;37576:63;:::i;:::-;37569:70;;37662:60;37715:6;37662:60;:::i;:::-;37652:70;;37508:224;37495:1;37492;37488:9;37483:14;;37448:284;;;37452:14;37748:3;37741:10;;37149:608;;;37025:732;;;;:::o;37763:831::-;38026:4;38064:3;38053:9;38049:19;38041:27;;38078:71;38146:1;38135:9;38131:17;38122:6;38078:71;:::i;:::-;38159:80;38235:2;38224:9;38220:18;38211:6;38159:80;:::i;:::-;38286:9;38280:4;38276:20;38271:2;38260:9;38256:18;38249:48;38314:108;38417:4;38408:6;38314:108;:::i;:::-;38306:116;;38432:72;38500:2;38489:9;38485:18;38476:6;38432:72;:::i;:::-;38514:73;38582:3;38571:9;38567:19;38558:6;38514:73;:::i;:::-;37763:831;;;;;;;;:::o;38600:147::-;38701:11;38738:3;38723:18;;38600:147;;;;:::o;38753:114::-;;:::o;38873:398::-;39032:3;39053:83;39134:1;39129:3;39053:83;:::i;:::-;39046:90;;39145:93;39234:3;39145:93;:::i;:::-;39263:1;39258:3;39254:11;39247:18;;38873:398;;;:::o;39277:379::-;39461:3;39483:147;39626:3;39483:147;:::i;:::-;39476:154;;39647:3;39640:10;;39277:379;;;:::o;39662:225::-;39802:34;39798:1;39790:6;39786:14;39779:58;39871:8;39866:2;39858:6;39854:15;39847:33;39662:225;:::o;39893:366::-;40035:3;40056:67;40120:2;40115:3;40056:67;:::i;:::-;40049:74;;40132:93;40221:3;40132:93;:::i;:::-;40250:2;40245:3;40241:12;40234:19;;39893:366;;;:::o;40265:419::-;40431:4;40469:2;40458:9;40454:18;40446:26;;40518:9;40512:4;40508:20;40504:1;40493:9;40489:17;40482:47;40546:131;40672:4;40546:131;:::i;:::-;40538:139;;40265:419;;;:::o;40690:194::-;40730:4;40750:20;40768:1;40750:20;:::i;:::-;40745:25;;40784:20;40802:1;40784:20;:::i;:::-;40779:25;;40828:1;40825;40821:9;40813:17;;40852:1;40846:4;40843:11;40840:37;;;40857:18;;:::i;:::-;40840:37;40690:194;;;;:::o

Swarm Source

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