ETH Price: $2,394.51 (-1.43%)

Token

First Andy (ANDY1.0)
 

Overview

Max Total Supply

100,000,000 ANDY1.0

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
122,572.42307943433966002 ANDY1.0

Value
$0.00
0x502859a1bf374fbfe8f45c475b75c2fcfe67501d
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:
FirstAndy

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
SPDX-License-Identifier: UNLICENSE
*/

// https://t.me/FirstAndy0x681

// https://x.com/FirstAndy0x681

pragma solidity 0.8.25;

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 FirstAndy is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

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

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

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

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

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

    constructor() ERC20(unicode"First Andy", "ANDY1.0") {
        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"}]

60806040526017600a556017600b556017600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff021916908315150217905550348015610056575f80fd5b506040518060400160405280600a81526020017f466972737420416e6479000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f414e4459312e300000000000000000000000000000000000000000000000000081525081600390816100d2919061080e565b5080600490816100e2919061080e565b5050506101016100f661037560201b60201c565b61037c60201b60201c565b5f6a52b7d2dcc80cd2e400000090506103e8601482610120919061090a565b61012a9190610978565b600e819055506103e8601482610140919061090a565b61014a9190610978565b600f81905550612710600182610160919061090a565b61016a9190610978565b60108190555061271060c882610180919061090a565b61018a9190610978565b601181905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f61023861043f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061036f61036361037560201b60201c565b8261046760201b60201c565b50610a7b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90610a02565b60405180910390fd5b6104e65f83836105ca60201b60201c565b8060025f8282546104f79190610a20565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105499190610a20565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105ad9190610a62565b60405180910390a36105c65f83836105cf60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061064f57607f821691505b6020821081036106625761066161060b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610689565b6106ce8683610689565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61071261070d610708846106e6565b6106ef565b6106e6565b9050919050565b5f819050919050565b61072b836106f8565b61073f61073782610719565b848454610695565b825550505050565b5f90565b610753610747565b61075e818484610722565b505050565b5b81811015610781576107765f8261074b565b600181019050610764565b5050565b601f8211156107c65761079781610668565b6107a08461067a565b810160208510156107af578190505b6107c36107bb8561067a565b830182610763565b50505b505050565b5f82821c905092915050565b5f6107e65f19846008026107cb565b1980831691505092915050565b5f6107fe83836107d7565b9150826002028217905092915050565b610817826105d4565b67ffffffffffffffff8111156108305761082f6105de565b5b61083a8254610638565b610845828285610785565b5f60209050601f831160018114610876575f8415610864578287015190505b61086e85826107f3565b8655506108d5565b601f19841661088486610668565b5f5b828110156108ab57848901518255600182019150602085019450602081019050610886565b868310156108c857848901516108c4601f8916826107d7565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610914826106e6565b915061091f836106e6565b925082820261092d816106e6565b91508282048414831517610944576109436108dd565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610982826106e6565b915061098d836106e6565b92508261099d5761099c61094b565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6109ec601f836109a8565b91506109f7826109b8565b602082019050919050565b5f6020820190508181035f830152610a19816109e0565b9050919050565b5f610a2a826106e6565b9150610a35836106e6565b9250828201905080821115610a4d57610a4c6108dd565b5b92915050565b610a5c816106e6565b82525050565b5f602082019050610a755f830184610a53565b92915050565b61429080610a885f395ff3fe60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063c9567bf9146105ab578063dd62ed3e146105c1578063f2fde38b146105fd576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e47565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ef5565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f6f565b6107ba565b60405161022f9190612fc7565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fe0565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061301a565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130be565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061311b565b610b0f565b6040516102fb9190612fc7565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061316b565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131c4565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f6f565b610d16565b6040516103899190612fc7565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fe0565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e47565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131dd565b611144565b60405161042b919061301a565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613217565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ef5565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f6f565b6113c2565b6040516104e79190612fc7565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f6f565b6114a8565b6040516105239190612fc7565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613230565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132ca565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131dd565b6115e7565b005b3480156105b6575f80fd5b506105bf61178d565b005b3480156105cc575f80fd5b506105e760048036038101906105e291906132f5565b611d42565b6040516105f4919061301a565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e91906131dd565b611dc4565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061337d565b60405180910390fd5b612710826106ad6108f9565b6106b791906133c8565b6106c19190613436565b601081905550612710816106d36108f9565b6106dd91906133c8565b6106e79190613436565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613466565b60405180910390a15050565b606060038054610739906134ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ba565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061337d565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061355a565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133c8565b6108b79190613436565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061301a565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061337d565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a1613578565b5b90506020020160208101906109b791906131dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135ef565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061367d565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061337d565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061369b565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136c2565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061337d565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061373f565b60405180910390fd5b6103e881610e896108f9565b610e9391906133c8565b610e9d9190613436565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061301a565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061337d565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906137a7565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda9061380f565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613466565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061337d565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061301a565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061301a565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061337d565b60405180910390fd5b61120e5f612741565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135ef565b60405180910390fd5b5f61130e30611144565b905061131981612804565b5f4790505f81111561132e5761132d612a97565b5b5050565b606060048054611341906134ba565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ba565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061389d565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061337d565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613916565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135ef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613217565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613943565b6040518363ffffffff1660e01b815260040161174992919061396e565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906139a9565b5050565b611795611eba565b73ffffffffffffffffffffffffffffffffffffffff166117b3611210565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118009061337d565b60405180910390fd5b601360149054906101000a900460ff1615611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613a1e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118e03060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118db6108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196e9190613a50565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a189190613a50565b6040518363ffffffff1660e01b8152600401611a35929190613a7b565b6020604051808303815f875af1158015611a51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a759190613a50565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611afc30611144565b5f80611b06611210565b426040518863ffffffff1660e01b8152600401611b2896959493929190613adb565b60606040518083038185885af1158015611b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b699190613b3a565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c09929190613b8a565b6020604051808303815f875af1158015611c25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4991906139a9565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611dcc611eba565b73ffffffffffffffffffffffffffffffffffffffff16611dea611210565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e379061337d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613c21565b60405180910390fd5b611eb781612741565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613caf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d3d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061301a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dcb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e59565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ee7565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b1561270a5761225f6064612251600a5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244057600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f4f565b60405180910390fd5b600f54826123b485611144565b6123be91906136c2565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fb7565b60405180910390fd5b43600360085461240f91906136c2565b11156124285761241e83612b4f565b15612427575f80fd5b5b600d5f81548092919061243a90613fd5565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e4575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561254257600f54826124f685611144565b61250091906136c2565b1115612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613fb7565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125ca57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125fa576125f760646125e9600b5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b90505b5f61260430611144565b9050601360159054906101000a900460ff1615801561266f575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126875750601360169054906101000a900460ff165b8015612694575060105481115b80156126a35750600c54600d54115b80156126d857504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612708576126f16126ec82601154612b60565b612804565b5f4790505f81111561270657612705612a97565b5b505b505b5f81111561271e5761271d843083612b78565b5b61273b84846127368486612ded90919063ffffffff16565b612b78565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff8111156128635761286261401c565b5b6040519080825280602002602001820160405280156128915781602001602082028036833780820191505090505b50905030815f815181106128a8576128a7613578565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129709190613a50565b8160018151811061298457612983613578565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ea3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a4c959493929190614100565b5f604051808303815f87803b158015612a63575f80fd5b505af1158015612a75573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612add90614185565b5f6040518083038185875af1925050503d805f8114612b17576040519150601f19603f3d011682016040523d82523d5f602084013e612b1c565b606091505b50508091505050565b5f8183612b3291906133c8565b905092915050565b5f8183612b479190613436565b905092915050565b5f80823b90505f8111915050919050565b5f818311612b6e5782612b70565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd90613dcb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90613e59565b60405180910390fd5b612c5f838383612e02565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614209565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d7091906136c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd4919061301a565b60405180910390a3612de7848484612e07565b50505050565b5f8183612dfa9190614227565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612e2681612e14565b8114612e30575f80fd5b50565b5f81359050612e4181612e1d565b92915050565b5f8060408385031215612e5d57612e5c612e0c565b5b5f612e6a85828601612e33565b9250506020612e7b85828601612e33565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec782612e85565b612ed18185612e8f565b9350612ee1818560208601612e9f565b612eea81612ead565b840191505092915050565b5f6020820190508181035f830152612f0d8184612ebd565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3e82612f15565b9050919050565b612f4e81612f34565b8114612f58575f80fd5b50565b5f81359050612f6981612f45565b92915050565b5f8060408385031215612f8557612f84612e0c565b5b5f612f9285828601612f5b565b9250506020612fa385828601612e33565b9150509250929050565b5f8115159050919050565b612fc181612fad565b82525050565b5f602082019050612fda5f830184612fb8565b92915050565b5f60208284031215612ff557612ff4612e0c565b5b5f61300284828501612e33565b91505092915050565b61301481612e14565b82525050565b5f60208201905061302d5f83018461300b565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261305457613053613033565b5b8235905067ffffffffffffffff81111561307157613070613037565b5b60208301915083602082028301111561308d5761308c61303b565b5b9250929050565b61309d81612fad565b81146130a7575f80fd5b50565b5f813590506130b881613094565b92915050565b5f805f604084860312156130d5576130d4612e0c565b5b5f84013567ffffffffffffffff8111156130f2576130f1612e10565b5b6130fe8682870161303f565b93509350506020613111868287016130aa565b9150509250925092565b5f805f6060848603121561313257613131612e0c565b5b5f61313f86828701612f5b565b935050602061315086828701612f5b565b925050604061316186828701612e33565b9150509250925092565b5f806040838503121561318157613180612e0c565b5b5f61318e85828601612f5b565b925050602061319f858286016130aa565b9150509250929050565b5f60ff82169050919050565b6131be816131a9565b82525050565b5f6020820190506131d75f8301846131b5565b92915050565b5f602082840312156131f2576131f1612e0c565b5b5f6131ff84828501612f5b565b91505092915050565b61321181612f34565b82525050565b5f60208201905061322a5f830184613208565b92915050565b5f60c0820190506132435f83018961300b565b613250602083018861300b565b61325d604083018761300b565b61326a606083018661300b565b613277608083018561300b565b61328460a083018461300b565b979650505050505050565b5f61329982612f15565b9050919050565b6132a98161328f565b81146132b3575f80fd5b50565b5f813590506132c4816132a0565b92915050565b5f602082840312156132df576132de612e0c565b5b5f6132ec848285016132b6565b91505092915050565b5f806040838503121561330b5761330a612e0c565b5b5f61331885828601612f5b565b925050602061332985828601612f5b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613367602083612e8f565b915061337282613333565b602082019050919050565b5f6020820190508181035f8301526133948161335b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133d282612e14565b91506133dd83612e14565b92508282026133eb81612e14565b915082820484148315176134025761340161339b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61344082612e14565b915061344b83612e14565b92508261345b5761345a613409565b5b828204905092915050565b5f6040820190506134795f83018561300b565b613486602083018461300b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134d157607f821691505b6020821081036134e4576134e361348d565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613544602283612e8f565b915061354f826134ea565b604082019050919050565b5f6020820190508181035f83015261357181613538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135d9601d83612e8f565b91506135e4826135a5565b602082019050919050565b5f6020820190508181035f830152613606816135cd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613667602883612e8f565b91506136728261360d565b604082019050919050565b5f6020820190508181035f8301526136948161365b565b9050919050565b5f6040820190506136ae5f830185613208565b6136bb6020830184612fb8565b9392505050565b5f6136cc82612e14565b91506136d783612e14565b92508282019050808211156136ef576136ee61339b565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f613729601e83612e8f565b9150613734826136f5565b602082019050919050565b5f6020820190508181035f8301526137568161371d565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613791601583612e8f565b915061379c8261375d565b602082019050919050565b5f6020820190508181035f8301526137be81613785565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137f9601683612e8f565b9150613804826137c5565b602082019050919050565b5f6020820190508181035f830152613826816137ed565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613887602583612e8f565b91506138928261382d565b604082019050919050565b5f6020820190508181035f8301526138b48161387b565b9050919050565b5f819050919050565b5f6138de6138d96138d484612f15565b6138bb565b612f15565b9050919050565b5f6138ef826138c4565b9050919050565b5f613900826138e5565b9050919050565b613910816138f6565b82525050565b5f6020820190506139295f830184613907565b92915050565b5f8151905061393d81612e1d565b92915050565b5f6020828403121561395857613957612e0c565b5b5f6139658482850161392f565b91505092915050565b5f6040820190506139815f830185613907565b61398e602083018461300b565b9392505050565b5f815190506139a381613094565b92915050565b5f602082840312156139be576139bd612e0c565b5b5f6139cb84828501613995565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a08601783612e8f565b9150613a13826139d4565b602082019050919050565b5f6020820190508181035f830152613a35816139fc565b9050919050565b5f81519050613a4a81612f45565b92915050565b5f60208284031215613a6557613a64612e0c565b5b5f613a7284828501613a3c565b91505092915050565b5f604082019050613a8e5f830185613208565b613a9b6020830184613208565b9392505050565b5f819050919050565b5f613ac5613ac0613abb84613aa2565b6138bb565b612e14565b9050919050565b613ad581613aab565b82525050565b5f60c082019050613aee5f830189613208565b613afb602083018861300b565b613b086040830187613acc565b613b156060830186613acc565b613b226080830185613208565b613b2f60a083018461300b565b979650505050505050565b5f805f60608486031215613b5157613b50612e0c565b5b5f613b5e8682870161392f565b9350506020613b6f8682870161392f565b9250506040613b808682870161392f565b9150509250925092565b5f604082019050613b9d5f830185613208565b613baa602083018461300b565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c0b602683612e8f565b9150613c1682613bb1565b604082019050919050565b5f6020820190508181035f830152613c3881613bff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c99602483612e8f565b9150613ca482613c3f565b604082019050919050565b5f6020820190508181035f830152613cc681613c8d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d27602283612e8f565b9150613d3282613ccd565b604082019050919050565b5f6020820190508181035f830152613d5481613d1b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613db5602583612e8f565b9150613dc082613d5b565b604082019050919050565b5f6020820190508181035f830152613de281613da9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e43602383612e8f565b9150613e4e82613de9565b604082019050919050565b5f6020820190508181035f830152613e7081613e37565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ed1602983612e8f565b9150613edc82613e77565b604082019050919050565b5f6020820190508181035f830152613efe81613ec5565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f39601b83612e8f565b9150613f4482613f05565b602082019050919050565b5f6020820190508181035f830152613f6681613f2d565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613fa1601a83612e8f565b9150613fac82613f6d565b602082019050919050565b5f6020820190508181035f830152613fce81613f95565b9050919050565b5f613fdf82612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140115761401061339b565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61407b81612f34565b82525050565b5f61408c8383614072565b60208301905092915050565b5f602082019050919050565b5f6140ae82614049565b6140b88185614053565b93506140c383614063565b805f5b838110156140f35781516140da8882614081565b97506140e583614098565b9250506001810190506140c6565b5085935050505092915050565b5f60a0820190506141135f83018861300b565b6141206020830187613acc565b818103604083015261413281866140a4565b90506141416060830185613208565b61414e608083018461300b565b9695505050505050565b5f81905092915050565b50565b5f6141705f83614158565b915061417b82614162565b5f82019050919050565b5f61418f82614165565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141f3602683612e8f565b91506141fe82614199565b604082019050919050565b5f6020820190508181035f830152614220816141e7565b9050919050565b5f61423182612e14565b915061423c83612e14565b92508282039050818111156142545761425361339b565b5b9291505056fea2646970667358221220522a50fe5296a22951786a23409119ca4e8560680cd851f7cff78ed69d0e72a464736f6c63430008190033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063c9567bf9146105ab578063dd62ed3e146105c1578063f2fde38b146105fd576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e47565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ef5565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f6f565b6107ba565b60405161022f9190612fc7565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fe0565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061301a565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130be565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061311b565b610b0f565b6040516102fb9190612fc7565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061316b565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131c4565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f6f565b610d16565b6040516103899190612fc7565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fe0565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e47565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131dd565b611144565b60405161042b919061301a565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613217565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ef5565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f6f565b6113c2565b6040516104e79190612fc7565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f6f565b6114a8565b6040516105239190612fc7565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613230565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132ca565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131dd565b6115e7565b005b3480156105b6575f80fd5b506105bf61178d565b005b3480156105cc575f80fd5b506105e760048036038101906105e291906132f5565b611d42565b6040516105f4919061301a565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e91906131dd565b611dc4565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061337d565b60405180910390fd5b612710826106ad6108f9565b6106b791906133c8565b6106c19190613436565b601081905550612710816106d36108f9565b6106dd91906133c8565b6106e79190613436565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613466565b60405180910390a15050565b606060038054610739906134ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ba565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061337d565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061355a565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133c8565b6108b79190613436565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061301a565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061337d565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a1613578565b5b90506020020160208101906109b791906131dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135ef565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061367d565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061337d565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061369b565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136c2565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061337d565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061373f565b60405180910390fd5b6103e881610e896108f9565b610e9391906133c8565b610e9d9190613436565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061301a565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061337d565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906137a7565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda9061380f565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613466565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061337d565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061301a565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061301a565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061337d565b60405180910390fd5b61120e5f612741565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135ef565b60405180910390fd5b5f61130e30611144565b905061131981612804565b5f4790505f81111561132e5761132d612a97565b5b5050565b606060048054611341906134ba565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ba565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061389d565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061337d565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613916565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135ef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613217565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613943565b6040518363ffffffff1660e01b815260040161174992919061396e565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906139a9565b5050565b611795611eba565b73ffffffffffffffffffffffffffffffffffffffff166117b3611210565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118009061337d565b60405180910390fd5b601360149054906101000a900460ff1615611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613a1e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118e03060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118db6108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196e9190613a50565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a189190613a50565b6040518363ffffffff1660e01b8152600401611a35929190613a7b565b6020604051808303815f875af1158015611a51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a759190613a50565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611afc30611144565b5f80611b06611210565b426040518863ffffffff1660e01b8152600401611b2896959493929190613adb565b60606040518083038185885af1158015611b44573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b699190613b3a565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c09929190613b8a565b6020604051808303815f875af1158015611c25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4991906139a9565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611dcc611eba565b73ffffffffffffffffffffffffffffffffffffffff16611dea611210565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e379061337d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613c21565b60405180910390fd5b611eb781612741565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613caf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d3d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061301a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dcb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e59565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ee7565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b1561270a5761225f6064612251600a5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561244057600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f4f565b60405180910390fd5b600f54826123b485611144565b6123be91906136c2565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fb7565b60405180910390fd5b43600360085461240f91906136c2565b11156124285761241e83612b4f565b15612427575f80fd5b5b600d5f81548092919061243a90613fd5565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124e4575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561254257600f54826124f685611144565b61250091906136c2565b1115612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253890613fb7565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125ca57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125fa576125f760646125e9600b5485612b2590919063ffffffff16565b612b3a90919063ffffffff16565b90505b5f61260430611144565b9050601360159054906101000a900460ff1615801561266f575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126875750601360169054906101000a900460ff165b8015612694575060105481115b80156126a35750600c54600d54115b80156126d857504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612708576126f16126ec82601154612b60565b612804565b5f4790505f81111561270657612705612a97565b5b505b505b5f81111561271e5761271d843083612b78565b5b61273b84846127368486612ded90919063ffffffff16565b612b78565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff8111156128635761286261401c565b5b6040519080825280602002602001820160405280156128915781602001602082028036833780820191505090505b50905030815f815181106128a8576128a7613578565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129709190613a50565b8160018151811061298457612983613578565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ea3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a4c959493929190614100565b5f604051808303815f87803b158015612a63575f80fd5b505af1158015612a75573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612add90614185565b5f6040518083038185875af1925050503d805f8114612b17576040519150601f19603f3d011682016040523d82523d5f602084013e612b1c565b606091505b50508091505050565b5f8183612b3291906133c8565b905092915050565b5f8183612b479190613436565b905092915050565b5f80823b90505f8111915050919050565b5f818311612b6e5782612b70565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd90613dcb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90613e59565b60405180910390fd5b612c5f838383612e02565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614209565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d7091906136c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dd4919061301a565b60405180910390a3612de7848484612e07565b50505050565b5f8183612dfa9190614227565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612e2681612e14565b8114612e30575f80fd5b50565b5f81359050612e4181612e1d565b92915050565b5f8060408385031215612e5d57612e5c612e0c565b5b5f612e6a85828601612e33565b9250506020612e7b85828601612e33565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec782612e85565b612ed18185612e8f565b9350612ee1818560208601612e9f565b612eea81612ead565b840191505092915050565b5f6020820190508181035f830152612f0d8184612ebd565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3e82612f15565b9050919050565b612f4e81612f34565b8114612f58575f80fd5b50565b5f81359050612f6981612f45565b92915050565b5f8060408385031215612f8557612f84612e0c565b5b5f612f9285828601612f5b565b9250506020612fa385828601612e33565b9150509250929050565b5f8115159050919050565b612fc181612fad565b82525050565b5f602082019050612fda5f830184612fb8565b92915050565b5f60208284031215612ff557612ff4612e0c565b5b5f61300284828501612e33565b91505092915050565b61301481612e14565b82525050565b5f60208201905061302d5f83018461300b565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261305457613053613033565b5b8235905067ffffffffffffffff81111561307157613070613037565b5b60208301915083602082028301111561308d5761308c61303b565b5b9250929050565b61309d81612fad565b81146130a7575f80fd5b50565b5f813590506130b881613094565b92915050565b5f805f604084860312156130d5576130d4612e0c565b5b5f84013567ffffffffffffffff8111156130f2576130f1612e10565b5b6130fe8682870161303f565b93509350506020613111868287016130aa565b9150509250925092565b5f805f6060848603121561313257613131612e0c565b5b5f61313f86828701612f5b565b935050602061315086828701612f5b565b925050604061316186828701612e33565b9150509250925092565b5f806040838503121561318157613180612e0c565b5b5f61318e85828601612f5b565b925050602061319f858286016130aa565b9150509250929050565b5f60ff82169050919050565b6131be816131a9565b82525050565b5f6020820190506131d75f8301846131b5565b92915050565b5f602082840312156131f2576131f1612e0c565b5b5f6131ff84828501612f5b565b91505092915050565b61321181612f34565b82525050565b5f60208201905061322a5f830184613208565b92915050565b5f60c0820190506132435f83018961300b565b613250602083018861300b565b61325d604083018761300b565b61326a606083018661300b565b613277608083018561300b565b61328460a083018461300b565b979650505050505050565b5f61329982612f15565b9050919050565b6132a98161328f565b81146132b3575f80fd5b50565b5f813590506132c4816132a0565b92915050565b5f602082840312156132df576132de612e0c565b5b5f6132ec848285016132b6565b91505092915050565b5f806040838503121561330b5761330a612e0c565b5b5f61331885828601612f5b565b925050602061332985828601612f5b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613367602083612e8f565b915061337282613333565b602082019050919050565b5f6020820190508181035f8301526133948161335b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133d282612e14565b91506133dd83612e14565b92508282026133eb81612e14565b915082820484148315176134025761340161339b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61344082612e14565b915061344b83612e14565b92508261345b5761345a613409565b5b828204905092915050565b5f6040820190506134795f83018561300b565b613486602083018461300b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134d157607f821691505b6020821081036134e4576134e361348d565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613544602283612e8f565b915061354f826134ea565b604082019050919050565b5f6020820190508181035f83015261357181613538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135d9601d83612e8f565b91506135e4826135a5565b602082019050919050565b5f6020820190508181035f830152613606816135cd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613667602883612e8f565b91506136728261360d565b604082019050919050565b5f6020820190508181035f8301526136948161365b565b9050919050565b5f6040820190506136ae5f830185613208565b6136bb6020830184612fb8565b9392505050565b5f6136cc82612e14565b91506136d783612e14565b92508282019050808211156136ef576136ee61339b565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f613729601e83612e8f565b9150613734826136f5565b602082019050919050565b5f6020820190508181035f8301526137568161371d565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613791601583612e8f565b915061379c8261375d565b602082019050919050565b5f6020820190508181035f8301526137be81613785565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137f9601683612e8f565b9150613804826137c5565b602082019050919050565b5f6020820190508181035f830152613826816137ed565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613887602583612e8f565b91506138928261382d565b604082019050919050565b5f6020820190508181035f8301526138b48161387b565b9050919050565b5f819050919050565b5f6138de6138d96138d484612f15565b6138bb565b612f15565b9050919050565b5f6138ef826138c4565b9050919050565b5f613900826138e5565b9050919050565b613910816138f6565b82525050565b5f6020820190506139295f830184613907565b92915050565b5f8151905061393d81612e1d565b92915050565b5f6020828403121561395857613957612e0c565b5b5f6139658482850161392f565b91505092915050565b5f6040820190506139815f830185613907565b61398e602083018461300b565b9392505050565b5f815190506139a381613094565b92915050565b5f602082840312156139be576139bd612e0c565b5b5f6139cb84828501613995565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a08601783612e8f565b9150613a13826139d4565b602082019050919050565b5f6020820190508181035f830152613a35816139fc565b9050919050565b5f81519050613a4a81612f45565b92915050565b5f60208284031215613a6557613a64612e0c565b5b5f613a7284828501613a3c565b91505092915050565b5f604082019050613a8e5f830185613208565b613a9b6020830184613208565b9392505050565b5f819050919050565b5f613ac5613ac0613abb84613aa2565b6138bb565b612e14565b9050919050565b613ad581613aab565b82525050565b5f60c082019050613aee5f830189613208565b613afb602083018861300b565b613b086040830187613acc565b613b156060830186613acc565b613b226080830185613208565b613b2f60a083018461300b565b979650505050505050565b5f805f60608486031215613b5157613b50612e0c565b5b5f613b5e8682870161392f565b9350506020613b6f8682870161392f565b9250506040613b808682870161392f565b9150509250925092565b5f604082019050613b9d5f830185613208565b613baa602083018461300b565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c0b602683612e8f565b9150613c1682613bb1565b604082019050919050565b5f6020820190508181035f830152613c3881613bff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c99602483612e8f565b9150613ca482613c3f565b604082019050919050565b5f6020820190508181035f830152613cc681613c8d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d27602283612e8f565b9150613d3282613ccd565b604082019050919050565b5f6020820190508181035f830152613d5481613d1b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613db5602583612e8f565b9150613dc082613d5b565b604082019050919050565b5f6020820190508181035f830152613de281613da9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e43602383612e8f565b9150613e4e82613de9565b604082019050919050565b5f6020820190508181035f830152613e7081613e37565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ed1602983612e8f565b9150613edc82613e77565b604082019050919050565b5f6020820190508181035f830152613efe81613ec5565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f39601b83612e8f565b9150613f4482613f05565b602082019050919050565b5f6020820190508181035f830152613f6681613f2d565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613fa1601a83612e8f565b9150613fac82613f6d565b602082019050919050565b5f6020820190508181035f830152613fce81613f95565b9050919050565b5f613fdf82612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140115761401061339b565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61407b81612f34565b82525050565b5f61408c8383614072565b60208301905092915050565b5f602082019050919050565b5f6140ae82614049565b6140b88185614053565b93506140c383614063565b805f5b838110156140f35781516140da8882614081565b97506140e583614098565b9250506001810190506140c6565b5085935050505092915050565b5f60a0820190506141135f83018861300b565b6141206020830187613acc565b818103604083015261413281866140a4565b90506141416060830185613208565b61414e608083018461300b565b9695505050505050565b5f81905092915050565b50565b5f6141705f83614158565b915061417b82614162565b5f82019050919050565b5f61418f82614165565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141f3602683612e8f565b91506141fe82614199565b604082019050919050565b5f6020820190508181035f830152614220816141e7565b9050919050565b5f61423182612e14565b915061423c83612e14565b92508282039050818111156142545761425361339b565b5b9291505056fea2646970667358221220522a50fe5296a22951786a23409119ca4e8560680cd851f7cff78ed69d0e72a464736f6c63430008190033

Deployed Bytecode Sourcemap

25393:9602:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29055:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10991:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13224:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28789:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12111:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30339:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29921:168;;;;;;;;;;;;;:::i;:::-;;13896:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30564:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11953:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14830:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28543:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29623:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29379:236;;;;;;;;;;;;;:::i;:::-;;12282:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22330:103;;;;;;;;;;;;;:::i;:::-;;21679:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33838:436;;;;;;;;;;;;;:::i;:::-;;11210:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15619:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12638:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30743:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28367:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30099:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27328:1031;;;;;;;;;;;;;:::i;:::-;;12901:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22588:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29055:310;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29229:5:::1;29209:16;29193:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29192:42;;;;:::i;:::-;29177:12;:57;;;;29291:5;29277:10;29261:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29260:36;;;;:::i;:::-;29245:12;:51;;;;29312:45;29328:16;29346:10;29312:45;;;;;;;:::i;:::-;;;;;;;;29055:310:::0;;:::o;10991:100::-;11045:13;11078:5;11071:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10991:100;:::o;13224:194::-;13332:4;13349:39;13358:12;:10;:12::i;:::-;13372:7;13381:6;13349:8;:39::i;:::-;13406:4;13399:11;;13224:194;;;;:::o;28789:258::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28876:1:::1;28864:8;:13;;28856:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28977:4;28965:8;28949:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28948:33;;;;:::i;:::-;28927:18;:54;;;;28997:42;29020:18;;28997:42;;;;;;:::i;:::-;;;;;;;;28789:258:::0;:::o;12111:108::-;12172:7;12199:12;;12192:19;;12111:108;:::o;30339:217::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30457:9:::1;30452:97;30476:6;;:13;;30472:1;:17;30452:97;;;30531:6;30511;:17;30518:6;;30525:1;30518:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30511:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30491:3;;;;;;;30452:97;;;;30339:217:::0;;;:::o;29921:168::-;29984:10;;;;;;;;;;;29970:24;;:10;:24;;;29962:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30039:10;;;;;;;;;;;:19;;:42;30059:21;30039:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29921:168::o;13896:529::-;14036:4;14053:36;14063:6;14071:9;14082:6;14053:9;:36::i;:::-;14102:24;14129:11;:19;14141:6;14129:19;;;;;;;;;;;;;;;:33;14149:12;:10;:12::i;:::-;14129:33;;;;;;;;;;;;;;;;14102:60;;14215:6;14195:16;:26;;14173:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14325:57;14334:6;14342:12;:10;:12::i;:::-;14375:6;14356:16;:25;14325:8;:57::i;:::-;14413:4;14406:11;;;13896:529;;;;;:::o;30564:171::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30673:6:::1;30643:18;:27;30662:7;30643:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30695:32;30711:7;30720:6;30695:32;;;;;;;:::i;:::-;;;;;;;;30564:171:::0;;:::o;11953:93::-;12011:5;12036:2;12029:9;;11953:93;:::o;14830:290::-;14943:4;14960:130;14983:12;:10;:12::i;:::-;15010:7;15069:10;15032:11;:25;15044:12;:10;:12::i;:::-;15032:25;;;;;;;;;;;;;;;:34;15058:7;15032:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14960:8;:130::i;:::-;15108:4;15101:11;;14830:290;;;;:::o;28543:238::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28626:1:::1;28614:8;:13;;28606:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:4;28707:8;28691:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28690:33;;;;:::i;:::-;28673:14;:50;;;;28739:34;28758:14;;28739:34;;;;;;:::i;:::-;;;;;;;;28543:238:::0;:::o;29623:290::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29720:2:::1;29710:6;:12;;29702:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:2;29767:7;:13;;29759:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29827:6;29818;:15;;;;29854:7;29844;:17;;;;29877:28;29889:6;29897:7;29877:28;;;;;;;:::i;:::-;;;;;;;;29623:290:::0;;:::o;29379:236::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29447:13:::1;:11;:13::i;:::-;29430:14;:30;;;;29492:13;:11;:13::i;:::-;29471:18;:34;;;;29521:33;29540:13;:11;:13::i;:::-;29521:33;;;;;;:::i;:::-;;;;;;;;29570:37;29593:13;:11;:13::i;:::-;29570:37;;;;;;:::i;:::-;;;;;;;;29379:236::o:0;12282:143::-;12372:7;12399:9;:18;12409:7;12399:18;;;;;;;;;;;;;;;;12392:25;;12282:143;;;:::o;22330:103::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22395:30:::1;22422:1;22395:18;:30::i;:::-;22330:103::o:0;21679:87::-;21725:7;21752:6;;;;;;;;;;;21745:13;;21679:87;:::o;33838:436::-;33917:10;;;;;;;;;;;33903:24;;:10;:24;;;:49;;;;33945:7;:5;:7::i;:::-;33931:21;;:10;:21;;;33903:49;33881:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34020:28;34051:24;34069:4;34051:9;:24::i;:::-;34020:55;;34088:38;34105:20;34088:16;:38::i;:::-;34137:26;34166:21;34137:50;;34223:1;34202:18;:22;34198:69;;;34241:14;:12;:14::i;:::-;34198:69;33870:404;;33838:436::o;11210:104::-;11266:13;11299:7;11292:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11210:104;:::o;15619:475::-;15737:4;15754:24;15781:11;:25;15793:12;:10;:12::i;:::-;15781:25;;;;;;;;;;;;;;;:34;15807:7;15781:34;;;;;;;;;;;;;;;;15754:61;;15868:15;15848:16;:35;;15826:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15984:67;15993:12;:10;:12::i;:::-;16007:7;16035:15;16016:16;:34;15984:8;:67::i;:::-;16082:4;16075:11;;;15619:475;;;;:::o;12638:200::-;12749:4;12766:42;12776:12;:10;:12::i;:::-;12790:9;12801:6;12766:9;:42::i;:::-;12826:4;12819:11;;12638:200;;;;:::o;30743:485::-;30827:15;30857:16;30888:19;30922:21;30958:24;30997:18;31065:6;;31086:7;;31108:14;;31137:18;;31170:12;;31197;;31043:177;;;;;;;;;;;;30743:485;;;;;;:::o;28367:168::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28459:15:::1;28446:10;;:28;;;;;;;;;;;;;;;;;;28492:35;28511:15;28492:35;;;;;;:::i;:::-;;;;;;;;28367:168:::0;:::o;30099:232::-;30185:10;;;;;;;;;;;30171:24;;:10;:24;;;30163:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30247:8;30240:25;;;30266:10;;;;;;;;;;;30284:8;30277:26;;;30312:4;30277:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30240:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30099:232;:::o;27328:1031::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27390:11:::1;;;;;;;;;;;27389:12;27381:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27483:42;27440:15;;:96;;;;;;;;;;;;;;;;;;27547:64;27564:4;27579:15;;;;;;;;;;;27597:13;:11;:13::i;:::-;27547:8;:64::i;:::-;27650:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27638:49;;;27710:4;27730:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27638:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27622:13;;:141;;;;;;;;;;;;;;;;;;27774:15;;;;;;;;;;;:31;;;27813:21;27858:4;27878:24;27896:4;27878:9;:24::i;:::-;27917:1;27933::::0;27949:7:::1;:5;:7::i;:::-;27971:15;27774:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28015:13;;;;;;;;;;;28008:29;;;28046:15;;;;;;;;;;;28064:14;28008:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28104:4;28090:11;;:18;;;;;;;;;;;;;;;;;;28133:4;28119:11;;:18;;;;;;;;;;;;;;;;;;28161:12;28148:10;:25;;;;28209:12;28184:15;;:38;;;;;;;;;;;;;;;;;;28269:4;28233:18;:33;28260:4;28233:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28293:2;28284:6;:11;;;;28316:2;28306:7;:12;;;;28336:15;;;;;;;;;;27328:1031::o:0;12901:176::-;13015:7;13042:11;:18;13054:5;13042:18;;;;;;;;;;;;;;;:27;13061:7;13042:27;;;;;;;;;;;;;;;;13035:34;;12901:176;;;;:::o;22588:238::-;21910:12;:10;:12::i;:::-;21899:23;;:7;:5;:7::i;:::-;:23;;;21891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22711:1:::1;22691:22;;:8;:22;;::::0;22669:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:28;22809:8;22790:18;:28::i;:::-;22588:238:::0;:::o;9997:98::-;10050:7;10077:10;10070:17;;9997:98;:::o;19402:380::-;19555:1;19538:19;;:5;:19;;;19530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19636:1;19617:21;;:7;:21;;;19609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19720:6;19690:11;:18;19702:5;19690:18;;;;;;;;;;;;;;;:27;19709:7;19690:27;;;;;;;;;;;;;;;:36;;;;19758:7;19742:32;;19751:5;19742:32;;;19767:6;19742:32;;;;;;:::i;:::-;;;;;;;;19402:380;;;:::o;31236:2276::-;31384:1;31368:18;;:4;:18;;;31360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31461:1;31447:16;;:2;:16;;;31439:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31531:1;31522:6;:10;31514:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31589:17;31633:7;:5;:7::i;:::-;31625:15;;:4;:15;;;;:32;;;;;31650:7;:5;:7::i;:::-;31644:13;;:2;:13;;;;31625:32;:43;;;;;31662:6;;;;;;;;;;;31661:7;31625:43;31621:1720;;;31697:27;31720:3;31697:18;31708:6;;31697;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31685:39;;31771:13;;;;;;;;;;;31763:21;;:4;:21;;;:72;;;;;31819:15;;;;;;;;;;;31805:30;;:2;:30;;;;31763:72;:116;;;;;31857:18;:22;31876:2;31857:22;;;;;;;;;;;;;;;;;;;;;;;;;31856:23;31763:116;31741:568;;;31932:14;;31922:6;:24;;31914:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32053:18;;32043:6;32027:13;32037:2;32027:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31997:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32183:12;32179:1;32166:10;;:14;;;;:::i;:::-;:29;32162:102;;;32229:14;32240:2;32229:10;:14::i;:::-;32228:15;32220:24;;;;;;32162:102;32282:9;;:11;;;;;;;;;:::i;:::-;;;;;;31741:568;32335:13;;;;;;;;;;;32329:19;;:2;:19;;;;:46;;;;;32353:18;:22;32372:2;32353:22;;;;;;;;;;;;;;;;;;;;;;;;;32352:23;32329:46;32325:231;;;32452:18;;32442:6;32426:13;32436:2;32426:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32396:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32325:231;32582:13;;;;;;;;;;;32576:19;;:2;:19;;;:44;;;;;32615:4;32599:21;;:4;:21;;;;32576:44;32572:125;;;32653:28;32677:3;32653:19;32664:7;;32653:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32641:40;;32572:125;32713:28;32744:24;32762:4;32744:9;:24::i;:::-;32713:55;;32806:6;;;;;;;;;;;32805:7;:47;;;;;32839:13;;;;;;;;;;;32833:19;;:2;:19;;;32805:47;:79;;;;;32873:11;;;;;;;;;;;32805:79;:135;;;;;32928:12;;32905:20;:35;32805:135;:186;;;;;32973:18;;32961:9;;:30;32805:186;:246;;;;;33038:12;33012:39;;:15;;;;;;;;;;;:39;;;;32805:246;32783:547;;;33086:56;33103:38;33107:20;33128:12;;33103:3;:38::i;:::-;33086:16;:56::i;:::-;33161:26;33190:21;33161:50;;33255:1;33234:18;:22;33230:85;;;33281:14;:12;:14::i;:::-;33230:85;33067:263;32783:547;31670:1671;31621:1720;33369:1;33357:9;:13;33353:93;;;33387:47;33403:4;33417;33424:9;33387:15;:47::i;:::-;33353:93;33456:48;33472:4;33478:2;33482:21;33493:9;33482:6;:10;;:21;;;;:::i;:::-;33456:15;:48::i;:::-;31349:2163;31236:2276;;;:::o;22986:191::-;23060:16;23079:6;;;;;;;;;;;23060:25;;23105:8;23096:6;;:17;;;;;;;;;;;;;;;;;;23160:8;23129:40;;23150:8;23129:40;;;;;;;;;;;;23049:128;22986:191;:::o;34282:532::-;26615:4;26606:6;;:13;;;;;;;;;;;;;;;;;;34385:12:::1;34360:15;;:38;;;;;;;;;;;;;;;;;;34409:21;34447:1;34433:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34409:40;;34478:4;34460;34465:1;34460:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34504:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34494:4;34499:1;34494:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34537:62;34554:4;34569:15;;;;;;;;;;;34587:11;34537:8;:62::i;:::-;34610:15;;;;;;;;;;;:66;;;34691:11;34717:1;34733:4;34760;34780:15;34610:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34349:465;26651:5:::0;26642:6;;:14;;;;;;;;;;;;;;;;;;34282:532;:::o;34822:170::-;34865:12;34910:10;;;;;;;;;;;34902:24;;34934:21;34902:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34888:96;;;;;34854:138;34822:170::o;3356:98::-;3414:7;3445:1;3441;:5;;;;:::i;:::-;3434:12;;3356:98;;;;:::o;3755:::-;3813:7;3844:1;3840;:5;;;;:::i;:::-;3833:12;;3755:98;;;;:::o;33635:195::-;33694:4;33711:12;33778:7;33766:20;33758:28;;33821:1;33814:4;:8;33807:15;;;33635:195;;;:::o;33520:107::-;33577:7;33609:1;33605;:5;33604:15;;33618:1;33604:15;;;33614:1;33604:15;33597:22;;33520:107;;;;:::o;16584:770::-;16742:1;16724:20;;:6;:20;;;16716:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16826:1;16805:23;;:9;:23;;;16797:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16881:47;16902:6;16910:9;16921:6;16881:20;:47::i;:::-;16941:21;16965:9;:17;16975:6;16965:17;;;;;;;;;;;;;;;;16941:41;;17032:6;17015:13;:23;;16993:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17176:6;17160:13;:22;17140:9;:17;17150:6;17140:17;;;;;;;;;;;;;;;:42;;;;17228:6;17204:9;:20;17214:9;17204:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17269:9;17252:35;;17261:6;17252:35;;;17280:6;17252:35;;;;;;:::i;:::-;;;;;;;;17300:46;17320:6;17328:9;17339:6;17300:19;:46::i;:::-;16705:649;16584:770;;;:::o;2999:98::-;3057:7;3088:1;3084;:5;;;;:::i;:::-;3077:12;;2999:98;;;;:::o;20382:125::-;;;;:::o;21111: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:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:329::-;3878:6;3927:2;3915:9;3906:7;3902:23;3898:32;3895:119;;;3933:79;;:::i;:::-;3895:119;4053:1;4078:53;4123:7;4114:6;4103:9;4099:22;4078:53;:::i;:::-;4068:63;;4024:117;3819:329;;;;:::o;4154:118::-;4241:24;4259:5;4241:24;:::i;:::-;4236:3;4229:37;4154:118;;:::o;4278:222::-;4371:4;4409:2;4398:9;4394:18;4386:26;;4422:71;4490:1;4479:9;4475:17;4466:6;4422:71;:::i;:::-;4278:222;;;;:::o;4506:117::-;4615:1;4612;4605:12;4629:117;4738:1;4735;4728:12;4752:117;4861:1;4858;4851:12;4892:568;4965:8;4975:6;5025:3;5018:4;5010:6;5006:17;5002:27;4992:122;;5033:79;;:::i;:::-;4992:122;5146:6;5133:20;5123:30;;5176:18;5168:6;5165:30;5162:117;;;5198:79;;:::i;:::-;5162:117;5312:4;5304:6;5300:17;5288:29;;5366:3;5358:4;5350:6;5346:17;5336:8;5332:32;5329:41;5326:128;;;5373:79;;:::i;:::-;5326:128;4892:568;;;;;:::o;5466:116::-;5536:21;5551:5;5536:21;:::i;:::-;5529:5;5526:32;5516:60;;5572:1;5569;5562:12;5516:60;5466:116;:::o;5588:133::-;5631:5;5669:6;5656:20;5647:29;;5685:30;5709:5;5685:30;:::i;:::-;5588:133;;;;:::o;5727:698::-;5819:6;5827;5835;5884:2;5872:9;5863:7;5859:23;5855:32;5852:119;;;5890:79;;:::i;:::-;5852:119;6038:1;6027:9;6023:17;6010:31;6068:18;6060:6;6057:30;6054:117;;;6090:79;;:::i;:::-;6054:117;6203:80;6275:7;6266:6;6255:9;6251:22;6203:80;:::i;:::-;6185:98;;;;5981:312;6332:2;6358:50;6400:7;6391:6;6380:9;6376:22;6358:50;:::i;:::-;6348:60;;6303:115;5727:698;;;;;:::o;6431:619::-;6508:6;6516;6524;6573:2;6561:9;6552:7;6548:23;6544:32;6541:119;;;6579:79;;:::i;:::-;6541:119;6699:1;6724:53;6769:7;6760:6;6749:9;6745:22;6724:53;:::i;:::-;6714:63;;6670:117;6826:2;6852:53;6897:7;6888:6;6877:9;6873:22;6852:53;:::i;:::-;6842:63;;6797:118;6954:2;6980:53;7025:7;7016:6;7005:9;7001:22;6980:53;:::i;:::-;6970:63;;6925:118;6431:619;;;;;:::o;7056:468::-;7121:6;7129;7178:2;7166:9;7157:7;7153:23;7149:32;7146:119;;;7184:79;;:::i;:::-;7146:119;7304:1;7329:53;7374:7;7365:6;7354:9;7350:22;7329:53;:::i;:::-;7319:63;;7275:117;7431:2;7457:50;7499:7;7490:6;7479:9;7475:22;7457:50;:::i;:::-;7447:60;;7402:115;7056:468;;;;;:::o;7530:86::-;7565:7;7605:4;7598:5;7594:16;7583:27;;7530:86;;;:::o;7622:112::-;7705:22;7721:5;7705:22;:::i;:::-;7700:3;7693:35;7622:112;;:::o;7740:214::-;7829:4;7867:2;7856:9;7852:18;7844:26;;7880:67;7944:1;7933:9;7929:17;7920:6;7880:67;:::i;:::-;7740:214;;;;:::o;7960:329::-;8019:6;8068:2;8056:9;8047:7;8043:23;8039:32;8036:119;;;8074:79;;:::i;:::-;8036:119;8194:1;8219:53;8264:7;8255:6;8244:9;8240:22;8219:53;:::i;:::-;8209:63;;8165:117;7960:329;;;;:::o;8295:118::-;8382:24;8400:5;8382:24;:::i;:::-;8377:3;8370:37;8295:118;;:::o;8419:222::-;8512:4;8550:2;8539:9;8535:18;8527:26;;8563:71;8631:1;8620:9;8616:17;8607:6;8563:71;:::i;:::-;8419:222;;;;:::o;8647:775::-;8880:4;8918:3;8907:9;8903:19;8895:27;;8932:71;9000:1;8989:9;8985:17;8976:6;8932:71;:::i;:::-;9013:72;9081:2;9070:9;9066:18;9057:6;9013:72;:::i;:::-;9095;9163:2;9152:9;9148:18;9139:6;9095:72;:::i;:::-;9177;9245:2;9234:9;9230:18;9221:6;9177:72;:::i;:::-;9259:73;9327:3;9316:9;9312:19;9303:6;9259:73;:::i;:::-;9342;9410:3;9399:9;9395:19;9386:6;9342:73;:::i;:::-;8647:775;;;;;;;;;:::o;9428:104::-;9473:7;9502:24;9520:5;9502:24;:::i;:::-;9491:35;;9428:104;;;:::o;9538:138::-;9619:32;9645:5;9619:32;:::i;:::-;9612:5;9609:43;9599:71;;9666:1;9663;9656:12;9599:71;9538:138;:::o;9682:155::-;9736:5;9774:6;9761:20;9752:29;;9790:41;9825:5;9790:41;:::i;:::-;9682:155;;;;:::o;9843:345::-;9910:6;9959:2;9947:9;9938:7;9934:23;9930:32;9927:119;;;9965:79;;:::i;:::-;9927:119;10085:1;10110:61;10163:7;10154:6;10143:9;10139:22;10110:61;:::i;:::-;10100:71;;10056:125;9843:345;;;;:::o;10194:474::-;10262:6;10270;10319:2;10307:9;10298:7;10294:23;10290:32;10287:119;;;10325:79;;:::i;:::-;10287:119;10445:1;10470:53;10515:7;10506:6;10495:9;10491:22;10470:53;:::i;:::-;10460:63;;10416:117;10572:2;10598:53;10643:7;10634:6;10623:9;10619:22;10598:53;:::i;:::-;10588:63;;10543:118;10194:474;;;;;:::o;10674:182::-;10814:34;10810:1;10802:6;10798:14;10791:58;10674:182;:::o;10862:366::-;11004:3;11025:67;11089:2;11084:3;11025:67;:::i;:::-;11018:74;;11101:93;11190:3;11101:93;:::i;:::-;11219:2;11214:3;11210:12;11203:19;;10862:366;;;:::o;11234:419::-;11400:4;11438:2;11427:9;11423:18;11415:26;;11487:9;11481:4;11477:20;11473:1;11462:9;11458:17;11451:47;11515:131;11641:4;11515:131;:::i;:::-;11507:139;;11234:419;;;:::o;11659:180::-;11707:77;11704:1;11697:88;11804:4;11801:1;11794:15;11828:4;11825:1;11818:15;11845:410;11885:7;11908:20;11926:1;11908:20;:::i;:::-;11903:25;;11942:20;11960:1;11942:20;:::i;:::-;11937:25;;11997:1;11994;11990:9;12019:30;12037:11;12019:30;:::i;:::-;12008:41;;12198:1;12189:7;12185:15;12182:1;12179:22;12159:1;12152:9;12132:83;12109:139;;12228:18;;:::i;:::-;12109:139;11893:362;11845:410;;;;:::o;12261:180::-;12309:77;12306:1;12299:88;12406:4;12403:1;12396:15;12430:4;12427:1;12420:15;12447:185;12487:1;12504:20;12522:1;12504:20;:::i;:::-;12499:25;;12538:20;12556:1;12538:20;:::i;:::-;12533:25;;12577:1;12567:35;;12582:18;;:::i;:::-;12567:35;12624:1;12621;12617:9;12612:14;;12447:185;;;;:::o;12638:332::-;12759:4;12797:2;12786:9;12782:18;12774:26;;12810:71;12878:1;12867:9;12863:17;12854:6;12810:71;:::i;:::-;12891:72;12959:2;12948:9;12944:18;12935:6;12891:72;:::i;:::-;12638:332;;;;;:::o;12976:180::-;13024:77;13021:1;13014:88;13121:4;13118:1;13111:15;13145:4;13142:1;13135:15;13162:320;13206:6;13243:1;13237:4;13233:12;13223:22;;13290:1;13284:4;13280:12;13311:18;13301:81;;13367:4;13359:6;13355:17;13345:27;;13301:81;13429:2;13421:6;13418:14;13398:18;13395:38;13392:84;;13448:18;;:::i;:::-;13392:84;13213:269;13162:320;;;:::o;13488:221::-;13628:34;13624:1;13616:6;13612:14;13605:58;13697:4;13692:2;13684:6;13680:15;13673:29;13488:221;:::o;13715:366::-;13857:3;13878:67;13942:2;13937:3;13878:67;:::i;:::-;13871:74;;13954:93;14043:3;13954:93;:::i;:::-;14072:2;14067:3;14063:12;14056:19;;13715:366;;;:::o;14087:419::-;14253:4;14291:2;14280:9;14276:18;14268:26;;14340:9;14334:4;14330:20;14326:1;14315:9;14311:17;14304:47;14368:131;14494:4;14368:131;:::i;:::-;14360:139;;14087:419;;;:::o;14512:180::-;14560:77;14557:1;14550:88;14657:4;14654:1;14647:15;14681:4;14678:1;14671:15;14698:179;14838:31;14834:1;14826:6;14822:14;14815:55;14698:179;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:227::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:10;15884:2;15876:6;15872:15;15865:35;15680:227;:::o;15913:366::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:419::-;16451:4;16489:2;16478:9;16474:18;16466:26;;16538:9;16532:4;16528:20;16524:1;16513:9;16509:17;16502:47;16566:131;16692:4;16566:131;:::i;:::-;16558:139;;16285:419;;;:::o;16710:320::-;16825:4;16863:2;16852:9;16848:18;16840:26;;16876:71;16944:1;16933:9;16929:17;16920:6;16876:71;:::i;:::-;16957:66;17019:2;17008:9;17004:18;16995:6;16957:66;:::i;:::-;16710:320;;;;;:::o;17036:191::-;17076:3;17095:20;17113:1;17095:20;:::i;:::-;17090:25;;17129:20;17147:1;17129:20;:::i;:::-;17124:25;;17172:1;17169;17165:9;17158:16;;17193:3;17190:1;17187:10;17184:36;;;17200:18;;:::i;:::-;17184:36;17036:191;;;;:::o;17233:180::-;17373:32;17369:1;17361:6;17357:14;17350:56;17233:180;:::o;17419:366::-;17561:3;17582:67;17646:2;17641:3;17582:67;:::i;:::-;17575:74;;17658:93;17747:3;17658:93;:::i;:::-;17776:2;17771:3;17767:12;17760:19;;17419:366;;;:::o;17791:419::-;17957:4;17995:2;17984:9;17980:18;17972:26;;18044:9;18038:4;18034:20;18030:1;18019:9;18015:17;18008:47;18072:131;18198:4;18072:131;:::i;:::-;18064:139;;17791:419;;;:::o;18216:171::-;18356:23;18352:1;18344:6;18340:14;18333:47;18216:171;:::o;18393:366::-;18535:3;18556:67;18620:2;18615:3;18556:67;:::i;:::-;18549:74;;18632:93;18721:3;18632:93;:::i;:::-;18750:2;18745:3;18741:12;18734:19;;18393:366;;;:::o;18765:419::-;18931:4;18969:2;18958:9;18954:18;18946:26;;19018:9;19012:4;19008:20;19004:1;18993:9;18989:17;18982:47;19046:131;19172:4;19046:131;:::i;:::-;19038:139;;18765:419;;;:::o;19190:172::-;19330:24;19326:1;19318:6;19314:14;19307:48;19190:172;:::o;19368:366::-;19510:3;19531:67;19595:2;19590:3;19531:67;:::i;:::-;19524:74;;19607:93;19696:3;19607:93;:::i;:::-;19725:2;19720:3;19716:12;19709:19;;19368:366;;;:::o;19740:419::-;19906:4;19944:2;19933:9;19929:18;19921:26;;19993:9;19987:4;19983:20;19979:1;19968:9;19964:17;19957:47;20021:131;20147:4;20021:131;:::i;:::-;20013:139;;19740:419;;;:::o;20165:224::-;20305:34;20301:1;20293:6;20289:14;20282:58;20374:7;20369:2;20361:6;20357:15;20350:32;20165:224;:::o;20395:366::-;20537:3;20558:67;20622:2;20617:3;20558:67;:::i;:::-;20551:74;;20634:93;20723:3;20634:93;:::i;:::-;20752:2;20747:3;20743:12;20736:19;;20395:366;;;:::o;20767:419::-;20933:4;20971:2;20960:9;20956:18;20948:26;;21020:9;21014:4;21010:20;21006:1;20995:9;20991:17;20984:47;21048:131;21174:4;21048:131;:::i;:::-;21040:139;;20767:419;;;:::o;21192:60::-;21220:3;21241:5;21234:12;;21192:60;;;:::o;21258:142::-;21308:9;21341:53;21359:34;21368:24;21386:5;21368:24;:::i;:::-;21359:34;:::i;:::-;21341:53;:::i;:::-;21328:66;;21258:142;;;:::o;21406:126::-;21456:9;21489:37;21520:5;21489:37;:::i;:::-;21476:50;;21406:126;;;:::o;21538:134::-;21596:9;21629:37;21660:5;21629:37;:::i;:::-;21616:50;;21538:134;;;:::o;21678:147::-;21773:45;21812:5;21773:45;:::i;:::-;21768:3;21761:58;21678:147;;:::o;21831:238::-;21932:4;21970:2;21959:9;21955:18;21947:26;;21983:79;22059:1;22048:9;22044:17;22035:6;21983:79;:::i;:::-;21831:238;;;;:::o;22075:143::-;22132:5;22163:6;22157:13;22148:22;;22179:33;22206:5;22179:33;:::i;:::-;22075:143;;;;:::o;22224:351::-;22294:6;22343:2;22331:9;22322:7;22318:23;22314:32;22311:119;;;22349:79;;:::i;:::-;22311:119;22469:1;22494:64;22550:7;22541:6;22530:9;22526:22;22494:64;:::i;:::-;22484:74;;22440:128;22224:351;;;;:::o;22581:348::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22761:79;22837:1;22826:9;22822:17;22813:6;22761:79;:::i;:::-;22850:72;22918:2;22907:9;22903:18;22894:6;22850:72;:::i;:::-;22581:348;;;;;:::o;22935:137::-;22989:5;23020:6;23014:13;23005:22;;23036:30;23060:5;23036:30;:::i;:::-;22935:137;;;;:::o;23078:345::-;23145:6;23194:2;23182:9;23173:7;23169:23;23165:32;23162:119;;;23200:79;;:::i;:::-;23162:119;23320:1;23345:61;23398:7;23389:6;23378:9;23374:22;23345:61;:::i;:::-;23335:71;;23291:125;23078:345;;;;:::o;23429:173::-;23569:25;23565:1;23557:6;23553:14;23546:49;23429:173;:::o;23608:366::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:419::-;24146:4;24184:2;24173:9;24169:18;24161:26;;24233:9;24227:4;24223:20;24219:1;24208:9;24204:17;24197:47;24261:131;24387:4;24261:131;:::i;:::-;24253:139;;23980:419;;;:::o;24405:143::-;24462:5;24493:6;24487:13;24478:22;;24509:33;24536:5;24509:33;:::i;:::-;24405:143;;;;:::o;24554:351::-;24624:6;24673:2;24661:9;24652:7;24648:23;24644:32;24641:119;;;24679:79;;:::i;:::-;24641:119;24799:1;24824:64;24880:7;24871:6;24860:9;24856:22;24824:64;:::i;:::-;24814:74;;24770:128;24554:351;;;;:::o;24911:332::-;25032:4;25070:2;25059:9;25055:18;25047:26;;25083:71;25151:1;25140:9;25136:17;25127:6;25083:71;:::i;:::-;25164:72;25232:2;25221:9;25217:18;25208:6;25164:72;:::i;:::-;24911:332;;;;;:::o;25249:85::-;25294:7;25323:5;25312:16;;25249:85;;;:::o;25340:158::-;25398:9;25431:61;25449:42;25458:32;25484:5;25458:32;:::i;:::-;25449:42;:::i;:::-;25431:61;:::i;:::-;25418:74;;25340:158;;;:::o;25504:147::-;25599:45;25638:5;25599:45;:::i;:::-;25594:3;25587:58;25504:147;;:::o;25657:807::-;25906:4;25944:3;25933:9;25929:19;25921:27;;25958:71;26026:1;26015:9;26011:17;26002:6;25958:71;:::i;:::-;26039:72;26107:2;26096:9;26092:18;26083:6;26039:72;:::i;:::-;26121:80;26197:2;26186:9;26182:18;26173:6;26121:80;:::i;:::-;26211;26287:2;26276:9;26272:18;26263:6;26211:80;:::i;:::-;26301:73;26369:3;26358:9;26354:19;26345:6;26301:73;:::i;:::-;26384;26452:3;26441:9;26437:19;26428:6;26384:73;:::i;:::-;25657:807;;;;;;;;;:::o;26470:663::-;26558:6;26566;26574;26623:2;26611:9;26602:7;26598:23;26594:32;26591:119;;;26629:79;;:::i;:::-;26591:119;26749:1;26774:64;26830:7;26821:6;26810:9;26806:22;26774:64;:::i;:::-;26764:74;;26720:128;26887:2;26913:64;26969:7;26960:6;26949:9;26945:22;26913:64;:::i;:::-;26903:74;;26858:129;27026:2;27052:64;27108:7;27099:6;27088:9;27084:22;27052:64;:::i;:::-;27042:74;;26997:129;26470:663;;;;;:::o;27139:332::-;27260:4;27298:2;27287:9;27283:18;27275:26;;27311:71;27379:1;27368:9;27364:17;27355:6;27311:71;:::i;:::-;27392:72;27460:2;27449:9;27445:18;27436:6;27392:72;:::i;:::-;27139:332;;;;;:::o;27477:225::-;27617:34;27613:1;27605:6;27601:14;27594:58;27686:8;27681:2;27673:6;27669:15;27662:33;27477:225;:::o;27708:366::-;27850:3;27871:67;27935:2;27930:3;27871:67;:::i;:::-;27864:74;;27947:93;28036:3;27947:93;:::i;:::-;28065:2;28060:3;28056:12;28049:19;;27708:366;;;:::o;28080:419::-;28246:4;28284:2;28273:9;28269:18;28261:26;;28333:9;28327:4;28323:20;28319:1;28308:9;28304:17;28297:47;28361:131;28487:4;28361:131;:::i;:::-;28353:139;;28080:419;;;:::o;28505:223::-;28645:34;28641:1;28633:6;28629:14;28622:58;28714:6;28709:2;28701:6;28697:15;28690:31;28505:223;:::o;28734:366::-;28876:3;28897:67;28961:2;28956:3;28897:67;:::i;:::-;28890:74;;28973:93;29062:3;28973:93;:::i;:::-;29091:2;29086:3;29082:12;29075:19;;28734:366;;;:::o;29106:419::-;29272:4;29310:2;29299:9;29295:18;29287:26;;29359:9;29353:4;29349:20;29345:1;29334:9;29330:17;29323:47;29387:131;29513:4;29387:131;:::i;:::-;29379:139;;29106:419;;;:::o;29531:221::-;29671:34;29667:1;29659:6;29655:14;29648:58;29740:4;29735:2;29727:6;29723:15;29716:29;29531:221;:::o;29758:366::-;29900:3;29921:67;29985:2;29980:3;29921:67;:::i;:::-;29914:74;;29997:93;30086:3;29997:93;:::i;:::-;30115:2;30110:3;30106:12;30099:19;;29758:366;;;:::o;30130:419::-;30296:4;30334:2;30323:9;30319:18;30311:26;;30383:9;30377:4;30373:20;30369:1;30358:9;30354:17;30347:47;30411:131;30537:4;30411:131;:::i;:::-;30403:139;;30130:419;;;:::o;30555:224::-;30695:34;30691:1;30683:6;30679:14;30672:58;30764:7;30759:2;30751:6;30747:15;30740:32;30555:224;:::o;30785:366::-;30927:3;30948:67;31012:2;31007:3;30948:67;:::i;:::-;30941:74;;31024:93;31113:3;31024:93;:::i;:::-;31142:2;31137:3;31133:12;31126:19;;30785:366;;;:::o;31157:419::-;31323:4;31361:2;31350:9;31346:18;31338:26;;31410:9;31404:4;31400:20;31396:1;31385:9;31381:17;31374:47;31438:131;31564:4;31438:131;:::i;:::-;31430:139;;31157:419;;;:::o;31582:222::-;31722:34;31718:1;31710:6;31706:14;31699:58;31791:5;31786:2;31778:6;31774:15;31767:30;31582:222;:::o;31810:366::-;31952:3;31973:67;32037:2;32032:3;31973:67;:::i;:::-;31966:74;;32049:93;32138:3;32049:93;:::i;:::-;32167:2;32162:3;32158:12;32151:19;;31810:366;;;:::o;32182:419::-;32348:4;32386:2;32375:9;32371:18;32363:26;;32435:9;32429:4;32425:20;32421:1;32410:9;32406:17;32399:47;32463:131;32589:4;32463:131;:::i;:::-;32455:139;;32182:419;;;:::o;32607:228::-;32747:34;32743:1;32735:6;32731:14;32724:58;32816:11;32811:2;32803:6;32799:15;32792:36;32607:228;:::o;32841:366::-;32983:3;33004:67;33068:2;33063:3;33004:67;:::i;:::-;32997:74;;33080:93;33169:3;33080:93;:::i;:::-;33198:2;33193:3;33189:12;33182:19;;32841:366;;;:::o;33213:419::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:177::-;33778:29;33774:1;33766:6;33762:14;33755:53;33638:177;:::o;33821:366::-;33963:3;33984:67;34048:2;34043:3;33984:67;:::i;:::-;33977:74;;34060:93;34149:3;34060:93;:::i;:::-;34178:2;34173:3;34169:12;34162:19;;33821:366;;;:::o;34193:419::-;34359:4;34397:2;34386:9;34382:18;34374:26;;34446:9;34440:4;34436:20;34432:1;34421:9;34417:17;34410:47;34474:131;34600:4;34474:131;:::i;:::-;34466:139;;34193:419;;;:::o;34618:176::-;34758:28;34754:1;34746:6;34742:14;34735:52;34618:176;:::o;34800:366::-;34942:3;34963:67;35027:2;35022:3;34963:67;:::i;:::-;34956:74;;35039:93;35128:3;35039:93;:::i;:::-;35157:2;35152:3;35148:12;35141:19;;34800:366;;;:::o;35172:419::-;35338:4;35376:2;35365:9;35361:18;35353:26;;35425:9;35419:4;35415:20;35411:1;35400:9;35396:17;35389:47;35453:131;35579:4;35453:131;:::i;:::-;35445:139;;35172:419;;;:::o;35597:233::-;35636:3;35659:24;35677:5;35659:24;:::i;:::-;35650:33;;35705:66;35698:5;35695:77;35692:103;;35775:18;;:::i;:::-;35692:103;35822:1;35815:5;35811:13;35804:20;;35597:233;;;:::o;35836:180::-;35884:77;35881:1;35874:88;35981:4;35978:1;35971:15;36005:4;36002:1;35995:15;36022:114;36089:6;36123:5;36117:12;36107:22;;36022:114;;;:::o;36142:184::-;36241:11;36275:6;36270:3;36263:19;36315:4;36310:3;36306:14;36291:29;;36142:184;;;;:::o;36332:132::-;36399:4;36422:3;36414:11;;36452:4;36447:3;36443:14;36435:22;;36332:132;;;:::o;36470:108::-;36547:24;36565:5;36547:24;:::i;:::-;36542:3;36535:37;36470:108;;:::o;36584:179::-;36653:10;36674:46;36716:3;36708:6;36674:46;:::i;:::-;36752:4;36747:3;36743:14;36729:28;;36584:179;;;;:::o;36769:113::-;36839:4;36871;36866:3;36862:14;36854:22;;36769:113;;;:::o;36918:732::-;37037:3;37066:54;37114:5;37066:54;:::i;:::-;37136:86;37215:6;37210:3;37136:86;:::i;:::-;37129:93;;37246:56;37296:5;37246:56;:::i;:::-;37325:7;37356:1;37341:284;37366:6;37363:1;37360:13;37341:284;;;37442:6;37436:13;37469:63;37528:3;37513:13;37469:63;:::i;:::-;37462:70;;37555:60;37608:6;37555:60;:::i;:::-;37545:70;;37401:224;37388:1;37385;37381:9;37376:14;;37341:284;;;37345:14;37641:3;37634:10;;37042:608;;;36918:732;;;;:::o;37656:831::-;37919:4;37957:3;37946:9;37942:19;37934:27;;37971:71;38039:1;38028:9;38024:17;38015:6;37971:71;:::i;:::-;38052:80;38128:2;38117:9;38113:18;38104:6;38052:80;:::i;:::-;38179:9;38173:4;38169:20;38164:2;38153:9;38149:18;38142:48;38207:108;38310:4;38301:6;38207:108;:::i;:::-;38199:116;;38325:72;38393:2;38382:9;38378:18;38369:6;38325:72;:::i;:::-;38407:73;38475:3;38464:9;38460:19;38451:6;38407:73;:::i;:::-;37656:831;;;;;;;;:::o;38493:147::-;38594:11;38631:3;38616:18;;38493:147;;;;:::o;38646:114::-;;:::o;38766:398::-;38925:3;38946:83;39027:1;39022:3;38946:83;:::i;:::-;38939:90;;39038:93;39127:3;39038:93;:::i;:::-;39156:1;39151:3;39147:11;39140:18;;38766:398;;;:::o;39170:379::-;39354:3;39376:147;39519:3;39376:147;:::i;:::-;39369:154;;39540:3;39533:10;;39170:379;;;:::o;39555:225::-;39695:34;39691:1;39683:6;39679:14;39672:58;39764:8;39759:2;39751:6;39747:15;39740:33;39555:225;:::o;39786:366::-;39928:3;39949:67;40013:2;40008:3;39949:67;:::i;:::-;39942:74;;40025:93;40114:3;40025:93;:::i;:::-;40143:2;40138:3;40134:12;40127:19;;39786:366;;;:::o;40158:419::-;40324:4;40362:2;40351:9;40347:18;40339:26;;40411:9;40405:4;40401:20;40397:1;40386:9;40382:17;40375:47;40439:131;40565:4;40439:131;:::i;:::-;40431:139;;40158:419;;;:::o;40583:194::-;40623:4;40643:20;40661:1;40643:20;:::i;:::-;40638:25;;40677:20;40695:1;40677:20;:::i;:::-;40672:25;;40721:1;40718;40714:9;40706:17;;40745:1;40739:4;40736:11;40733:37;;;40750:18;;:::i;:::-;40733:37;40583:194;;;;:::o

Swarm Source

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