ETH Price: $3,101.57 (+0.44%)

Token

Matt Furie‘s O’Hare (OHARE)
 

Overview

Max Total Supply

100,000,000 OHARE

Holders

738

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000002 OHARE

Value
$0.00
0x61f705701d2207572cda7cf324995c5a1f600dc9
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:
OHARE

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-05
*/

/*
SPDX-License-Identifier: UNLICENSE
*/

// https://t.me/ohareportal

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 OHARE 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 = 25;
    uint256 private sellFee = 25;
    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(unicode"Matt Furie‘s O’Hare", "OHARE") {
        uint256 _totalSupply = 100_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 1) / 10000;
        _swapbackMax = (_totalSupply * 200) / 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 openTrading() 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":"openTrading","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"}]

60806040526019600a556019600b556017600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff02191690831515021790555034801562000057575f80fd5b506040518060400160405280601781526020017f4d617474204675726965e2809873204fe28099486172650000000000000000008152506040518060400160405280600581526020017f4f484152450000000000000000000000000000000000000000000000000000008152508160039081620000d5919062000865565b508060049081620000e7919062000865565b5050506200010a620000fe6200039560201b60201c565b6200039c60201b60201c565b5f6a52b7d2dcc80cd2e400000090506103e86014826200012b919062000976565b620001379190620009ed565b600e819055506103e86014826200014f919062000976565b6200015b9190620009ed565b600f8190555061271060018262000173919062000976565b6200017f9190620009ed565b60108190555061271060c88262000197919062000976565b620001a39190620009ed565b601181905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f620002536200045f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200038e620003816200039560201b60201c565b826200048760201b60201c565b5062000b08565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ef9062000a82565b60405180910390fd5b6200050b5f8383620005f760201b60201c565b8060025f8282546200051e919062000aa2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000572919062000aa2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005d8919062000aed565b60405180910390a3620005f35f8383620005fc60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067d57607f821691505b60208210810362000693576200069262000638565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ba565b620007038683620006ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200074d6200074762000741846200071b565b62000724565b6200071b565b9050919050565b5f819050919050565b62000768836200072d565b62000780620007778262000754565b848454620006c6565b825550505050565b5f90565b6200079662000788565b620007a38184846200075d565b505050565b5b81811015620007ca57620007be5f826200078c565b600181019050620007a9565b5050565b601f8211156200081957620007e38162000699565b620007ee84620006ab565b81016020851015620007fe578190505b620008166200080d85620006ab565b830182620007a8565b50505b505050565b5f82821c905092915050565b5f6200083b5f19846008026200081e565b1980831691505092915050565b5f6200085583836200082a565b9150826002028217905092915050565b620008708262000601565b67ffffffffffffffff8111156200088c576200088b6200060b565b5b62000898825462000665565b620008a5828285620007ce565b5f60209050601f831160018114620008db575f8415620008c6578287015190505b620008d2858262000848565b86555062000941565b601f198416620008eb8662000699565b5f5b828110156200091457848901518255600182019150602085019450602081019050620008ed565b8683101562000934578489015162000930601f8916826200082a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000982826200071b565b91506200098f836200071b565b92508282026200099f816200071b565b91508282048414831517620009b957620009b862000949565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009f9826200071b565b915062000a06836200071b565b92508262000a195762000a18620009c0565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a6a601f8362000a24565b915062000a778262000a34565b602082019050919050565b5f6020820190508181035f83015262000a9b8162000a5c565b9050919050565b5f62000aae826200071b565b915062000abb836200071b565b925082820190508082111562000ad65762000ad562000949565b5b92915050565b62000ae7816200071b565b82525050565b5f60208201905062000b025f83018462000adc565b92915050565b6142aa8062000b165f395ff3fe60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063c9567bf9146105ab578063dd62ed3e146105c1578063f2fde38b146105fd576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e47565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612f0f565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f89565b6107ba565b60405161022f9190612fe1565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612ffa565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b6040516102819190613034565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130d8565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e99190613135565b610b0f565b6040516102fb9190612fe1565b60405180910390f35b34801561030f575f80fd5b5061032a60048036038101906103259190613185565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131de565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f89565b610d16565b6040516103899190612fe1565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612ffa565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e47565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131f7565b611144565b60405161042b9190613034565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613231565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612f0f565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f89565b6113c2565b6040516104e79190612fe1565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f89565b6114a8565b6040516105239190612fe1565b60405180910390f35b348015610537575f80fd5b506105406114c5565b6040516105529695949392919061324a565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132e4565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131f7565b6115e7565b005b3480156105b6575f80fd5b506105bf61178d565b005b3480156105cc575f80fd5b506105e760048036038101906105e2919061330f565b611d42565b6040516105f49190613034565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e91906131f7565b611dc4565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890613397565b60405180910390fd5b612710826106ad6108f9565b6106b791906133e2565b6106c19190613450565b601081905550612710816106d36108f9565b6106dd91906133e2565b6106e79190613450565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613480565b60405180910390a15050565b606060038054610739906134d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134d4565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a90613397565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613574565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133e2565b6108b79190613450565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee9190613034565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590613397565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a1613592565b5b90506020020160208101906109b791906131f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613609565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890613697565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613397565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d029291906136b5565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136dc565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613397565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613759565b60405180910390fd5b6103e881610e896108f9565b610e9391906133e2565b610e9d9190613450565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed49190613034565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613397565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906137c1565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613829565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613480565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613397565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc9190613034565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a9190613034565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613397565b60405180910390fd5b61120e5f612741565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613609565b60405180910390fd5b5f61130e30611144565b905061131981612804565b5f4790505f81111561132e5761132d612a97565b5b5050565b606060048054611341906134d4565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134d4565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906138b7565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613397565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613930565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613609565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613231565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c919061395d565b6040518363ffffffff1660e01b8152600401611749929190613988565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906139c3565b5050565b611795611eba565b73ffffffffffffffffffffffffffffffffffffffff166117b3611210565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090613397565b60405180910390fd5b601360149054906101000a900460ff1615611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613a38565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118e03060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118db6108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196e9190613a6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a189190613a6a565b6040518363ffffffff1660e01b8152600401611a35929190613a95565b6020604051808303815f875af1158015611a51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a759190613a6a565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611afc30611144565b5f80611b06611210565b426040518863ffffffff1660e01b8152600401611b2896959493929190613af5565b60606040518083038185885af1158015611b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b699190613b54565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c09929190613ba4565b6020604051808303815f875af1158015611c25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4991906139c3565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611dcc611eba565b73ffffffffffffffffffffffffffffffffffffffff16611dea611210565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613397565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613c3b565b60405180910390fd5b611eb781612741565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613cc9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d57565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120779190613034565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613de5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e73565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613f01565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b1561270a5761225f6064612251600a5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244057600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f69565b60405180910390fd5b600f54826123b485611144565b6123be91906136dc565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fd1565b60405180910390fd5b43600360085461240f91906136dc565b11156124285761241e83612b4f565b15612427575f80fd5b5b600d5f81548092919061243a90613fef565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e4575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561254257600f54826124f685611144565b61250091906136dc565b1115612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613fd1565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125ca57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125fa576125f760646125e9600b5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b90505b5f61260430611144565b9050601360159054906101000a900460ff1615801561266f575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126875750601360169054906101000a900460ff165b8015612694575060105481115b80156126a35750600c54600d54115b80156126d857504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612708576126f16126ec82601154612b60565b612804565b5f4790505f81111561270657612705612a97565b5b505b505b5f81111561271e5761271d843083612b78565b5b61273b84846127368486612ded90919063ffffffff16565b612b78565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561286357612862614036565b5b6040519080825280602002602001820160405280156128915781602001602082028036833780820191505090505b50905030815f815181106128a8576128a7613592565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129709190613a6a565b8160018151811061298457612983613592565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ea3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a4c95949392919061411a565b5f604051808303815f87803b158015612a63575f80fd5b505af1158015612a75573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612add9061419f565b5f6040518083038185875af1925050503d805f8114612b17576040519150601f19603f3d011682016040523d82523d5f602084013e612b1c565b606091505b50508091505050565b5f8183612b3291906133e2565b905092915050565b5f8183612b479190613450565b905092915050565b5f80823b90505f8111915050919050565b5f818311612b6e5782612b70565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd90613de5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90613e73565b60405180910390fd5b612c5f838383612e02565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614223565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d7091906136dc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd49190613034565b60405180910390a3612de7848484612e07565b50505050565b5f8183612dfa9190614241565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612e2681612e14565b8114612e30575f80fd5b50565b5f81359050612e4181612e1d565b92915050565b5f8060408385031215612e5d57612e5c612e0c565b5b5f612e6a85828601612e33565b9250506020612e7b85828601612e33565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612ebc578082015181840152602081019050612ea1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612ee182612e85565b612eeb8185612e8f565b9350612efb818560208601612e9f565b612f0481612ec7565b840191505092915050565b5f6020820190508181035f830152612f278184612ed7565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f5882612f2f565b9050919050565b612f6881612f4e565b8114612f72575f80fd5b50565b5f81359050612f8381612f5f565b92915050565b5f8060408385031215612f9f57612f9e612e0c565b5b5f612fac85828601612f75565b9250506020612fbd85828601612e33565b9150509250929050565b5f8115159050919050565b612fdb81612fc7565b82525050565b5f602082019050612ff45f830184612fd2565b92915050565b5f6020828403121561300f5761300e612e0c565b5b5f61301c84828501612e33565b91505092915050565b61302e81612e14565b82525050565b5f6020820190506130475f830184613025565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261306e5761306d61304d565b5b8235905067ffffffffffffffff81111561308b5761308a613051565b5b6020830191508360208202830111156130a7576130a6613055565b5b9250929050565b6130b781612fc7565b81146130c1575f80fd5b50565b5f813590506130d2816130ae565b92915050565b5f805f604084860312156130ef576130ee612e0c565b5b5f84013567ffffffffffffffff81111561310c5761310b612e10565b5b61311886828701613059565b9350935050602061312b868287016130c4565b9150509250925092565b5f805f6060848603121561314c5761314b612e0c565b5b5f61315986828701612f75565b935050602061316a86828701612f75565b925050604061317b86828701612e33565b9150509250925092565b5f806040838503121561319b5761319a612e0c565b5b5f6131a885828601612f75565b92505060206131b9858286016130c4565b9150509250929050565b5f60ff82169050919050565b6131d8816131c3565b82525050565b5f6020820190506131f15f8301846131cf565b92915050565b5f6020828403121561320c5761320b612e0c565b5b5f61321984828501612f75565b91505092915050565b61322b81612f4e565b82525050565b5f6020820190506132445f830184613222565b92915050565b5f60c08201905061325d5f830189613025565b61326a6020830188613025565b6132776040830187613025565b6132846060830186613025565b6132916080830185613025565b61329e60a0830184613025565b979650505050505050565b5f6132b382612f2f565b9050919050565b6132c3816132a9565b81146132cd575f80fd5b50565b5f813590506132de816132ba565b92915050565b5f602082840312156132f9576132f8612e0c565b5b5f613306848285016132d0565b91505092915050565b5f806040838503121561332557613324612e0c565b5b5f61333285828601612f75565b925050602061334385828601612f75565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613381602083612e8f565b915061338c8261334d565b602082019050919050565b5f6020820190508181035f8301526133ae81613375565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133ec82612e14565b91506133f783612e14565b925082820261340581612e14565b9150828204841483151761341c5761341b6133b5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61345a82612e14565b915061346583612e14565b92508261347557613474613423565b5b828204905092915050565b5f6040820190506134935f830185613025565b6134a06020830184613025565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134eb57607f821691505b6020821081036134fe576134fd6134a7565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61355e602283612e8f565b915061356982613504565b604082019050919050565b5f6020820190508181035f83015261358b81613552565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135f3601d83612e8f565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613681602883612e8f565b915061368c82613627565b604082019050919050565b5f6020820190508181035f8301526136ae81613675565b9050919050565b5f6040820190506136c85f830185613222565b6136d56020830184612fd2565b9392505050565b5f6136e682612e14565b91506136f183612e14565b9250828201905080821115613709576137086133b5565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f613743601e83612e8f565b915061374e8261370f565b602082019050919050565b5f6020820190508181035f83015261377081613737565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f6137ab601583612e8f565b91506137b682613777565b602082019050919050565b5f6020820190508181035f8301526137d88161379f565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f613813601683612e8f565b915061381e826137df565b602082019050919050565b5f6020820190508181035f83015261384081613807565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6138a1602583612e8f565b91506138ac82613847565b604082019050919050565b5f6020820190508181035f8301526138ce81613895565b9050919050565b5f819050919050565b5f6138f86138f36138ee84612f2f565b6138d5565b612f2f565b9050919050565b5f613909826138de565b9050919050565b5f61391a826138ff565b9050919050565b61392a81613910565b82525050565b5f6020820190506139435f830184613921565b92915050565b5f8151905061395781612e1d565b92915050565b5f6020828403121561397257613971612e0c565b5b5f61397f84828501613949565b91505092915050565b5f60408201905061399b5f830185613921565b6139a86020830184613025565b9392505050565b5f815190506139bd816130ae565b92915050565b5f602082840312156139d8576139d7612e0c565b5b5f6139e5848285016139af565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a22601783612e8f565b9150613a2d826139ee565b602082019050919050565b5f6020820190508181035f830152613a4f81613a16565b9050919050565b5f81519050613a6481612f5f565b92915050565b5f60208284031215613a7f57613a7e612e0c565b5b5f613a8c84828501613a56565b91505092915050565b5f604082019050613aa85f830185613222565b613ab56020830184613222565b9392505050565b5f819050919050565b5f613adf613ada613ad584613abc565b6138d5565b612e14565b9050919050565b613aef81613ac5565b82525050565b5f60c082019050613b085f830189613222565b613b156020830188613025565b613b226040830187613ae6565b613b2f6060830186613ae6565b613b3c6080830185613222565b613b4960a0830184613025565b979650505050505050565b5f805f60608486031215613b6b57613b6a612e0c565b5b5f613b7886828701613949565b9350506020613b8986828701613949565b9250506040613b9a86828701613949565b9150509250925092565b5f604082019050613bb75f830185613222565b613bc46020830184613025565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c25602683612e8f565b9150613c3082613bcb565b604082019050919050565b5f6020820190508181035f830152613c5281613c19565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cb3602483612e8f565b9150613cbe82613c59565b604082019050919050565b5f6020820190508181035f830152613ce081613ca7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d41602283612e8f565b9150613d4c82613ce7565b604082019050919050565b5f6020820190508181035f830152613d6e81613d35565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613dcf602583612e8f565b9150613dda82613d75565b604082019050919050565b5f6020820190508181035f830152613dfc81613dc3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e5d602383612e8f565b9150613e6882613e03565b604082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613eeb602983612e8f565b9150613ef682613e91565b604082019050919050565b5f6020820190508181035f830152613f1881613edf565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f53601b83612e8f565b9150613f5e82613f1f565b602082019050919050565b5f6020820190508181035f830152613f8081613f47565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613fbb601a83612e8f565b9150613fc682613f87565b602082019050919050565b5f6020820190508181035f830152613fe881613faf565b9050919050565b5f613ff982612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361402b5761402a6133b5565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61409581612f4e565b82525050565b5f6140a6838361408c565b60208301905092915050565b5f602082019050919050565b5f6140c882614063565b6140d2818561406d565b93506140dd8361407d565b805f5b8381101561410d5781516140f4888261409b565b97506140ff836140b2565b9250506001810190506140e0565b5085935050505092915050565b5f60a08201905061412d5f830188613025565b61413a6020830187613ae6565b818103604083015261414c81866140be565b905061415b6060830185613222565b6141686080830184613025565b9695505050505050565b5f81905092915050565b50565b5f61418a5f83614172565b91506141958261417c565b5f82019050919050565b5f6141a98261417f565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61420d602683612e8f565b9150614218826141b3565b604082019050919050565b5f6020820190508181035f83015261423a81614201565b9050919050565b5f61424b82612e14565b915061425683612e14565b925082820390508181111561426e5761426d6133b5565b5b9291505056fea2646970667358221220523f6f166672ed856c66d393d0c28ec34b3e3831042538630161337ee1e57c2b64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063c9567bf9146105ab578063dd62ed3e146105c1578063f2fde38b146105fd576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e47565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612f0f565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f89565b6107ba565b60405161022f9190612fe1565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612ffa565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b6040516102819190613034565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130d8565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e99190613135565b610b0f565b6040516102fb9190612fe1565b60405180910390f35b34801561030f575f80fd5b5061032a60048036038101906103259190613185565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131de565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f89565b610d16565b6040516103899190612fe1565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612ffa565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e47565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131f7565b611144565b60405161042b9190613034565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613231565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612f0f565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f89565b6113c2565b6040516104e79190612fe1565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f89565b6114a8565b6040516105239190612fe1565b60405180910390f35b348015610537575f80fd5b506105406114c5565b6040516105529695949392919061324a565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132e4565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131f7565b6115e7565b005b3480156105b6575f80fd5b506105bf61178d565b005b3480156105cc575f80fd5b506105e760048036038101906105e2919061330f565b611d42565b6040516105f49190613034565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e91906131f7565b611dc4565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890613397565b60405180910390fd5b612710826106ad6108f9565b6106b791906133e2565b6106c19190613450565b601081905550612710816106d36108f9565b6106dd91906133e2565b6106e79190613450565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613480565b60405180910390a15050565b606060038054610739906134d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134d4565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a90613397565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613574565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133e2565b6108b79190613450565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee9190613034565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590613397565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a1613592565b5b90506020020160208101906109b791906131f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613609565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890613697565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613397565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d029291906136b5565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136dc565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613397565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613759565b60405180910390fd5b6103e881610e896108f9565b610e9391906133e2565b610e9d9190613450565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed49190613034565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613397565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906137c1565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613829565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613480565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613397565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc9190613034565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a9190613034565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613397565b60405180910390fd5b61120e5f612741565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613609565b60405180910390fd5b5f61130e30611144565b905061131981612804565b5f4790505f81111561132e5761132d612a97565b5b5050565b606060048054611341906134d4565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134d4565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906138b7565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613397565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613930565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613609565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613231565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c919061395d565b6040518363ffffffff1660e01b8152600401611749929190613988565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906139c3565b5050565b611795611eba565b73ffffffffffffffffffffffffffffffffffffffff166117b3611210565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090613397565b60405180910390fd5b601360149054906101000a900460ff1615611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613a38565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118e03060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118db6108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196e9190613a6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a189190613a6a565b6040518363ffffffff1660e01b8152600401611a35929190613a95565b6020604051808303815f875af1158015611a51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a759190613a6a565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611afc30611144565b5f80611b06611210565b426040518863ffffffff1660e01b8152600401611b2896959493929190613af5565b60606040518083038185885af1158015611b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b699190613b54565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c09929190613ba4565b6020604051808303815f875af1158015611c25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4991906139c3565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611dcc611eba565b73ffffffffffffffffffffffffffffffffffffffff16611dea611210565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613397565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613c3b565b60405180910390fd5b611eb781612741565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613cc9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d57565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120779190613034565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613de5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e73565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613f01565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b1561270a5761225f6064612251600a5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244057600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f69565b60405180910390fd5b600f54826123b485611144565b6123be91906136dc565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fd1565b60405180910390fd5b43600360085461240f91906136dc565b11156124285761241e83612b4f565b15612427575f80fd5b5b600d5f81548092919061243a90613fef565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e4575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561254257600f54826124f685611144565b61250091906136dc565b1115612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613fd1565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125ca57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125fa576125f760646125e9600b5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b90505b5f61260430611144565b9050601360159054906101000a900460ff1615801561266f575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126875750601360169054906101000a900460ff165b8015612694575060105481115b80156126a35750600c54600d54115b80156126d857504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612708576126f16126ec82601154612b60565b612804565b5f4790505f81111561270657612705612a97565b5b505b505b5f81111561271e5761271d843083612b78565b5b61273b84846127368486612ded90919063ffffffff16565b612b78565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561286357612862614036565b5b6040519080825280602002602001820160405280156128915781602001602082028036833780820191505090505b50905030815f815181106128a8576128a7613592565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129709190613a6a565b8160018151811061298457612983613592565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ea3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a4c95949392919061411a565b5f604051808303815f87803b158015612a63575f80fd5b505af1158015612a75573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612add9061419f565b5f6040518083038185875af1925050503d805f8114612b17576040519150601f19603f3d011682016040523d82523d5f602084013e612b1c565b606091505b50508091505050565b5f8183612b3291906133e2565b905092915050565b5f8183612b479190613450565b905092915050565b5f80823b90505f8111915050919050565b5f818311612b6e5782612b70565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd90613de5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90613e73565b60405180910390fd5b612c5f838383612e02565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614223565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d7091906136dc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd49190613034565b60405180910390a3612de7848484612e07565b50505050565b5f8183612dfa9190614241565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612e2681612e14565b8114612e30575f80fd5b50565b5f81359050612e4181612e1d565b92915050565b5f8060408385031215612e5d57612e5c612e0c565b5b5f612e6a85828601612e33565b9250506020612e7b85828601612e33565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612ebc578082015181840152602081019050612ea1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612ee182612e85565b612eeb8185612e8f565b9350612efb818560208601612e9f565b612f0481612ec7565b840191505092915050565b5f6020820190508181035f830152612f278184612ed7565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f5882612f2f565b9050919050565b612f6881612f4e565b8114612f72575f80fd5b50565b5f81359050612f8381612f5f565b92915050565b5f8060408385031215612f9f57612f9e612e0c565b5b5f612fac85828601612f75565b9250506020612fbd85828601612e33565b9150509250929050565b5f8115159050919050565b612fdb81612fc7565b82525050565b5f602082019050612ff45f830184612fd2565b92915050565b5f6020828403121561300f5761300e612e0c565b5b5f61301c84828501612e33565b91505092915050565b61302e81612e14565b82525050565b5f6020820190506130475f830184613025565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261306e5761306d61304d565b5b8235905067ffffffffffffffff81111561308b5761308a613051565b5b6020830191508360208202830111156130a7576130a6613055565b5b9250929050565b6130b781612fc7565b81146130c1575f80fd5b50565b5f813590506130d2816130ae565b92915050565b5f805f604084860312156130ef576130ee612e0c565b5b5f84013567ffffffffffffffff81111561310c5761310b612e10565b5b61311886828701613059565b9350935050602061312b868287016130c4565b9150509250925092565b5f805f6060848603121561314c5761314b612e0c565b5b5f61315986828701612f75565b935050602061316a86828701612f75565b925050604061317b86828701612e33565b9150509250925092565b5f806040838503121561319b5761319a612e0c565b5b5f6131a885828601612f75565b92505060206131b9858286016130c4565b9150509250929050565b5f60ff82169050919050565b6131d8816131c3565b82525050565b5f6020820190506131f15f8301846131cf565b92915050565b5f6020828403121561320c5761320b612e0c565b5b5f61321984828501612f75565b91505092915050565b61322b81612f4e565b82525050565b5f6020820190506132445f830184613222565b92915050565b5f60c08201905061325d5f830189613025565b61326a6020830188613025565b6132776040830187613025565b6132846060830186613025565b6132916080830185613025565b61329e60a0830184613025565b979650505050505050565b5f6132b382612f2f565b9050919050565b6132c3816132a9565b81146132cd575f80fd5b50565b5f813590506132de816132ba565b92915050565b5f602082840312156132f9576132f8612e0c565b5b5f613306848285016132d0565b91505092915050565b5f806040838503121561332557613324612e0c565b5b5f61333285828601612f75565b925050602061334385828601612f75565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613381602083612e8f565b915061338c8261334d565b602082019050919050565b5f6020820190508181035f8301526133ae81613375565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133ec82612e14565b91506133f783612e14565b925082820261340581612e14565b9150828204841483151761341c5761341b6133b5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61345a82612e14565b915061346583612e14565b92508261347557613474613423565b5b828204905092915050565b5f6040820190506134935f830185613025565b6134a06020830184613025565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134eb57607f821691505b6020821081036134fe576134fd6134a7565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61355e602283612e8f565b915061356982613504565b604082019050919050565b5f6020820190508181035f83015261358b81613552565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135f3601d83612e8f565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613681602883612e8f565b915061368c82613627565b604082019050919050565b5f6020820190508181035f8301526136ae81613675565b9050919050565b5f6040820190506136c85f830185613222565b6136d56020830184612fd2565b9392505050565b5f6136e682612e14565b91506136f183612e14565b9250828201905080821115613709576137086133b5565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f613743601e83612e8f565b915061374e8261370f565b602082019050919050565b5f6020820190508181035f83015261377081613737565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f6137ab601583612e8f565b91506137b682613777565b602082019050919050565b5f6020820190508181035f8301526137d88161379f565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f613813601683612e8f565b915061381e826137df565b602082019050919050565b5f6020820190508181035f83015261384081613807565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6138a1602583612e8f565b91506138ac82613847565b604082019050919050565b5f6020820190508181035f8301526138ce81613895565b9050919050565b5f819050919050565b5f6138f86138f36138ee84612f2f565b6138d5565b612f2f565b9050919050565b5f613909826138de565b9050919050565b5f61391a826138ff565b9050919050565b61392a81613910565b82525050565b5f6020820190506139435f830184613921565b92915050565b5f8151905061395781612e1d565b92915050565b5f6020828403121561397257613971612e0c565b5b5f61397f84828501613949565b91505092915050565b5f60408201905061399b5f830185613921565b6139a86020830184613025565b9392505050565b5f815190506139bd816130ae565b92915050565b5f602082840312156139d8576139d7612e0c565b5b5f6139e5848285016139af565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a22601783612e8f565b9150613a2d826139ee565b602082019050919050565b5f6020820190508181035f830152613a4f81613a16565b9050919050565b5f81519050613a6481612f5f565b92915050565b5f60208284031215613a7f57613a7e612e0c565b5b5f613a8c84828501613a56565b91505092915050565b5f604082019050613aa85f830185613222565b613ab56020830184613222565b9392505050565b5f819050919050565b5f613adf613ada613ad584613abc565b6138d5565b612e14565b9050919050565b613aef81613ac5565b82525050565b5f60c082019050613b085f830189613222565b613b156020830188613025565b613b226040830187613ae6565b613b2f6060830186613ae6565b613b3c6080830185613222565b613b4960a0830184613025565b979650505050505050565b5f805f60608486031215613b6b57613b6a612e0c565b5b5f613b7886828701613949565b9350506020613b8986828701613949565b9250506040613b9a86828701613949565b9150509250925092565b5f604082019050613bb75f830185613222565b613bc46020830184613025565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c25602683612e8f565b9150613c3082613bcb565b604082019050919050565b5f6020820190508181035f830152613c5281613c19565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cb3602483612e8f565b9150613cbe82613c59565b604082019050919050565b5f6020820190508181035f830152613ce081613ca7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d41602283612e8f565b9150613d4c82613ce7565b604082019050919050565b5f6020820190508181035f830152613d6e81613d35565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613dcf602583612e8f565b9150613dda82613d75565b604082019050919050565b5f6020820190508181035f830152613dfc81613dc3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e5d602383612e8f565b9150613e6882613e03565b604082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613eeb602983612e8f565b9150613ef682613e91565b604082019050919050565b5f6020820190508181035f830152613f1881613edf565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f53601b83612e8f565b9150613f5e82613f1f565b602082019050919050565b5f6020820190508181035f830152613f8081613f47565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613fbb601a83612e8f565b9150613fc682613f87565b602082019050919050565b5f6020820190508181035f830152613fe881613faf565b9050919050565b5f613ff982612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361402b5761402a6133b5565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61409581612f4e565b82525050565b5f6140a6838361408c565b60208301905092915050565b5f602082019050919050565b5f6140c882614063565b6140d2818561406d565b93506140dd8361407d565b805f5b8381101561410d5781516140f4888261409b565b97506140ff836140b2565b9250506001810190506140e0565b5085935050505092915050565b5f60a08201905061412d5f830188613025565b61413a6020830187613ae6565b818103604083015261414c81866140be565b905061415b6060830185613222565b6141686080830184613025565b9695505050505050565b5f81905092915050565b50565b5f61418a5f83614172565b91506141958261417c565b5f82019050919050565b5f6141a98261417f565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61420d602683612e8f565b9150614218826141b3565b604082019050919050565b5f6020820190508181035f83015261423a81614201565b9050919050565b5f61424b82612e14565b915061425683612e14565b925082820390508181111561426e5761426d6133b5565b5b9291505056fea2646970667358221220523f6f166672ed856c66d393d0c28ec34b3e3831042538630161337ee1e57c2b64736f6c63430008170033

