ETH Price: $2,208.77 (+1.41%)

Token

Hika (HIKA)
 

Overview

Max Total Supply

1,000,000,000 HIKA

Holders

105

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
74,180,936.472388524356831166 HIKA

Value
$0.00
0x4ed952eddb2df5ecb924cab763cc926f10f3f070
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:
Hika

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
shanghai EvmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
    Website: https://website.com/
    Telegram: https://t.me/
    Twitter: https://twitter.com/
    Discord: https://discord.com/invite/

*/

pragma solidity ^0.8.24;

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage)
        private
        pure
    {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface IERC20Errors {
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance < amount) {
            revert ERC20InsufficientAllowance(
                recipient,
                currentAllowance,
                amount
            );
        }
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addtionalValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addtionalValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractionValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractionValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractionValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        if (sender == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (recipient == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        uint256 senderBalance = _balances[sender];
        if (senderBalance < amount) {
            revert ERC20InsufficientBalance(sender, senderBalance, amount);
        }
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount)
        internal
        virtual
    {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    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 getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract Hika is ERC20, Ownable {
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address public taxAddress;


    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    IERC20 public immutable WETH;

    bool private swapping;
    uint256 public swapTokensAtAmount;


    bool public swapEnabled = false;  // for auto swapping tax tokens
    bool public openTrading = false;


    uint256 private buyFee;
    uint256 private sellFee;

    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledSwap();
    event DisabledSwap();
    event UpdatedFees(uint256 buyFee, uint256 sellFee);
    event UpdatedTaxAddress(address indexed newWallet);
    event OwnerForcedSwapBack(uint256 timestamp);
    event TransferForeignToken(address token, uint256 amount);
    event ReuppedApprovals();
    event SwapTokensAtAmountUpdated(uint256 newAmount);
    event TradingEnabled();

    error ChainNotConfigured();

    uint256 constant MAX_TRANSFER_DELAY = 3 hours;

    constructor() {
        _name = "Hika";
        _symbol = "HIKA";
        _decimals = 18;
        uint256 totalSupply = 1_000_000_000 * 10**_decimals;
        taxAddress = 0x46c76F8910A6712D28b90D8b3182375b40b8E857; // Tax Address here
        
        swapTokensAtAmount = totalSupply / 500;

        buyFee = 0; // 450 = 4.5% Fees
        sellFee = 0; // 25.25 = 25.25% Fees

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;
        address ethcoinAddress;

        if (block.chainid == 1) {
            ethcoinAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 137) {
            ethcoinAddress = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
            _dexRouter = 0xedf6066a2b290C185783862C7F4776A2C8077AD1;
        } else if (block.chainid == 11155111) {
            ethcoinAddress = 0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9;
            _dexRouter = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008;
        } else {
            revert ChainNotConfigured();
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        WETH = IERC20(ethcoinAddress);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            address(WETH)
        );
        setAutomatedMarketMakerPair(address(lpPair), true);

        _createInitialSupply(address(newOwner), totalSupply);
        transferOwnership(newOwner);

        WETH.approve(address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function name() public view override returns (string memory) {
        return _name;
    }

    function symbol() public view override returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }


    /// @notice Enables or disables the automatic swap of accumulated fees for WETH.
    /// @dev This function can only be called by the contract owner.
    /// @param _enable Set to true to enable automatic swapping, false to disable.
    function setSwapEnabled(bool _enable) external onlyOwner {
        swapEnabled = _enable;
        if (_enable) {
            emit EnabledSwap();
        } else {
            emit DisabledSwap();
        }
    }

    function startTrading() external onlyOwner {
        openTrading = true;
        emit TradingEnabled();
    }


    /// @notice change the minimum amount of tokens to sell from fees
    /// @param newAmount The new minimum amount of tokens to sell
    /// @dev This function allows the contract owner to adjust the threshold at which accumulated fees are automatically swapped for WETH and sent to the tax address.
    /// Requirements:
    /// - The `newAmount` must be greater than or equal to 0.001% of the total supply.
    /// - The `newAmount` must be less than or equal to 1% of the total supply.
    /// Emits a {SwapTokensAtAmountUpdated} event.
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        uint256 _totalSupply = totalSupply();
        require(
            newAmount >= (_totalSupply * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (_totalSupply * 1) / 100,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount);
    }

    /// @notice Sets or unsets the automated market maker pair status for a given address.
    /// @param pair The address of the pair to update.
    /// @param value True to set the pair as an automated market maker pair, false to unset it.
    /// @dev This function can only be called by the owner. 
    ///     The pair cannot be removed from automatedMarketMakerPairs if it is the lpPair.
    ///     This function also excludes/includes the pair from max transaction limits depending on the value.
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != lpPair || value,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /// @notice Updates the buy, sell, and transfer fees for the token.
    /// @dev Only callable by the owner. Fees are input as basis points (e.g., 700 for 7%).
    /// @param _buyFee The new buy fee, in basis points.
    /// @param _sellFee The new sell fee, in basis points.
    function updateFees(
        uint256 _buyFee,
        uint256 _sellFee
    ) external onlyOwner {
        require(_buyFee <= 3000, "Must keep buy fees at 30% or less");
        require(_sellFee <= 3000, "Must keep sell fees at 30% or less");
        buyFee = _buyFee;
        sellFee = _sellFee;
        emit UpdatedFees(buyFee, sellFee);
    }

    /// @notice Returns the buy, sell, and transfer fees for the token, represented as basis points (hundredths of a percent).
    /// @dev For example, a fee of 5.5% would be returned as 550.
    /// @return _buyFee The current buy fee in basis points.
    /// @return _sellFee The current sell fee in basis points.
    function getFees()
        external
        view
        returns (
            uint256 _buyFee,
            uint256 _sellFee
        )
    {
        return (buyFee, sellFee);
    }

    function _takeFee(
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {

        uint256 fees;

        if (automatedMarketMakerPairs[to] && sellFee > 0) {
            fees = (amount * sellFee) / 10000;
        } else if (automatedMarketMakerPairs[from] && buyFee > 0) {
            fees = (amount * buyFee) / 10000;
        }

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

        return fees;
    }

    function _executeSwap() internal {
        if (
            balanceOf(address(this)) > swapTokensAtAmount &&
            swapEnabled &&
            !swapping
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        uint256 fees = _takeFee(from, to, amount);
        _executeSwap();
        super._transfer(from, to, amount - fees);
    }

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

        // make the swap
        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(taxAddress),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));

        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForWETH(contractBalance);

        if (WETH.balanceOf(address(this)) > 0) {
            WETH.transfer(taxAddress, WETH.balanceOf(address(this)));
        }
    }

    function _forceSwapBack() private {
        uint256 contractBalance = balanceOf(address(this));

        if (contractBalance == 0) {
            return;
        }

        swapTokensForWETH(contractBalance);

        if (WETH.balanceOf(address(this)) > 0) {
            WETH.transfer(taxAddress, WETH.balanceOf(address(this)));
        }
    }

    /// @notice Allows the owner to transfer any ERC20 tokens sent to the contract.
    /// @dev This function can only be called by the owner.
    /// @param _token The address of the ERC20 token to transfer.
    /// @param _to The address to transfer the tokens to.
    /// @dev Emits a {TransferForeignToken} event.
    /// Requirements:
    /// - `_token` address cannot be zero.
    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
    {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    /// @notice Sets the tax address where fees are collected.
    /// @dev Only callable by the owner.
    /// @param _taxAddress The new tax address. Must not be the zero address.
    /// @ emits UpdatedTaxAddress event with the new tax address.
    function setTaxAddress(address _taxAddress) external onlyOwner {
        require(_taxAddress != address(0), "address cannot be 0");
        taxAddress = payable(_taxAddress);
        emit UpdatedTaxAddress(_taxAddress);
    }

    /// @notice Forcefully swap back accumulated tokens for WETH and send to the tax address, even if the accumulated amount is below the threshold.
    /// @dev This function can be used to manually trigger a swap in case of slippage issues or other unforeseen circumstances.
    /// @dev Only callable by the owner.
    /// Emits an {OwnerForcedSwapBack} event with the current timestamp.
    function forceSwapBack() external onlyOwner {
        swapping = true;
        _forceSwapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function updateAllowanceForSwapping() external onlyOwner {
        WETH.approve(address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);
        emit ReuppedApprovals();
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ChainNotConfigured","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":[],"name":"DisabledSwap","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"ReuppedApprovals","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"UpdatedFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTaxAddress","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractionValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addtionalValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"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":"updateAllowanceForSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040525f60085f6101000a81548160ff0219169083151502179055505f600860016101000a81548160ff02191690831515021790555034801562000043575f80fd5b505f62000055620005e260201b60201c565b90508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600481526020017f48696b61000000000000000000000000000000000000000000000000000000008152506004908162000138919062000ef4565b506040518060400160405280600481526020017f48494b4100000000000000000000000000000000000000000000000000000000815250600590816200017f919062000ef4565b50601260065f6101000a81548160ff021916908360ff1602179055505f60065f9054906101000a900460ff16600a620001b9919062001161565b633b9aca00620001ca9190620011b1565b90507346c76f8910a6712d28b90d8b3182375b40b8e857600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f48162000231919062001228565b6007819055505f6009819055505f600a819055505f3390505f8060014603620002885773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29050737a250d5630b4cf539739df2c5dacb4c659f2488d915062000338565b60894603620002c557730d500b1d8e8ef31e21c99d1db9a6444d3adf1270905073edf6066a2b290c185783862c7f4776a2c8077ad1915062000337565b62aa36a746036200030457737b79995e5f793a07bc00c21412e50ecae098e7f9905073c532a74256d3db42d0bf7a0400fefdbad7694008915062000336565b6040517f4cffccf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004129190620012c4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b81526004016200045092919062001305565b6020604051808303815f875af11580156200046d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004939190620012c4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004db60a0516001620005e960201b60201c565b620004ed8385620007a560201b60201c565b620004fe83620008f160201b60201c565b60c05173ffffffffffffffffffffffffffffffffffffffff1663095ea7b36080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200055f92919062001341565b6020604051808303815f875af11580156200057c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005a29190620013a6565b50620005d8306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ac160201b60201c565b50505050620015ec565b5f33905090565b620005f9620005e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200068a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006819062001434565b60405180910390fd5b60a05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580620006c55750805b62000707576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fe90620014c8565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000818575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200080f9190620014e8565b60405180910390fd5b8060025f8282546200082b919062001503565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200087f919062001503565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008e591906200153d565b60405180910390a35050565b62000901620005e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009899062001434565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fa90620015cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b34575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000b2b9190620014e8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ba7575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000b9e9190620014e8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c8391906200153d565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d0c57607f821691505b60208210810362000d225762000d2162000cc7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d49565b62000d92868362000d49565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ddc62000dd662000dd08462000daa565b62000db3565b62000daa565b9050919050565b5f819050919050565b62000df78362000dbc565b62000e0f62000e068262000de3565b84845462000d55565b825550505050565b5f90565b62000e2562000e17565b62000e3281848462000dec565b505050565b5b8181101562000e595762000e4d5f8262000e1b565b60018101905062000e38565b5050565b601f82111562000ea85762000e728162000d28565b62000e7d8462000d3a565b8101602085101562000e8d578190505b62000ea562000e9c8562000d3a565b83018262000e37565b50505b505050565b5f82821c905092915050565b5f62000eca5f198460080262000ead565b1980831691505092915050565b5f62000ee4838362000eb9565b9150826002028217905092915050565b62000eff8262000c90565b67ffffffffffffffff81111562000f1b5762000f1a62000c9a565b5b62000f27825462000cf4565b62000f3482828562000e5d565b5f60209050601f83116001811462000f6a575f841562000f55578287015190505b62000f61858262000ed7565b86555062000fd0565b601f19841662000f7a8662000d28565b5f5b8281101562000fa35784890151825560018201915060208501945060208101905062000f7c565b8683101562000fc3578489015162000fbf601f89168262000eb9565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562001062578086048111156200103a576200103962000fd8565b5b60018516156200104a5780820291505b80810290506200105a8562001005565b94506200101a565b94509492505050565b5f826200107c57600190506200114e565b816200108b575f90506200114e565b8160018114620010a45760028114620010af57620010e5565b60019150506200114e565b60ff841115620010c457620010c362000fd8565b5b8360020a915084821115620010de57620010dd62000fd8565b5b506200114e565b5060208310610133831016604e8410600b84101617156200111f5782820a90508381111562001119576200111862000fd8565b5b6200114e565b6200112e848484600162001011565b9250905081840481111562001148576200114762000fd8565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200116d8262000daa565b91506200117a8362001155565b9250620011a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200106b565b905092915050565b5f620011bd8262000daa565b9150620011ca8362000daa565b9250828202620011da8162000daa565b91508282048414831517620011f457620011f362000fd8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620012348262000daa565b9150620012418362000daa565b925082620012545762001253620011fb565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200128e8262001263565b9050919050565b620012a08162001282565b8114620012ab575f80fd5b50565b5f81519050620012be8162001295565b92915050565b5f60208284031215620012dc57620012db6200125f565b5b5f620012eb84828501620012ae565b91505092915050565b620012ff8162001282565b82525050565b5f6040820190506200131a5f830185620012f4565b620013296020830184620012f4565b9392505050565b6200133b8162000daa565b82525050565b5f604082019050620013565f830185620012f4565b62001365602083018462001330565b9392505050565b5f8115159050919050565b62001382816200136c565b81146200138d575f80fd5b50565b5f81519050620013a08162001377565b92915050565b5f60208284031215620013be57620013bd6200125f565b5b5f620013cd8482850162001390565b91505092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200141c602083620013d6565b91506200142982620013e6565b602082019050919050565b5f6020820190508181035f8301526200144d816200140e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f620014b0603983620013d6565b9150620014bd8262001454565b604082019050919050565b5f6020820190508181035f830152620014e181620014a2565b9050919050565b5f602082019050620014fd5f830184620012f4565b92915050565b5f6200150f8262000daa565b91506200151c8362000daa565b925082820190508082111562001537576200153662000fd8565b5b92915050565b5f602082019050620015525f83018462001330565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620015b4602683620013d6565b9150620015c18262001558565b604082019050919050565b5f6020820190508181035f830152620015e581620015a6565b9050919050565b60805160a05160c051613aee6200166b5f395f818161084f0152818161166101528181611e0901528181611ea701528181611f060152818161252701528181612742015281816127e0015261283f01525f8181610b3f015261129e01525f81816106770152818161088b0152818161092f01526125960152613aee5ff3fe608060405234801561000f575f80fd5b50600436106101ee575f3560e01c80638da5cb5b1161010d578063b7bda68f116100a0578063dd62ed3e1161006f578063dd62ed3e1461055f578063e01af92c1461058f578063e2f45605146105ab578063f2fde38b146105c9576101ee565b8063b7bda68f146104e8578063c9567bf914610506578063d257b34f14610524578063db8d55f114610540576101ee565b8063a457c2d7116100dc578063a457c2d71461043a578063a9059cbb1461046a578063ad5c46481461049a578063b62496f5146104b8576101ee565b80638da5cb5b146103c657806395d89b41146103e45780639a7a23d614610402578063a1883d261461041e576101ee565b806339509351116101855780636ddd1713116101545780636ddd17131461035257806370a0823114610370578063715018a6146103a05780638366e79a146103aa576101ee565b806339509351146102de578063452ed4f11461030e57806351f205e41461032c5780636db7943714610336576101ee565b806323b872dd116101c157806323b872dd1461027c57806325424896146102ac578063293230b8146102b6578063313ce567146102c0576101ee565b806306fdde03146101f25780630758d92414610210578063095ea7b31461022e57806318160ddd1461025e575b5f80fd5b6101fa6105e5565b6040516102079190612b87565b60405180910390f35b610218610675565b6040516102259190612c21565b60405180910390f35b61024860048036038101906102439190612cac565b610699565b6040516102559190612d04565b60405180910390f35b6102666106b6565b6040516102739190612d2c565b60405180910390f35b61029660048036038101906102919190612d45565b6106bf565b6040516102a39190612d04565b60405180910390f35b6102b46107b7565b005b6102be6109a2565b005b6102c8610a81565b6040516102d59190612db0565b60405180910390f35b6102f860048036038101906102f39190612cac565b610a96565b6040516103059190612d04565b60405180910390f35b610316610b3d565b6040516103239190612dd8565b60405180910390f35b610334610b61565b005b610350600480360381019061034b9190612df1565b610c6d565b005b61035a610ddc565b6040516103679190612d04565b60405180910390f35b61038a60048036038101906103859190612e2f565b610dee565b6040516103979190612d2c565b60405180910390f35b6103a8610e33565b005b6103c460048036038101906103bf9190612e5a565b610f86565b005b6103ce61114e565b6040516103db9190612dd8565b60405180910390f35b6103ec611176565b6040516103f99190612b87565b60405180910390f35b61041c60048036038101906104179190612ec2565b611206565b005b61043860048036038101906104339190612e2f565b6113d1565b005b610454600480360381019061044f9190612cac565b61155c565b6040516104619190612d04565b60405180910390f35b610484600480360381019061047f9190612cac565b611642565b6040516104919190612d04565b60405180910390f35b6104a261165f565b6040516104af9190612f20565b60405180910390f35b6104d260048036038101906104cd9190612e2f565b611683565b6040516104df9190612d04565b60405180910390f35b6104f06116a0565b6040516104fd9190612dd8565b60405180910390f35b61050e6116c6565b60405161051b9190612d04565b60405180910390f35b61053e60048036038101906105399190612f39565b6116d9565b005b610548611874565b604051610556929190612f64565b60405180910390f35b61057960048036038101906105749190612e5a565b611884565b6040516105869190612d2c565b60405180910390f35b6105a960048036038101906105a49190612f8b565b611906565b005b6105b3611a1c565b6040516105c09190612d2c565b60405180910390f35b6105e360048036038101906105de9190612e2f565b611a22565b005b6060600480546105f490612fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612fe3565b801561066b5780601f106106425761010080835404028352916020019161066b565b820191905f5260205f20905b81548152906001019060200180831161064e57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6106ac6106a5611be4565b8484611beb565b6001905092915050565b5f600254905090565b5f6106cb848484611db2565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610712611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610797578381846040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161078e93929190613013565b60405180910390fd5b6107ab856107a3611be4565b858403611beb565b60019150509392505050565b6107bf611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461084d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084490613092565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016108e89291906130b0565b6020604051808303815f875af1158015610904573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092891906130eb565b50610974307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611beb565b7f442677e6ee13f56c544261dd3126fe163b578cb60cedbfda8ee82b3d2dec0ab260405160405180910390a1565b6109aa611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613092565b60405180910390fd5b6001600860016101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b5f60065f9054906101000a900460ff16905090565b5f610b33610aa2611be4565b848460015f610aaf611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b2e9190613143565b611beb565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610b69611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613092565b60405180910390fd5b6001600660156101000a81548160ff021916908315150217905550610c1a611de4565b5f600660156101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3242604051610c639190612d2c565b60405180910390a1565b610c75611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613092565b60405180910390fd5b610bb8821115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f906131e6565b60405180910390fd5b610bb8811115610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613274565b60405180910390fd5b8160098190555080600a819055507f4d32f38862d5eb71edfefb7955873bd55920dc98159b6f53f8be62fbf0bebb4b600954600a54604051610dd0929190612f64565b60405180910390a15050565b60085f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e3b611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f8e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611081906132dc565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c49190612dd8565b602060405180830381865afa1580156110df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611103919061330e565b9050611110838383611fff565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43883826040516111419291906130b0565b60405180910390a1505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461118590612fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190612fe3565b80156111fc5780601f106111d3576101008083540402835291602001916111fc565b820191905f5260205f20905b8154815290600101906020018083116111df57829003601f168201915b5050505050905090565b61120e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613092565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806112f45750805b611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906133a9565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6113d9611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc90613411565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167ff95a3f3be1ad3ec3d252a63182a8332b013f2251a59a30a03ecd260cbe263cc260405160405180910390a250565b5f8060015f611569611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061349f565b60405180910390fd5b61163761162e611be4565b85858403611beb565b600191505092915050565b5f61165561164e611be4565b8484611db2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b602052805f5260405f205f915054906101000a900460ff1681565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860019054906101000a900460ff1681565b6116e1611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690613092565b60405180910390fd5b5f6117786106b6565b9050620186a060018261178b91906134bd565b611795919061352b565b8210156117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce906135cb565b60405180910390fd5b60646001826117e691906134bd565b6117f0919061352b565b821115611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613659565b60405180910390fd5b816007819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145826040516118689190612d2c565b60405180910390a15050565b5f80600954600a54915091509091565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61190e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613092565b60405180910390fd5b8060085f6101000a81548160ff02191690831515021790555080156119ec577fc49c1e96242859ad1fcebbc65d8629059ac9afdb0f8a7524f5097a388ed304c160405160405180910390a1611a19565b7f12be78ac2c29f3b4b0cca88b9c3ef07cc32e0024bc37404683fa40ff95a320cc60405160405180910390a15b50565b60075481565b611a2a611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906136e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611c529190612dd8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611cc29190612dd8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da59190612d2c565b60405180910390a3505050565b5f611dbe848484612085565b9050611dc861219f565b611dde84848385611dd99190613705565b612221565b50505050565b5f611dee30610dee565b90505f8103611dfd5750611ffd565b611e068161248a565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e609190612dd8565b602060405180830381865afa158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9f919061330e565b1115611ffb577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f5d9190612dd8565b602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061330e565b6040518363ffffffff1660e01b8152600401611fb99291906130b0565b6020604051808303815f875af1158015611fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff991906130eb565b505b505b565b6120808363a9059cbb60e01b848460405160240161201e9291906130b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612648565b505050565b5f80600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120de57505f600a54115b1561210557612710600a54846120f491906134bd565b6120fe919061352b565b9050612180565b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561215c57505f600954115b1561217f576127106009548461217291906134bd565b61217c919061352b565b90505b5b5f81111561219457612193853083612221565b5b809150509392505050565b6007546121ab30610dee565b1180156121c3575060085f9054906101000a900460ff165b80156121dc5750600660159054906101000a900460ff16155b1561221f576001600660156101000a81548160ff02191690831515021790555061220461270d565b5f600660156101000a81548160ff0219169083151502179055505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612291575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122889190612dd8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612301575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122f89190612dd8565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561238a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238193929190613013565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124189190613143565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161247c9190612d2c565b60405180910390a350505050565b5f600267ffffffffffffffff8111156124a6576124a5613738565b5b6040519080825280602002602001820160405280156124d45781602001602082028036833780820191505090505b50905030815f815181106124eb576124ea613765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061255a57612559613765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612617959493929190613882565b5f604051808303815f87803b15801561262e575f80fd5b505af1158015612640573d5f803e3d5ffd5b505050505050565b5f6126a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129389092919063ffffffff16565b90505f8151111561270857808060200190518101906126c891906130eb565b612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe9061394a565b60405180910390fd5b5b505050565b5f61271730610dee565b90505f81036127265750612936565b6007548111156127365760075490505b61273f8161248a565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127999190612dd8565b602060405180830381865afa1580156127b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d8919061330e565b1115612934577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128969190612dd8565b602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d5919061330e565b6040518363ffffffff1660e01b81526004016128f29291906130b0565b6020604051808303815f875af115801561290e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293291906130eb565b505b505b565b606061294684845f8561294f565b90509392505050565b606082471015612994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298b906139d8565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516129bc9190613a3a565b5f6040518083038185875af1925050503d805f81146129f6576040519150601f19603f3d011682016040523d82523d5f602084013e6129fb565b606091505b5091509150612a0c87838387612a18565b92505050949350505050565b60608315612a79575f835103612a7157612a3185612a8c565b612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6790613a9a565b60405180910390fd5b5b829050612a84565b612a838383612aae565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115612ac05781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af49190612b87565b60405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612b34578082015181840152602081019050612b19565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612b5982612afd565b612b638185612b07565b9350612b73818560208601612b17565b612b7c81612b3f565b840191505092915050565b5f6020820190508181035f830152612b9f8184612b4f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f612be9612be4612bdf84612ba7565b612bc6565b612ba7565b9050919050565b5f612bfa82612bcf565b9050919050565b5f612c0b82612bf0565b9050919050565b612c1b81612c01565b82525050565b5f602082019050612c345f830184612c12565b92915050565b5f80fd5b5f612c4882612ba7565b9050919050565b612c5881612c3e565b8114612c62575f80fd5b50565b5f81359050612c7381612c4f565b92915050565b5f819050919050565b612c8b81612c79565b8114612c95575f80fd5b50565b5f81359050612ca681612c82565b92915050565b5f8060408385031215612cc257612cc1612c3a565b5b5f612ccf85828601612c65565b9250506020612ce085828601612c98565b9150509250929050565b5f8115159050919050565b612cfe81612cea565b82525050565b5f602082019050612d175f830184612cf5565b92915050565b612d2681612c79565b82525050565b5f602082019050612d3f5f830184612d1d565b92915050565b5f805f60608486031215612d5c57612d5b612c3a565b5b5f612d6986828701612c65565b9350506020612d7a86828701612c65565b9250506040612d8b86828701612c98565b9150509250925092565b5f60ff82169050919050565b612daa81612d95565b82525050565b5f602082019050612dc35f830184612da1565b92915050565b612dd281612c3e565b82525050565b5f602082019050612deb5f830184612dc9565b92915050565b5f8060408385031215612e0757612e06612c3a565b5b5f612e1485828601612c98565b9250506020612e2585828601612c98565b9150509250929050565b5f60208284031215612e4457612e43612c3a565b5b5f612e5184828501612c65565b91505092915050565b5f8060408385031215612e7057612e6f612c3a565b5b5f612e7d85828601612c65565b9250506020612e8e85828601612c65565b9150509250929050565b612ea181612cea565b8114612eab575f80fd5b50565b5f81359050612ebc81612e98565b92915050565b5f8060408385031215612ed857612ed7612c3a565b5b5f612ee585828601612c65565b9250506020612ef685828601612eae565b9150509250929050565b5f612f0a82612bf0565b9050919050565b612f1a81612f00565b82525050565b5f602082019050612f335f830184612f11565b92915050565b5f60208284031215612f4e57612f4d612c3a565b5b5f612f5b84828501612c98565b91505092915050565b5f604082019050612f775f830185612d1d565b612f846020830184612d1d565b9392505050565b5f60208284031215612fa057612f9f612c3a565b5b5f612fad84828501612eae565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ffa57607f821691505b60208210810361300d5761300c612fb6565b5b50919050565b5f6060820190506130265f830186612dc9565b6130336020830185612d1d565b6130406040830184612d1d565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61307c602083612b07565b915061308782613048565b602082019050919050565b5f6020820190508181035f8301526130a981613070565b9050919050565b5f6040820190506130c35f830185612dc9565b6130d06020830184612d1d565b9392505050565b5f815190506130e581612e98565b92915050565b5f60208284031215613100576130ff612c3a565b5b5f61310d848285016130d7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61314d82612c79565b915061315883612c79565b92508282019050808211156131705761316f613116565b5b92915050565b7f4d757374206b65657020627579206665657320617420333025206f72206c65735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131d0602183612b07565b91506131db82613176565b604082019050919050565b5f6020820190508181035f8301526131fd816131c4565b9050919050565b7f4d757374206b6565702073656c6c206665657320617420333025206f72206c655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61325e602283612b07565b915061326982613204565b604082019050919050565b5f6020820190508181035f83015261328b81613252565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6132c6601a83612b07565b91506132d182613292565b602082019050919050565b5f6020820190508181035f8301526132f3816132ba565b9050919050565b5f8151905061330881612c82565b92915050565b5f6020828403121561332357613322612c3a565b5b5f613330848285016132fa565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613393603983612b07565b915061339e82613339565b604082019050919050565b5f6020820190508181035f8301526133c081613387565b9050919050565b7f616464726573732063616e6e6f742062652030000000000000000000000000005f82015250565b5f6133fb601383612b07565b9150613406826133c7565b602082019050919050565b5f6020820190508181035f830152613428816133ef565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613489602583612b07565b91506134948261342f565b604082019050919050565b5f6020820190508181035f8301526134b68161347d565b9050919050565b5f6134c782612c79565b91506134d283612c79565b92508282026134e081612c79565b915082820484148315176134f7576134f6613116565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61353582612c79565b915061354083612c79565b9250826135505761354f6134fe565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6135b5603583612b07565b91506135c08261355b565b604082019050919050565b5f6020820190508181035f8301526135e2816135a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b5f613643603283612b07565b915061364e826135e9565b604082019050919050565b5f6020820190508181035f83015261367081613637565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136d1602683612b07565b91506136dc82613677565b604082019050919050565b5f6020820190508181035f8301526136fe816136c5565b9050919050565b5f61370f82612c79565b915061371a83612c79565b925082820390508181111561373257613731613116565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6137b56137b06137ab84613792565b612bc6565b612c79565b9050919050565b6137c58161379b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6137fd81612c3e565b82525050565b5f61380e83836137f4565b60208301905092915050565b5f602082019050919050565b5f613830826137cb565b61383a81856137d5565b9350613845836137e5565b805f5b8381101561387557815161385c8882613803565b97506138678361381a565b925050600181019050613848565b5085935050505092915050565b5f60a0820190506138955f830188612d1d565b6138a260208301876137bc565b81810360408301526138b48186613826565b90506138c36060830185612dc9565b6138d06080830184612d1d565b9695505050505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613934602a83612b07565b915061393f826138da565b604082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f6139c2602683612b07565b91506139cd82613968565b604082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b5f81519050919050565b5f81905092915050565b5f613a14826139f6565b613a1e8185613a00565b9350613a2e818560208601612b17565b80840191505092915050565b5f613a458284613a0a565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f613a84601d83612b07565b9150613a8f82613a50565b602082019050919050565b5f6020820190508181035f830152613ab181613a78565b905091905056fea26469706673582212201c7fc01e8c2a6ebbc735105596bbdd5298fe54fe14a2bff620e22c7ec02e838264736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101ee575f3560e01c80638da5cb5b1161010d578063b7bda68f116100a0578063dd62ed3e1161006f578063dd62ed3e1461055f578063e01af92c1461058f578063e2f45605146105ab578063f2fde38b146105c9576101ee565b8063b7bda68f146104e8578063c9567bf914610506578063d257b34f14610524578063db8d55f114610540576101ee565b8063a457c2d7116100dc578063a457c2d71461043a578063a9059cbb1461046a578063ad5c46481461049a578063b62496f5146104b8576101ee565b80638da5cb5b146103c657806395d89b41146103e45780639a7a23d614610402578063a1883d261461041e576101ee565b806339509351116101855780636ddd1713116101545780636ddd17131461035257806370a0823114610370578063715018a6146103a05780638366e79a146103aa576101ee565b806339509351146102de578063452ed4f11461030e57806351f205e41461032c5780636db7943714610336576101ee565b806323b872dd116101c157806323b872dd1461027c57806325424896146102ac578063293230b8146102b6578063313ce567146102c0576101ee565b806306fdde03146101f25780630758d92414610210578063095ea7b31461022e57806318160ddd1461025e575b5f80fd5b6101fa6105e5565b6040516102079190612b87565b60405180910390f35b610218610675565b6040516102259190612c21565b60405180910390f35b61024860048036038101906102439190612cac565b610699565b6040516102559190612d04565b60405180910390f35b6102666106b6565b6040516102739190612d2c565b60405180910390f35b61029660048036038101906102919190612d45565b6106bf565b6040516102a39190612d04565b60405180910390f35b6102b46107b7565b005b6102be6109a2565b005b6102c8610a81565b6040516102d59190612db0565b60405180910390f35b6102f860048036038101906102f39190612cac565b610a96565b6040516103059190612d04565b60405180910390f35b610316610b3d565b6040516103239190612dd8565b60405180910390f35b610334610b61565b005b610350600480360381019061034b9190612df1565b610c6d565b005b61035a610ddc565b6040516103679190612d04565b60405180910390f35b61038a60048036038101906103859190612e2f565b610dee565b6040516103979190612d2c565b60405180910390f35b6103a8610e33565b005b6103c460048036038101906103bf9190612e5a565b610f86565b005b6103ce61114e565b6040516103db9190612dd8565b60405180910390f35b6103ec611176565b6040516103f99190612b87565b60405180910390f35b61041c60048036038101906104179190612ec2565b611206565b005b61043860048036038101906104339190612e2f565b6113d1565b005b610454600480360381019061044f9190612cac565b61155c565b6040516104619190612d04565b60405180910390f35b610484600480360381019061047f9190612cac565b611642565b6040516104919190612d04565b60405180910390f35b6104a261165f565b6040516104af9190612f20565b60405180910390f35b6104d260048036038101906104cd9190612e2f565b611683565b6040516104df9190612d04565b60405180910390f35b6104f06116a0565b6040516104fd9190612dd8565b60405180910390f35b61050e6116c6565b60405161051b9190612d04565b60405180910390f35b61053e60048036038101906105399190612f39565b6116d9565b005b610548611874565b604051610556929190612f64565b60405180910390f35b61057960048036038101906105749190612e5a565b611884565b6040516105869190612d2c565b60405180910390f35b6105a960048036038101906105a49190612f8b565b611906565b005b6105b3611a1c565b6040516105c09190612d2c565b60405180910390f35b6105e360048036038101906105de9190612e2f565b611a22565b005b6060600480546105f490612fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612fe3565b801561066b5780601f106106425761010080835404028352916020019161066b565b820191905f5260205f20905b81548152906001019060200180831161064e57829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f6106ac6106a5611be4565b8484611beb565b6001905092915050565b5f600254905090565b5f6106cb848484611db2565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610712611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610797578381846040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161078e93929190613013565b60405180910390fd5b6107ab856107a3611be4565b858403611beb565b60019150509392505050565b6107bf611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461084d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084490613092565b60405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016108e89291906130b0565b6020604051808303815f875af1158015610904573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092891906130eb565b50610974307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611beb565b7f442677e6ee13f56c544261dd3126fe163b578cb60cedbfda8ee82b3d2dec0ab260405160405180910390a1565b6109aa611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613092565b60405180910390fd5b6001600860016101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b5f60065f9054906101000a900460ff16905090565b5f610b33610aa2611be4565b848460015f610aaf611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b2e9190613143565b611beb565b6001905092915050565b7f00000000000000000000000024794cbc74c6b717d5bd64fe7f4beb8500e3180181565b610b69611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613092565b60405180910390fd5b6001600660156101000a81548160ff021916908315150217905550610c1a611de4565b5f600660156101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3242604051610c639190612d2c565b60405180910390a1565b610c75611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613092565b60405180910390fd5b610bb8821115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f906131e6565b60405180910390fd5b610bb8811115610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613274565b60405180910390fd5b8160098190555080600a819055507f4d32f38862d5eb71edfefb7955873bd55920dc98159b6f53f8be62fbf0bebb4b600954600a54604051610dd0929190612f64565b60405180910390a15050565b60085f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e3b611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f8e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611081906132dc565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c49190612dd8565b602060405180830381865afa1580156110df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611103919061330e565b9050611110838383611fff565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43883826040516111419291906130b0565b60405180910390a1505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461118590612fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190612fe3565b80156111fc5780601f106111d3576101008083540402835291602001916111fc565b820191905f5260205f20905b8154815290600101906020018083116111df57829003601f168201915b5050505050905090565b61120e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613092565b60405180910390fd5b7f00000000000000000000000024794cbc74c6b717d5bd64fe7f4beb8500e3180173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806112f45750805b611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906133a9565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6113d9611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc90613411565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167ff95a3f3be1ad3ec3d252a63182a8332b013f2251a59a30a03ecd260cbe263cc260405160405180910390a250565b5f8060015f611569611be4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061349f565b60405180910390fd5b61163761162e611be4565b85858403611beb565b600191505092915050565b5f61165561164e611be4565b8484611db2565b6001905092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b600b602052805f5260405f205f915054906101000a900460ff1681565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860019054906101000a900460ff1681565b6116e1611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690613092565b60405180910390fd5b5f6117786106b6565b9050620186a060018261178b91906134bd565b611795919061352b565b8210156117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce906135cb565b60405180910390fd5b60646001826117e691906134bd565b6117f0919061352b565b821115611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613659565b60405180910390fd5b816007819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145826040516118689190612d2c565b60405180910390a15050565b5f80600954600a54915091509091565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61190e611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613092565b60405180910390fd5b8060085f6101000a81548160ff02191690831515021790555080156119ec577fc49c1e96242859ad1fcebbc65d8629059ac9afdb0f8a7524f5097a388ed304c160405160405180910390a1611a19565b7f12be78ac2c29f3b4b0cca88b9c3ef07cc32e0024bc37404683fa40ff95a320cc60405160405180910390a15b50565b60075481565b611a2a611be4565b73ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613092565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906136e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611c529190612dd8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611cc29190612dd8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da59190612d2c565b60405180910390a3505050565b5f611dbe848484612085565b9050611dc861219f565b611dde84848385611dd99190613705565b612221565b50505050565b5f611dee30610dee565b90505f8103611dfd5750611ffd565b611e068161248a565b5f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e609190612dd8565b602060405180830381865afa158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9f919061330e565b1115611ffb577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f5d9190612dd8565b602060405180830381865afa158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c919061330e565b6040518363ffffffff1660e01b8152600401611fb99291906130b0565b6020604051808303815f875af1158015611fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff991906130eb565b505b505b565b6120808363a9059cbb60e01b848460405160240161201e9291906130b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612648565b505050565b5f80600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120de57505f600a54115b1561210557612710600a54846120f491906134bd565b6120fe919061352b565b9050612180565b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561215c57505f600954115b1561217f576127106009548461217291906134bd565b61217c919061352b565b90505b5b5f81111561219457612193853083612221565b5b809150509392505050565b6007546121ab30610dee565b1180156121c3575060085f9054906101000a900460ff165b80156121dc5750600660159054906101000a900460ff16155b1561221f576001600660156101000a81548160ff02191690831515021790555061220461270d565b5f600660156101000a81548160ff0219169083151502179055505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612291575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016122889190612dd8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612301575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016122f89190612dd8565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561238a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238193929190613013565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124189190613143565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161247c9190612d2c565b60405180910390a350505050565b5f600267ffffffffffffffff8111156124a6576124a5613738565b5b6040519080825280602002602001820160405280156124d45781602001602082028036833780820191505090505b50905030815f815181106124eb576124ea613765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061255a57612559613765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612617959493929190613882565b5f604051808303815f87803b15801561262e575f80fd5b505af1158015612640573d5f803e3d5ffd5b505050505050565b5f6126a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129389092919063ffffffff16565b90505f8151111561270857808060200190518101906126c891906130eb565b612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe9061394a565b60405180910390fd5b5b505050565b5f61271730610dee565b90505f81036127265750612936565b6007548111156127365760075490505b61273f8161248a565b5f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127999190612dd8565b602060405180830381865afa1580156127b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d8919061330e565b1115612934577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128969190612dd8565b602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d5919061330e565b6040518363ffffffff1660e01b81526004016128f29291906130b0565b6020604051808303815f875af115801561290e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293291906130eb565b505b505b565b606061294684845f8561294f565b90509392505050565b606082471015612994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298b906139d8565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516129bc9190613a3a565b5f6040518083038185875af1925050503d805f81146129f6576040519150601f19603f3d011682016040523d82523d5f602084013e6129fb565b606091505b5091509150612a0c87838387612a18565b92505050949350505050565b60608315612a79575f835103612a7157612a3185612a8c565b612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6790613a9a565b60405180910390fd5b5b829050612a84565b612a838383612aae565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115612ac05781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af49190612b87565b60405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612b34578082015181840152602081019050612b19565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612b5982612afd565b612b638185612b07565b9350612b73818560208601612b17565b612b7c81612b3f565b840191505092915050565b5f6020820190508181035f830152612b9f8184612b4f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f612be9612be4612bdf84612ba7565b612bc6565b612ba7565b9050919050565b5f612bfa82612bcf565b9050919050565b5f612c0b82612bf0565b9050919050565b612c1b81612c01565b82525050565b5f602082019050612c345f830184612c12565b92915050565b5f80fd5b5f612c4882612ba7565b9050919050565b612c5881612c3e565b8114612c62575f80fd5b50565b5f81359050612c7381612c4f565b92915050565b5f819050919050565b612c8b81612c79565b8114612c95575f80fd5b50565b5f81359050612ca681612c82565b92915050565b5f8060408385031215612cc257612cc1612c3a565b5b5f612ccf85828601612c65565b9250506020612ce085828601612c98565b9150509250929050565b5f8115159050919050565b612cfe81612cea565b82525050565b5f602082019050612d175f830184612cf5565b92915050565b612d2681612c79565b82525050565b5f602082019050612d3f5f830184612d1d565b92915050565b5f805f60608486031215612d5c57612d5b612c3a565b5b5f612d6986828701612c65565b9350506020612d7a86828701612c65565b9250506040612d8b86828701612c98565b9150509250925092565b5f60ff82169050919050565b612daa81612d95565b82525050565b5f602082019050612dc35f830184612da1565b92915050565b612dd281612c3e565b82525050565b5f602082019050612deb5f830184612dc9565b92915050565b5f8060408385031215612e0757612e06612c3a565b5b5f612e1485828601612c98565b9250506020612e2585828601612c98565b9150509250929050565b5f60208284031215612e4457612e43612c3a565b5b5f612e5184828501612c65565b91505092915050565b5f8060408385031215612e7057612e6f612c3a565b5b5f612e7d85828601612c65565b9250506020612e8e85828601612c65565b9150509250929050565b612ea181612cea565b8114612eab575f80fd5b50565b5f81359050612ebc81612e98565b92915050565b5f8060408385031215612ed857612ed7612c3a565b5b5f612ee585828601612c65565b9250506020612ef685828601612eae565b9150509250929050565b5f612f0a82612bf0565b9050919050565b612f1a81612f00565b82525050565b5f602082019050612f335f830184612f11565b92915050565b5f60208284031215612f4e57612f4d612c3a565b5b5f612f5b84828501612c98565b91505092915050565b5f604082019050612f775f830185612d1d565b612f846020830184612d1d565b9392505050565b5f60208284031215612fa057612f9f612c3a565b5b5f612fad84828501612eae565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ffa57607f821691505b60208210810361300d5761300c612fb6565b5b50919050565b5f6060820190506130265f830186612dc9565b6130336020830185612d1d565b6130406040830184612d1d565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61307c602083612b07565b915061308782613048565b602082019050919050565b5f6020820190508181035f8301526130a981613070565b9050919050565b5f6040820190506130c35f830185612dc9565b6130d06020830184612d1d565b9392505050565b5f815190506130e581612e98565b92915050565b5f60208284031215613100576130ff612c3a565b5b5f61310d848285016130d7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61314d82612c79565b915061315883612c79565b92508282019050808211156131705761316f613116565b5b92915050565b7f4d757374206b65657020627579206665657320617420333025206f72206c65735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131d0602183612b07565b91506131db82613176565b604082019050919050565b5f6020820190508181035f8301526131fd816131c4565b9050919050565b7f4d757374206b6565702073656c6c206665657320617420333025206f72206c655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61325e602283612b07565b915061326982613204565b604082019050919050565b5f6020820190508181035f83015261328b81613252565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6132c6601a83612b07565b91506132d182613292565b602082019050919050565b5f6020820190508181035f8301526132f3816132ba565b9050919050565b5f8151905061330881612c82565b92915050565b5f6020828403121561332357613322612c3a565b5b5f613330848285016132fa565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613393603983612b07565b915061339e82613339565b604082019050919050565b5f6020820190508181035f8301526133c081613387565b9050919050565b7f616464726573732063616e6e6f742062652030000000000000000000000000005f82015250565b5f6133fb601383612b07565b9150613406826133c7565b602082019050919050565b5f6020820190508181035f830152613428816133ef565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613489602583612b07565b91506134948261342f565b604082019050919050565b5f6020820190508181035f8301526134b68161347d565b9050919050565b5f6134c782612c79565b91506134d283612c79565b92508282026134e081612c79565b915082820484148315176134f7576134f6613116565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61353582612c79565b915061354083612c79565b9250826135505761354f6134fe565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6135b5603583612b07565b91506135c08261355b565b604082019050919050565b5f6020820190508181035f8301526135e2816135a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b5f613643603283612b07565b915061364e826135e9565b604082019050919050565b5f6020820190508181035f83015261367081613637565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136d1602683612b07565b91506136dc82613677565b604082019050919050565b5f6020820190508181035f8301526136fe816136c5565b9050919050565b5f61370f82612c79565b915061371a83612c79565b925082820390508181111561373257613731613116565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6137b56137b06137ab84613792565b612bc6565b612c79565b9050919050565b6137c58161379b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6137fd81612c3e565b82525050565b5f61380e83836137f4565b60208301905092915050565b5f602082019050919050565b5f613830826137cb565b61383a81856137d5565b9350613845836137e5565b805f5b8381101561387557815161385c8882613803565b97506138678361381a565b925050600181019050613848565b5085935050505092915050565b5f60a0820190506138955f830188612d1d565b6138a260208301876137bc565b81810360408301526138b48186613826565b90506138c36060830185612dc9565b6138d06080830184612d1d565b9695505050505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613934602a83612b07565b915061393f826138da565b604082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f6139c2602683612b07565b91506139cd82613968565b604082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b5f81519050919050565b5f81905092915050565b5f613a14826139f6565b613a1e8185613a00565b9350613a2e818560208601612b17565b80840191505092915050565b5f613a458284613a0a565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f613a84601d83612b07565b9150613a8f82613a50565b602082019050919050565b5f6020820190508181035f830152613ab181613a78565b905091905056fea26469706673582212201c7fc01e8c2a6ebbc735105596bbdd5298fe54fe14a2bff620e22c7ec02e838264736f6c63430008180033

Deployed Bytecode Sourcemap

16723:11442:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19644:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16884:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10680:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9946:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10898:606;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27928:234;;;:::i;:::-;;20406:112;;;:::i;:::-;;19848:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11512:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16928:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27736:184;;;:::i;:::-;;22768:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17077:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10062:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14361:150;;;:::i;:::-;;26454:390;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14147:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19744:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22118:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27104:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11825:485;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10247:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16968:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17251:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16848:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17148:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21078:522;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23450:189;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10471:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20181:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17033:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14519:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19644:92;19690:13;19723:5;19716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19644:92;:::o;16884:37::-;;;:::o;10680:210::-;10799:4;10821:39;10830:12;:10;:12::i;:::-;10844:7;10853:6;10821:8;:39::i;:::-;10878:4;10871:11;;10680:210;;;;:::o;9946:108::-;10007:7;10034:12;;10027:19;;9946:108;:::o;10898:606::-;11038:4;11055:36;11065:6;11073:9;11084:6;11055:9;:36::i;:::-;11104:24;11131:11;:19;11143:6;11131:19;;;;;;;;;;;;;;;:33;11151:12;:10;:12::i;:::-;11131:33;;;;;;;;;;;;;;;;11104:60;;11198:6;11179:16;:25;11175:194;;;11273:9;11301:16;11336:6;11228:129;;;;;;;;;;;;;:::i;:::-;;;;;;;;11175:194;11404:57;11413:6;11421:12;:10;:12::i;:::-;11454:6;11435:16;:25;11404:8;:57::i;:::-;11492:4;11485:11;;;10898:606;;;;;:::o;27928:234::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27996:4:::1;:12;;;28017:9;28029:17;27996:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28058:62;28075:4;28090:9;28102:17;28058:8;:62::i;:::-;28136:18;;;;;;;;;;27928:234::o:0;20406:112::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:4:::1;20460:11;;:18;;;;;;;;;;;;;;;;;;20494:16;;;;;;;;;;20406:112::o:0;19848:83::-;19889:5;19914:9;;;;;;;;;;;19907:16;;19848:83;:::o;11512:305::-;11631:4;11653:134;11676:12;:10;:12::i;:::-;11703:7;11762:14;11725:11;:25;11737:12;:10;:12::i;:::-;11725:25;;;;;;;;;;;;;;;:34;11751:7;11725:34;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;11653:8;:134::i;:::-;11805:4;11798:11;;11512:305;;;;:::o;16928:31::-;;;:::o;27736:184::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27802:4:::1;27791:8;;:15;;;;;;;;;;;;;;;;;;27817:16;:14;:16::i;:::-;27855:5;27844:8;;:16;;;;;;;;;;;;;;;;;;27876:36;27896:15;27876:36;;;;;;:::i;:::-;;;;;;;;27736:184::o:0;22768:353::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22897:4:::1;22886:7;:15;;22878:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22970:4;22958:8;:16;;22950:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23033:7;23024:6;:16;;;;23061:8;23051:7;:18;;;;23085:28;23097:6;;23105:7;;23085:28;;;;;;;:::i;:::-;;;;;;;;22768:353:::0;;:::o;17077:31::-;;;;;;;;;;;;;:::o;10062:177::-;10181:7;10213:9;:18;10223:7;10213:18;;;;;;;;;;;;;;;;10206:25;;10062:177;;;:::o;14361:150::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14470:1:::1;14433:40;;14454:6;;;;;;;;;;;14433:40;;;;;;;;;;;;14501:1;14484:6;;:19;;;;;;;;;;;;;;;;;;14361:150::o:0;26454:390::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26592:1:::1;26574:20;;:6;:20;;::::0;26566:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26636:24;26670:6;26663:24;;;26696:4;26663:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26636:66;;26713:61;26743:6;26752:3;26757:16;26713:22;:61::i;:::-;26790:46;26811:6;26819:16;26790:46;;;;;;;:::i;:::-;;;;;;;;26555:289;26454:390:::0;;:::o;14147:79::-;14185:7;14212:6;;;;;;;;;;;14205:13;;14147:79;:::o;19744:96::-;19792:13;19825:7;19818:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19744:96;:::o;22118:358::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22262:6:::1;22254:14;;:4;:14;;;;:23;;;;22272:5;22254:23;22232:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;22407:5;22373:25;:31;22399:4;22373:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22462:5;22428:40;;22456:4;22428:40;;;;;;;;;;;;22118:358:::0;;:::o;27104:229::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27209:1:::1;27186:25;;:11;:25;;::::0;27178:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27267:11;27246:10;;:33;;;;;;;;;;;;;;;;;;27313:11;27295:30;;;;;;;;;;;;27104:229:::0;:::o;11825:485::-;11946:4;11968:24;11995:11;:25;12007:12;:10;:12::i;:::-;11995:25;;;;;;;;;;;;;;;:34;12021:7;11995:34;;;;;;;;;;;;;;;;11968:61;;12082:16;12062;:36;;12040:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;12199:68;12208:12;:10;:12::i;:::-;12222:7;12250:16;12231;:35;12199:8;:68::i;:::-;12298:4;12291:11;;;11825:485;;;;:::o;10247:216::-;10369:4;10391:42;10401:12;:10;:12::i;:::-;10415:9;10426:6;10391:9;:42::i;:::-;10451:4;10444:11;;10247:216;;;;:::o;16968:28::-;;;:::o;17251:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16848:25::-;;;;;;;;;;;;;:::o;17148:31::-;;;;;;;;;;;;;:::o;21078:522::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21161:20:::1;21184:13;:11;:13::i;:::-;21161:36;;21264:6;21259:1;21244:12;:16;;;;:::i;:::-;21243:27;;;;:::i;:::-;21230:9;:40;;21208:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:3;21413:1;21398:12;:16;;;;:::i;:::-;21397:24;;;;:::i;:::-;21384:9;:37;;21362:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;21531:9;21510:18;:30;;;;21556:36;21582:9;21556:36;;;;;;:::i;:::-;;;;;;;;21150:450;21078:522:::0;:::o;23450:189::-;23533:15;23563:16;23615:6;;23623:7;;23607:24;;;;23450:189;;:::o;10471:201::-;10605:7;10637:11;:18;10649:5;10637:18;;;;;;;;;;;;;;;:27;10656:7;10637:27;;;;;;;;;;;;;;;;10630:34;;10471:201;;;;:::o;20181:217::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20263:7:::1;20249:11;;:21;;;;;;;;;;;;;;;;;;20285:7;20281:110;;;20314:13;;;;;;;;;;20281:110;;;20365:14;;;;;;;;;;20281:110;20181:217:::0;:::o;17033:33::-;;;;:::o;14519:281::-;14284:12;:10;:12::i;:::-;14274:22;;:6;;;;;;;;;;;:22;;;14266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14642:1:::1;14622:22;;:8;:22;;::::0;14600:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14755:8;14726:38;;14747:6;;;;;;;;;;;14726:38;;;;;;;;;;;;14784:8;14775:6;;:17;;;;;;;;;;;;;;;;;;14519:281:::0;:::o;249:98::-;302:7;329:10;322:17;;249:98;:::o;13371:425::-;13520:1;13503:19;;:5;:19;;;13499:91;;13575:1;13546:32;;;;;;;;;;;:::i;:::-;;;;;;;;13499:91;13623:1;13604:21;;:7;:21;;;13600:92;;13677:1;13649:31;;;;;;;;;;;:::i;:::-;;;;;;;;13600:92;13734:6;13704:11;:18;13716:5;13704:18;;;;;;;;;;;;;;;:27;13723:7;13704:27;;;;;;;;;;;;;;;:36;;;;13772:7;13756:32;;13765:5;13756:32;;;13781:6;13756:32;;;;;;:::i;:::-;;;;;;;;13371:425;;;:::o;24452:249::-;24576:12;24591:26;24600:4;24606:2;24610:6;24591:8;:26::i;:::-;24576:41;;24628:14;:12;:14::i;:::-;24653:40;24669:4;24675:2;24688:4;24679:6;:13;;;;:::i;:::-;24653:15;:40::i;:::-;24565:136;24452:249;;;:::o;25700:355::-;25745:23;25771:24;25789:4;25771:9;:24::i;:::-;25745:50;;25831:1;25812:15;:20;25808:59;;25849:7;;;25808:59;25879:34;25897:15;25879:17;:34::i;:::-;25962:1;25930:4;:14;;;25953:4;25930:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;25926:122;;;25980:4;:13;;;25994:10;;;;;;;;;;;26006:4;:14;;;26029:4;26006:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25980:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25926:122;25734:321;25700:355;:::o;7516:248::-;7633:123;7667:5;7710:23;;;7735:2;7739:5;7687:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7633:19;:123::i;:::-;7516:248;;;:::o;23647:511::-;23759:7;23781:12;23810:25;:29;23836:2;23810:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23853:1;23843:7;;:11;23810:44;23806:226;;;23899:5;23888:7;;23879:6;:16;;;;:::i;:::-;23878:26;;;;:::i;:::-;23871:33;;23806:226;;;23926:25;:31;23952:4;23926:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;23970:1;23961:6;;:10;23926:45;23922:110;;;24015:5;24005:6;;23996;:15;;;;:::i;:::-;23995:25;;;;:::i;:::-;23988:32;;23922:110;23806:226;24055:1;24048:4;:8;24044:83;;;24073:42;24089:4;24103;24110;24073:15;:42::i;:::-;24044:83;24146:4;24139:11;;;23647:511;;;;;:::o;24166:278::-;24255:18;;24228:24;24246:4;24228:9;:24::i;:::-;:45;:73;;;;;24290:11;;;;;;;;;;;24228:73;:99;;;;;24319:8;;;;;;;;;;;24318:9;24228:99;24210:227;;;24365:4;24354:8;;:15;;;;;;;;;;;;;;;;;;24384:10;:8;:10::i;:::-;24420:5;24409:8;;:16;;;;;;;;;;;;;;;;;;24210:227;24166:278::o;12318:696::-;12472:1;12454:20;;:6;:20;;;12450:90;;12525:1;12498:30;;;;;;;;;;;:::i;:::-;;;;;;;;12450:90;12575:1;12554:23;;:9;:23;;;12550:95;;12630:1;12601:32;;;;;;;;;;;:::i;:::-;;;;;;;;12550:95;12655:21;12679:9;:17;12689:6;12679:17;;;;;;;;;;;;;;;;12655:41;;12727:6;12711:13;:22;12707:117;;;12782:6;12790:13;12805:6;12757:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;12707:117;12895:6;12879:13;:22;12859:9;:17;12869:6;12859:17;;;;;;;;;;;;;;;:42;;;;12947:6;12923:9;:20;12933:9;12923:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12988:9;12971:35;;12980:6;12971:35;;;12999:6;12971:35;;;;;;:::i;:::-;;;;;;;;12439:575;12318:696;;;:::o;24709:509::-;24836:21;24874:1;24860:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24836:40;;24905:4;24887;24892:1;24887:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24939:4;24921;24926:1;24921:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24983:9;:63;;;25061:11;25087:1;25131:4;25158:10;;;;;;;;;;;25184:15;24983:227;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24765:453;24709:509;:::o;7772:419::-;7853:23;7879:106;7921:4;7879:106;;;;;;;;;;;;;;;;;7887:5;7879:27;;;;:106;;;;;:::i;:::-;7853:132;;8020:1;8000:10;:17;:21;7996:188;;;8075:10;8064:30;;;;;;;;;;;;:::i;:::-;8038:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;7996:188;7842:349;7772:419;;:::o;25226:466::-;25265:23;25291:24;25309:4;25291:9;:24::i;:::-;25265:50;;25351:1;25332:15;:20;25328:59;;25369:7;;;25328:59;25421:18;;25403:15;:36;25399:105;;;25474:18;;25456:36;;25399:105;25516:34;25534:15;25516:17;:34::i;:::-;25599:1;25567:4;:14;;;25590:4;25567:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;25563:122;;;25617:4;:13;;;25631:10;;;;;;;;;;;25643:4;:14;;;25666:4;25643:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25617:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25563:122;25254:438;25226:466;:::o;1338:229::-;1475:12;1507:52;1529:6;1537:4;1543:1;1546:12;1507:21;:52::i;:::-;1500:59;;1338:229;;;;;:::o;2554:612::-;2724:12;2796:5;2771:21;:30;;2749:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;2879:12;2893:23;2920:6;:11;;2939:5;2960:4;2920:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:97;;;;3006:152;3051:6;3076:7;3102:10;3131:12;3006:26;:152::i;:::-;2986:172;;;;2554:612;;;;;;:::o;5689:644::-;5874:12;5903:7;5899:427;;;5952:1;5931:10;:17;:22;5927:290;;6149:18;6160:6;6149:10;:18::i;:::-;6141:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5927:290;6238:10;6231:17;;;;5899:427;6281:33;6289:10;6301:12;6281:7;:33::i;:::-;5689:644;;;;;;;:::o;502:115::-;562:4;608:1;586:7;:19;;;:23;579:30;;502:115;;;:::o;6875:575::-;7079:1;7059:10;:17;:21;7055:388;;;7291:10;7285:17;7348:15;7335:10;7331:2;7327:19;7320:44;7055:388;7418:12;7411:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:145::-;1896:9;1929:37;1960:5;1929:37;:::i;:::-;1916:50;;1827:145;;;:::o;1978:169::-;2084:56;2134:5;2084:56;:::i;:::-;2079:3;2072:69;1978:169;;:::o;2153:260::-;2265:4;2303:2;2292:9;2288:18;2280:26;;2316:90;2403:1;2392:9;2388:17;2379:6;2316:90;:::i;:::-;2153:260;;;;:::o;2500:117::-;2609:1;2606;2599:12;2746:96;2783:7;2812:24;2830:5;2812:24;:::i;:::-;2801:35;;2746:96;;;:::o;2848:122::-;2921:24;2939:5;2921:24;:::i;:::-;2914:5;2911:35;2901:63;;2960:1;2957;2950:12;2901:63;2848:122;:::o;2976:139::-;3022:5;3060:6;3047:20;3038:29;;3076:33;3103:5;3076:33;:::i;:::-;2976:139;;;;:::o;3121:77::-;3158:7;3187:5;3176:16;;3121:77;;;:::o;3204:122::-;3277:24;3295:5;3277:24;:::i;:::-;3270:5;3267:35;3257:63;;3316:1;3313;3306:12;3257:63;3204:122;:::o;3332:139::-;3378:5;3416:6;3403:20;3394:29;;3432:33;3459:5;3432:33;:::i;:::-;3332:139;;;;:::o;3477:474::-;3545:6;3553;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3855:2;3881:53;3926:7;3917:6;3906:9;3902:22;3881:53;:::i;:::-;3871:63;;3826:118;3477:474;;;;;:::o;3957:90::-;3991:7;4034:5;4027:13;4020:21;4009:32;;3957:90;;;:::o;4053:109::-;4134:21;4149:5;4134:21;:::i;:::-;4129:3;4122:34;4053:109;;:::o;4168:210::-;4255:4;4293:2;4282:9;4278:18;4270:26;;4306:65;4368:1;4357:9;4353:17;4344:6;4306:65;:::i;:::-;4168:210;;;;:::o;4384:118::-;4471:24;4489:5;4471:24;:::i;:::-;4466:3;4459:37;4384:118;;:::o;4508:222::-;4601:4;4639:2;4628:9;4624:18;4616:26;;4652:71;4720:1;4709:9;4705:17;4696:6;4652:71;:::i;:::-;4508:222;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:86::-;5396:7;5436:4;5429:5;5425:16;5414:27;;5361:86;;;:::o;5453:112::-;5536:22;5552:5;5536:22;:::i;:::-;5531:3;5524:35;5453:112;;:::o;5571:214::-;5660:4;5698:2;5687:9;5683:18;5675:26;;5711:67;5775:1;5764:9;5760:17;5751:6;5711:67;:::i;:::-;5571:214;;;;:::o;5791:118::-;5878:24;5896:5;5878:24;:::i;:::-;5873:3;5866:37;5791:118;;:::o;5915:222::-;6008:4;6046:2;6035:9;6031:18;6023:26;;6059:71;6127:1;6116:9;6112:17;6103:6;6059:71;:::i;:::-;5915:222;;;;:::o;6143:474::-;6211:6;6219;6268:2;6256:9;6247:7;6243:23;6239:32;6236:119;;;6274:79;;:::i;:::-;6236:119;6394:1;6419:53;6464:7;6455:6;6444:9;6440:22;6419:53;:::i;:::-;6409:63;;6365:117;6521:2;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6492:118;6143:474;;;;;:::o;6623:329::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:119;;;6737:79;;:::i;:::-;6699:119;6857:1;6882:53;6927:7;6918:6;6907:9;6903:22;6882:53;:::i;:::-;6872:63;;6828:117;6623:329;;;;:::o;6958:474::-;7026:6;7034;7083:2;7071:9;7062:7;7058:23;7054:32;7051:119;;;7089:79;;:::i;:::-;7051:119;7209:1;7234:53;7279:7;7270:6;7259:9;7255:22;7234:53;:::i;:::-;7224:63;;7180:117;7336:2;7362:53;7407:7;7398:6;7387:9;7383:22;7362:53;:::i;:::-;7352:63;;7307:118;6958:474;;;;;:::o;7438:116::-;7508:21;7523:5;7508:21;:::i;:::-;7501:5;7498:32;7488:60;;7544:1;7541;7534:12;7488:60;7438:116;:::o;7560:133::-;7603:5;7641:6;7628:20;7619:29;;7657:30;7681:5;7657:30;:::i;:::-;7560:133;;;;:::o;7699:468::-;7764:6;7772;7821:2;7809:9;7800:7;7796:23;7792:32;7789:119;;;7827:79;;:::i;:::-;7789:119;7947:1;7972:53;8017:7;8008:6;7997:9;7993:22;7972:53;:::i;:::-;7962:63;;7918:117;8074:2;8100:50;8142:7;8133:6;8122:9;8118:22;8100:50;:::i;:::-;8090:60;;8045:115;7699:468;;;;;:::o;8173:140::-;8237:9;8270:37;8301:5;8270:37;:::i;:::-;8257:50;;8173:140;;;:::o;8319:159::-;8420:51;8465:5;8420:51;:::i;:::-;8415:3;8408:64;8319:159;;:::o;8484:250::-;8591:4;8629:2;8618:9;8614:18;8606:26;;8642:85;8724:1;8713:9;8709:17;8700:6;8642:85;:::i;:::-;8484:250;;;;:::o;8740:329::-;8799:6;8848:2;8836:9;8827:7;8823:23;8819:32;8816:119;;;8854:79;;:::i;:::-;8816:119;8974:1;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8945:117;8740:329;;;;:::o;9075:332::-;9196:4;9234:2;9223:9;9219:18;9211:26;;9247:71;9315:1;9304:9;9300:17;9291:6;9247:71;:::i;:::-;9328:72;9396:2;9385:9;9381:18;9372:6;9328:72;:::i;:::-;9075:332;;;;;:::o;9413:323::-;9469:6;9518:2;9506:9;9497:7;9493:23;9489:32;9486:119;;;9524:79;;:::i;:::-;9486:119;9644:1;9669:50;9711:7;9702:6;9691:9;9687:22;9669:50;:::i;:::-;9659:60;;9615:114;9413:323;;;;:::o;9742:180::-;9790:77;9787:1;9780:88;9887:4;9884:1;9877:15;9911:4;9908:1;9901:15;9928:320;9972:6;10009:1;10003:4;9999:12;9989:22;;10056:1;10050:4;10046:12;10077:18;10067:81;;10133:4;10125:6;10121:17;10111:27;;10067:81;10195:2;10187:6;10184:14;10164:18;10161:38;10158:84;;10214:18;;:::i;:::-;10158:84;9979:269;9928:320;;;:::o;10254:442::-;10403:4;10441:2;10430:9;10426:18;10418:26;;10454:71;10522:1;10511:9;10507:17;10498:6;10454:71;:::i;:::-;10535:72;10603:2;10592:9;10588:18;10579:6;10535:72;:::i;:::-;10617;10685:2;10674:9;10670:18;10661:6;10617:72;:::i;:::-;10254:442;;;;;;:::o;10702:182::-;10842:34;10838:1;10830:6;10826:14;10819:58;10702:182;:::o;10890:366::-;11032:3;11053:67;11117:2;11112:3;11053:67;:::i;:::-;11046:74;;11129:93;11218:3;11129:93;:::i;:::-;11247:2;11242:3;11238:12;11231:19;;10890:366;;;:::o;11262:419::-;11428:4;11466:2;11455:9;11451:18;11443:26;;11515:9;11509:4;11505:20;11501:1;11490:9;11486:17;11479:47;11543:131;11669:4;11543:131;:::i;:::-;11535:139;;11262:419;;;:::o;11687:332::-;11808:4;11846:2;11835:9;11831:18;11823:26;;11859:71;11927:1;11916:9;11912:17;11903:6;11859:71;:::i;:::-;11940:72;12008:2;11997:9;11993:18;11984:6;11940:72;:::i;:::-;11687:332;;;;;:::o;12025:137::-;12079:5;12110:6;12104:13;12095:22;;12126:30;12150:5;12126:30;:::i;:::-;12025:137;;;;:::o;12168:345::-;12235:6;12284:2;12272:9;12263:7;12259:23;12255:32;12252:119;;;12290:79;;:::i;:::-;12252:119;12410:1;12435:61;12488:7;12479:6;12468:9;12464:22;12435:61;:::i;:::-;12425:71;;12381:125;12168:345;;;;:::o;12519:180::-;12567:77;12564:1;12557:88;12664:4;12661:1;12654:15;12688:4;12685:1;12678:15;12705:191;12745:3;12764:20;12782:1;12764:20;:::i;:::-;12759:25;;12798:20;12816:1;12798:20;:::i;:::-;12793:25;;12841:1;12838;12834:9;12827:16;;12862:3;12859:1;12856:10;12853:36;;;12869:18;;:::i;:::-;12853:36;12705:191;;;;:::o;12902:220::-;13042:34;13038:1;13030:6;13026:14;13019:58;13111:3;13106:2;13098:6;13094:15;13087:28;12902:220;:::o;13128:366::-;13270:3;13291:67;13355:2;13350:3;13291:67;:::i;:::-;13284:74;;13367:93;13456:3;13367:93;:::i;:::-;13485:2;13480:3;13476:12;13469:19;;13128:366;;;:::o;13500:419::-;13666:4;13704:2;13693:9;13689:18;13681:26;;13753:9;13747:4;13743:20;13739:1;13728:9;13724:17;13717:47;13781:131;13907:4;13781:131;:::i;:::-;13773:139;;13500:419;;;:::o;13925:221::-;14065:34;14061:1;14053:6;14049:14;14042:58;14134:4;14129:2;14121:6;14117:15;14110:29;13925:221;:::o;14152:366::-;14294:3;14315:67;14379:2;14374:3;14315:67;:::i;:::-;14308:74;;14391:93;14480:3;14391:93;:::i;:::-;14509:2;14504:3;14500:12;14493:19;;14152:366;;;:::o;14524:419::-;14690:4;14728:2;14717:9;14713:18;14705:26;;14777:9;14771:4;14767:20;14763:1;14752:9;14748:17;14741:47;14805:131;14931:4;14805:131;:::i;:::-;14797:139;;14524:419;;;:::o;14949:176::-;15089:28;15085:1;15077:6;15073:14;15066:52;14949:176;:::o;15131:366::-;15273:3;15294:67;15358:2;15353:3;15294:67;:::i;:::-;15287:74;;15370:93;15459:3;15370:93;:::i;:::-;15488:2;15483:3;15479:12;15472:19;;15131:366;;;:::o;15503:419::-;15669:4;15707:2;15696:9;15692:18;15684:26;;15756:9;15750:4;15746:20;15742:1;15731:9;15727:17;15720:47;15784:131;15910:4;15784:131;:::i;:::-;15776:139;;15503:419;;;:::o;15928:143::-;15985:5;16016:6;16010:13;16001:22;;16032:33;16059:5;16032:33;:::i;:::-;15928:143;;;;:::o;16077:351::-;16147:6;16196:2;16184:9;16175:7;16171:23;16167:32;16164:119;;;16202:79;;:::i;:::-;16164:119;16322:1;16347:64;16403:7;16394:6;16383:9;16379:22;16347:64;:::i;:::-;16337:74;;16293:128;16077:351;;;;:::o;16434:244::-;16574:34;16570:1;16562:6;16558:14;16551:58;16643:27;16638:2;16630:6;16626:15;16619:52;16434:244;:::o;16684:366::-;16826:3;16847:67;16911:2;16906:3;16847:67;:::i;:::-;16840:74;;16923:93;17012:3;16923:93;:::i;:::-;17041:2;17036:3;17032:12;17025:19;;16684:366;;;:::o;17056:419::-;17222:4;17260:2;17249:9;17245:18;17237:26;;17309:9;17303:4;17299:20;17295:1;17284:9;17280:17;17273:47;17337:131;17463:4;17337:131;:::i;:::-;17329:139;;17056:419;;;:::o;17481:169::-;17621:21;17617:1;17609:6;17605:14;17598:45;17481:169;:::o;17656:366::-;17798:3;17819:67;17883:2;17878:3;17819:67;:::i;:::-;17812:74;;17895:93;17984:3;17895:93;:::i;:::-;18013:2;18008:3;18004:12;17997:19;;17656:366;;;:::o;18028:419::-;18194:4;18232:2;18221:9;18217:18;18209:26;;18281:9;18275:4;18271:20;18267:1;18256:9;18252:17;18245:47;18309:131;18435:4;18309:131;:::i;:::-;18301:139;;18028:419;;;:::o;18453:224::-;18593:34;18589:1;18581:6;18577:14;18570:58;18662:7;18657:2;18649:6;18645:15;18638:32;18453:224;:::o;18683:366::-;18825:3;18846:67;18910:2;18905:3;18846:67;:::i;:::-;18839:74;;18922:93;19011:3;18922:93;:::i;:::-;19040:2;19035:3;19031:12;19024:19;;18683:366;;;:::o;19055:419::-;19221:4;19259:2;19248:9;19244:18;19236:26;;19308:9;19302:4;19298:20;19294:1;19283:9;19279:17;19272:47;19336:131;19462:4;19336:131;:::i;:::-;19328:139;;19055:419;;;:::o;19480:410::-;19520:7;19543:20;19561:1;19543:20;:::i;:::-;19538:25;;19577:20;19595:1;19577:20;:::i;:::-;19572:25;;19632:1;19629;19625:9;19654:30;19672:11;19654:30;:::i;:::-;19643:41;;19833:1;19824:7;19820:15;19817:1;19814:22;19794:1;19787:9;19767:83;19744:139;;19863:18;;:::i;:::-;19744:139;19528:362;19480:410;;;;:::o;19896:180::-;19944:77;19941:1;19934:88;20041:4;20038:1;20031:15;20065:4;20062:1;20055:15;20082:185;20122:1;20139:20;20157:1;20139:20;:::i;:::-;20134:25;;20173:20;20191:1;20173:20;:::i;:::-;20168:25;;20212:1;20202:35;;20217:18;;:::i;:::-;20202:35;20259:1;20256;20252:9;20247:14;;20082:185;;;;:::o;20273:240::-;20413:34;20409:1;20401:6;20397:14;20390:58;20482:23;20477:2;20469:6;20465:15;20458:48;20273:240;:::o;20519:366::-;20661:3;20682:67;20746:2;20741:3;20682:67;:::i;:::-;20675:74;;20758:93;20847:3;20758:93;:::i;:::-;20876:2;20871:3;20867:12;20860:19;;20519:366;;;:::o;20891:419::-;21057:4;21095:2;21084:9;21080:18;21072:26;;21144:9;21138:4;21134:20;21130:1;21119:9;21115:17;21108:47;21172:131;21298:4;21172:131;:::i;:::-;21164:139;;20891:419;;;:::o;21316:237::-;21456:34;21452:1;21444:6;21440:14;21433:58;21525:20;21520:2;21512:6;21508:15;21501:45;21316:237;:::o;21559:366::-;21701:3;21722:67;21786:2;21781:3;21722:67;:::i;:::-;21715:74;;21798:93;21887:3;21798:93;:::i;:::-;21916:2;21911:3;21907:12;21900:19;;21559:366;;;:::o;21931:419::-;22097:4;22135:2;22124:9;22120:18;22112:26;;22184:9;22178:4;22174:20;22170:1;22159:9;22155:17;22148:47;22212:131;22338:4;22212:131;:::i;:::-;22204:139;;21931:419;;;:::o;22356:225::-;22496:34;22492:1;22484:6;22480:14;22473:58;22565:8;22560:2;22552:6;22548:15;22541:33;22356:225;:::o;22587:366::-;22729:3;22750:67;22814:2;22809:3;22750:67;:::i;:::-;22743:74;;22826:93;22915:3;22826:93;:::i;:::-;22944:2;22939:3;22935:12;22928:19;;22587:366;;;:::o;22959:419::-;23125:4;23163:2;23152:9;23148:18;23140:26;;23212:9;23206:4;23202:20;23198:1;23187:9;23183:17;23176:47;23240:131;23366:4;23240:131;:::i;:::-;23232:139;;22959:419;;;:::o;23384:194::-;23424:4;23444:20;23462:1;23444:20;:::i;:::-;23439:25;;23478:20;23496:1;23478:20;:::i;:::-;23473:25;;23522:1;23519;23515:9;23507:17;;23546:1;23540:4;23537:11;23534:37;;;23551:18;;:::i;:::-;23534:37;23384:194;;;;:::o;23584:180::-;23632:77;23629:1;23622:88;23729:4;23726:1;23719:15;23753:4;23750:1;23743:15;23770:180;23818:77;23815:1;23808:88;23915:4;23912:1;23905:15;23939:4;23936:1;23929:15;23956:85;24001:7;24030:5;24019:16;;23956:85;;;:::o;24047:158::-;24105:9;24138:61;24156:42;24165:32;24191:5;24165:32;:::i;:::-;24156:42;:::i;:::-;24138:61;:::i;:::-;24125:74;;24047:158;;;:::o;24211:147::-;24306:45;24345:5;24306:45;:::i;:::-;24301:3;24294:58;24211:147;;:::o;24364:114::-;24431:6;24465:5;24459:12;24449:22;;24364:114;;;:::o;24484:184::-;24583:11;24617:6;24612:3;24605:19;24657:4;24652:3;24648:14;24633:29;;24484:184;;;;:::o;24674:132::-;24741:4;24764:3;24756:11;;24794:4;24789:3;24785:14;24777:22;;24674:132;;;:::o;24812:108::-;24889:24;24907:5;24889:24;:::i;:::-;24884:3;24877:37;24812:108;;:::o;24926:179::-;24995:10;25016:46;25058:3;25050:6;25016:46;:::i;:::-;25094:4;25089:3;25085:14;25071:28;;24926:179;;;;:::o;25111:113::-;25181:4;25213;25208:3;25204:14;25196:22;;25111:113;;;:::o;25260:732::-;25379:3;25408:54;25456:5;25408:54;:::i;:::-;25478:86;25557:6;25552:3;25478:86;:::i;:::-;25471:93;;25588:56;25638:5;25588:56;:::i;:::-;25667:7;25698:1;25683:284;25708:6;25705:1;25702:13;25683:284;;;25784:6;25778:13;25811:63;25870:3;25855:13;25811:63;:::i;:::-;25804:70;;25897:60;25950:6;25897:60;:::i;:::-;25887:70;;25743:224;25730:1;25727;25723:9;25718:14;;25683:284;;;25687:14;25983:3;25976:10;;25384:608;;;25260:732;;;;:::o;25998:831::-;26261:4;26299:3;26288:9;26284:19;26276:27;;26313:71;26381:1;26370:9;26366:17;26357:6;26313:71;:::i;:::-;26394:80;26470:2;26459:9;26455:18;26446:6;26394:80;:::i;:::-;26521:9;26515:4;26511:20;26506:2;26495:9;26491:18;26484:48;26549:108;26652:4;26643:6;26549:108;:::i;:::-;26541:116;;26667:72;26735:2;26724:9;26720:18;26711:6;26667:72;:::i;:::-;26749:73;26817:3;26806:9;26802:19;26793:6;26749:73;:::i;:::-;25998:831;;;;;;;;:::o;26835:229::-;26975:34;26971:1;26963:6;26959:14;26952:58;27044:12;27039:2;27031:6;27027:15;27020:37;26835:229;:::o;27070:366::-;27212:3;27233:67;27297:2;27292:3;27233:67;:::i;:::-;27226:74;;27309:93;27398:3;27309:93;:::i;:::-;27427:2;27422:3;27418:12;27411:19;;27070:366;;;:::o;27442:419::-;27608:4;27646:2;27635:9;27631:18;27623:26;;27695:9;27689:4;27685:20;27681:1;27670:9;27666:17;27659:47;27723:131;27849:4;27723:131;:::i;:::-;27715:139;;27442:419;;;:::o;27867:225::-;28007:34;28003:1;27995:6;27991:14;27984:58;28076:8;28071:2;28063:6;28059:15;28052:33;27867:225;:::o;28098:366::-;28240:3;28261:67;28325:2;28320:3;28261:67;:::i;:::-;28254:74;;28337:93;28426:3;28337:93;:::i;:::-;28455:2;28450:3;28446:12;28439:19;;28098:366;;;:::o;28470:419::-;28636:4;28674:2;28663:9;28659:18;28651:26;;28723:9;28717:4;28713:20;28709:1;28698:9;28694:17;28687:47;28751:131;28877:4;28751:131;:::i;:::-;28743:139;;28470:419;;;:::o;28895:98::-;28946:6;28980:5;28974:12;28964:22;;28895:98;;;:::o;28999:147::-;29100:11;29137:3;29122:18;;28999:147;;;;:::o;29152:386::-;29256:3;29284:38;29316:5;29284:38;:::i;:::-;29338:88;29419:6;29414:3;29338:88;:::i;:::-;29331:95;;29435:65;29493:6;29488:3;29481:4;29474:5;29470:16;29435:65;:::i;:::-;29525:6;29520:3;29516:16;29509:23;;29260:278;29152:386;;;;:::o;29544:271::-;29674:3;29696:93;29785:3;29776:6;29696:93;:::i;:::-;29689:100;;29806:3;29799:10;;29544:271;;;;:::o;29821:179::-;29961:31;29957:1;29949:6;29945:14;29938:55;29821:179;:::o;30006:366::-;30148:3;30169:67;30233:2;30228:3;30169:67;:::i;:::-;30162:74;;30245:93;30334:3;30245:93;:::i;:::-;30363:2;30358:3;30354:12;30347:19;;30006:366;;;:::o;30378:419::-;30544:4;30582:2;30571:9;30567:18;30559:26;;30631:9;30625:4;30621:20;30617:1;30606:9;30602:17;30595:47;30659:131;30785:4;30659:131;:::i;:::-;30651:139;;30378:419;;;:::o

Swarm Source

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