ETH Price: $3,922.87 (+1.03%)

Token

ERC-20: Nekon (NEKON)
 

Overview

Max Total Supply

420,690,000,000 NEKON

Holders

505

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
NEKON

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 7 of 9: NEKON.sol
// SPDX-License-Identifier: MIT

/*

すべての取引は猫が魚や紗球を取引しているとみなされるかもしれない。

From the dream of the warrior cat, the place they miss the most. $NEKON responded to their longing. We will embark on the journey of ERC20 without pre-sales. There are no team tokens. Fair market participation.


WEB: https://nekon.xyz

X: https://x.com/NEKON_meme

TELEGRAM: https://t.me/NEKONerc

*/

pragma solidity ^0.8.12;

import {Ownable} from "./Ownable.sol";
import {ERC20} from "./ERC20.sol";
import {IERC20} from "./IERC20.sol";
import {SafeMath} from "./SafeMath.sol";

import {IUniswapV2Factory} from "./IUniswapV2Factory.sol";
import {IUniswapV2Router02} from "./IUniswapV2Router02.sol";

contract NEKON is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapRouter;
    address public uniswapV2Pair;

    bool private swapping;

    address public NEKONWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyNEKONFee;

    uint256 public sellTotalFees;
    uint256 public sellNEKONFee;

    uint256 public tokensForNEKON;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapRouter(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event NEKONWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Nekon", "NEKON") {
        IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapRouter), true);
        uniswapRouter = _uniswapRouter;

        uint256 _buyNEKONFee = 0;
        uint256 _sellNEKONFee = 0;

        uint256 totalSupply = 420_690_000_000 * 1e18;

        maxTransactionAmount = 420_690_000_000 * 1e18;
        maxWallet = 420_690_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyNEKONFee = _buyNEKONFee;
        buyTotalFees = buyNEKONFee;

        sellNEKONFee = _sellNEKONFee;
        sellTotalFees = sellNEKONFee;

        NEKONWallet = msg.sender;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);

        _mint(msg.sender, totalSupply);

        _approve(msg.sender, address(_uniswapRouter), totalSupply);
        uniswapV2Pair = IUniswapV2Factory(uniswapRouter.factory()).createPair(
            address(this),
            uniswapRouter.WETH()
        );
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(
            !tradingActive,
            "trading"
        );
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 2.0%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _NEKONFee) external onlyOwner {
        buyNEKONFee = _NEKONFee;
        buyTotalFees = buyNEKONFee;
    }

    function updateSellFees(uint256 _NEKONFee) external onlyOwner {
        sellNEKONFee = _NEKONFee;
        sellTotalFees = sellNEKONFee;
    }

    function setSellFees(uint256 _NEKONFee) external onlyOwner {
        sellNEKONFee = _NEKONFee;
        sellTotalFees = sellNEKONFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateNEKONWallet(address newWallet) external onlyOwner {
        emit NEKONWalletUpdated(newWallet, NEKONWallet);
        NEKONWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

    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(!blacklisted[from], "Sender blacklisted");
        require(!blacklisted[to], "Receiver blacklisted");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForNEKON += (fees * sellNEKONFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForNEKON += (fees * buyNEKONFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

        _approve(address(this), address(uniswapRouter), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForNEKON;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        tokensForNEKON = 0;

        (success, ) = address(NEKONWallet).call{value: ethBalance}("");
    }

    function withdrawNEKON() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawNEKONTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    function withdrawETH(address toAddr) external onlyOwner {
        (bool success, ) = toAddr.call{value: address(this).balance}("");
        require(success);
    }
}

File 1 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

pragma solidity ^0.8.19;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 2 of 9: ERC20.sol
pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 updated 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 updated 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 updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        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 {}
}

File 3 of 9: IERC20.sol
pragma solidity ^0.8.0; 

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

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

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

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

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

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

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

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

File 4 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import {IERC20} from "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

File 5 of 9: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 6 of 9: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

interface IUniswapV2Router02 {
    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;
}

File 8 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.19;

import {Context} from "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 9 of 9: SafeMath.sol
pragma solidity ^0.8.19;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"NEKONWalletUpdated","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapRouter","type":"event"},{"inputs":[],"name":"NEKONWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNEKONFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellNEKONFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NEKONFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForNEKON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NEKONFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateNEKONWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NEKONFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNEKON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawNEKONTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff02191690831515021790555034801561005d575f80fd5b506040518060400160405280600581526020017f4e656b6f6e0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e454b4f4e00000000000000000000000000000000000000000000000000000081525081600390816100d99190610daa565b5080600490816100e99190610daa565b5050506101086100fd6104a260201b60201c565b6104a960201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061013181600161056c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f805f6c054f529ca52576bc689200000090506c054f529ca52576bc68920000006008819055506c054f529ca52576bc6892000000600a819055506127106005826101b09190610ea6565b6101ba9190610f14565b60098190555082600e81905550600e54600d8190555081601081905550601054600f819055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061023e61023161064c60201b60201c565b600161067460201b60201c565b61024f30600161067460201b60201c565b61026d61026061064c60201b60201c565b600161056c60201b60201c565b61027e30600161056c60201b60201c565b61028e33826107a260201b60201c565b61029f33858361090560201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e9190610fa2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610375573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103999190610fa2565b6040518363ffffffff1660e01b81526004016103b6929190610fdc565b6020604051808303815f875af11580156103d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f69190610fa2565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061046760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161056c60201b60201c565b61049960065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610ac860201b60201c565b5050505061128d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61057a6104a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661059e61064c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb9061105d565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106826104a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106a661064c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f39061105d565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107969190611095565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610807906110f8565b60405180910390fd5b6108215f8383610b6660201b60201c565b8060025f8282546108329190611116565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108849190611116565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108e89190611158565b60405180910390a36109015f8383610b6b60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a906111e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d89061126f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610abb9190611158565b60405180910390a3505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610beb57607f821691505b602082108103610bfe57610bfd610ba7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c25565b610c6a8683610c25565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610cae610ca9610ca484610c82565b610c8b565b610c82565b9050919050565b5f819050919050565b610cc783610c94565b610cdb610cd382610cb5565b848454610c31565b825550505050565b5f90565b610cef610ce3565b610cfa818484610cbe565b505050565b5b81811015610d1d57610d125f82610ce7565b600181019050610d00565b5050565b601f821115610d6257610d3381610c04565b610d3c84610c16565b81016020851015610d4b578190505b610d5f610d5785610c16565b830182610cff565b50505b505050565b5f82821c905092915050565b5f610d825f1984600802610d67565b1980831691505092915050565b5f610d9a8383610d73565b9150826002028217905092915050565b610db382610b70565b67ffffffffffffffff811115610dcc57610dcb610b7a565b5b610dd68254610bd4565b610de1828285610d21565b5f60209050601f831160018114610e12575f8415610e00578287015190505b610e0a8582610d8f565b865550610e71565b601f198416610e2086610c04565b5f5b82811015610e4757848901518255600182019150602085019450602081019050610e22565b86831015610e645784890151610e60601f891682610d73565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610eb082610c82565b9150610ebb83610c82565b9250828202610ec981610c82565b91508282048414831517610ee057610edf610e79565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f1e82610c82565b9150610f2983610c82565b925082610f3957610f38610ee7565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7182610f48565b9050919050565b610f8181610f67565b8114610f8b575f80fd5b50565b5f81519050610f9c81610f78565b92915050565b5f60208284031215610fb757610fb6610f44565b5b5f610fc484828501610f8e565b91505092915050565b610fd681610f67565b82525050565b5f604082019050610fef5f830185610fcd565b610ffc6020830184610fcd565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611047602083611003565b915061105282611013565b602082019050919050565b5f6020820190508181035f8301526110748161103b565b9050919050565b5f8115159050919050565b61108f8161107b565b82525050565b5f6020820190506110a85f830184611086565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6110e2601f83611003565b91506110ed826110ae565b602082019050919050565b5f6020820190508181035f83015261110f816110d6565b9050919050565b5f61112082610c82565b915061112b83610c82565b925082820190508082111561114357611142610e79565b5b92915050565b61115281610c82565b82525050565b5f60208201905061116b5f830184611149565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6111cb602483611003565b91506111d682611171565b604082019050919050565b5f6020820190508181035f8301526111f8816111bf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611259602283611003565b9150611264826111ff565b604082019050919050565b5f6020820190508181035f8301526112868161124d565b9050919050565b6080516148e76112ba5f395f818161138d015281816134a20152818161358101526135a801526148e75ff3fe608060405260043610610296575f3560e01c80638757306311610159578063c18bc195116100c0578063e26b162511610079578063e26b1625146109fb578063e2f4560514610a23578063eba4c33314610a4d578063f2fde38b14610a75578063f8b45b0514610a9d578063fe575a8714610ac75761029d565b8063c18bc195146108f1578063c8c8ebe414610919578063cd9a9a9a14610943578063d257b34f14610959578063d85ba06314610995578063dd62ed3e146109bf5761029d565b80639a7a23d6116101125780639a7a23d6146107c3578063a457c2d7146107eb578063a9059cbb14610827578063b62496f514610863578063bbc0c7421461089f578063c0246668146108c95761029d565b806387573063146106df5780638a8c523c146107095780638da5cb5b1461071f578063924de9b71461074957806395927c251461077157806395d89b41146107995761029d565b80634a62bb65116101fd57806370a08231116101b657806370a08231146105e9578063715018a61461062557806371fc46881461063b578063735de9f714610663578063751039fc1461068d5780637571336a146106b75761029d565b80634a62bb65146104dd5780634fbee1931461050757806351ff769514610543578063690d83201461056d5780636a486a8e146105955780636ddd1713146105bf5761029d565b806323b872dd1161024f57806323b872dd146103bd578063313ce567146103f957806331d832c51461042357806333f252fc1461044d578063395093511461047757806349bd5a5e146104b35761029d565b806306fdde03146102a1578063095ea7b3146102cb57806310d5de531461030757806317b2bdad1461034357806318160ddd1461036b578063203e727e146103955761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610b03565b6040516102c291906136bd565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec919061376e565b610b93565b6040516102fe91906137c6565b60405180910390f35b348015610312575f80fd5b5061032d600480360381019061032891906137df565b610bb0565b60405161033a91906137c6565b60405180910390f35b34801561034e575f80fd5b506103696004803603810190610364919061380a565b610bcd565b005b348015610376575f80fd5b5061037f610db3565b60405161038c9190613857565b60405180910390f35b3480156103a0575f80fd5b506103bb60048036038101906103b69190613870565b610dbc565b005b3480156103c8575f80fd5b506103e360048036038101906103de919061389b565b610ecb565b6040516103f091906137c6565b60405180910390f35b348015610404575f80fd5b5061040d610fbd565b60405161041a9190613906565b60405180910390f35b34801561042e575f80fd5b50610437610fc5565b6040516104449190613857565b60405180910390f35b348015610458575f80fd5b50610461610fcb565b60405161046e919061392e565b60405180910390f35b348015610482575f80fd5b5061049d6004803603810190610498919061376e565b610ff0565b6040516104aa91906137c6565b60405180910390f35b3480156104be575f80fd5b506104c7611097565b6040516104d4919061392e565b60405180910390f35b3480156104e8575f80fd5b506104f16110bc565b6040516104fe91906137c6565b60405180910390f35b348015610512575f80fd5b5061052d600480360381019061052891906137df565b6110ce565b60405161053a91906137c6565b60405180910390f35b34801561054e575f80fd5b50610557611120565b6040516105649190613857565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e91906137df565b611126565b005b3480156105a0575f80fd5b506105a9611217565b6040516105b69190613857565b60405180910390f35b3480156105ca575f80fd5b506105d361121d565b6040516105e091906137c6565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a91906137df565b611230565b60405161061c9190613857565b60405180910390f35b348015610630575f80fd5b50610639611275565b005b348015610646575f80fd5b50610661600480360381019061065c9190613870565b6112fc565b005b34801561066e575f80fd5b5061067761138b565b60405161068491906139a2565b60405180910390f35b348015610698575f80fd5b506106a16113af565b6040516106ae91906137c6565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d891906139e5565b61144c565b005b3480156106ea575f80fd5b506106f3611520565b6040516107009190613857565b60405180910390f35b348015610714575f80fd5b5061071d611526565b005b34801561072a575f80fd5b5061073361162a565b604051610740919061392e565b60405180910390f35b348015610754575f80fd5b5061076f600480360381019061076a9190613a23565b611652565b005b34801561077c575f80fd5b5061079760048036038101906107929190613870565b6116eb565b005b3480156107a4575f80fd5b506107ad61177a565b6040516107ba91906136bd565b60405180910390f35b3480156107ce575f80fd5b506107e960048036038101906107e491906139e5565b61180a565b005b3480156107f6575f80fd5b50610811600480360381019061080c919061376e565b611923565b60405161081e91906137c6565b60405180910390f35b348015610832575f80fd5b5061084d6004803603810190610848919061376e565b611a09565b60405161085a91906137c6565b60405180910390f35b34801561086e575f80fd5b50610889600480360381019061088491906137df565b611a26565b60405161089691906137c6565b60405180910390f35b3480156108aa575f80fd5b506108b3611a43565b6040516108c091906137c6565b60405180910390f35b3480156108d4575f80fd5b506108ef60048036038101906108ea91906139e5565b611a56565b005b3480156108fc575f80fd5b5061091760048036038101906109129190613870565b611b78565b005b348015610924575f80fd5b5061092d611c87565b60405161093a9190613857565b60405180910390f35b34801561094e575f80fd5b50610957611c8d565b005b348015610964575f80fd5b5061097f600480360381019061097a9190613870565b611e47565b60405161098c91906137c6565b60405180910390f35b3480156109a0575f80fd5b506109a9611ed4565b6040516109b69190613857565b60405180910390f35b3480156109ca575f80fd5b506109e560048036038101906109e0919061380a565b611eda565b6040516109f29190613857565b60405180910390f35b348015610a06575f80fd5b50610a216004803603810190610a1c91906137df565b611f5c565b005b348015610a2e575f80fd5b50610a37612096565b604051610a449190613857565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613870565b61209c565b005b348015610a80575f80fd5b50610a9b6004803603810190610a9691906137df565b61212b565b005b348015610aa8575f80fd5b50610ab1612221565b604051610abe9190613857565b60405180910390f35b348015610ad2575f80fd5b50610aed6004803603810190610ae891906137df565b612227565b604051610afa91906137c6565b60405180910390f35b606060038054610b1290613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e90613a7b565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610ba6610b9f612279565b8484612280565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610bd5612279565b73ffffffffffffffffffffffffffffffffffffffff16610bf361162a565b73ffffffffffffffffffffffffffffffffffffffff1614610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4090613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613b5d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cf1919061392e565b602060405180830381865afa158015610d0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d309190613b8f565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610d6d929190613bba565b6020604051808303815f875af1158015610d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dad9190613bf5565b50505050565b5f600254905090565b610dc4612279565b73ffffffffffffffffffffffffffffffffffffffff16610de261162a565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613af5565b60405180910390fd5b670de0b6b3a76400006103e86005610e4e610db3565b610e589190613c4d565b610e629190613cbb565b610e6c9190613cbb565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613d5b565b60405180910390fd5b670de0b6b3a764000081610ec29190613c4d565b60088190555050565b5f610ed7848484612443565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f1e612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613de9565b60405180910390fd5b610fb185610fa9612279565b858403612280565b60019150509392505050565b5f6012905090565b60115481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61108d610ffc612279565b848460015f611009612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110889190613e07565b612280565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b61112e612279565b73ffffffffffffffffffffffffffffffffffffffff1661114c61162a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613af5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516111c790613e67565b5f6040518083038185875af1925050503d805f8114611201576040519150601f19603f3d011682016040523d82523d5f602084013e611206565b606091505b5050905080611213575f80fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61127d612279565b73ffffffffffffffffffffffffffffffffffffffff1661129b61162a565b73ffffffffffffffffffffffffffffffffffffffff16146112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613af5565b60405180910390fd5b6112fa5f612ee5565b565b611304612279565b73ffffffffffffffffffffffffffffffffffffffff1661132261162a565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613af5565b60405180910390fd5b80600e81905550600e54600d8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6113b8612279565b73ffffffffffffffffffffffffffffffffffffffff166113d661162a565b73ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613af5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b611454612279565b73ffffffffffffffffffffffffffffffffffffffff1661147261162a565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613af5565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b61152e612279565b73ffffffffffffffffffffffffffffffffffffffff1661154c61162a565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613af5565b60405180910390fd5b600b60019054906101000a900460ff16156115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613ec5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61165a612279565b73ffffffffffffffffffffffffffffffffffffffff1661167861162a565b73ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590613af5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6116f3612279565b73ffffffffffffffffffffffffffffffffffffffff1661171161162a565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90613af5565b60405180910390fd5b80601081905550601054600f8190555050565b60606004805461178990613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546117b590613a7b565b80156118005780601f106117d757610100808354040283529160200191611800565b820191905f5260205f20905b8154815290600101906020018083116117e357829003601f168201915b5050505050905090565b611812612279565b73ffffffffffffffffffffffffffffffffffffffff1661183061162a565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613af5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613f53565b60405180910390fd5b61191f8282612fa8565b5050565b5f8060015f611930612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190613fe1565b60405180910390fd5b6119fe6119f5612279565b85858403612280565b600191505092915050565b5f611a1c611a15612279565b8484612443565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611a5e612279565b73ffffffffffffffffffffffffffffffffffffffff16611a7c61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613af5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b6c91906137c6565b60405180910390a25050565b611b80612279565b73ffffffffffffffffffffffffffffffffffffffff16611b9e61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613af5565b60405180910390fd5b670de0b6b3a76400006103e86014611c0a610db3565b611c149190613c4d565b611c1e9190613cbb565b611c289190613cbb565b811015611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c619061406f565b60405180910390fd5b670de0b6b3a764000081611c7e9190613c4d565b600a8190555050565b60085481565b611c95612279565b73ffffffffffffffffffffffffffffffffffffffff16611cb361162a565b73ffffffffffffffffffffffffffffffffffffffff1614611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090613af5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d43919061392e565b602060405180830381865afa158015611d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d829190613b8f565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611dbf929190613bba565b6020604051808303815f875af1158015611ddb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dff9190613bf5565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611e43573d5f803e3d5ffd5b5050565b5f611e50612279565b73ffffffffffffffffffffffffffffffffffffffff16611e6e61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90613af5565b60405180910390fd5b8160098190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f64612279565b73ffffffffffffffffffffffffffffffffffffffff16611f8261162a565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90613af5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffbc0fc59d0096071e3739d0b8f31673ba7f0b9312a8904ba35485c81d6a4999e60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6120a4612279565b73ffffffffffffffffffffffffffffffffffffffff166120c261162a565b73ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90613af5565b60405180910390fd5b80601081905550601054600f8190555050565b612133612279565b73ffffffffffffffffffffffffffffffffffffffff1661215161162a565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140fd565b60405180910390fd5b61221e81612ee5565b50565b600a5481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e59061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614219565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124369190613857565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614335565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a09061439d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614405565b60405180910390fd5b5f810361264a5761264583835f613046565b612ee0565b600b5f9054906101000a900460ff1615612af45761266661162a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d457506126a461162a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127255750600660149054906101000a900460ff16155b15612af357600b60019054906101000a900460ff166128195760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d9575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f9061446d565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b6575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561295d57600854811115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906144fb565b60405180910390fd5b600a5461290c83611230565b826129179190613e07565b1115612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614563565b60405180910390fd5b612af2565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129fa575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4957600854811115612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906145f1565b60405180910390fd5b612af1565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612af057600a54612aa383611230565b82612aae9190613e07565b1115612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690614563565b60405180910390fd5b5b5b5b5b5b5f612afe30611230565b90505f6009548210159050808015612b225750600b60029054906101000a900460ff165b8015612b3b5750600660149054906101000a900460ff16155b8015612b8e575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612be1575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c34575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c77576001600660146101000a81548160ff021916908315150217905550612c5c6132bb565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d26575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d2f575f90505b5f8115612ed05760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8d57505f600f54115b15612df357612dba6064612dac600f54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600f5460105482612dcd9190613c4d565b612dd79190613cbb565b60115f828254612de79190613e07565b92505081905550612ead565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e4a57505f600d54115b15612eac57612e776064612e69600d54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600d54600e5482612e8a9190613c4d565b612e949190613cbb565b60115f828254612ea49190613e07565b925050819055505b5b5f811115612ec157612ec0873083613046565b5b8085612ecd919061460f565b94505b612edb878787613046565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311990614335565b60405180910390fd5b61312d8383836133fb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a7906146b2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323e9190613e07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a29190613857565b60405180910390a36132b5848484613400565b50505050565b5f6132c530611230565b90505f60115490505f808314806132db57505f82145b156132e8575050506133cf565b60146009546132f79190613c4d565b83111561331057601460095461330d9190613c4d565b92505b5f8390505f47905061332182613405565b5f613335824761363890919063ffffffff16565b90505f60118190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161338390613e67565b5f6040518083038185875af1925050503d805f81146133bd576040519150601f19603f3d011682016040523d82523d5f602084013e6133c2565b606091505b5050809450505050505050505b565b5f81836133de9190613c4d565b905092915050565b5f81836133f39190613cbb565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613421576134206146d0565b5b60405190808252806020026020018201604052801561344f5781602001602082028036833780820191505090505b50905030815f81518110613466576134656146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613509573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352d919061473e565b81600181518110613541576135406146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a6307f000000000000000000000000000000000000000000000000000000000000000084612280565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613607959493929190614859565b5f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050505050565b5f8183613645919061460f565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61368f8261364d565b6136998185613657565b93506136a9818560208601613667565b6136b281613675565b840191505092915050565b5f6020820190508181035f8301526136d58184613685565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61370a826136e1565b9050919050565b61371a81613700565b8114613724575f80fd5b50565b5f8135905061373581613711565b92915050565b5f819050919050565b61374d8161373b565b8114613757575f80fd5b50565b5f8135905061376881613744565b92915050565b5f8060408385031215613784576137836136dd565b5b5f61379185828601613727565b92505060206137a28582860161375a565b9150509250929050565b5f8115159050919050565b6137c0816137ac565b82525050565b5f6020820190506137d95f8301846137b7565b92915050565b5f602082840312156137f4576137f36136dd565b5b5f61380184828501613727565b91505092915050565b5f80604083850312156138205761381f6136dd565b5b5f61382d85828601613727565b925050602061383e85828601613727565b9150509250929050565b6138518161373b565b82525050565b5f60208201905061386a5f830184613848565b92915050565b5f60208284031215613885576138846136dd565b5b5f6138928482850161375a565b91505092915050565b5f805f606084860312156138b2576138b16136dd565b5b5f6138bf86828701613727565b93505060206138d086828701613727565b92505060406138e18682870161375a565b9150509250925092565b5f60ff82169050919050565b613900816138eb565b82525050565b5f6020820190506139195f8301846138f7565b92915050565b61392881613700565b82525050565b5f6020820190506139415f83018461391f565b92915050565b5f819050919050565b5f61396a613965613960846136e1565b613947565b6136e1565b9050919050565b5f61397b82613950565b9050919050565b5f61398c82613971565b9050919050565b61399c81613982565b82525050565b5f6020820190506139b55f830184613993565b92915050565b6139c4816137ac565b81146139ce575f80fd5b50565b5f813590506139df816139bb565b92915050565b5f80604083850312156139fb576139fa6136dd565b5b5f613a0885828601613727565b9250506020613a19858286016139d1565b9150509250929050565b5f60208284031215613a3857613a376136dd565b5b5f613a45848285016139d1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a9257607f821691505b602082108103613aa557613aa4613a4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613adf602083613657565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f613b47601a83613657565b9150613b5282613b13565b602082019050919050565b5f6020820190508181035f830152613b7481613b3b565b9050919050565b5f81519050613b8981613744565b92915050565b5f60208284031215613ba457613ba36136dd565b5b5f613bb184828501613b7b565b91505092915050565b5f604082019050613bcd5f83018561391f565b613bda6020830184613848565b9392505050565b5f81519050613bef816139bb565b92915050565b5f60208284031215613c0a57613c096136dd565b5b5f613c1784828501613be1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c578261373b565b9150613c628361373b565b9250828202613c708161373b565b91508282048414831517613c8757613c86613c20565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cc58261373b565b9150613cd08361373b565b925082613ce057613cdf613c8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f613d45602f83613657565b9150613d5082613ceb565b604082019050919050565b5f6020820190508181035f830152613d7281613d39565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613dd3602883613657565b9150613dde82613d79565b604082019050919050565b5f6020820190508181035f830152613e0081613dc7565b9050919050565b5f613e118261373b565b9150613e1c8361373b565b9250828201905080821115613e3457613e33613c20565b5b92915050565b5f81905092915050565b50565b5f613e525f83613e3a565b9150613e5d82613e44565b5f82019050919050565b5f613e7182613e47565b9150819050919050565b7f74726164696e67000000000000000000000000000000000000000000000000005f82015250565b5f613eaf600783613657565b9150613eba82613e7b565b602082019050919050565b5f6020820190508181035f830152613edc81613ea3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f3d603983613657565b9150613f4882613ee3565b604082019050919050565b5f6020820190508181035f830152613f6a81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613fcb602583613657565b9150613fd682613f71565b604082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f322e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613657565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602683613657565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614175602483613657565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602283613657565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614291602583613657565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61431f602383613657565b915061432a826142c5565b604082019050919050565b5f6020820190508181035f83015261434c81614313565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f614387601283613657565b915061439282614353565b602082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6143ef601483613657565b91506143fa826143bb565b602082019050919050565b5f6020820190508181035f83015261441c816143e3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614457601683613657565b915061446282614423565b602082019050919050565b5f6020820190508181035f8301526144848161444b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144e5603583613657565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61454d601383613657565b915061455882614519565b602082019050919050565b5f6020820190508181035f83015261457a81614541565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145db603683613657565b91506145e682614581565b604082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f6146198261373b565b91506146248361373b565b925082820390508181111561463c5761463b613c20565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61469c602683613657565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061473881613711565b92915050565b5f60208284031215614753576147526136dd565b5b5f6147608482850161472a565b91505092915050565b5f819050919050565b5f61478c61478761478284614769565b613947565b61373b565b9050919050565b61479c81614772565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147d481613700565b82525050565b5f6147e583836147cb565b60208301905092915050565b5f602082019050919050565b5f614807826147a2565b61481181856147ac565b935061481c836147bc565b805f5b8381101561484c57815161483388826147da565b975061483e836147f1565b92505060018101905061481f565b5085935050505092915050565b5f60a08201905061486c5f830188613848565b6148796020830187614793565b818103604083015261488b81866147fd565b905061489a606083018561391f565b6148a76080830184613848565b969550505050505056fea26469706673582212207e6387f7d563cf4913d3bbc425f878e2e1d96a72080b5171194c72335386f26064736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610296575f3560e01c80638757306311610159578063c18bc195116100c0578063e26b162511610079578063e26b1625146109fb578063e2f4560514610a23578063eba4c33314610a4d578063f2fde38b14610a75578063f8b45b0514610a9d578063fe575a8714610ac75761029d565b8063c18bc195146108f1578063c8c8ebe414610919578063cd9a9a9a14610943578063d257b34f14610959578063d85ba06314610995578063dd62ed3e146109bf5761029d565b80639a7a23d6116101125780639a7a23d6146107c3578063a457c2d7146107eb578063a9059cbb14610827578063b62496f514610863578063bbc0c7421461089f578063c0246668146108c95761029d565b806387573063146106df5780638a8c523c146107095780638da5cb5b1461071f578063924de9b71461074957806395927c251461077157806395d89b41146107995761029d565b80634a62bb65116101fd57806370a08231116101b657806370a08231146105e9578063715018a61461062557806371fc46881461063b578063735de9f714610663578063751039fc1461068d5780637571336a146106b75761029d565b80634a62bb65146104dd5780634fbee1931461050757806351ff769514610543578063690d83201461056d5780636a486a8e146105955780636ddd1713146105bf5761029d565b806323b872dd1161024f57806323b872dd146103bd578063313ce567146103f957806331d832c51461042357806333f252fc1461044d578063395093511461047757806349bd5a5e146104b35761029d565b806306fdde03146102a1578063095ea7b3146102cb57806310d5de531461030757806317b2bdad1461034357806318160ddd1461036b578063203e727e146103955761029d565b3661029d57005b5f80fd5b3480156102ac575f80fd5b506102b5610b03565b6040516102c291906136bd565b60405180910390f35b3480156102d6575f80fd5b506102f160048036038101906102ec919061376e565b610b93565b6040516102fe91906137c6565b60405180910390f35b348015610312575f80fd5b5061032d600480360381019061032891906137df565b610bb0565b60405161033a91906137c6565b60405180910390f35b34801561034e575f80fd5b506103696004803603810190610364919061380a565b610bcd565b005b348015610376575f80fd5b5061037f610db3565b60405161038c9190613857565b60405180910390f35b3480156103a0575f80fd5b506103bb60048036038101906103b69190613870565b610dbc565b005b3480156103c8575f80fd5b506103e360048036038101906103de919061389b565b610ecb565b6040516103f091906137c6565b60405180910390f35b348015610404575f80fd5b5061040d610fbd565b60405161041a9190613906565b60405180910390f35b34801561042e575f80fd5b50610437610fc5565b6040516104449190613857565b60405180910390f35b348015610458575f80fd5b50610461610fcb565b60405161046e919061392e565b60405180910390f35b348015610482575f80fd5b5061049d6004803603810190610498919061376e565b610ff0565b6040516104aa91906137c6565b60405180910390f35b3480156104be575f80fd5b506104c7611097565b6040516104d4919061392e565b60405180910390f35b3480156104e8575f80fd5b506104f16110bc565b6040516104fe91906137c6565b60405180910390f35b348015610512575f80fd5b5061052d600480360381019061052891906137df565b6110ce565b60405161053a91906137c6565b60405180910390f35b34801561054e575f80fd5b50610557611120565b6040516105649190613857565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e91906137df565b611126565b005b3480156105a0575f80fd5b506105a9611217565b6040516105b69190613857565b60405180910390f35b3480156105ca575f80fd5b506105d361121d565b6040516105e091906137c6565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a91906137df565b611230565b60405161061c9190613857565b60405180910390f35b348015610630575f80fd5b50610639611275565b005b348015610646575f80fd5b50610661600480360381019061065c9190613870565b6112fc565b005b34801561066e575f80fd5b5061067761138b565b60405161068491906139a2565b60405180910390f35b348015610698575f80fd5b506106a16113af565b6040516106ae91906137c6565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d891906139e5565b61144c565b005b3480156106ea575f80fd5b506106f3611520565b6040516107009190613857565b60405180910390f35b348015610714575f80fd5b5061071d611526565b005b34801561072a575f80fd5b5061073361162a565b604051610740919061392e565b60405180910390f35b348015610754575f80fd5b5061076f600480360381019061076a9190613a23565b611652565b005b34801561077c575f80fd5b5061079760048036038101906107929190613870565b6116eb565b005b3480156107a4575f80fd5b506107ad61177a565b6040516107ba91906136bd565b60405180910390f35b3480156107ce575f80fd5b506107e960048036038101906107e491906139e5565b61180a565b005b3480156107f6575f80fd5b50610811600480360381019061080c919061376e565b611923565b60405161081e91906137c6565b60405180910390f35b348015610832575f80fd5b5061084d6004803603810190610848919061376e565b611a09565b60405161085a91906137c6565b60405180910390f35b34801561086e575f80fd5b50610889600480360381019061088491906137df565b611a26565b60405161089691906137c6565b60405180910390f35b3480156108aa575f80fd5b506108b3611a43565b6040516108c091906137c6565b60405180910390f35b3480156108d4575f80fd5b506108ef60048036038101906108ea91906139e5565b611a56565b005b3480156108fc575f80fd5b5061091760048036038101906109129190613870565b611b78565b005b348015610924575f80fd5b5061092d611c87565b60405161093a9190613857565b60405180910390f35b34801561094e575f80fd5b50610957611c8d565b005b348015610964575f80fd5b5061097f600480360381019061097a9190613870565b611e47565b60405161098c91906137c6565b60405180910390f35b3480156109a0575f80fd5b506109a9611ed4565b6040516109b69190613857565b60405180910390f35b3480156109ca575f80fd5b506109e560048036038101906109e0919061380a565b611eda565b6040516109f29190613857565b60405180910390f35b348015610a06575f80fd5b50610a216004803603810190610a1c91906137df565b611f5c565b005b348015610a2e575f80fd5b50610a37612096565b604051610a449190613857565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613870565b61209c565b005b348015610a80575f80fd5b50610a9b6004803603810190610a9691906137df565b61212b565b005b348015610aa8575f80fd5b50610ab1612221565b604051610abe9190613857565b60405180910390f35b348015610ad2575f80fd5b50610aed6004803603810190610ae891906137df565b612227565b604051610afa91906137c6565b60405180910390f35b606060038054610b1290613a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e90613a7b565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610ba6610b9f612279565b8484612280565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610bd5612279565b73ffffffffffffffffffffffffffffffffffffffff16610bf361162a565b73ffffffffffffffffffffffffffffffffffffffff1614610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4090613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613b5d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cf1919061392e565b602060405180830381865afa158015610d0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d309190613b8f565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610d6d929190613bba565b6020604051808303815f875af1158015610d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dad9190613bf5565b50505050565b5f600254905090565b610dc4612279565b73ffffffffffffffffffffffffffffffffffffffff16610de261162a565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613af5565b60405180910390fd5b670de0b6b3a76400006103e86005610e4e610db3565b610e589190613c4d565b610e629190613cbb565b610e6c9190613cbb565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613d5b565b60405180910390fd5b670de0b6b3a764000081610ec29190613c4d565b60088190555050565b5f610ed7848484612443565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f1e612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613de9565b60405180910390fd5b610fb185610fa9612279565b858403612280565b60019150509392505050565b5f6012905090565b60115481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61108d610ffc612279565b848460015f611009612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110889190613e07565b612280565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b61112e612279565b73ffffffffffffffffffffffffffffffffffffffff1661114c61162a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613af5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516111c790613e67565b5f6040518083038185875af1925050503d805f8114611201576040519150601f19603f3d011682016040523d82523d5f602084013e611206565b606091505b5050905080611213575f80fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61127d612279565b73ffffffffffffffffffffffffffffffffffffffff1661129b61162a565b73ffffffffffffffffffffffffffffffffffffffff16146112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613af5565b60405180910390fd5b6112fa5f612ee5565b565b611304612279565b73ffffffffffffffffffffffffffffffffffffffff1661132261162a565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613af5565b60405180910390fd5b80600e81905550600e54600d8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f6113b8612279565b73ffffffffffffffffffffffffffffffffffffffff166113d661162a565b73ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613af5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b611454612279565b73ffffffffffffffffffffffffffffffffffffffff1661147261162a565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613af5565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b61152e612279565b73ffffffffffffffffffffffffffffffffffffffff1661154c61162a565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613af5565b60405180910390fd5b600b60019054906101000a900460ff16156115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613ec5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61165a612279565b73ffffffffffffffffffffffffffffffffffffffff1661167861162a565b73ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590613af5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6116f3612279565b73ffffffffffffffffffffffffffffffffffffffff1661171161162a565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90613af5565b60405180910390fd5b80601081905550601054600f8190555050565b60606004805461178990613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546117b590613a7b565b80156118005780601f106117d757610100808354040283529160200191611800565b820191905f5260205f20905b8154815290600101906020018083116117e357829003601f168201915b5050505050905090565b611812612279565b73ffffffffffffffffffffffffffffffffffffffff1661183061162a565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613af5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613f53565b60405180910390fd5b61191f8282612fa8565b5050565b5f8060015f611930612279565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190613fe1565b60405180910390fd5b6119fe6119f5612279565b85858403612280565b600191505092915050565b5f611a1c611a15612279565b8484612443565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611a5e612279565b73ffffffffffffffffffffffffffffffffffffffff16611a7c61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613af5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b6c91906137c6565b60405180910390a25050565b611b80612279565b73ffffffffffffffffffffffffffffffffffffffff16611b9e61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613af5565b60405180910390fd5b670de0b6b3a76400006103e86014611c0a610db3565b611c149190613c4d565b611c1e9190613cbb565b611c289190613cbb565b811015611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c619061406f565b60405180910390fd5b670de0b6b3a764000081611c7e9190613c4d565b600a8190555050565b60085481565b611c95612279565b73ffffffffffffffffffffffffffffffffffffffff16611cb361162a565b73ffffffffffffffffffffffffffffffffffffffff1614611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090613af5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d43919061392e565b602060405180830381865afa158015611d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d829190613b8f565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611dbf929190613bba565b6020604051808303815f875af1158015611ddb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dff9190613bf5565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611e43573d5f803e3d5ffd5b5050565b5f611e50612279565b73ffffffffffffffffffffffffffffffffffffffff16611e6e61162a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90613af5565b60405180910390fd5b8160098190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f64612279565b73ffffffffffffffffffffffffffffffffffffffff16611f8261162a565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90613af5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffbc0fc59d0096071e3739d0b8f31673ba7f0b9312a8904ba35485c81d6a4999e60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6120a4612279565b73ffffffffffffffffffffffffffffffffffffffff166120c261162a565b73ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90613af5565b60405180910390fd5b80601081905550601054600f8190555050565b612133612279565b73ffffffffffffffffffffffffffffffffffffffff1661215161162a565b73ffffffffffffffffffffffffffffffffffffffff16146121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613af5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140fd565b60405180910390fd5b61221e81612ee5565b50565b600a5481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e59061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614219565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124369190613857565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690614335565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a09061439d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90614405565b60405180910390fd5b5f810361264a5761264583835f613046565b612ee0565b600b5f9054906101000a900460ff1615612af45761266661162a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d457506126a461162a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127255750600660149054906101000a900460ff16155b15612af357600b60019054906101000a900460ff166128195760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d9575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f9061446d565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b6575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561295d57600854811115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906144fb565b60405180910390fd5b600a5461290c83611230565b826129179190613e07565b1115612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614563565b60405180910390fd5b612af2565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129fa575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4957600854811115612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906145f1565b60405180910390fd5b612af1565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612af057600a54612aa383611230565b82612aae9190613e07565b1115612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690614563565b60405180910390fd5b5b5b5b5b5b5f612afe30611230565b90505f6009548210159050808015612b225750600b60029054906101000a900460ff165b8015612b3b5750600660149054906101000a900460ff16155b8015612b8e575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612be1575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c34575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c77576001600660146101000a81548160ff021916908315150217905550612c5c6132bb565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d26575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d2f575f90505b5f8115612ed05760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8d57505f600f54115b15612df357612dba6064612dac600f54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600f5460105482612dcd9190613c4d565b612dd79190613cbb565b60115f828254612de79190613e07565b92505081905550612ead565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e4a57505f600d54115b15612eac57612e776064612e69600d54886133d190919063ffffffff16565b6133e690919063ffffffff16565b9050600d54600e5482612e8a9190613c4d565b612e949190613cbb565b60115f828254612ea49190613e07565b925050819055505b5b5f811115612ec157612ec0873083613046565b5b8085612ecd919061460f565b94505b612edb878787613046565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311990614335565b60405180910390fd5b61312d8383836133fb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a7906146b2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323e9190613e07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a29190613857565b60405180910390a36132b5848484613400565b50505050565b5f6132c530611230565b90505f60115490505f808314806132db57505f82145b156132e8575050506133cf565b60146009546132f79190613c4d565b83111561331057601460095461330d9190613c4d565b92505b5f8390505f47905061332182613405565b5f613335824761363890919063ffffffff16565b90505f60118190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161338390613e67565b5f6040518083038185875af1925050503d805f81146133bd576040519150601f19603f3d011682016040523d82523d5f602084013e6133c2565b606091505b5050809450505050505050505b565b5f81836133de9190613c4d565b905092915050565b5f81836133f39190613cbb565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613421576134206146d0565b5b60405190808252806020026020018201604052801561344f5781602001602082028036833780820191505090505b50905030815f81518110613466576134656146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613509573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352d919061473e565b81600181518110613541576135406146fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612280565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613607959493929190614859565b5f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050505050565b5f8183613645919061460f565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61368f8261364d565b6136998185613657565b93506136a9818560208601613667565b6136b281613675565b840191505092915050565b5f6020820190508181035f8301526136d58184613685565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61370a826136e1565b9050919050565b61371a81613700565b8114613724575f80fd5b50565b5f8135905061373581613711565b92915050565b5f819050919050565b61374d8161373b565b8114613757575f80fd5b50565b5f8135905061376881613744565b92915050565b5f8060408385031215613784576137836136dd565b5b5f61379185828601613727565b92505060206137a28582860161375a565b9150509250929050565b5f8115159050919050565b6137c0816137ac565b82525050565b5f6020820190506137d95f8301846137b7565b92915050565b5f602082840312156137f4576137f36136dd565b5b5f61380184828501613727565b91505092915050565b5f80604083850312156138205761381f6136dd565b5b5f61382d85828601613727565b925050602061383e85828601613727565b9150509250929050565b6138518161373b565b82525050565b5f60208201905061386a5f830184613848565b92915050565b5f60208284031215613885576138846136dd565b5b5f6138928482850161375a565b91505092915050565b5f805f606084860312156138b2576138b16136dd565b5b5f6138bf86828701613727565b93505060206138d086828701613727565b92505060406138e18682870161375a565b9150509250925092565b5f60ff82169050919050565b613900816138eb565b82525050565b5f6020820190506139195f8301846138f7565b92915050565b61392881613700565b82525050565b5f6020820190506139415f83018461391f565b92915050565b5f819050919050565b5f61396a613965613960846136e1565b613947565b6136e1565b9050919050565b5f61397b82613950565b9050919050565b5f61398c82613971565b9050919050565b61399c81613982565b82525050565b5f6020820190506139b55f830184613993565b92915050565b6139c4816137ac565b81146139ce575f80fd5b50565b5f813590506139df816139bb565b92915050565b5f80604083850312156139fb576139fa6136dd565b5b5f613a0885828601613727565b9250506020613a19858286016139d1565b9150509250929050565b5f60208284031215613a3857613a376136dd565b5b5f613a45848285016139d1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a9257607f821691505b602082108103613aa557613aa4613a4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613adf602083613657565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f613b47601a83613657565b9150613b5282613b13565b602082019050919050565b5f6020820190508181035f830152613b7481613b3b565b9050919050565b5f81519050613b8981613744565b92915050565b5f60208284031215613ba457613ba36136dd565b5b5f613bb184828501613b7b565b91505092915050565b5f604082019050613bcd5f83018561391f565b613bda6020830184613848565b9392505050565b5f81519050613bef816139bb565b92915050565b5f60208284031215613c0a57613c096136dd565b5b5f613c1784828501613be1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c578261373b565b9150613c628361373b565b9250828202613c708161373b565b91508282048414831517613c8757613c86613c20565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cc58261373b565b9150613cd08361373b565b925082613ce057613cdf613c8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f613d45602f83613657565b9150613d5082613ceb565b604082019050919050565b5f6020820190508181035f830152613d7281613d39565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613dd3602883613657565b9150613dde82613d79565b604082019050919050565b5f6020820190508181035f830152613e0081613dc7565b9050919050565b5f613e118261373b565b9150613e1c8361373b565b9250828201905080821115613e3457613e33613c20565b5b92915050565b5f81905092915050565b50565b5f613e525f83613e3a565b9150613e5d82613e44565b5f82019050919050565b5f613e7182613e47565b9150819050919050565b7f74726164696e67000000000000000000000000000000000000000000000000005f82015250565b5f613eaf600783613657565b9150613eba82613e7b565b602082019050919050565b5f6020820190508181035f830152613edc81613ea3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f3d603983613657565b9150613f4882613ee3565b604082019050919050565b5f6020820190508181035f830152613f6a81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613fcb602583613657565b9150613fd682613f71565b604082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f322e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613657565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602683613657565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614175602483613657565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602283613657565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614291602583613657565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61431f602383613657565b915061432a826142c5565b604082019050919050565b5f6020820190508181035f83015261434c81614313565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f614387601283613657565b915061439282614353565b602082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6143ef601483613657565b91506143fa826143bb565b602082019050919050565b5f6020820190508181035f83015261441c816143e3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614457601683613657565b915061446282614423565b602082019050919050565b5f6020820190508181035f8301526144848161444b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144e5603583613657565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61454d601383613657565b915061455882614519565b602082019050919050565b5f6020820190508181035f83015261457a81614541565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145db603683613657565b91506145e682614581565b604082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f6146198261373b565b91506146248361373b565b925082820390508181111561463c5761463b613c20565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61469c602683613657565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061473881613711565b92915050565b5f60208284031215614753576147526136dd565b5b5f6147608482850161472a565b91505092915050565b5f819050919050565b5f61478c61478761478284614769565b613947565b61373b565b9050919050565b61479c81614772565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147d481613700565b82525050565b5f6147e583836147cb565b60208301905092915050565b5f602082019050919050565b5f614807826147a2565b61481181856147ac565b935061481c836147bc565b805f5b8381101561484c57815161483388826147da565b975061483e836147f1565b92505060018101905061481f565b5085935050505092915050565b5f60a08201905061486c5f830188613848565b6148796020830187614793565b818103604083015261488b81866147fd565b905061489a606083018561391f565b6148a76080830184613848565b969550505050505056fea26469706673582212207e6387f7d563cf4913d3bbc425f878e2e1d96a72080b5171194c72335386f26064736f6c634300081a0033

Deployed Bytecode Sourcemap

768:12389:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2088:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4255:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1654:63:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12691:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3208:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4379:275:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4906:492:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3050:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1476:29:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5807:215:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;899:28:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1116:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6618:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1440:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12988:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1405:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1196:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1745:103:7;;;;;;;;;;;;;:::i;:::-;;5298:140:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;843:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3990:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4927:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1370:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3744:194;;;;;;;;;;;;;:::i;:::-;;1094:87:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5190:100:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5598:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2307:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5937:304:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6525:413:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3719:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1875:57:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1156:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5747:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4662:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1001:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12432:251;;;;;;;;;;;;;:::i;:::-;;4181:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1336:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3957:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6445:165:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1043:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5446:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2003:201:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1083:24:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6752:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2088:100:1;2142:13;2175:5;2168:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2088:100;:::o;4255:169::-;4338:4;4355:39;4364:12;:10;:12::i;:::-;4378:7;4387:6;4355:8;:39::i;:::-;4412:4;4405:11;;4255:169;;;;:::o;1654:63:6:-;;;;;;;;;;;;;;;;;;;;;;:::o;12691:289::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12805:1:6::1;12787:20;;:6;:20;;::::0;12779:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12849:24;12883:6;12876:24;;;12909:4;12876:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12849:66;;12933:6;12926:23;;;12950:3;12955:16;12926:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12768:212;12691:289:::0;;:::o;3208:108:1:-;3269:7;3296:12;;3289:19;;3208:108;:::o;4379:275:6:-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4516:4:6::1;4508;4503:1;4487:13;:11;:13::i;:::-;:17;;;;:::i;:::-;4486:26;;;;:::i;:::-;4485:35;;;;:::i;:::-;4475:6;:45;;4453:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;4639:6;4629;:17;;;;:::i;:::-;4606:20;:40;;;;4379:275:::0;:::o;4906:492:1:-;5046:4;5063:36;5073:6;5081:9;5092:6;5063:9;:36::i;:::-;5112:24;5139:11;:19;5151:6;5139:19;;;;;;;;;;;;;;;:33;5159:12;:10;:12::i;:::-;5139:33;;;;;;;;;;;;;;;;5112:60;;5211:6;5191:16;:26;;5183:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5298:57;5307:6;5315:12;:10;:12::i;:::-;5348:6;5329:16;:25;5298:8;:57::i;:::-;5386:4;5379:11;;;4906:492;;;;;:::o;3050:93::-;3108:5;3133:2;3126:9;;3050:93;:::o;1476:29:6:-;;;;:::o;966:26::-;;;;;;;;;;;;;:::o;5807:215:1:-;5895:4;5912:80;5921:12;:10;:12::i;:::-;5935:7;5981:10;5944:11;:25;5956:12;:10;:12::i;:::-;5944:25;;;;;;;;;;;;;;;:34;5970:7;5944:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5912:8;:80::i;:::-;6010:4;6003:11;;5807:215;;;;:::o;899:28:6:-;;;;;;;;;;;;;:::o;1116:33::-;;;;;;;;;;;;;:::o;6618:126::-;6684:4;6708:19;:28;6728:7;6708:28;;;;;;;;;;;;;;;;;;;;;;;;;6701:35;;6618:126;;;:::o;1440:27::-;;;;:::o;12988:166::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13056:12:6::1;13074:6;:11;;13093:21;13074:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13055:64;;;13138:7;13130:16;;;::::0;::::1;;13044:110;12988:166:::0;:::o;1405:28::-;;;;:::o;1196:31::-;;;;;;;;;;;;;:::o;3379:127:1:-;3453:7;3480:9;:18;3490:7;3480:18;;;;;;;;;;;;;;;;3473:25;;3379:127;;;:::o;1745:103:7:-;1325:12;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1810:30:::1;1837:1;1810:18;:30::i;:::-;1745:103::o:0;5298:140:6:-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5384:9:6::1;5370:11;:23;;;;5419:11;;5404:12;:26;;;;5298:140:::0;:::o;843:49::-;;;:::o;3990:121::-;4042:4;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4076:5:6::1;4059:14;;:22;;;;;;;;;;;;;;;;;;4099:4;4092:11;;3990:121:::0;:::o;4927:167::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5082:4:6::1;5040:31;:39;5072:6;5040:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;4927:167:::0;;:::o;1370:26::-;;;;:::o;3744:194::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3822:13:6::1;;;;;;;;;;;3821:14;3799:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3897:4;3881:13;;:20;;;;;;;;;;;;;;;;;;3926:4;3912:11;;:18;;;;;;;;;;;;;;;;;;3744:194::o:0;1094:87:7:-;1140:7;1167:6;;;;;;;;;;;1160:13;;1094:87;:::o;5190:100:6:-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5275:7:6::1;5261:11;;:21;;;;;;;;;;;;;;;;;;5190:100:::0;:::o;5598:141::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5683:9:6::1;5668:12;:24;;;;5719:12;;5703:13;:28;;;;5598:141:::0;:::o;2307:104:1:-;2363:13;2396:7;2389:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2307:104;:::o;5937:304:6:-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6081:13:6::1;;;;;;;;;;;6073:21;;:4;:21;;::::0;6051:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6192:41;6221:4;6227:5;6192:28;:41::i;:::-;5937:304:::0;;:::o;6525:413:1:-;6618:4;6635:24;6662:11;:25;6674:12;:10;:12::i;:::-;6662:25;;;;;;;;;;;;;;;:34;6688:7;6662:34;;;;;;;;;;;;;;;;6635:61;;6735:15;6715:16;:35;;6707:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6828:67;6837:12;:10;:12::i;:::-;6851:7;6879:15;6860:16;:34;6828:8;:67::i;:::-;6926:4;6919:11;;;6525:413;;;;:::o;3719:175::-;3805:4;3822:42;3832:12;:10;:12::i;:::-;3846:9;3857:6;3822:9;:42::i;:::-;3882:4;3875:11;;3719:175;;;;:::o;1875:57:6:-;;;;;;;;;;;;;;;;;;;;;;:::o;1156:33::-;;;;;;;;;;;;;:::o;5747:182::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5863:8:6::1;5832:19;:28;5852:7;5832:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;5903:7;5887:34;;;5912:8;5887:34;;;;;;:::i;:::-;;;;;;;;5747:182:::0;;:::o;4662:257::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4803:4:6::1;4795;4789:2;4773:13;:11;:13::i;:::-;:18;;;;:::i;:::-;4772:27;;;;:::i;:::-;4771:36;;;;:::i;:::-;4761:6;:46;;4739:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;4904:6;4894;:17;;;;:::i;:::-;4882:9;:29;;;;4662:257:::0;:::o;1001:35::-;;;;:::o;12432:251::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12487:15:6::1;12520:4;12505:31;;;12545:4;12505:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12487:64;;12577:4;12562:30;;;12593:10;12605:7;12562:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12632:10;12624:28;;:51;12653:21;12624:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;12476:207;12432:251::o:0;4181:190::-;4289:4;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4332:9:6::1;4311:18;:30;;;;4359:4;4352:11;;4181:190:::0;;;:::o;1336:27::-;;;;:::o;3957:151:1:-;4046:7;4073:11;:18;4085:5;4073:18;;;;;;;;;;;;;;;:27;4092:7;4073:27;;;;;;;;;;;;;;;;4066:34;;3957:151;;;;:::o;6445:165:6:-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6556:11:6::1;;;;;;;;;;;6526:42;;6545:9;6526:42;;;;;;;;;;;;6593:9;6579:11;;:23;;;;;;;;;;;;;;;;;;6445:165:::0;:::o;1043:33::-;;;;:::o;5446:144::-;1325:12:7;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5534:9:6::1;5519:12;:24;;;;5570:12;;5554:13;:28;;;;5446:144:::0;:::o;2003:201:7:-;1325:12;:10;:12::i;:::-;1314:23;;:7;:5;:7::i;:::-;:23;;;1306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2112:1:::1;2092:22;;:8;:22;;::::0;2084:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2168:28;2187:8;2168:18;:28::i;:::-;2003:201:::0;:::o;1083:24:6:-;;;;:::o;6752:113::-;6813:4;6837:11;:20;6849:7;6837:20;;;;;;;;;;;;;;;;;;;;;;;;;6830:27;;6752:113;;;:::o;672:98:0:-;725:7;752:10;745:17;;672:98;:::o;10209:380:1:-;10362:1;10345:19;;:5;:19;;;10337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10443:1;10424:21;;:7;:21;;;10416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10527:6;10497:11;:18;10509:5;10497:18;;;;;;;;;;;;;;;:27;10516:7;10497:27;;;;;;;;;;;;;;;:36;;;;10565:7;10549:32;;10558:5;10549:32;;;10574:6;10549:32;;;;;;:::i;:::-;;;;;;;;10209:380;;;:::o;6873:3686:6:-;7021:1;7005:18;;:4;:18;;;6997:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7098:1;7084:16;;:2;:16;;;7076:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7160:11;:17;7172:4;7160:17;;;;;;;;;;;;;;;;;;;;;;;;;7159:18;7151:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;7220:11;:15;7232:2;7220:15;;;;;;;;;;;;;;;;;;;;;;;;;7219:16;7211:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;7287:1;7277:6;:11;7273:93;;7305:28;7321:4;7327:2;7331:1;7305:15;:28::i;:::-;7348:7;;7273:93;7382:14;;;;;;;;;;;7378:1652;;;7443:7;:5;:7::i;:::-;7435:15;;:4;:15;;;;:49;;;;;7477:7;:5;:7::i;:::-;7471:13;;:2;:13;;;;7435:49;:86;;;;;7519:1;7505:16;;:2;:16;;;;7435:86;:116;;;;;7543:8;;;;;;;;;;;7542:9;7435:116;7413:1606;;;7591:13;;;;;;;;;;;7586:223;;7663:19;:25;7683:4;7663:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;7692:19;:23;7712:2;7692:23;;;;;;;;;;;;;;;;;;;;;;;;;7663:52;7629:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;7586:223;7883:25;:31;7909:4;7883:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;7940:31;:35;7972:2;7940:35;;;;;;;;;;;;;;;;;;;;;;;;;7939:36;7883:92;7857:1147;;;8062:20;;8052:6;:30;;8018:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;8270:9;;8253:13;8263:2;8253:9;:13::i;:::-;8244:6;:22;;;;:::i;:::-;:35;;8210:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;7857:1147;;;8448:25;:29;8474:2;8448:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;8503:31;:37;8535:4;8503:37;;;;;;;;;;;;;;;;;;;;;;;;;8502:38;8448:92;8422:582;;;8627:20;;8617:6;:30;;8583:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;8422:582;;;8784:31;:35;8816:2;8784:35;;;;;;;;;;;;;;;;;;;;;;;;;8779:225;;8904:9;;8887:13;8897:2;8887:9;:13::i;:::-;8878:6;:22;;;;:::i;:::-;:35;;8844:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;8779:225;8422:582;7857:1147;7413:1606;7378:1652;9042:28;9073:24;9091:4;9073:9;:24::i;:::-;9042:55;;9110:12;9149:18;;9125:20;:42;;9110:57;;9198:7;:35;;;;;9222:11;;;;;;;;;;;9198:35;:61;;;;;9251:8;;;;;;;;;;;9250:9;9198:61;:110;;;;;9277:25;:31;9303:4;9277:31;;;;;;;;;;;;;;;;;;;;;;;;;9276:32;9198:110;:153;;;;;9326:19;:25;9346:4;9326:25;;;;;;;;;;;;;;;;;;;;;;;;;9325:26;9198:153;:194;;;;;9369:19;:23;9389:2;9369:23;;;;;;;;;;;;;;;;;;;;;;;;;9368:24;9198:194;9180:326;;;9430:4;9419:8;;:15;;;;;;;;;;;;;;;;;;9451:10;:8;:10::i;:::-;9489:5;9478:8;;:16;;;;;;;;;;;;;;;;;;9180:326;9518:12;9534:8;;;;;;;;;;;9533:9;9518:24;;9644:19;:25;9664:4;9644:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9673:19;:23;9693:2;9673:23;;;;;;;;;;;;;;;;;;;;;;;;;9644:52;9640:100;;;9723:5;9713:15;;9640:100;9752:12;9857:7;9853:653;;;9909:25;:29;9935:2;9909:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;9958:1;9942:13;;:17;9909:50;9905:452;;;9987:34;10017:3;9987:25;9998:13;;9987:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;9980:41;;10082:13;;10066:12;;10059:4;:19;;;;:::i;:::-;10058:37;;;;:::i;:::-;10040:14;;:55;;;;;;;:::i;:::-;;;;;;;;9905:452;;;10157:25;:31;10183:4;10157:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;10207:1;10192:12;;:16;10157:51;10153:204;;;10236:33;10265:3;10236:24;10247:12;;10236:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;10229:40;;10329:12;;10314:11;;10307:4;:18;;;;:::i;:::-;10306:35;;;;:::i;:::-;10288:14;;:53;;;;;;;:::i;:::-;;;;;;;;10153:204;9905:452;10384:1;10377:4;:8;10373:91;;;10406:42;10422:4;10436;10443;10406:15;:42::i;:::-;10373:91;10490:4;10480:14;;;;;:::i;:::-;;;9853:653;10518:33;10534:4;10540:2;10544:6;10518:15;:33::i;:::-;6986:3573;;;;6873:3686;;;;:::o;2364:191:7:-;2438:16;2457:6;;;;;;;;;;;2438:25;;2483:8;2474:6;;:17;;;;;;;;;;;;;;;;;;2538:8;2507:40;;2528:8;2507:40;;;;;;;;;;;;2427:128;2364:191;:::o;6249:188:6:-;6366:5;6332:25;:31;6358:4;6332:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6423:5;6389:40;;6417:4;6389:40;;;;;;;;;;;;6249:188;;:::o;7428:733:1:-;7586:1;7568:20;;:6;:20;;;7560:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7670:1;7649:23;;:9;:23;;;7641:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7725:47;7746:6;7754:9;7765:6;7725:20;:47::i;:::-;7785:21;7809:9;:17;7819:6;7809:17;;;;;;;;;;;;;;;;7785:41;;7862:6;7845:13;:23;;7837:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7983:6;7967:13;:22;7947:9;:17;7957:6;7947:17;;;;;;;;;;;;;;;:42;;;;8035:6;8011:9;:20;8021:9;8011:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8076:9;8059:35;;8068:6;8059:35;;;8087:6;8059:35;;;;;;:::i;:::-;;;;;;;;8107:46;8127:6;8135:9;8146:6;8107:19;:46::i;:::-;7549:612;7428:733;;;:::o;11675:749:6:-;11714:23;11740:24;11758:4;11740:9;:24::i;:::-;11714:50;;11775:25;11803:14;;11775:42;;11828:12;11876:1;11857:15;:20;:46;;;;11902:1;11881:17;:22;11857:46;11853:85;;;11920:7;;;;;11853:85;11993:2;11972:18;;:23;;;;:::i;:::-;11954:15;:41;11950:115;;;12051:2;12030:18;;:23;;;;:::i;:::-;12012:41;;11950:115;12077:26;12106:15;12077:44;;12134:25;12162:21;12134:49;;12196:36;12213:18;12196:16;:36::i;:::-;12245:18;12266:44;12292:17;12266:21;:25;;:44;;;;:::i;:::-;12245:65;;12340:1;12323:14;:18;;;;12376:11;;;;;;;;;;;12368:25;;12401:10;12368:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12354:62;;;;;11703:721;;;;;;11675:749;:::o;3320:98:8:-;3378:7;3409:1;3405;:5;;;;:::i;:::-;3398:12;;3320:98;;;;:::o;3719:::-;3777:7;3808:1;3804;:5;;;;:::i;:::-;3797:12;;3719:98;;;;:::o;11189:125:1:-;;;;:::o;11918:124::-;;;;:::o;10567:583:6:-;10693:21;10731:1;10717:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10693:40;;10762:4;10744;10749:1;10744:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;10788:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10778:4;10783:1;10778:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;10821:60;10838:4;10853:13;10869:11;10821:8;:60::i;:::-;10920:13;:64;;;10999:11;11025:1;11069:4;11096;11116:15;10920:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10622:528;10567:583;:::o;2963:98:8:-;3021:7;3052:1;3048;:5;;;;:::i;:::-;3041:12;;2963:98;;;;:::o;7:99:9:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:474::-;3742:6;3750;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;4052:2;4078:53;4123:7;4114:6;4103:9;4099:22;4078:53;:::i;:::-;4068:63;;4023:118;3674:474;;;;;:::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:329::-;4565:6;4614:2;4602:9;4593:7;4589:23;4585:32;4582:119;;;4620:79;;:::i;:::-;4582:119;4740:1;4765:53;4810:7;4801:6;4790:9;4786:22;4765:53;:::i;:::-;4755:63;;4711:117;4506:329;;;;:::o;4841:619::-;4918:6;4926;4934;4983:2;4971:9;4962:7;4958:23;4954:32;4951:119;;;4989:79;;:::i;:::-;4951:119;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5236:2;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5207:118;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;4841:619;;;;;:::o;5466:86::-;5501:7;5541:4;5534:5;5530:16;5519:27;;5466:86;;;:::o;5558:112::-;5641:22;5657:5;5641:22;:::i;:::-;5636:3;5629:35;5558:112;;:::o;5676:214::-;5765:4;5803:2;5792:9;5788:18;5780:26;;5816:67;5880:1;5869:9;5865:17;5856:6;5816:67;:::i;:::-;5676:214;;;;:::o;5896:118::-;5983:24;6001:5;5983:24;:::i;:::-;5978:3;5971:37;5896:118;;:::o;6020:222::-;6113:4;6151:2;6140:9;6136:18;6128:26;;6164:71;6232:1;6221:9;6217:17;6208:6;6164:71;:::i;:::-;6020:222;;;;:::o;6248:60::-;6276:3;6297:5;6290:12;;6248:60;;;:::o;6314:142::-;6364:9;6397:53;6415:34;6424:24;6442:5;6424:24;:::i;:::-;6415:34;:::i;:::-;6397:53;:::i;:::-;6384:66;;6314:142;;;:::o;6462:126::-;6512:9;6545:37;6576:5;6545:37;:::i;:::-;6532:50;;6462:126;;;:::o;6594:152::-;6670:9;6703:37;6734:5;6703:37;:::i;:::-;6690:50;;6594:152;;;:::o;6752:183::-;6865:63;6922:5;6865:63;:::i;:::-;6860:3;6853:76;6752:183;;:::o;6941:274::-;7060:4;7098:2;7087:9;7083:18;7075:26;;7111:97;7205:1;7194:9;7190:17;7181:6;7111:97;:::i;:::-;6941:274;;;;:::o;7221:116::-;7291:21;7306:5;7291:21;:::i;:::-;7284:5;7281:32;7271:60;;7327:1;7324;7317:12;7271:60;7221:116;:::o;7343:133::-;7386:5;7424:6;7411:20;7402:29;;7440:30;7464:5;7440:30;:::i;:::-;7343:133;;;;:::o;7482:468::-;7547:6;7555;7604:2;7592:9;7583:7;7579:23;7575:32;7572:119;;;7610:79;;:::i;:::-;7572:119;7730:1;7755:53;7800:7;7791:6;7780:9;7776:22;7755:53;:::i;:::-;7745:63;;7701:117;7857:2;7883:50;7925:7;7916:6;7905:9;7901:22;7883:50;:::i;:::-;7873:60;;7828:115;7482:468;;;;;:::o;7956:323::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:50;8254:7;8245:6;8234:9;8230:22;8212:50;:::i;:::-;8202:60;;8158:114;7956:323;;;;:::o;8285:180::-;8333:77;8330:1;8323:88;8430:4;8427:1;8420:15;8454:4;8451:1;8444:15;8471:320;8515:6;8552:1;8546:4;8542:12;8532:22;;8599:1;8593:4;8589:12;8620:18;8610:81;;8676:4;8668:6;8664:17;8654:27;;8610:81;8738:2;8730:6;8727:14;8707:18;8704:38;8701:84;;8757:18;;:::i;:::-;8701:84;8522:269;8471:320;;;:::o;8797:182::-;8937:34;8933:1;8925:6;8921:14;8914:58;8797:182;:::o;8985:366::-;9127:3;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;8985:366;;;:::o;9357:419::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9610:9;9604:4;9600:20;9596:1;9585:9;9581:17;9574:47;9638:131;9764:4;9638:131;:::i;:::-;9630:139;;9357:419;;;:::o;9782:176::-;9922:28;9918:1;9910:6;9906:14;9899:52;9782:176;:::o;9964:366::-;10106:3;10127:67;10191:2;10186:3;10127:67;:::i;:::-;10120:74;;10203:93;10292:3;10203:93;:::i;:::-;10321:2;10316:3;10312:12;10305:19;;9964:366;;;:::o;10336:419::-;10502:4;10540:2;10529:9;10525:18;10517:26;;10589:9;10583:4;10579:20;10575:1;10564:9;10560:17;10553:47;10617:131;10743:4;10617:131;:::i;:::-;10609:139;;10336:419;;;:::o;10761:143::-;10818:5;10849:6;10843:13;10834:22;;10865:33;10892:5;10865:33;:::i;:::-;10761:143;;;;:::o;10910:351::-;10980:6;11029:2;11017:9;11008:7;11004:23;11000:32;10997:119;;;11035:79;;:::i;:::-;10997:119;11155:1;11180:64;11236:7;11227:6;11216:9;11212:22;11180:64;:::i;:::-;11170:74;;11126:128;10910:351;;;;:::o;11267:332::-;11388:4;11426:2;11415:9;11411:18;11403:26;;11439:71;11507:1;11496:9;11492:17;11483:6;11439:71;:::i;:::-;11520:72;11588:2;11577:9;11573:18;11564:6;11520:72;:::i;:::-;11267:332;;;;;:::o;11605:137::-;11659:5;11690:6;11684:13;11675:22;;11706:30;11730:5;11706:30;:::i;:::-;11605:137;;;;:::o;11748:345::-;11815:6;11864:2;11852:9;11843:7;11839:23;11835:32;11832:119;;;11870:79;;:::i;:::-;11832:119;11990:1;12015:61;12068:7;12059:6;12048:9;12044:22;12015:61;:::i;:::-;12005:71;;11961:125;11748:345;;;;:::o;12099:180::-;12147:77;12144:1;12137:88;12244:4;12241:1;12234:15;12268:4;12265:1;12258:15;12285:410;12325:7;12348:20;12366:1;12348:20;:::i;:::-;12343:25;;12382:20;12400:1;12382:20;:::i;:::-;12377:25;;12437:1;12434;12430:9;12459:30;12477:11;12459:30;:::i;:::-;12448:41;;12638:1;12629:7;12625:15;12622:1;12619:22;12599:1;12592:9;12572:83;12549:139;;12668:18;;:::i;:::-;12549:139;12333:362;12285:410;;;;:::o;12701:180::-;12749:77;12746:1;12739:88;12846:4;12843:1;12836:15;12870:4;12867:1;12860:15;12887:185;12927:1;12944:20;12962:1;12944:20;:::i;:::-;12939:25;;12978:20;12996:1;12978:20;:::i;:::-;12973:25;;13017:1;13007:35;;13022:18;;:::i;:::-;13007:35;13064:1;13061;13057:9;13052:14;;12887:185;;;;:::o;13078:234::-;13218:34;13214:1;13206:6;13202:14;13195:58;13287:17;13282:2;13274:6;13270:15;13263:42;13078:234;:::o;13318:366::-;13460:3;13481:67;13545:2;13540:3;13481:67;:::i;:::-;13474:74;;13557:93;13646:3;13557:93;:::i;:::-;13675:2;13670:3;13666:12;13659:19;;13318:366;;;:::o;13690:419::-;13856:4;13894:2;13883:9;13879:18;13871:26;;13943:9;13937:4;13933:20;13929:1;13918:9;13914:17;13907:47;13971:131;14097:4;13971:131;:::i;:::-;13963:139;;13690:419;;;:::o;14115:227::-;14255:34;14251:1;14243:6;14239:14;14232:58;14324:10;14319:2;14311:6;14307:15;14300:35;14115:227;:::o;14348:366::-;14490:3;14511:67;14575:2;14570:3;14511:67;:::i;:::-;14504:74;;14587:93;14676:3;14587:93;:::i;:::-;14705:2;14700:3;14696:12;14689:19;;14348:366;;;:::o;14720:419::-;14886:4;14924:2;14913:9;14909:18;14901:26;;14973:9;14967:4;14963:20;14959:1;14948:9;14944:17;14937:47;15001:131;15127:4;15001:131;:::i;:::-;14993:139;;14720:419;;;:::o;15145:191::-;15185:3;15204:20;15222:1;15204:20;:::i;:::-;15199:25;;15238:20;15256:1;15238:20;:::i;:::-;15233:25;;15281:1;15278;15274:9;15267:16;;15302:3;15299:1;15296:10;15293:36;;;15309:18;;:::i;:::-;15293:36;15145:191;;;;:::o;15342:147::-;15443:11;15480:3;15465:18;;15342:147;;;;:::o;15495:114::-;;:::o;15615:398::-;15774:3;15795:83;15876:1;15871:3;15795:83;:::i;:::-;15788:90;;15887:93;15976:3;15887:93;:::i;:::-;16005:1;16000:3;15996:11;15989:18;;15615:398;;;:::o;16019:379::-;16203:3;16225:147;16368:3;16225:147;:::i;:::-;16218:154;;16389:3;16382:10;;16019:379;;;:::o;16404:157::-;16544:9;16540:1;16532:6;16528:14;16521:33;16404:157;:::o;16567:365::-;16709:3;16730:66;16794:1;16789:3;16730:66;:::i;:::-;16723:73;;16805:93;16894:3;16805:93;:::i;:::-;16923:2;16918:3;16914:12;16907:19;;16567:365;;;:::o;16938:419::-;17104:4;17142:2;17131:9;17127:18;17119:26;;17191:9;17185:4;17181:20;17177:1;17166:9;17162:17;17155:47;17219:131;17345:4;17219:131;:::i;:::-;17211:139;;16938:419;;;:::o;17363:244::-;17503:34;17499:1;17491:6;17487:14;17480:58;17572:27;17567:2;17559:6;17555:15;17548:52;17363:244;:::o;17613:366::-;17755:3;17776:67;17840:2;17835:3;17776:67;:::i;:::-;17769:74;;17852:93;17941:3;17852:93;:::i;:::-;17970:2;17965:3;17961:12;17954:19;;17613:366;;;:::o;17985:419::-;18151:4;18189:2;18178:9;18174:18;18166:26;;18238:9;18232:4;18228:20;18224:1;18213:9;18209:17;18202:47;18266:131;18392:4;18266:131;:::i;:::-;18258:139;;17985:419;;;:::o;18410:224::-;18550:34;18546:1;18538:6;18534:14;18527:58;18619:7;18614:2;18606:6;18602:15;18595:32;18410:224;:::o;18640:366::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:419::-;19178:4;19216:2;19205:9;19201:18;19193:26;;19265:9;19259:4;19255:20;19251:1;19240:9;19236:17;19229:47;19293:131;19419:4;19293:131;:::i;:::-;19285:139;;19012:419;;;:::o;19437:223::-;19577:34;19573:1;19565:6;19561:14;19554:58;19646:6;19641:2;19633:6;19629:15;19622:31;19437:223;:::o;19666:366::-;19808:3;19829:67;19893:2;19888:3;19829:67;:::i;:::-;19822:74;;19905:93;19994:3;19905:93;:::i;:::-;20023:2;20018:3;20014:12;20007:19;;19666:366;;;:::o;20038:419::-;20204:4;20242:2;20231:9;20227:18;20219:26;;20291:9;20285:4;20281:20;20277:1;20266:9;20262:17;20255:47;20319:131;20445:4;20319:131;:::i;:::-;20311:139;;20038:419;;;:::o;20463:225::-;20603:34;20599:1;20591:6;20587:14;20580:58;20672:8;20667:2;20659:6;20655:15;20648:33;20463:225;:::o;20694:366::-;20836:3;20857:67;20921:2;20916:3;20857:67;:::i;:::-;20850:74;;20933:93;21022:3;20933:93;:::i;:::-;21051:2;21046:3;21042:12;21035:19;;20694:366;;;:::o;21066:419::-;21232:4;21270:2;21259:9;21255:18;21247:26;;21319:9;21313:4;21309:20;21305:1;21294:9;21290:17;21283:47;21347:131;21473:4;21347:131;:::i;:::-;21339:139;;21066:419;;;:::o;21491:223::-;21631:34;21627:1;21619:6;21615:14;21608:58;21700:6;21695:2;21687:6;21683:15;21676:31;21491:223;:::o;21720:366::-;21862:3;21883:67;21947:2;21942:3;21883:67;:::i;:::-;21876:74;;21959:93;22048:3;21959:93;:::i;:::-;22077:2;22072:3;22068:12;22061:19;;21720:366;;;:::o;22092:419::-;22258:4;22296:2;22285:9;22281:18;22273:26;;22345:9;22339:4;22335:20;22331:1;22320:9;22316:17;22309:47;22373:131;22499:4;22373:131;:::i;:::-;22365:139;;22092:419;;;:::o;22517:221::-;22657:34;22653:1;22645:6;22641:14;22634:58;22726:4;22721:2;22713:6;22709:15;22702:29;22517:221;:::o;22744:366::-;22886:3;22907:67;22971:2;22966:3;22907:67;:::i;:::-;22900:74;;22983:93;23072:3;22983:93;:::i;:::-;23101:2;23096:3;23092:12;23085:19;;22744:366;;;:::o;23116:419::-;23282:4;23320:2;23309:9;23305:18;23297:26;;23369:9;23363:4;23359:20;23355:1;23344:9;23340:17;23333:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23116:419;;;:::o;23541:224::-;23681:34;23677:1;23669:6;23665:14;23658:58;23750:7;23745:2;23737:6;23733:15;23726:32;23541:224;:::o;23771:366::-;23913:3;23934:67;23998:2;23993:3;23934:67;:::i;:::-;23927:74;;24010:93;24099:3;24010:93;:::i;:::-;24128:2;24123:3;24119:12;24112:19;;23771:366;;;:::o;24143:419::-;24309:4;24347:2;24336:9;24332:18;24324:26;;24396:9;24390:4;24386:20;24382:1;24371:9;24367:17;24360:47;24424:131;24550:4;24424:131;:::i;:::-;24416:139;;24143:419;;;:::o;24568:222::-;24708:34;24704:1;24696:6;24692:14;24685:58;24777:5;24772:2;24764:6;24760:15;24753:30;24568:222;:::o;24796:366::-;24938:3;24959:67;25023:2;25018:3;24959:67;:::i;:::-;24952:74;;25035:93;25124:3;25035:93;:::i;:::-;25153:2;25148:3;25144:12;25137:19;;24796:366;;;:::o;25168:419::-;25334:4;25372:2;25361:9;25357:18;25349:26;;25421:9;25415:4;25411:20;25407:1;25396:9;25392:17;25385:47;25449:131;25575:4;25449:131;:::i;:::-;25441:139;;25168:419;;;:::o;25593:168::-;25733:20;25729:1;25721:6;25717:14;25710:44;25593:168;:::o;25767:366::-;25909:3;25930:67;25994:2;25989:3;25930:67;:::i;:::-;25923:74;;26006:93;26095:3;26006:93;:::i;:::-;26124:2;26119:3;26115:12;26108:19;;25767:366;;;:::o;26139:419::-;26305:4;26343:2;26332:9;26328:18;26320:26;;26392:9;26386:4;26382:20;26378:1;26367:9;26363:17;26356:47;26420:131;26546:4;26420:131;:::i;:::-;26412:139;;26139:419;;;:::o;26564:170::-;26704:22;26700:1;26692:6;26688:14;26681:46;26564:170;:::o;26740:366::-;26882:3;26903:67;26967:2;26962:3;26903:67;:::i;:::-;26896:74;;26979:93;27068:3;26979:93;:::i;:::-;27097:2;27092:3;27088:12;27081:19;;26740:366;;;:::o;27112:419::-;27278:4;27316:2;27305:9;27301:18;27293:26;;27365:9;27359:4;27355:20;27351:1;27340:9;27336:17;27329:47;27393:131;27519:4;27393:131;:::i;:::-;27385:139;;27112:419;;;:::o;27537:172::-;27677:24;27673:1;27665:6;27661:14;27654:48;27537:172;:::o;27715:366::-;27857:3;27878:67;27942:2;27937:3;27878:67;:::i;:::-;27871:74;;27954:93;28043:3;27954:93;:::i;:::-;28072:2;28067:3;28063:12;28056:19;;27715:366;;;:::o;28087:419::-;28253:4;28291:2;28280:9;28276:18;28268:26;;28340:9;28334:4;28330:20;28326:1;28315:9;28311:17;28304:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28087:419;;;:::o;28512:240::-;28652:34;28648:1;28640:6;28636:14;28629:58;28721:23;28716:2;28708:6;28704:15;28697:48;28512:240;:::o;28758:366::-;28900:3;28921:67;28985:2;28980:3;28921:67;:::i;:::-;28914:74;;28997:93;29086:3;28997:93;:::i;:::-;29115:2;29110:3;29106:12;29099:19;;28758:366;;;:::o;29130:419::-;29296:4;29334:2;29323:9;29319:18;29311:26;;29383:9;29377:4;29373:20;29369:1;29358:9;29354:17;29347:47;29411:131;29537:4;29411:131;:::i;:::-;29403:139;;29130:419;;;:::o;29555:169::-;29695:21;29691:1;29683:6;29679:14;29672:45;29555:169;:::o;29730:366::-;29872:3;29893:67;29957:2;29952:3;29893:67;:::i;:::-;29886:74;;29969:93;30058:3;29969:93;:::i;:::-;30087:2;30082:3;30078:12;30071:19;;29730:366;;;:::o;30102:419::-;30268:4;30306:2;30295:9;30291:18;30283:26;;30355:9;30349:4;30345:20;30341:1;30330:9;30326:17;30319:47;30383:131;30509:4;30383:131;:::i;:::-;30375:139;;30102:419;;;:::o;30527:241::-;30667:34;30663:1;30655:6;30651:14;30644:58;30736:24;30731:2;30723:6;30719:15;30712:49;30527:241;:::o;30774:366::-;30916:3;30937:67;31001:2;30996:3;30937:67;:::i;:::-;30930:74;;31013:93;31102:3;31013:93;:::i;:::-;31131:2;31126:3;31122:12;31115:19;;30774:366;;;:::o;31146:419::-;31312:4;31350:2;31339:9;31335:18;31327:26;;31399:9;31393:4;31389:20;31385:1;31374:9;31370:17;31363:47;31427:131;31553:4;31427:131;:::i;:::-;31419:139;;31146:419;;;:::o;31571:194::-;31611:4;31631:20;31649:1;31631:20;:::i;:::-;31626:25;;31665:20;31683:1;31665:20;:::i;:::-;31660:25;;31709:1;31706;31702:9;31694:17;;31733:1;31727:4;31724:11;31721:37;;;31738:18;;:::i;:::-;31721:37;31571:194;;;;:::o;31771:225::-;31911:34;31907:1;31899:6;31895:14;31888:58;31980:8;31975:2;31967:6;31963:15;31956:33;31771:225;:::o;32002:366::-;32144:3;32165:67;32229:2;32224:3;32165:67;:::i;:::-;32158:74;;32241:93;32330:3;32241:93;:::i;:::-;32359:2;32354:3;32350:12;32343:19;;32002:366;;;:::o;32374:419::-;32540:4;32578:2;32567:9;32563:18;32555:26;;32627:9;32621:4;32617:20;32613:1;32602:9;32598:17;32591:47;32655:131;32781:4;32655:131;:::i;:::-;32647:139;;32374:419;;;:::o;32799:180::-;32847:77;32844:1;32837:88;32944:4;32941:1;32934:15;32968:4;32965:1;32958:15;32985:180;33033:77;33030:1;33023:88;33130:4;33127:1;33120:15;33154:4;33151:1;33144:15;33171:143;33228:5;33259:6;33253:13;33244:22;;33275:33;33302:5;33275:33;:::i;:::-;33171:143;;;;:::o;33320:351::-;33390:6;33439:2;33427:9;33418:7;33414:23;33410:32;33407:119;;;33445:79;;:::i;:::-;33407:119;33565:1;33590:64;33646:7;33637:6;33626:9;33622:22;33590:64;:::i;:::-;33580:74;;33536:128;33320:351;;;;:::o;33677:85::-;33722:7;33751:5;33740:16;;33677:85;;;:::o;33768:158::-;33826:9;33859:61;33877:42;33886:32;33912:5;33886:32;:::i;:::-;33877:42;:::i;:::-;33859:61;:::i;:::-;33846:74;;33768:158;;;:::o;33932:147::-;34027:45;34066:5;34027:45;:::i;:::-;34022:3;34015:58;33932:147;;:::o;34085:114::-;34152:6;34186:5;34180:12;34170:22;;34085:114;;;:::o;34205:184::-;34304:11;34338:6;34333:3;34326:19;34378:4;34373:3;34369:14;34354:29;;34205:184;;;;:::o;34395:132::-;34462:4;34485:3;34477:11;;34515:4;34510:3;34506:14;34498:22;;34395:132;;;:::o;34533:108::-;34610:24;34628:5;34610:24;:::i;:::-;34605:3;34598:37;34533:108;;:::o;34647:179::-;34716:10;34737:46;34779:3;34771:6;34737:46;:::i;:::-;34815:4;34810:3;34806:14;34792:28;;34647:179;;;;:::o;34832:113::-;34902:4;34934;34929:3;34925:14;34917:22;;34832:113;;;:::o;34981:732::-;35100:3;35129:54;35177:5;35129:54;:::i;:::-;35199:86;35278:6;35273:3;35199:86;:::i;:::-;35192:93;;35309:56;35359:5;35309:56;:::i;:::-;35388:7;35419:1;35404:284;35429:6;35426:1;35423:13;35404:284;;;35505:6;35499:13;35532:63;35591:3;35576:13;35532:63;:::i;:::-;35525:70;;35618:60;35671:6;35618:60;:::i;:::-;35608:70;;35464:224;35451:1;35448;35444:9;35439:14;;35404:284;;;35408:14;35704:3;35697:10;;35105:608;;;34981:732;;;;:::o;35719:831::-;35982:4;36020:3;36009:9;36005:19;35997:27;;36034:71;36102:1;36091:9;36087:17;36078:6;36034:71;:::i;:::-;36115:80;36191:2;36180:9;36176:18;36167:6;36115:80;:::i;:::-;36242:9;36236:4;36232:20;36227:2;36216:9;36212:18;36205:48;36270:108;36373:4;36364:6;36270:108;:::i;:::-;36262:116;;36388:72;36456:2;36445:9;36441:18;36432:6;36388:72;:::i;:::-;36470:73;36538:3;36527:9;36523:19;36514:6;36470:73;:::i;:::-;35719:831;;;;;;;;:::o

Swarm Source

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