Deployed Bytecode Sourcemap

25355:9609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29024:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13186:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28758:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12073:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30308:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29890:168;;;;;;;;;;;;;:::i;:::-;;13858:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30533:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11915:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14792:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28512:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29592:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29348:236;;;;;;;;;;;;;:::i;:::-;;12244:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22292:103;;;;;;;;;;;;;:::i;:::-;;21641:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33807:436;;;;;;;;;;;;;:::i;:::-;;11172:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15581:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12600:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30712:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28336:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30068:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27297:1031;;;;;;;;;;;;;:::i;:::-;;12863:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22550:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29024:310;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29198:5:::1;29178:16;29162:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29161:42;;;;:::i;:::-;29146:12;:57;;;;29260:5;29246:10;29230:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29229:36;;;;:::i;:::-;29214:12;:51;;;;29281:45;29297:16;29315:10;29281:45;;;;;;;:::i;:::-;;;;;;;;29024:310:::0;;:::o;10953:100::-;11007:13;11040:5;11033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10953:100;:::o;13186:194::-;13294:4;13311:39;13320:12;:10;:12::i;:::-;13334:7;13343:6;13311:8;:39::i;:::-;13368:4;13361:11;;13186:194;;;;:::o;28758:258::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28845:1:::1;28833:8;:13;;28825:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28946:4;28934:8;28918:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28917:33;;;;:::i;:::-;28896:18;:54;;;;28966:42;28989:18;;28966:42;;;;;;:::i;:::-;;;;;;;;28758:258:::0;:::o;12073:108::-;12134:7;12161:12;;12154:19;;12073:108;:::o;30308:217::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30426:9:::1;30421:97;30445:6;;:13;;30441:1;:17;30421:97;;;30500:6;30480;:17;30487:6;;30494:1;30487:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30480:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30460:3;;;;;;;30421:97;;;;30308:217:::0;;;:::o;29890:168::-;29953:10;;;;;;;;;;;29939:24;;:10;:24;;;29931:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30008:10;;;;;;;;;;;:19;;:42;30028:21;30008:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29890:168::o;13858:529::-;13998:4;14015:36;14025:6;14033:9;14044:6;14015:9;:36::i;:::-;14064:24;14091:11;:19;14103:6;14091:19;;;;;;;;;;;;;;;:33;14111:12;:10;:12::i;:::-;14091:33;;;;;;;;;;;;;;;;14064:60;;14177:6;14157:16;:26;;14135:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14287:57;14296:6;14304:12;:10;:12::i;:::-;14337:6;14318:16;:25;14287:8;:57::i;:::-;14375:4;14368:11;;;13858:529;;;;;:::o;30533:171::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:6:::1;30612:18;:27;30631:7;30612:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30664:32;30680:7;30689:6;30664:32;;;;;;;:::i;:::-;;;;;;;;30533:171:::0;;:::o;11915:93::-;11973:5;11998:2;11991:9;;11915:93;:::o;14792:290::-;14905:4;14922:130;14945:12;:10;:12::i;:::-;14972:7;15031:10;14994:11;:25;15006:12;:10;:12::i;:::-;14994:25;;;;;;;;;;;;;;;:34;15020:7;14994:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14922:8;:130::i;:::-;15070:4;15063:11;;14792:290;;;;:::o;28512:238::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28595:1:::1;28583:8;:13;;28575:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28688:4;28676:8;28660:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28659:33;;;;:::i;:::-;28642:14;:50;;;;28708:34;28727:14;;28708:34;;;;;;:::i;:::-;;;;;;;;28512:238:::0;:::o;29592:290::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29689:2:::1;29679:6;:12;;29671:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29747:2;29736:7;:13;;29728:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29796:6;29787;:15;;;;29823:7;29813;:17;;;;29846:28;29858:6;29866:7;29846:28;;;;;;;:::i;:::-;;;;;;;;29592:290:::0;;:::o;29348:236::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29416:13:::1;:11;:13::i;:::-;29399:14;:30;;;;29461:13;:11;:13::i;:::-;29440:18;:34;;;;29490:33;29509:13;:11;:13::i;:::-;29490:33;;;;;;:::i;:::-;;;;;;;;29539:37;29562:13;:11;:13::i;:::-;29539:37;;;;;;:::i;:::-;;;;;;;;29348:236::o:0;12244:143::-;12334:7;12361:9;:18;12371:7;12361:18;;;;;;;;;;;;;;;;12354:25;;12244:143;;;:::o;22292:103::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22357:30:::1;22384:1;22357:18;:30::i;:::-;22292:103::o:0;21641:87::-;21687:7;21714:6;;;;;;;;;;;21707:13;;21641:87;:::o;33807:436::-;33886:10;;;;;;;;;;;33872:24;;:10;:24;;;:49;;;;33914:7;:5;:7::i;:::-;33900:21;;:10;:21;;;33872:49;33850:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33989:28;34020:24;34038:4;34020:9;:24::i;:::-;33989:55;;34057:38;34074:20;34057:16;:38::i;:::-;34106:26;34135:21;34106:50;;34192:1;34171:18;:22;34167:69;;;34210:14;:12;:14::i;:::-;34167:69;33839:404;;33807:436::o;11172:104::-;11228:13;11261:7;11254:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11172:104;:::o;15581:475::-;15699:4;15716:24;15743:11;:25;15755:12;:10;:12::i;:::-;15743:25;;;;;;;;;;;;;;;:34;15769:7;15743:34;;;;;;;;;;;;;;;;15716:61;;15830:15;15810:16;:35;;15788:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15946:67;15955:12;:10;:12::i;:::-;15969:7;15997:15;15978:16;:34;15946:8;:67::i;:::-;16044:4;16037:11;;;15581:475;;;;:::o;12600:200::-;12711:4;12728:42;12738:12;:10;:12::i;:::-;12752:9;12763:6;12728:9;:42::i;:::-;12788:4;12781:11;;12600:200;;;;:::o;30712:485::-;30796:15;30826:16;30857:19;30891:21;30927:24;30966:18;31034:6;;31055:7;;31077:14;;31106:18;;31139:12;;31166;;31012:177;;;;;;;;;;;;30712:485;;;;;;:::o;28336:168::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28428:15:::1;28415:10;;:28;;;;;;;;;;;;;;;;;;28461:35;28480:15;28461:35;;;;;;:::i;:::-;;;;;;;;28336:168:::0;:::o;30068:232::-;30154:10;;;;;;;;;;;30140:24;;:10;:24;;;30132:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30216:8;30209:25;;;30235:10;;;;;;;;;;;30253:8;30246:26;;;30281:4;30246:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30209:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30068:232;:::o;27297:1031::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27359:11:::1;;;;;;;;;;;27358:12;27350:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27452:42;27409:15;;:96;;;;;;;;;;;;;;;;;;27516:64;27533:4;27548:15;;;;;;;;;;;27566:13;:11;:13::i;:::-;27516:8;:64::i;:::-;27619:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27607:49;;;27679:4;27699:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27607:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27591:13;;:141;;;;;;;;;;;;;;;;;;27743:15;;;;;;;;;;;:31;;;27782:21;27827:4;27847:24;27865:4;27847:9;:24::i;:::-;27886:1;27902::::0;27918:7:::1;:5;:7::i;:::-;27940:15;27743:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27984:13;;;;;;;;;;;27977:29;;;28015:15;;;;;;;;;;;28033:14;27977:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28073:4;28059:11;;:18;;;;;;;;;;;;;;;;;;28102:4;28088:11;;:18;;;;;;;;;;;;;;;;;;28130:12;28117:10;:25;;;;28178:12;28153:15;;:38;;;;;;;;;;;;;;;;;;28238:4;28202:18;:33;28229:4;28202:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28262:2;28253:6;:11;;;;28285:2;28275:7;:12;;;;28305:15;;;;;;;;;;27297:1031::o:0;12863:176::-;12977:7;13004:11;:18;13016:5;13004:18;;;;;;;;;;;;;;;:27;13023:7;13004:27;;;;;;;;;;;;;;;;12997:34;;12863:176;;;;:::o;22550:238::-;21872:12;:10;:12::i;:::-;21861:23;;:7;:5;:7::i;:::-;:23;;;21853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22673:1:::1;22653:22;;:8;:22;;::::0;22631:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22752:28;22771:8;22752:18;:28::i;:::-;22550:238:::0;:::o;9959:98::-;10012:7;10039:10;10032:17;;9959:98;:::o;19364:380::-;19517:1;19500:19;;:5;:19;;;19492:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19598:1;19579:21;;:7;:21;;;19571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19682:6;19652:11;:18;19664:5;19652:18;;;;;;;;;;;;;;;:27;19671:7;19652:27;;;;;;;;;;;;;;;:36;;;;19720:7;19704:32;;19713:5;19704:32;;;19729:6;19704:32;;;;;;:::i;:::-;;;;;;;;19364:380;;;:::o;31205:2276::-;31353:1;31337:18;;:4;:18;;;31329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31430:1;31416:16;;:2;:16;;;31408:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31500:1;31491:6;:10;31483:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31558:17;31602:7;:5;:7::i;:::-;31594:15;;:4;:15;;;;:32;;;;;31619:7;:5;:7::i;:::-;31613:13;;:2;:13;;;;31594:32;:43;;;;;31631:6;;;;;;;;;;;31630:7;31594:43;31590:1720;;;31666:27;31689:3;31666:18;31677:6;;31666;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31654:39;;31740:13;;;;;;;;;;;31732:21;;:4;:21;;;:72;;;;;31788:15;;;;;;;;;;;31774:30;;:2;:30;;;;31732:72;:116;;;;;31826:18;:22;31845:2;31826:22;;;;;;;;;;;;;;;;;;;;;;;;;31825:23;31732:116;31710:568;;;31901:14;;31891:6;:24;;31883:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32022:18;;32012:6;31996:13;32006:2;31996:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31966:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32152:12;32148:1;32135:10;;:14;;;;:::i;:::-;:29;32131:102;;;32198:14;32209:2;32198:10;:14::i;:::-;32197:15;32189:24;;;;;;32131:102;32251:9;;:11;;;;;;;;;:::i;:::-;;;;;;31710:568;32304:13;;;;;;;;;;;32298:19;;:2;:19;;;;:46;;;;;32322:18;:22;32341:2;32322:22;;;;;;;;;;;;;;;;;;;;;;;;;32321:23;32298:46;32294:231;;;32421:18;;32411:6;32395:13;32405:2;32395:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32365:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32294:231;32551:13;;;;;;;;;;;32545:19;;:2;:19;;;:44;;;;;32584:4;32568:21;;:4;:21;;;;32545:44;32541:125;;;32622:28;32646:3;32622:19;32633:7;;32622:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32610:40;;32541:125;32682:28;32713:24;32731:4;32713:9;:24::i;:::-;32682:55;;32775:6;;;;;;;;;;;32774:7;:47;;;;;32808:13;;;;;;;;;;;32802:19;;:2;:19;;;32774:47;:79;;;;;32842:11;;;;;;;;;;;32774:79;:135;;;;;32897:12;;32874:20;:35;32774:135;:186;;;;;32942:18;;32930:9;;:30;32774:186;:246;;;;;33007:12;32981:39;;:15;;;;;;;;;;;:39;;;;32774:246;32752:547;;;33055:56;33072:38;33076:20;33097:12;;33072:3;:38::i;:::-;33055:16;:56::i;:::-;33130:26;33159:21;33130:50;;33224:1;33203:18;:22;33199:85;;;33250:14;:12;:14::i;:::-;33199:85;33036:263;32752:547;31639:1671;31590:1720;33338:1;33326:9;:13;33322:93;;;33356:47;33372:4;33386;33393:9;33356:15;:47::i;:::-;33322:93;33425:48;33441:4;33447:2;33451:21;33462:9;33451:6;:10;;:21;;;;:::i;:::-;33425:15;:48::i;:::-;31318:2163;31205:2276;;;:::o;22948:191::-;23022:16;23041:6;;;;;;;;;;;23022:25;;23067:8;23058:6;;:17;;;;;;;;;;;;;;;;;;23122:8;23091:40;;23112:8;23091:40;;;;;;;;;;;;23011:128;22948:191;:::o;34251:532::-;26573:4;26564:6;;:13;;;;;;;;;;;;;;;;;;34354:12:::1;34329:15;;:38;;;;;;;;;;;;;;;;;;34378:21;34416:1;34402:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34378:40;;34447:4;34429;34434:1;34429:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34473:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34463:4;34468:1;34463:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34506:62;34523:4;34538:15;;;;;;;;;;;34556:11;34506:8;:62::i;:::-;34579:15;;;;;;;;;;;:66;;;34660:11;34686:1;34702:4;34729;34749:15;34579:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34318:465;26609:5:::0;26600:6;;:14;;;;;;;;;;;;;;;;;;34251:532;:::o;34791:170::-;34834:12;34879:10;;;;;;;;;;;34871:24;;34903:21;34871:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34857:96;;;;;34823:138;34791:170::o;3318:98::-;3376:7;3407:1;3403;:5;;;;:::i;:::-;3396:12;;3318:98;;;;:::o;3717:::-;3775:7;3806:1;3802;:5;;;;:::i;:::-;3795:12;;3717:98;;;;:::o;33604:195::-;33663:4;33680:12;33747:7;33735:20;33727:28;;33790:1;33783:4;:8;33776:15;;;33604:195;;;:::o;33489:107::-;33546:7;33578:1;33574;:5;33573:15;;33587:1;33573:15;;;33583:1;33573:15;33566:22;;33489:107;;;;:::o;16546:770::-;16704:1;16686:20;;:6;:20;;;16678:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16788:1;16767:23;;:9;:23;;;16759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16843:47;16864:6;16872:9;16883:6;16843:20;:47::i;:::-;16903:21;16927:9;:17;16937:6;16927:17;;;;;;;;;;;;;;;;16903:41;;16994:6;16977:13;:23;;16955:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17138:6;17122:13;:22;17102:9;:17;17112:6;17102:17;;;;;;;;;;;;;;;:42;;;;17190:6;17166:9;:20;17176:9;17166:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17231:9;17214:35;;17223:6;17214:35;;;17242:6;17214:35;;;;;;:::i;:::-;;;;;;;;17262:46;17282:6;17290:9;17301:6;17262:19;:46::i;:::-;16667:649;16546:770;;;:::o;2961:98::-;3019:7;3050:1;3046;:5;;;;:::i;:::-;3039:12;;2961:98;;;;:::o;20344:125::-;;;;:::o;21073: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:173::-;23676:25;23672:1;23664:6;23660:14;23653:49;23536:173;:::o;23715:366::-;23857:3;23878:67;23942:2;23937:3;23878:67;:::i;:::-;23871:74;;23954:93;24043:3;23954:93;:::i;:::-;24072:2;24067:3;24063:12;24056:19;;23715:366;;;:::o;24087:419::-;24253:4;24291:2;24280:9;24276:18;24268:26;;24340:9;24334:4;24330:20;24326:1;24315:9;24311:17;24304:47;24368:131;24494:4;24368:131;:::i;:::-;24360:139;;24087:419;;;:::o;24512:143::-;24569:5;24600:6;24594:13;24585:22;;24616:33;24643:5;24616:33;:::i;:::-;24512:143;;;;:::o;24661:351::-;24731:6;24780:2;24768:9;24759:7;24755:23;24751:32;24748:119;;;24786:79;;:::i;:::-;24748:119;24906:1;24931:64;24987:7;24978:6;24967:9;24963:22;24931:64;:::i;:::-;24921:74;;24877:128;24661:351;;;;:::o;25018:332::-;25139:4;25177:2;25166:9;25162:18;25154:26;;25190:71;25258:1;25247:9;25243:17;25234:6;25190:71;:::i;:::-;25271:72;25339:2;25328:9;25324:18;25315:6;25271:72;:::i;:::-;25018:332;;;;;:::o;25356:85::-;25401:7;25430:5;25419:16;;25356:85;;;:::o;25447:158::-;25505:9;25538:61;25556:42;25565:32;25591:5;25565:32;:::i;:::-;25556:42;:::i;:::-;25538:61;:::i;:::-;25525:74;;25447:158;;;:::o;25611:147::-;25706:45;25745:5;25706:45;:::i;:::-;25701:3;25694:58;25611:147;;:::o;25764:807::-;26013:4;26051:3;26040:9;26036:19;26028:27;;26065:71;26133:1;26122:9;26118:17;26109:6;26065:71;:::i;:::-;26146:72;26214:2;26203:9;26199:18;26190:6;26146:72;:::i;:::-;26228:80;26304:2;26293:9;26289:18;26280:6;26228:80;:::i;:::-;26318;26394:2;26383:9;26379:18;26370:6;26318:80;:::i;:::-;26408:73;26476:3;26465:9;26461:19;26452:6;26408:73;:::i;:::-;26491;26559:3;26548:9;26544:19;26535:6;26491:73;:::i;:::-;25764:807;;;;;;;;;:::o;26577:663::-;26665:6;26673;26681;26730:2;26718:9;26709:7;26705:23;26701:32;26698:119;;;26736:79;;:::i;:::-;26698:119;26856:1;26881:64;26937:7;26928:6;26917:9;26913:22;26881:64;:::i;:::-;26871:74;;26827:128;26994:2;27020:64;27076:7;27067:6;27056:9;27052:22;27020:64;:::i;:::-;27010:74;;26965:129;27133:2;27159:64;27215:7;27206:6;27195:9;27191:22;27159:64;:::i;:::-;27149:74;;27104:129;26577:663;;;;;:::o;27246:332::-;27367:4;27405:2;27394:9;27390:18;27382:26;;27418:71;27486:1;27475:9;27471:17;27462:6;27418:71;:::i;:::-;27499:72;27567:2;27556:9;27552:18;27543:6;27499:72;:::i;:::-;27246:332;;;;;:::o;27584:225::-;27724:34;27720:1;27712:6;27708:14;27701:58;27793:8;27788:2;27780:6;27776:15;27769:33;27584:225;:::o;27815:366::-;27957:3;27978:67;28042:2;28037:3;27978:67;:::i;:::-;27971:74;;28054:93;28143:3;28054:93;:::i;:::-;28172:2;28167:3;28163:12;28156:19;;27815:366;;;:::o;28187:419::-;28353:4;28391:2;28380:9;28376:18;28368:26;;28440:9;28434:4;28430:20;28426:1;28415:9;28411:17;28404:47;28468:131;28594:4;28468:131;:::i;:::-;28460:139;;28187:419;;;:::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://523f6f166672ed856c66d393d0c28ec34b3e3831042538630161337ee1e57c2b
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.