ETH Price: $3,252.15 (-3.06%)
 

Overview

Max Total Supply

10,000,000 PORKR

Holders

46

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PORKR

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-31
*/

// File: contracts/FullMath.sol


pragma solidity >=0.4.0;

/// @title Contains 512-bit math functions
/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision
/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits
library FullMath {
    /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
    /// @param a The multiplicand
    /// @param b The multiplier
    /// @param denominator The divisor
    /// @return result The 256-bit result
    /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv
    function mulDiv(
        uint256 a,
        uint256 b,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        // 512-bit multiply [prod1 prod0] = a * b
        // Compute the product mod 2**256 and mod 2**256 - 1
        // then use the Chinese Remainder Theorem to reconstruct
        // the 512 bit result. The result is stored in two 256
        // variables such that product = prod1 * 2**256 + prod0
        uint256 prod0; // Least significant 256 bits of the product
        uint256 prod1; // Most significant 256 bits of the product
        assembly {
            let mm := mulmod(a, b, not(0))
            prod0 := mul(a, b)
            prod1 := sub(sub(mm, prod0), lt(mm, prod0))
        }

        // Handle non-overflow cases, 256 by 256 division
        if (prod1 == 0) {
            require(denominator > 0);
            assembly {
                result := div(prod0, denominator)
            }
            return result;
        }

        // Make sure the result is less than 2**256.
        // Also prevents denominator == 0
        require(denominator > prod1);

        ///////////////////////////////////////////////
        // 512 by 256 division.
        ///////////////////////////////////////////////

        // Make division exact by subtracting the remainder from [prod1 prod0]
        // Compute remainder using mulmod
        uint256 remainder;
        assembly {
            remainder := mulmod(a, b, denominator)
        }
        // Subtract 256 bit number from 512 bit number
        assembly {
            prod1 := sub(prod1, gt(remainder, prod0))
            prod0 := sub(prod0, remainder)
        }

        // Factor powers of two out of denominator
        // Compute largest power of two divisor of denominator.
        // Always >= 1.
        unchecked {
            uint256 twos = (type(uint256).max - denominator + 1) & denominator;
            // Divide denominator by power of two
            assembly {
                denominator := div(denominator, twos)
            }

            // Divide [prod1 prod0] by the factors of two
            assembly {
                prod0 := div(prod0, twos)
            }
            // Shift in bits from prod1 into prod0. For this we need
            // to flip `twos` such that it is 2**256 / twos.
            // If twos is zero, then it becomes one
            assembly {
                twos := add(div(sub(0, twos), twos), 1)
            }
            prod0 |= prod1 * twos;

            // Invert denominator mod 2**256
            // Now that denominator is an odd number, it has an inverse
            // modulo 2**256 such that denominator * inv = 1 mod 2**256.
            // Compute the inverse by starting with a seed that is correct
            // correct for four bits. That is, denominator * inv = 1 mod 2**4
            uint256 inv = (3 * denominator) ^ 2;
            // Now use Newton-Raphson iteration to improve the precision.
            // Thanks to Hensel's lifting lemma, this also works in modular
            // arithmetic, doubling the correct bits in each step.
            inv *= 2 - denominator * inv; // inverse mod 2**8
            inv *= 2 - denominator * inv; // inverse mod 2**16
            inv *= 2 - denominator * inv; // inverse mod 2**32
            inv *= 2 - denominator * inv; // inverse mod 2**64
            inv *= 2 - denominator * inv; // inverse mod 2**128
            inv *= 2 - denominator * inv; // inverse mod 2**256

            // Because the division is now exact we can divide by multiplying
            // with the modular inverse of denominator. This will give us the
            // correct result modulo 2**256. Since the precoditions guarantee
            // that the outcome is less than 2**256, this is the final result.
            // We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inv;
            return result;
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @uniswap/v3-periphery/contracts/libraries/TransferHelper.sol


pragma solidity >=0.6.0;


library TransferHelper {
    /// @notice Transfers tokens from the targeted address to the given destination
    /// @notice Errors with 'STF' if transfer fails
    /// @param token The contract address of the token to be transferred
    /// @param from The originating address from which the tokens will be transferred
    /// @param to The destination address of the transfer
    /// @param value The amount to be transferred
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');
    }

    /// @notice Transfers tokens from msg.sender to a recipient
    /// @dev Errors with ST if transfer fails
    /// @param token The contract address of the token which will be transferred
    /// @param to The recipient of the transfer
    /// @param value The value of the transfer
    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST');
    }

    /// @notice Approves the stipulated contract to spend the given allowance in the given token
    /// @dev Errors with 'SA' if transfer fails
    /// @param token The contract address of the token to be approved
    /// @param to The target of the approval
    /// @param value The amount of the given token the target will be allowed to spend
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }

    /// @notice Transfers ETH to the recipient address
    /// @dev Fails with `STE`
    /// @param to The destination of the transfer
    /// @param value The value to be transferred
    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'STE');
    }
}

// File: @uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol


pragma solidity >=0.5.0;

/// @title Callback for IUniswapV3PoolActions#swap
/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface
interface IUniswapV3SwapCallback {
    /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.
    /// @dev In the implementation you must pay the pool tokens owed for the swap.
    /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.
    /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped.
    /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by
    /// the end of the swap. If positive, the callback must send that amount of token0 to the pool.
    /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by
    /// the end of the swap. If positive, the callback must send that amount of token1 to the pool.
    /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call
    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata data
    ) external;
}

// File: @uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol


pragma solidity >=0.7.5;
pragma abicoder v2;


/// @title Router token swapping functionality
/// @notice Functions for swapping tokens via Uniswap V3
interface ISwapRouter is IUniswapV3SwapCallback {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    /// @notice Swaps `amountIn` of one token for as much as possible of another token
    /// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata
    /// @return amountOut The amount of the received token
    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
    }

    /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path
    /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata
    /// @return amountOut The amount of the received token
    function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut);

    struct ExactOutputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
        uint160 sqrtPriceLimitX96;
    }

    /// @notice Swaps as little as possible of one token for `amountOut` of another token
    /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata
    /// @return amountIn The amount of the input token
    function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn);

    struct ExactOutputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
    }

    /// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)
    /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata
    /// @return amountIn The amount of the input token
    function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn);
}

// File: contracts/interfaces/IUniswapV2Router02.sol


pragma solidity ^0.8.0;
interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

// File: contracts/interfaces/IUniswapV2Pair.sol



pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/interfaces/IUniswapV2Factory.sol


pragma solidity >=0.8.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: contracts/ERC20.sol



pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

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

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

    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()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/Pork.sol

// PORKR - Hold $PORKR to Earn $PORK in reflections
// Website: https://www.porkreflection.me/
// x (Formerly twitter): https://twitter.com/porkrpork
// Telegram: https://t.me/porkrportal












interface IWETH {
    function deposit() external payable;
}

pragma solidity ^0.8.0;

contract PORKR is ERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address private operationsWallet;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

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

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public transferDelayEnabled = true;

    uint256 public launchBlockNumber;

    uint256 public buyFees;
    uint256 public sellFees;

    uint256 private divisor = 10_000;

    uint256 private _maxSwapableTokens;
    uint256 private _swapToEthAfterBuys = 30;
    uint256 private _removeLimitsAt = 60;
    uint256 public _buysCount = 0;

    mapping(address => bool) public _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    struct Ratios {
        uint256 operations;
        uint256 reflections;
    }

    Ratios public ratios;

    event TradingEnabled(uint256 blockNumber);
    event limitsRemoved(uint256 blockNumber);

    /////////////////////////////

    bool public reflectionsEnabled = false;
    ISwapRouter public immutable swapRouter;
    address public constant PORK = 0xb9f599ce614Feb2e1BBe58F180F370D05b39344E;
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    mapping(address => uint256) private _userPorkPerTokenPaid;
    mapping(address => uint256) private _pendingRewards;
    mapping(address => uint256) public porkClaimed;

    uint256 private _totalPorkPerToken;
    uint256 public totalPorkDistributted;
    uint256 public totalPorkGenerated;
    uint256 public totalEligibleForPork;

    /////////////////////////////

    constructor(
        address _operationWallet,
        ISwapRouter _swapRouter
    ) ERC20("PORKR", "PORKR", 8) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        swapRouter = _swapRouter;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        uint256 totalSupply = 10_000_000 * 10 ** decimals();

        maxTransaction = (totalSupply * 150) / divisor;
        maxWallet = (totalSupply * 150) / divisor;
        swapTokensAtAmount = (totalSupply * 50) / divisor;
        _maxSwapableTokens = (totalSupply * 100) / divisor;

        buyFees = 2_500;
        sellFees = 2_500;

        ratios = Ratios(6_000, 4_000);

        operationsWallet = _operationWallet;
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedmaxTransaction[address(_uniswapV2Router)] = true;
        _isExcludedmaxTransaction[address(uniswapV2Pair)] = true;
        _isExcludedmaxTransaction[owner()] = true;
        _isExcludedmaxTransaction[address(this)] = true;
        _isExcludedmaxTransaction[address(0xdead)] = true;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Token launched");
        tradingEnabled = true;
        launchBlockNumber = block.number;
        swapEnabled = true;
        emit TradingEnabled(block.number);
    }

    function removeLimits() internal returns (bool) {
        limitsInEffect = false;
        transferDelayEnabled = false;
        reflectionsEnabled = true;

        buyFees = 500;
        sellFees = 500;
        return true;
    }

    function setBuyFees(uint256 _buyFees) public onlyOwner {
        require(_buyFees + sellFees <= 1_000, "Total fees exceed 10%");
        buyFees = _buyFees;
    }

    // Function to modify sell fees
    function setSellFees(uint256 _sellFees) public onlyOwner {
        require(buyFees + _sellFees <= 1_000, "Total fees exceed 10%");
        sellFees = _sellFees;
    }

    function updateReflections(bool reflections) public onlyOwner {
        reflectionsEnabled = reflections;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) public onlyOwner {
        swapTokensAtAmount = newAmount;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

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

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferBlock[tx.origin] < block.number,
                            "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
                        );
                        _holderLastTransferBlock[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            _buysCount >= _swapToEthAfterBuys
        ) {
            swapping = true;
            swapBack(min(contractTokenBalance, _maxSwapableTokens));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(divisor);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(divisor);
                _buysCount++;

                updateRewards(to);
            }

            amount -= fees;

            ///////////////////////
            // on sell (update reflection)
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                totalEligibleForPork -= amount;
            }
            // on buy (update reflection)
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                totalEligibleForPork += amount;
            }
            ///////////////////////

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

        super._transfer(from, to, amount);

        ///////////////////////

        if (takeFee) {
            // on sell (update reflection)
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                updateRewards(from);
            }
        }

        ///////////////////////

        if (_buysCount >= _removeLimitsAt && limitsInEffect) {
            removeLimits();
            emit limitsRemoved(block.number);
        }
    }

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

    /////////////////

    function updateRewards(address holder) private {
        uint256 precisionMultiplier = 1e9;

        uint256 owedPerToken = _totalPorkPerToken.sub(
            _userPorkPerTokenPaid[holder]
        );
        uint256 userBalance = balanceOf(holder);
        uint256 owed = userBalance.mul(owedPerToken).div(precisionMultiplier);

        _pendingRewards[holder] = _pendingRewards[holder].add(owed);
        _userPorkPerTokenPaid[holder] = _totalPorkPerToken;
    }

    function holderShare(address holder) public view returns (uint256) {
        uint256 holderBalance = balanceOf(holder);

        return
            holderBalance > 0
                ? FullMath.mulDiv(holderBalance, divisor, totalEligibleForPork)
                : 0;
    }

    function claimRewards() public nonReentrant {
        updateRewards(_msgSender());
        IERC20 porkToken = IERC20(PORK);

        uint256 reward = _pendingRewards[_msgSender()];

        require(reward > 0, "No reward");

        _pendingRewards[_msgSender()] = 0;
        porkToken.transfer(_msgSender(), reward);

        _userPorkPerTokenPaid[_msgSender()] = _totalPorkPerToken;
        porkClaimed[_msgSender()] += reward;
        totalPorkDistributted += reward;
    }

    function pendingRewards(address holder) public view returns (uint256) {
        uint256 holderBalance = balanceOf(holder);
        uint256 accruedRewardPerToken = _totalPorkPerToken -
            _userPorkPerTokenPaid[holder];
        uint256 pendingReward = (holderBalance.mul(accruedRewardPerToken) /
            1e9);
        return pendingReward;
    }

    /////////////////

    function swapBack(uint256 amount) private {
        bool success;
        if (amount == 0) {
            return;
        }

        uint256 amountToSwapAndReflect = amount;
        swapAndReflect(amountToSwapAndReflect);
        uint256 ethBalance = address(this).balance;

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

    function swapAndReflect(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        /////////////////

        if (reflectionsEnabled) {
            IWETH weth = IWETH(uniswapV2Router.WETH());

            uint256 wethForReflections = FullMath.mulDiv(
                address(this).balance,
                ratios.reflections,
                divisor
            );

            weth.deposit{value: wethForReflections}();
            IERC20 WETH9token = IERC20(WETH);
            uint256 wethReceived = WETH9token.balanceOf(address(this));

            uint256 porkReceived = swapToPork(wethReceived);
            totalPorkGenerated += porkReceived;

            uint256 precisionMultiplier = 1e9;
            _totalPorkPerToken += (porkReceived.mul(precisionMultiplier) /
                totalEligibleForPork);
        }

        /////////////////
    }

    function swapToPork(uint256 amountIn) private returns (uint256 amountOut) {
        TransferHelper.safeApprove(WETH, address(swapRouter), amountIn);

        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter
            .ExactInputSingleParams({
                tokenIn: WETH,
                tokenOut: PORK,
                fee: 10000,
                recipient: address(this),
                deadline: block.timestamp,
                amountIn: amountIn,
                amountOutMinimum: 0,
                sqrtPriceLimitX96: 0
            });

        amountOut = swapRouter.exactInputSingle(params);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_operationWallet","type":"address"},{"internalType":"contract ISwapRouter","name":"_swapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"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":"uint256","name":"blockNumber","type":"uint256"}],"name":"limitsRemoved","type":"event"},{"inputs":[],"name":"PORK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buysCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"holderShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"porkClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratios","outputs":[{"internalType":"uint256","name":"operations","type":"uint256"},{"internalType":"uint256","name":"reflections","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFees","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFees","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"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":"totalEligibleForPork","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPorkDistributted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPorkGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"reflections","type":"bool"}],"name":"updateReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff021916908315150217905550612710601255601e601455603c60155560006016556000601c60006101000a81548160ff0219169083151502179055503480156200010257600080fd5b5060405162005f3338038062005f33833981810160405281019062000128919062000c08565b6040518060400160405280600581526020017f504f524b520000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f504f524b5200000000000000000000000000000000000000000000000000000081525060088260039081620001a7919062000ec9565b508160049081620001b9919062000ec9565b5080600560006101000a81548160ff021916908360ff160217905550505050620001f8620001ec620008c860201b60201c565b620008d060201b60201c565b60016006819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd919062000fb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000fb0565b6040518363ffffffff1660e01b81526004016200037a92919062000ff3565b6020604051808303816000875af11580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000fb0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016019600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006200045f6200099660201b60201c565b600a6200046d9190620011b0565b629896806200047d919062001201565b905060125460968262000491919062001201565b6200049d91906200127b565b600981905550601254609682620004b5919062001201565b620004c191906200127b565b600a81905550601254603282620004d9919062001201565b620004e591906200127b565b600b81905550601254606482620004fd919062001201565b6200050991906200127b565b6013819055506109c46010819055506109c460118190555060405180604001604052806117708152602001610fa0815250601a600082015181600001556020820151816001015590505083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160176000620005de620009ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620007a9620009ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008be3382620009d760201b60201c565b505050506200139f565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900460ff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a409062001314565b60405180910390fd5b62000a5d6000838362000b4f60201b60201c565b806002600082825462000a71919062001336565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ac8919062001336565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2f919062001382565b60405180910390a362000b4b6000838362000b5460201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8b8262000b5e565b9050919050565b62000b9d8162000b7e565b811462000ba957600080fd5b50565b60008151905062000bbd8162000b92565b92915050565b600062000bd08262000b7e565b9050919050565b62000be28162000bc3565b811462000bee57600080fd5b50565b60008151905062000c028162000bd7565b92915050565b6000806040838503121562000c225762000c2162000b59565b5b600062000c328582860162000bac565b925050602062000c458582860162000bf1565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cd157607f821691505b60208210810362000ce75762000ce662000c89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d12565b62000d5d868362000d12565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000daa62000da462000d9e8462000d75565b62000d7f565b62000d75565b9050919050565b6000819050919050565b62000dc68362000d89565b62000dde62000dd58262000db1565b84845462000d1f565b825550505050565b600090565b62000df562000de6565b62000e0281848462000dbb565b505050565b5b8181101562000e2a5762000e1e60008262000deb565b60018101905062000e08565b5050565b601f82111562000e795762000e438162000ced565b62000e4e8462000d02565b8101602085101562000e5e578190505b62000e7662000e6d8562000d02565b83018262000e07565b50505b505050565b600082821c905092915050565b600062000e9e6000198460080262000e7e565b1980831691505092915050565b600062000eb9838362000e8b565b9150826002028217905092915050565b62000ed48262000c4f565b67ffffffffffffffff81111562000ef05762000eef62000c5a565b5b62000efc825462000cb8565b62000f0982828562000e2e565b600060209050601f83116001811462000f41576000841562000f2c578287015190505b62000f38858262000eab565b86555062000fa8565b601f19841662000f518662000ced565b60005b8281101562000f7b5784890151825560018201915060208501945060208101905062000f54565b8683101562000f9b578489015162000f97601f89168262000e8b565b8355505b6001600288020188555050505b505050505050565b60006020828403121562000fc95762000fc862000b59565b5b600062000fd98482850162000bac565b91505092915050565b62000fed8162000b7e565b82525050565b60006040820190506200100a600083018562000fe2565b62001019602083018462000fe2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010ae5780860481111562001086576200108562001020565b5b6001851615620010965780820291505b8081029050620010a6856200104f565b945062001066565b94509492505050565b600082620010c957600190506200119c565b81620010d957600090506200119c565b8160018114620010f25760028114620010fd5762001133565b60019150506200119c565b60ff84111562001112576200111162001020565b5b8360020a9150848211156200112c576200112b62001020565b5b506200119c565b5060208310610133831016604e8410600b84101617156200116d5782820a90508381111562001167576200116662001020565b5b6200119c565b6200117c84848460016200105c565b9250905081840481111562001196576200119562001020565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011bd8262000d75565b9150620011ca83620011a3565b9250620011f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010b7565b905092915050565b60006200120e8262000d75565b91506200121b8362000d75565b92508282026200122b8162000d75565b9150828204841483151762001245576200124462001020565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012888262000d75565b9150620012958362000d75565b925082620012a857620012a76200124c565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012fc601f83620012b3565b91506200130982620012c4565b602082019050919050565b600060208201905081810360008301526200132f81620012ed565b9050919050565b6000620013438262000d75565b9150620013508362000d75565b92508282019050808211156200136b576200136a62001020565b5b92915050565b6200137c8162000d75565b82525050565b600060208201905062001399600083018462001371565b92915050565b60805160a05160c051614b2c6200140760003960008181611513015281816133c001526134ae0152600081816110e90152611d57015260008181610c0a01528181611cff01528181612fe2015281816130c3015281816130ea01526131950152614b2c6000f3fe6080604052600436106102975760003560e01c8063a457c2d71161015a578063dbb108b7116100c1578063e1bc33941161007a578063e1bc339414610a46578063e2f4560514610a83578063e4748b9e14610aae578063f2fde38b14610ad9578063f887ea4014610b02578063f8b45b0514610b2d5761029e565b8063dbb108b714610922578063dc86fcdc1461094d578063dcf7aef314610978578063dd62ed3e146109a1578063e0bf7fd1146109de578063e0f3ccf514610a1b5761029e565b8063c3f70b5211610113578063c3f70b5214610811578063c7f7a0471461083c578063c876d0b914610879578063cf6d625e146108a4578063d24ca7d6146108d0578063d257b34f146108f95761029e565b8063a457c2d7146106d9578063a9059cbb14610716578063ad5c464814610753578063b22604b11461077e578063b62496f5146107a9578063c31c9c07146107e65761029e565b80634ada218b116101fe578063867a166b116101b7578063867a166b146105db5780638a677b12146106185780638a8c523c146106435780638da5cb5b1461065a57806395927c251461068557806395d89b41146106ae5761029e565b80634ada218b146104db5780636ddd17131461050657806370a0823114610531578063715018a61461056e578063736767f51461058557806384e92c00146105b05761029e565b8063313ce56711610250578063313ce567146103c957806331d7a262146103f4578063372500ab14610431578063395093511461044857806349bd5a5e146104855780634a62bb65146104b05761029e565b806306fdde03146102a3578063095ea7b3146102ce5780631694505e1461030b57806318160ddd1461033657806321045a2e1461036157806323b872dd1461038c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b58565b6040516102c59190613735565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137f0565b610bea565b604051610302919061384b565b60405180910390f35b34801561031757600080fd5b50610320610c08565b60405161032d91906138c5565b60405180910390f35b34801561034257600080fd5b5061034b610c2c565b60405161035891906138ef565b60405180910390f35b34801561036d57600080fd5b50610376610c36565b60405161038391906138ef565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061390a565b610c3c565b6040516103c0919061384b565b60405180910390f35b3480156103d557600080fd5b506103de610d34565b6040516103eb9190613979565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613994565b610d4b565b60405161042891906138ef565b60405180910390f35b34801561043d57600080fd5b50610446610ddb565b005b34801561045457600080fd5b5061046f600480360381019061046a91906137f0565b61103b565b60405161047c919061384b565b60405180910390f35b34801561049157600080fd5b5061049a6110e7565b6040516104a791906139d0565b60405180910390f35b3480156104bc57600080fd5b506104c561110b565b6040516104d2919061384b565b60405180910390f35b3480156104e757600080fd5b506104f061111e565b6040516104fd919061384b565b60405180910390f35b34801561051257600080fd5b5061051b611131565b604051610528919061384b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613994565b611144565b60405161056591906138ef565b60405180910390f35b34801561057a57600080fd5b5061058361118c565b005b34801561059157600080fd5b5061059a6111a0565b6040516105a791906138ef565b60405180910390f35b3480156105bc57600080fd5b506105c56111a6565b6040516105d291906138ef565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613994565b6111ac565b60405161060f91906138ef565b60405180910390f35b34801561062457600080fd5b5061062d6111c4565b60405161063a91906138ef565b60405180910390f35b34801561064f57600080fd5b506106586111ca565b005b34801561066657600080fd5b5061066f611298565b60405161067c91906139d0565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a791906139eb565b6112c2565b005b3480156106ba57600080fd5b506106c3611326565b6040516106d09190613735565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906137f0565b6113b8565b60405161070d919061384b565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906137f0565b6114a3565b60405161074a919061384b565b60405180910390f35b34801561075f57600080fd5b506107686114c1565b60405161077591906139d0565b60405180910390f35b34801561078a57600080fd5b506107936114d9565b6040516107a091906139d0565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613994565b6114f1565b6040516107dd919061384b565b60405180910390f35b3480156107f257600080fd5b506107fb611511565b6040516108089190613a39565b60405180910390f35b34801561081d57600080fd5b50610826611535565b60405161083391906138ef565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613994565b61153b565b60405161087091906138ef565b60405180910390f35b34801561088557600080fd5b5061088e611570565b60405161089b919061384b565b60405180910390f35b3480156108b057600080fd5b506108b9611583565b6040516108c7929190613a54565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613aa9565b611595565b005b34801561090557600080fd5b50610920600480360381019061091b91906139eb565b6115ba565b005b34801561092e57600080fd5b506109376115cc565b604051610944919061384b565b60405180910390f35b34801561095957600080fd5b506109626115df565b60405161096f91906138ef565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906139eb565b6115e5565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613ad6565b611649565b6040516109d591906138ef565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613994565b6116d0565b604051610a12919061384b565b60405180910390f35b348015610a2757600080fd5b50610a306116f0565b604051610a3d91906138ef565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613994565b6116f6565b604051610a7a919061384b565b60405180910390f35b348015610a8f57600080fd5b50610a98611716565b604051610aa591906138ef565b60405180910390f35b348015610aba57600080fd5b50610ac361171c565b604051610ad091906138ef565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190613994565b611722565b005b348015610b0e57600080fd5b50610b176117a5565b604051610b2491906139d0565b60405180910390f35b348015610b3957600080fd5b50610b426117cb565b604051610b4f91906138ef565b60405180910390f35b606060038054610b6790613b45565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390613b45565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bfe610bf76117d1565b84846117d9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60235481565b6000610c498484846119a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c946117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613be8565b60405180910390fd5b610d2885610d206117d1565b8584036117d9565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b600080610d5783611144565b90506000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602054610da89190613c37565b90506000633b9aca00610dc4838561271690919063ffffffff16565b610dce9190613c9a565b9050809350505050919050565b610de361272c565b610df3610dee6117d1565b61277b565b600073b9f599ce614feb2e1bbe58f180f370d05b39344e90506000601e6000610e1a6117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613d17565b60405180910390fd5b6000601e6000610ea86117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f0a6117d1565b836040518363ffffffff1660e01b8152600401610f28929190613d37565b6020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190613d75565b50602054601d6000610f7b6117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601f6000610fc66117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100f9190613da2565b9250508190555080602160008282546110289190613da2565b9250508190555050506110396128f4565b565b60006110dd6110486117d1565b8484600160006110566117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110d89190613da2565b6117d9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111946128fe565b61119e600061297c565b565b60215481565b600f5481565b601f6020528060005260406000206000915090505481565b60165481565b6111d26128fe565b600c60019054906101000a900460ff1615611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613e22565b60405180910390fd5b6001600c60016101000a81548160ff02191690831515021790555043600f819055506001600c60026101000a81548160ff0219169083151502179055507fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9234360405161128e91906138ef565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ca6128fe565b6103e8816010546112db9190613da2565b111561131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390613e8e565b60405180910390fd5b8060118190555050565b60606004805461133590613b45565b80601f016020809104026020016040519081016040528092919081815260200182805461136190613b45565b80156113ae5780601f10611383576101008083540402835291602001916113ae565b820191906000526020600020905b81548152906001019060200180831161139157829003601f168201915b5050505050905090565b600080600160006113c76117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613f20565b60405180910390fd5b61149861148f6117d1565b858584036117d9565b600191505092915050565b60006114b76114b06117d1565b84846119a2565b6001905092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73b9f599ce614feb2e1bbe58f180f370d05b39344e81565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b60008061154783611144565b905060008111611558576000611568565b61156781601254602354612a42565b5b915050919050565b600e60009054906101000a900460ff1681565b601a8060000154908060010154905082565b61159d6128fe565b80601c60006101000a81548160ff02191690831515021790555050565b6115c26128fe565b80600b8190555050565b601c60009054906101000a900460ff1681565b60225481565b6115ed6128fe565b6103e8601154826115fe9190613da2565b111561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613e8e565b60405180910390fd5b8060108190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60105481565b61172a6128fe565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613fb2565b60405180910390fd5b6117a28161297c565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614044565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906140d6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161199591906138ef565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a77906141fa565b60405180910390fd5b60008103611a9957611a9483836000612b3d565b612711565b600c60009054906101000a900460ff161561215c57611ab6611298565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b245750611af4611298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b5d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b97575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bb05750600760149054906101000a900460ff16155b1561215b57600c60019054906101000a900460ff16611caa57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c6a5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090614266565b60405180910390fd5b5b600e60009054906101000a900460ff1615611e7257611cc7611298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d4e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611da657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611e715743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e239061431e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f155750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fbc57600954811115611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f56906143b0565b60405180910390fd5b600a54611f6b83611144565b82611f769190613da2565b1115611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061441c565b60405180910390fd5b61215a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561205f5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120ae576009548111156120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a0906144ae565b60405180910390fd5b612159565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215857600a5461210b83611144565b826121169190613da2565b1115612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e9061441c565b60405180910390fd5b5b5b5b5b5b600061216730611144565b90506000600b54821015905080801561218c5750600c60029054906101000a900460ff165b80156121a55750600760149054906101000a900460ff16155b80156121fb5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122515750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122a75750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b7575060145460165410155b15612307576001600760146101000a81548160ff0219169083151502179055506122eb6122e683601354612dbc565b612dd5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123bd5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123c757600090505b6000811561262a57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561242a57506000601154115b1561245f5761245860125461244a6011548861271690919063ffffffff16565b612e8c90919063ffffffff16565b905061250d565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124ba57506000601054115b1561250c576124e86012546124da6010548861271690919063ffffffff16565b612e8c90919063ffffffff16565b9050601660008154809291906124fd906144ce565b919050555061250b8661277b565b5b5b80856125199190613c37565b9450601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257657506000601154115b1561259957846023600082825461258d9190613c37565b92505081905550612614565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125f457506000601054115b1561261357846023600082825461260b9190613da2565b925050819055505b5b600081111561262957612628873083612b3d565b5b5b612635878787612b3d565b81156126a657601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561269657506000601154115b156126a5576126a48761277b565b5b5b601554601654101580156126c65750600c60009054906101000a900460ff165b1561270c576126d3612ea2565b507f013bc575fe38070c7401cd174e848869cc9d4e6929e33c17c3b35aa43cb045ee4360405161270391906138ef565b60405180910390a15b505050505b505050565b600081836127249190614516565b905092915050565b600260065403612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906145a4565b60405180910390fd5b6002600681905550565b6000633b9aca00905060006127da601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602054612f0d90919063ffffffff16565b905060006127e784611144565b9050600061281084612802858561271690919063ffffffff16565b612e8c90919063ffffffff16565b905061286481601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2390919063ffffffff16565b601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602054601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6001600681905550565b6129066117d1565b73ffffffffffffffffffffffffffffffffffffffff16612924611298565b73ffffffffffffffffffffffffffffffffffffffff161461297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190614610565b60405180910390fd5b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000801985870985870292508281108382030391505060008103612a7c5760008411612a7057600080fd5b83820492505050612b36565b808411612a8857600080fd5b60008486880990508281118203915080830392506000856001877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0301169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906141fa565b60405180910390fd5b612c26838383612f39565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca3906146a2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3f9190613da2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612da391906138ef565b60405180910390a3612db6848484612f3e565b50505050565b6000818311612dcb5782612dcd565b815b905092915050565b6000808203612de45750612e89565b6000829050612df281612f43565b6000479050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612e3d906146f3565b60006040518083038185875af1925050503d8060008114612e7a576040519150601f19603f3d011682016040523d82523d6000602084013e612e7f565b606091505b5050809350505050505b50565b60008183612e9a9190613c9a565b905092915050565b600080600c60006101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506101f46010819055506101f46011819055506001905090565b60008183612f1b9190613c37565b905092915050565b60008183612f319190613da2565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612f6057612f5f614708565b5b604051908082528060200260200182016040528015612f8e5781602001602082028036833780820191505090505b5090503081600081518110612fa657612fa5614737565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306f919061477b565b8160018151811061308357613082614737565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130e8307f0000000000000000000000000000000000000000000000000000000000000000846117d9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161314a9594939291906148a1565b600060405180830381600087803b15801561316457600080fd5b505af1158015613178573d6000803e3d6000fd5b50505050601c60009054906101000a900460ff16156133a05760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613222919061477b565b9050600061323847601a60010154601254612a42565b90508173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561328257600080fd5b505af1158015613296573d6000803e3d6000fd5b5050505050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132ef91906139d0565b602060405180830381865afa15801561330c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133309190614910565b9050600061333d826133a4565b905080602260008282546133519190613da2565b925050819055506000633b9aca009050602354613377828461271690919063ffffffff16565b6133819190613c9a565b602060008282546133929190613da2565b925050819055505050505050505b5050565b60006133e573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f000000000000000000000000000000000000000000000000000000000000000084613550565b600060405180610100016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16815260200173b9f599ce614feb2e1bbe58f180f370d05b39344e73ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200184815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b81526004016135059190614a1b565b6020604051808303816000875af1158015613524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135489190614910565b915050919050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b8585604051602401613585929190613d37565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516135ef9190614a73565b6000604051808303816000865af19150503d806000811461362c576040519150601f19603f3d011682016040523d82523d6000602084013e613631565b606091505b509150915081801561365f575060008151148061365e57508080602001905181019061365d9190613d75565b5b5b61369e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369590614ad6565b60405180910390fd5b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136df5780820151818401526020810190506136c4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613707826136a5565b61371181856136b0565b93506137218185602086016136c1565b61372a816136eb565b840191505092915050565b6000602082019050818103600083015261374f81846136fc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137878261375c565b9050919050565b6137978161377c565b81146137a257600080fd5b50565b6000813590506137b48161378e565b92915050565b6000819050919050565b6137cd816137ba565b81146137d857600080fd5b50565b6000813590506137ea816137c4565b92915050565b6000806040838503121561380757613806613757565b5b6000613815858286016137a5565b9250506020613826858286016137db565b9150509250929050565b60008115159050919050565b61384581613830565b82525050565b6000602082019050613860600083018461383c565b92915050565b6000819050919050565b600061388b6138866138818461375c565b613866565b61375c565b9050919050565b600061389d82613870565b9050919050565b60006138af82613892565b9050919050565b6138bf816138a4565b82525050565b60006020820190506138da60008301846138b6565b92915050565b6138e9816137ba565b82525050565b600060208201905061390460008301846138e0565b92915050565b60008060006060848603121561392357613922613757565b5b6000613931868287016137a5565b9350506020613942868287016137a5565b9250506040613953868287016137db565b9150509250925092565b600060ff82169050919050565b6139738161395d565b82525050565b600060208201905061398e600083018461396a565b92915050565b6000602082840312156139aa576139a9613757565b5b60006139b8848285016137a5565b91505092915050565b6139ca8161377c565b82525050565b60006020820190506139e560008301846139c1565b92915050565b600060208284031215613a0157613a00613757565b5b6000613a0f848285016137db565b91505092915050565b6000613a2382613892565b9050919050565b613a3381613a18565b82525050565b6000602082019050613a4e6000830184613a2a565b92915050565b6000604082019050613a6960008301856138e0565b613a7660208301846138e0565b9392505050565b613a8681613830565b8114613a9157600080fd5b50565b600081359050613aa381613a7d565b92915050565b600060208284031215613abf57613abe613757565b5b6000613acd84828501613a94565b91505092915050565b60008060408385031215613aed57613aec613757565b5b6000613afb858286016137a5565b9250506020613b0c858286016137a5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b5d57607f821691505b602082108103613b7057613b6f613b16565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613bd26028836136b0565b9150613bdd82613b76565b604082019050919050565b60006020820190508181036000830152613c0181613bc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c42826137ba565b9150613c4d836137ba565b9250828203905081811115613c6557613c64613c08565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ca5826137ba565b9150613cb0836137ba565b925082613cc057613cbf613c6b565b5b828204905092915050565b7f4e6f207265776172640000000000000000000000000000000000000000000000600082015250565b6000613d016009836136b0565b9150613d0c82613ccb565b602082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b6000604082019050613d4c60008301856139c1565b613d5960208301846138e0565b9392505050565b600081519050613d6f81613a7d565b92915050565b600060208284031215613d8b57613d8a613757565b5b6000613d9984828501613d60565b91505092915050565b6000613dad826137ba565b9150613db8836137ba565b9250828201905080821115613dd057613dcf613c08565b5b92915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613e0c600e836136b0565b9150613e1782613dd6565b602082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f546f74616c206665657320657863656564203130250000000000000000000000600082015250565b6000613e786015836136b0565b9150613e8382613e42565b602082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a6025836136b0565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c6026836136b0565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402e6024836136b0565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140c06022836136b0565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141526025836136b0565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141e46023836136b0565b91506141ef82614188565b604082019050919050565b60006020820190508181036000830152614213816141d7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006142506016836136b0565b915061425b8261421a565b602082019050919050565b6000602082019050818103600083015261427f81614243565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b60006143086048836136b0565b915061431382614286565b606082019050919050565b60006020820190508181036000830152614337816142fb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b600061439a602f836136b0565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144066013836136b0565b9150614411826143d0565b602082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006144986030836136b0565b91506144a38261443c565b604082019050919050565b600060208201905081810360008301526144c78161448b565b9050919050565b60006144d9826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361450b5761450a613c08565b5b600182019050919050565b6000614521826137ba565b915061452c836137ba565b925082820261453a816137ba565b9150828204841483151761455157614550613c08565b5b5092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061458e601f836136b0565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145fa6020836136b0565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061468c6026836136b0565b915061469782614630565b604082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b600081905092915050565b50565b60006146dd6000836146c2565b91506146e8826146cd565b600082019050919050565b60006146fe826146d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147758161378e565b92915050565b60006020828403121561479157614790613757565b5b600061479f84828501614766565b91505092915050565b6000819050919050565b60006147cd6147c86147c3846147a8565b613866565b6137ba565b9050919050565b6147dd816147b2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148188161377c565b82525050565b600061482a838361480f565b60208301905092915050565b6000602082019050919050565b600061484e826147e3565b61485881856147ee565b9350614863836147ff565b8060005b8381101561489457815161487b888261481e565b975061488683614836565b925050600181019050614867565b5085935050505092915050565b600060a0820190506148b660008301886138e0565b6148c360208301876147d4565b81810360408301526148d58186614843565b90506148e460608301856139c1565b6148f160808301846138e0565b9695505050505050565b60008151905061490a816137c4565b92915050565b60006020828403121561492657614925613757565b5b6000614934848285016148fb565b91505092915050565b600062ffffff82169050919050565b6149558161493d565b82525050565b614964816137ba565b82525050565b6149738161375c565b82525050565b61010082016000820151614990600085018261480f565b5060208201516149a3602085018261480f565b5060408201516149b6604085018261494c565b5060608201516149c9606085018261480f565b5060808201516149dc608085018261495b565b5060a08201516149ef60a085018261495b565b5060c0820151614a0260c085018261495b565b5060e0820151614a1560e085018261496a565b50505050565b600061010082019050614a316000830184614979565b92915050565b600081519050919050565b6000614a4d82614a37565b614a5781856146c2565b9350614a678185602086016136c1565b80840191505092915050565b6000614a7f8284614a42565b915081905092915050565b7f5341000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ac06002836136b0565b9150614acb82614a8a565b602082019050919050565b60006020820190508181036000830152614aef81614ab3565b905091905056fea26469706673582212206dc78b1285749d67445fd813a454aaf6ed48a5bf1ced5440f3b68cad60f0d6ae64736f6c63430008130033000000000000000000000000c31eeb1c96ce495fc970771a78bee9e39a2e64e9000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063a457c2d71161015a578063dbb108b7116100c1578063e1bc33941161007a578063e1bc339414610a46578063e2f4560514610a83578063e4748b9e14610aae578063f2fde38b14610ad9578063f887ea4014610b02578063f8b45b0514610b2d5761029e565b8063dbb108b714610922578063dc86fcdc1461094d578063dcf7aef314610978578063dd62ed3e146109a1578063e0bf7fd1146109de578063e0f3ccf514610a1b5761029e565b8063c3f70b5211610113578063c3f70b5214610811578063c7f7a0471461083c578063c876d0b914610879578063cf6d625e146108a4578063d24ca7d6146108d0578063d257b34f146108f95761029e565b8063a457c2d7146106d9578063a9059cbb14610716578063ad5c464814610753578063b22604b11461077e578063b62496f5146107a9578063c31c9c07146107e65761029e565b80634ada218b116101fe578063867a166b116101b7578063867a166b146105db5780638a677b12146106185780638a8c523c146106435780638da5cb5b1461065a57806395927c251461068557806395d89b41146106ae5761029e565b80634ada218b146104db5780636ddd17131461050657806370a0823114610531578063715018a61461056e578063736767f51461058557806384e92c00146105b05761029e565b8063313ce56711610250578063313ce567146103c957806331d7a262146103f4578063372500ab14610431578063395093511461044857806349bd5a5e146104855780634a62bb65146104b05761029e565b806306fdde03146102a3578063095ea7b3146102ce5780631694505e1461030b57806318160ddd1461033657806321045a2e1461036157806323b872dd1461038c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b58565b6040516102c59190613735565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137f0565b610bea565b604051610302919061384b565b60405180910390f35b34801561031757600080fd5b50610320610c08565b60405161032d91906138c5565b60405180910390f35b34801561034257600080fd5b5061034b610c2c565b60405161035891906138ef565b60405180910390f35b34801561036d57600080fd5b50610376610c36565b60405161038391906138ef565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061390a565b610c3c565b6040516103c0919061384b565b60405180910390f35b3480156103d557600080fd5b506103de610d34565b6040516103eb9190613979565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613994565b610d4b565b60405161042891906138ef565b60405180910390f35b34801561043d57600080fd5b50610446610ddb565b005b34801561045457600080fd5b5061046f600480360381019061046a91906137f0565b61103b565b60405161047c919061384b565b60405180910390f35b34801561049157600080fd5b5061049a6110e7565b6040516104a791906139d0565b60405180910390f35b3480156104bc57600080fd5b506104c561110b565b6040516104d2919061384b565b60405180910390f35b3480156104e757600080fd5b506104f061111e565b6040516104fd919061384b565b60405180910390f35b34801561051257600080fd5b5061051b611131565b604051610528919061384b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613994565b611144565b60405161056591906138ef565b60405180910390f35b34801561057a57600080fd5b5061058361118c565b005b34801561059157600080fd5b5061059a6111a0565b6040516105a791906138ef565b60405180910390f35b3480156105bc57600080fd5b506105c56111a6565b6040516105d291906138ef565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613994565b6111ac565b60405161060f91906138ef565b60405180910390f35b34801561062457600080fd5b5061062d6111c4565b60405161063a91906138ef565b60405180910390f35b34801561064f57600080fd5b506106586111ca565b005b34801561066657600080fd5b5061066f611298565b60405161067c91906139d0565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a791906139eb565b6112c2565b005b3480156106ba57600080fd5b506106c3611326565b6040516106d09190613735565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906137f0565b6113b8565b60405161070d919061384b565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906137f0565b6114a3565b60405161074a919061384b565b60405180910390f35b34801561075f57600080fd5b506107686114c1565b60405161077591906139d0565b60405180910390f35b34801561078a57600080fd5b506107936114d9565b6040516107a091906139d0565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613994565b6114f1565b6040516107dd919061384b565b60405180910390f35b3480156107f257600080fd5b506107fb611511565b6040516108089190613a39565b60405180910390f35b34801561081d57600080fd5b50610826611535565b60405161083391906138ef565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613994565b61153b565b60405161087091906138ef565b60405180910390f35b34801561088557600080fd5b5061088e611570565b60405161089b919061384b565b60405180910390f35b3480156108b057600080fd5b506108b9611583565b6040516108c7929190613a54565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613aa9565b611595565b005b34801561090557600080fd5b50610920600480360381019061091b91906139eb565b6115ba565b005b34801561092e57600080fd5b506109376115cc565b604051610944919061384b565b60405180910390f35b34801561095957600080fd5b506109626115df565b60405161096f91906138ef565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906139eb565b6115e5565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613ad6565b611649565b6040516109d591906138ef565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613994565b6116d0565b604051610a12919061384b565b60405180910390f35b348015610a2757600080fd5b50610a306116f0565b604051610a3d91906138ef565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613994565b6116f6565b604051610a7a919061384b565b60405180910390f35b348015610a8f57600080fd5b50610a98611716565b604051610aa591906138ef565b60405180910390f35b348015610aba57600080fd5b50610ac361171c565b604051610ad091906138ef565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190613994565b611722565b005b348015610b0e57600080fd5b50610b176117a5565b604051610b2491906139d0565b60405180910390f35b348015610b3957600080fd5b50610b426117cb565b604051610b4f91906138ef565b60405180910390f35b606060038054610b6790613b45565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390613b45565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bfe610bf76117d1565b84846117d9565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60235481565b6000610c498484846119a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c946117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613be8565b60405180910390fd5b610d2885610d206117d1565b8584036117d9565b60019150509392505050565b6000600560009054906101000a900460ff16905090565b600080610d5783611144565b90506000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602054610da89190613c37565b90506000633b9aca00610dc4838561271690919063ffffffff16565b610dce9190613c9a565b9050809350505050919050565b610de361272c565b610df3610dee6117d1565b61277b565b600073b9f599ce614feb2e1bbe58f180f370d05b39344e90506000601e6000610e1a6117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613d17565b60405180910390fd5b6000601e6000610ea86117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f0a6117d1565b836040518363ffffffff1660e01b8152600401610f28929190613d37565b6020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190613d75565b50602054601d6000610f7b6117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601f6000610fc66117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100f9190613da2565b9250508190555080602160008282546110289190613da2565b9250508190555050506110396128f4565b565b60006110dd6110486117d1565b8484600160006110566117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110d89190613da2565b6117d9565b6001905092915050565b7f00000000000000000000000001880a6ca1647351b6de33221566910ac79a6aa281565b600c60009054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111946128fe565b61119e600061297c565b565b60215481565b600f5481565b601f6020528060005260406000206000915090505481565b60165481565b6111d26128fe565b600c60019054906101000a900460ff1615611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613e22565b60405180910390fd5b6001600c60016101000a81548160ff02191690831515021790555043600f819055506001600c60026101000a81548160ff0219169083151502179055507fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9234360405161128e91906138ef565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ca6128fe565b6103e8816010546112db9190613da2565b111561131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390613e8e565b60405180910390fd5b8060118190555050565b60606004805461133590613b45565b80601f016020809104026020016040519081016040528092919081815260200182805461136190613b45565b80156113ae5780601f10611383576101008083540402835291602001916113ae565b820191906000526020600020905b81548152906001019060200180831161139157829003601f168201915b5050505050905090565b600080600160006113c76117d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613f20565b60405180910390fd5b61149861148f6117d1565b858584036117d9565b600191505092915050565b60006114b76114b06117d1565b84846119a2565b6001905092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73b9f599ce614feb2e1bbe58f180f370d05b39344e81565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b60095481565b60008061154783611144565b905060008111611558576000611568565b61156781601254602354612a42565b5b915050919050565b600e60009054906101000a900460ff1681565b601a8060000154908060010154905082565b61159d6128fe565b80601c60006101000a81548160ff02191690831515021790555050565b6115c26128fe565b80600b8190555050565b601c60009054906101000a900460ff1681565b60225481565b6115ed6128fe565b6103e8601154826115fe9190613da2565b111561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613e8e565b60405180910390fd5b8060108190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60105481565b61172a6128fe565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613fb2565b60405180910390fd5b6117a28161297c565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614044565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906140d6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161199591906138ef565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a77906141fa565b60405180910390fd5b60008103611a9957611a9483836000612b3d565b612711565b600c60009054906101000a900460ff161561215c57611ab6611298565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b245750611af4611298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b5d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b97575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bb05750600760149054906101000a900460ff16155b1561215b57600c60019054906101000a900460ff16611caa57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c6a5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090614266565b60405180910390fd5b5b600e60009054906101000a900460ff1615611e7257611cc7611298565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d4e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611da657507f00000000000000000000000001880a6ca1647351b6de33221566910ac79a6aa273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611e715743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e239061431e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f155750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fbc57600954811115611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f56906143b0565b60405180910390fd5b600a54611f6b83611144565b82611f769190613da2565b1115611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061441c565b60405180910390fd5b61215a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561205f5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120ae576009548111156120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a0906144ae565b60405180910390fd5b612159565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215857600a5461210b83611144565b826121169190613da2565b1115612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e9061441c565b60405180910390fd5b5b5b5b5b5b600061216730611144565b90506000600b54821015905080801561218c5750600c60029054906101000a900460ff165b80156121a55750600760149054906101000a900460ff16155b80156121fb5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122515750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122a75750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b7575060145460165410155b15612307576001600760146101000a81548160ff0219169083151502179055506122eb6122e683601354612dbc565b612dd5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123bd5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123c757600090505b6000811561262a57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561242a57506000601154115b1561245f5761245860125461244a6011548861271690919063ffffffff16565b612e8c90919063ffffffff16565b905061250d565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124ba57506000601054115b1561250c576124e86012546124da6010548861271690919063ffffffff16565b612e8c90919063ffffffff16565b9050601660008154809291906124fd906144ce565b919050555061250b8661277b565b5b5b80856125199190613c37565b9450601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257657506000601154115b1561259957846023600082825461258d9190613c37565b92505081905550612614565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125f457506000601054115b1561261357846023600082825461260b9190613da2565b925050819055505b5b600081111561262957612628873083612b3d565b5b5b612635878787612b3d565b81156126a657601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561269657506000601154115b156126a5576126a48761277b565b5b5b601554601654101580156126c65750600c60009054906101000a900460ff165b1561270c576126d3612ea2565b507f013bc575fe38070c7401cd174e848869cc9d4e6929e33c17c3b35aa43cb045ee4360405161270391906138ef565b60405180910390a15b505050505b505050565b600081836127249190614516565b905092915050565b600260065403612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906145a4565b60405180910390fd5b6002600681905550565b6000633b9aca00905060006127da601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602054612f0d90919063ffffffff16565b905060006127e784611144565b9050600061281084612802858561271690919063ffffffff16565b612e8c90919063ffffffff16565b905061286481601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2390919063ffffffff16565b601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602054601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6001600681905550565b6129066117d1565b73ffffffffffffffffffffffffffffffffffffffff16612924611298565b73ffffffffffffffffffffffffffffffffffffffff161461297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190614610565b60405180910390fd5b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000801985870985870292508281108382030391505060008103612a7c5760008411612a7057600080fd5b83820492505050612b36565b808411612a8857600080fd5b60008486880990508281118203915080830392506000856001877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0301169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906141fa565b60405180910390fd5b612c26838383612f39565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca3906146a2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3f9190613da2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612da391906138ef565b60405180910390a3612db6848484612f3e565b50505050565b6000818311612dcb5782612dcd565b815b905092915050565b6000808203612de45750612e89565b6000829050612df281612f43565b6000479050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612e3d906146f3565b60006040518083038185875af1925050503d8060008114612e7a576040519150601f19603f3d011682016040523d82523d6000602084013e612e7f565b606091505b5050809350505050505b50565b60008183612e9a9190613c9a565b905092915050565b600080600c60006101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506101f46010819055506101f46011819055506001905090565b60008183612f1b9190613c37565b905092915050565b60008183612f319190613da2565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612f6057612f5f614708565b5b604051908082528060200260200182016040528015612f8e5781602001602082028036833780820191505090505b5090503081600081518110612fa657612fa5614737565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306f919061477b565b8160018151811061308357613082614737565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130e8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117d9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161314a9594939291906148a1565b600060405180830381600087803b15801561316457600080fd5b505af1158015613178573d6000803e3d6000fd5b50505050601c60009054906101000a900460ff16156133a05760007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613222919061477b565b9050600061323847601a60010154601254612a42565b90508173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561328257600080fd5b505af1158015613296573d6000803e3d6000fd5b5050505050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132ef91906139d0565b602060405180830381865afa15801561330c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133309190614910565b9050600061333d826133a4565b905080602260008282546133519190613da2565b925050819055506000633b9aca009050602354613377828461271690919063ffffffff16565b6133819190613c9a565b602060008282546133929190613da2565b925050819055505050505050505b5050565b60006133e573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156484613550565b600060405180610100016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16815260200173b9f599ce614feb2e1bbe58f180f370d05b39344e73ffffffffffffffffffffffffffffffffffffffff16815260200161271062ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200184815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b81526004016135059190614a1b565b6020604051808303816000875af1158015613524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135489190614910565b915050919050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b8585604051602401613585929190613d37565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516135ef9190614a73565b6000604051808303816000865af19150503d806000811461362c576040519150601f19603f3d011682016040523d82523d6000602084013e613631565b606091505b509150915081801561365f575060008151148061365e57508080602001905181019061365d9190613d75565b5b5b61369e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369590614ad6565b60405180910390fd5b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136df5780820151818401526020810190506136c4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613707826136a5565b61371181856136b0565b93506137218185602086016136c1565b61372a816136eb565b840191505092915050565b6000602082019050818103600083015261374f81846136fc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137878261375c565b9050919050565b6137978161377c565b81146137a257600080fd5b50565b6000813590506137b48161378e565b92915050565b6000819050919050565b6137cd816137ba565b81146137d857600080fd5b50565b6000813590506137ea816137c4565b92915050565b6000806040838503121561380757613806613757565b5b6000613815858286016137a5565b9250506020613826858286016137db565b9150509250929050565b60008115159050919050565b61384581613830565b82525050565b6000602082019050613860600083018461383c565b92915050565b6000819050919050565b600061388b6138866138818461375c565b613866565b61375c565b9050919050565b600061389d82613870565b9050919050565b60006138af82613892565b9050919050565b6138bf816138a4565b82525050565b60006020820190506138da60008301846138b6565b92915050565b6138e9816137ba565b82525050565b600060208201905061390460008301846138e0565b92915050565b60008060006060848603121561392357613922613757565b5b6000613931868287016137a5565b9350506020613942868287016137a5565b9250506040613953868287016137db565b9150509250925092565b600060ff82169050919050565b6139738161395d565b82525050565b600060208201905061398e600083018461396a565b92915050565b6000602082840312156139aa576139a9613757565b5b60006139b8848285016137a5565b91505092915050565b6139ca8161377c565b82525050565b60006020820190506139e560008301846139c1565b92915050565b600060208284031215613a0157613a00613757565b5b6000613a0f848285016137db565b91505092915050565b6000613a2382613892565b9050919050565b613a3381613a18565b82525050565b6000602082019050613a4e6000830184613a2a565b92915050565b6000604082019050613a6960008301856138e0565b613a7660208301846138e0565b9392505050565b613a8681613830565b8114613a9157600080fd5b50565b600081359050613aa381613a7d565b92915050565b600060208284031215613abf57613abe613757565b5b6000613acd84828501613a94565b91505092915050565b60008060408385031215613aed57613aec613757565b5b6000613afb858286016137a5565b9250506020613b0c858286016137a5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b5d57607f821691505b602082108103613b7057613b6f613b16565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613bd26028836136b0565b9150613bdd82613b76565b604082019050919050565b60006020820190508181036000830152613c0181613bc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c42826137ba565b9150613c4d836137ba565b9250828203905081811115613c6557613c64613c08565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ca5826137ba565b9150613cb0836137ba565b925082613cc057613cbf613c6b565b5b828204905092915050565b7f4e6f207265776172640000000000000000000000000000000000000000000000600082015250565b6000613d016009836136b0565b9150613d0c82613ccb565b602082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b6000604082019050613d4c60008301856139c1565b613d5960208301846138e0565b9392505050565b600081519050613d6f81613a7d565b92915050565b600060208284031215613d8b57613d8a613757565b5b6000613d9984828501613d60565b91505092915050565b6000613dad826137ba565b9150613db8836137ba565b9250828201905080821115613dd057613dcf613c08565b5b92915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613e0c600e836136b0565b9150613e1782613dd6565b602082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f546f74616c206665657320657863656564203130250000000000000000000000600082015250565b6000613e786015836136b0565b9150613e8382613e42565b602082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a6025836136b0565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c6026836136b0565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402e6024836136b0565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140c06022836136b0565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141526025836136b0565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141e46023836136b0565b91506141ef82614188565b604082019050919050565b60006020820190508181036000830152614213816141d7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006142506016836136b0565b915061425b8261421a565b602082019050919050565b6000602082019050818103600083015261427f81614243565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b60006143086048836136b0565b915061431382614286565b606082019050919050565b60006020820190508181036000830152614337816142fb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b600061439a602f836136b0565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144066013836136b0565b9150614411826143d0565b602082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006144986030836136b0565b91506144a38261443c565b604082019050919050565b600060208201905081810360008301526144c78161448b565b9050919050565b60006144d9826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361450b5761450a613c08565b5b600182019050919050565b6000614521826137ba565b915061452c836137ba565b925082820261453a816137ba565b9150828204841483151761455157614550613c08565b5b5092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061458e601f836136b0565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145fa6020836136b0565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061468c6026836136b0565b915061469782614630565b604082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b600081905092915050565b50565b60006146dd6000836146c2565b91506146e8826146cd565b600082019050919050565b60006146fe826146d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147758161378e565b92915050565b60006020828403121561479157614790613757565b5b600061479f84828501614766565b91505092915050565b6000819050919050565b60006147cd6147c86147c3846147a8565b613866565b6137ba565b9050919050565b6147dd816147b2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148188161377c565b82525050565b600061482a838361480f565b60208301905092915050565b6000602082019050919050565b600061484e826147e3565b61485881856147ee565b9350614863836147ff565b8060005b8381101561489457815161487b888261481e565b975061488683614836565b925050600181019050614867565b5085935050505092915050565b600060a0820190506148b660008301886138e0565b6148c360208301876147d4565b81810360408301526148d58186614843565b90506148e460608301856139c1565b6148f160808301846138e0565b9695505050505050565b60008151905061490a816137c4565b92915050565b60006020828403121561492657614925613757565b5b6000614934848285016148fb565b91505092915050565b600062ffffff82169050919050565b6149558161493d565b82525050565b614964816137ba565b82525050565b6149738161375c565b82525050565b61010082016000820151614990600085018261480f565b5060208201516149a3602085018261480f565b5060408201516149b6604085018261494c565b5060608201516149c9606085018261480f565b5060808201516149dc608085018261495b565b5060a08201516149ef60a085018261495b565b5060c0820151614a0260c085018261495b565b5060e0820151614a1560e085018261496a565b50505050565b600061010082019050614a316000830184614979565b92915050565b600081519050919050565b6000614a4d82614a37565b614a5781856146c2565b9350614a678185602086016136c1565b80840191505092915050565b6000614a7f8284614a42565b915081905092915050565b7f5341000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ac06002836136b0565b9150614acb82614a8a565b602082019050919050565b60006020820190508181036000830152614aef81614ab3565b905091905056fea26469706673582212206dc78b1285749d67445fd813a454aaf6ed48a5bf1ced5440f3b68cad60f0d6ae64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c31eeb1c96ce495fc970771a78bee9e39a2e64e9000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564

-----Decoded View---------------
Arg [0] : _operationWallet (address): 0xC31EEB1C96Ce495fc970771a78bee9e39a2E64E9
Arg [1] : _swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c31eeb1c96ce495fc970771a78bee9e39a2e64e9
Arg [1] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564


Deployed Bytecode Sourcemap

40192:13685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25277:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26264:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40284:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25605:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42188:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26466:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51183:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50685:490;;;;;;;;;;;;;:::i;:::-;;27003:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40344:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40644:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40684:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40725:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25721:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32096:103;;;;;;;;;;;;;:::i;:::-;;42105:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40880:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42009:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41154:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43745:253;;;;;;;;;;;;;:::i;:::-;;31455:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44461:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25385:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27301:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25872:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41805:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41725;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41316:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41679:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40535:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50398:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40832:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41471:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44638:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44759:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41634:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42148:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44251:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26080:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41192:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40950:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41250:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40602:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40921:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32354:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40389:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40571:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25277:100;25331:13;25364:5;25357:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25277:100;:::o;26264:194::-;26372:4;26389:39;26398:12;:10;:12::i;:::-;26412:7;26421:6;26389:8;:39::i;:::-;26446:4;26439:11;;26264:194;;;;:::o;40284:51::-;;;:::o;25605:108::-;25666:7;25693:12;;25686:19;;25605:108;:::o;42188:35::-;;;;:::o;26466:529::-;26606:4;26623:36;26633:6;26641:9;26652:6;26623:9;:36::i;:::-;26672:24;26699:11;:19;26711:6;26699:19;;;;;;;;;;;;;;;:33;26719:12;:10;:12::i;:::-;26699:33;;;;;;;;;;;;;;;;26672:60;;26785:6;26765:16;:26;;26743:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;26895:57;26904:6;26912:12;:10;:12::i;:::-;26945:6;26926:16;:25;26895:8;:57::i;:::-;26983:4;26976:11;;;26466:529;;;;;:::o;25497:100::-;25555:5;25580:9;;;;;;;;;;;25573:16;;25497:100;:::o;51183:363::-;51244:7;51264:21;51288:17;51298:6;51288:9;:17::i;:::-;51264:41;;51316:29;51382:21;:29;51404:6;51382:29;;;;;;;;;;;;;;;;51348:18;;:63;;;;:::i;:::-;51316:95;;51422:21;51503:3;51447:40;51465:21;51447:13;:17;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;51422:85;;51525:13;51518:20;;;;;51183:363;;;:::o;50685:490::-;22813:21;:19;:21::i;:::-;50740:27:::1;50754:12;:10;:12::i;:::-;50740:13;:27::i;:::-;50778:16;41756:42;50778:31;;50822:14;50839:15;:29;50855:12;:10;:12::i;:::-;50839:29;;;;;;;;;;;;;;;;50822:46;;50898:1;50889:6;:10;50881:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;50958:1;50926:15;:29;50942:12;:10;:12::i;:::-;50926:29;;;;;;;;;;;;;;;:33;;;;50970:9;:18;;;50989:12;:10;:12::i;:::-;51003:6;50970:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51061:18;;51023:21;:35;51045:12;:10;:12::i;:::-;51023:35;;;;;;;;;;;;;;;:56;;;;51119:6;51090:11;:25;51102:12;:10;:12::i;:::-;51090:25;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;51161:6;51136:21;;:31;;;;;;;:::i;:::-;;;;;;;;50729:446;;22857:20:::0;:18;:20::i;:::-;50685:490::o;27003:290::-;27116:4;27133:130;27156:12;:10;:12::i;:::-;27183:7;27242:10;27205:11;:25;27217:12;:10;:12::i;:::-;27205:25;;;;;;;;;;;;;;;:34;27231:7;27205:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;27133:8;:130::i;:::-;27281:4;27274:11;;27003:290;;;;:::o;40344:38::-;;;:::o;40644:33::-;;;;;;;;;;;;;:::o;40684:34::-;;;;;;;;;;;;;:::o;40725:31::-;;;;;;;;;;;;;:::o;25721:143::-;25811:7;25838:9;:18;25848:7;25838:18;;;;;;;;;;;;;;;;25831:25;;25721:143;;;:::o;32096:103::-;31341:13;:11;:13::i;:::-;32161:30:::1;32188:1;32161:18;:30::i;:::-;32096:103::o:0;42105:36::-;;;;:::o;40880:32::-;;;;:::o;42009:46::-;;;;;;;;;;;;;;;;;:::o;41154:29::-;;;;:::o;43745:253::-;31341:13;:11;:13::i;:::-;43809:14:::1;;;;;;;;;;;43808:15;43800:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;43870:4;43853:14;;:21;;;;;;;;;;;;;;;;;;43905:12;43885:17;:32;;;;43942:4;43928:11;;:18;;;;;;;;;;;;;;;;;;43962:28;43977:12;43962:28;;;;;;:::i;:::-;;;;;;;;43745:253::o:0;31455:87::-;31501:7;31528:6;;;;;;;;;;;31521:13;;31455:87;:::o;44461:169::-;31341:13;:11;:13::i;:::-;44560:5:::1;44547:9;44537:7;;:19;;;;:::i;:::-;:28;;44529:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44613:9;44602:8;:20;;;;44461:169:::0;:::o;25385:104::-;25441:13;25474:7;25467:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25385:104;:::o;27301:475::-;27419:4;27436:24;27463:11;:25;27475:12;:10;:12::i;:::-;27463:25;;;;;;;;;;;;;;;:34;27489:7;27463:34;;;;;;;;;;;;;;;;27436:61;;27550:15;27530:16;:35;;27508:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;27666:67;27675:12;:10;:12::i;:::-;27689:7;27717:15;27698:16;:34;27666:8;:67::i;:::-;27764:4;27757:11;;;27301:475;;;;:::o;25872:200::-;25983:4;26000:42;26010:12;:10;:12::i;:::-;26024:9;26035:6;26000:9;:42::i;:::-;26060:4;26053:11;;25872:200;;;;:::o;41805:73::-;41836:42;41805:73;:::o;41725:::-;41756:42;41725:73;:::o;41316:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;41679:39::-;;;:::o;40535:29::-;;;;:::o;50398:279::-;50456:7;50476:21;50500:17;50510:6;50500:9;:17::i;:::-;50476:41;;50566:1;50550:13;:17;:119;;50668:1;50550:119;;;50587:61;50603:13;50618:7;;50627:20;;50587:15;:61::i;:::-;50550:119;50530:139;;;50398:279;;;:::o;40832:39::-;;;;;;;;;;;;;:::o;41471:20::-;;;;;;;;;;;;;;:::o;44638:113::-;31341:13;:11;:13::i;:::-;44732:11:::1;44711:18;;:32;;;;;;;;;;;;;;;;;;44638:113:::0;:::o;44759:119::-;31341:13;:11;:13::i;:::-;44861:9:::1;44840:18;:30;;;;44759:119:::0;:::o;41634:38::-;;;;;;;;;;;;;:::o;42148:33::-;;;;:::o;44251:165::-;31341:13;:11;:13::i;:::-;44348:5:::1;44336:8;;44325;:19;;;;:::i;:::-;:28;;44317:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44400:8;44390:7;:18;;;;44251:165:::0;:::o;26080:176::-;26194:7;26221:11;:18;26233:5;26221:18;;;;;;;;;;;;;;;:27;26240:7;26221:27;;;;;;;;;;;;;;;;26214:34;;26080:176;;;;:::o;41192:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;40950:23::-;;;;:::o;41250:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;40602:33::-;;;;:::o;40921:22::-;;;;:::o;32354:201::-;31341:13;:11;:13::i;:::-;32463:1:::1;32443:22;;:8;:22;;::::0;32435:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32519:28;32538:8;32519:18;:28::i;:::-;32354:201:::0;:::o;40389:66::-;;;;;;;;;;;;;:::o;40571:24::-;;;;:::o;24402:98::-;24455:7;24482:10;24475:17;;24402:98;:::o;29568:380::-;29721:1;29704:19;;:5;:19;;;29696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29802:1;29783:21;;:7;:21;;;29775:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29886:6;29856:11;:18;29868:5;29856:18;;;;;;;;;;;;;;;:27;29875:7;29856:27;;;;;;;;;;;;;;;:36;;;;29924:7;29908:32;;29917:5;29908:32;;;29933:6;29908:32;;;;;;:::i;:::-;;;;;;;;29568:380;;;:::o;44886:4881::-;45034:1;45018:18;;:4;:18;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45111:1;45097:16;;:2;:16;;;45089:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45180:1;45170:6;:11;45166:93;;45198:28;45214:4;45220:2;45224:1;45198:15;:28::i;:::-;45241:7;;45166:93;45275:14;;;;;;;;;;;45271:2272;;;45336:7;:5;:7::i;:::-;45328:15;;:4;:15;;;;:49;;;;;45370:7;:5;:7::i;:::-;45364:13;;:2;:13;;;;45328:49;:86;;;;;45412:1;45398:16;;:2;:16;;;;45328:86;:128;;;;;45449:6;45435:21;;:2;:21;;;;45328:128;:158;;;;;45478:8;;;;;;;;;;;45477:9;45328:158;45306:2226;;;45526:14;;;;;;;;;;;45521:224;;45599:19;:25;45619:4;45599:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45628:19;:23;45648:2;45628:23;;;;;;;;;;;;;;;;;;;;;;;;;45599:52;45565:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;45521:224;45769:20;;;;;;;;;;;45765:599;;;45850:7;:5;:7::i;:::-;45844:13;;:2;:13;;;;:72;;;;;45900:15;45886:30;;:2;:30;;;;45844:72;:129;;;;;45959:13;45945:28;;:2;:28;;;;45844:129;45814:531;;;46100:12;46062:24;:35;46087:9;46062:35;;;;;;;;;;;;;;;;:50;46024:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;46309:12;46271:24;:35;46296:9;46271:35;;;;;;;;;;;;;;;:50;;;;45814:531;45765:599;46438:25;:31;46464:4;46438:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;46495:25;:29;46521:2;46495:29;;;;;;;;;;;;;;;;;;;;;;;;;46494:30;46438:86;46412:1105;;;46611:14;;46601:6;:24;;46567:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;46807:9;;46790:13;46800:2;46790:9;:13::i;:::-;46781:6;:22;;;;:::i;:::-;:35;;46747:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46412:1105;;;46985:25;:29;47011:2;46985:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;47040:25;:31;47066:4;47040:31;;;;;;;;;;;;;;;;;;;;;;;;;47039:32;46985:86;46959:558;;;47158:14;;47148:6;:24;;47114:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;46959:558;;;47303:25;:29;47329:2;47303:29;;;;;;;;;;;;;;;;;;;;;;;;;47298:219;;47417:9;;47400:13;47410:2;47400:9;:13::i;:::-;47391:6;:22;;;;:::i;:::-;:35;;47357:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;47298:219;46959:558;46412:1105;45306:2226;45271:2272;47555:28;47586:24;47604:4;47586:9;:24::i;:::-;47555:55;;47621:12;47660:18;;47636:20;:42;;47621:57;;47709:7;:35;;;;;47733:11;;;;;;;;;;;47709:35;:61;;;;;47762:8;;;;;;;;;;;47761:9;47709:61;:110;;;;;47788:25;:31;47814:4;47788:31;;;;;;;;;;;;;;;;;;;;;;;;;47787:32;47709:110;:153;;;;;47837:19;:25;47857:4;47837:25;;;;;;;;;;;;;;;;;;;;;;;;;47836:26;47709:153;:194;;;;;47880:19;:23;47900:2;47880:23;;;;;;;;;;;;;;;;;;;;;;;;;47879:24;47709:194;:244;;;;;47934:19;;47920:10;;:33;;47709:244;47691:417;;;47991:4;47980:8;;:15;;;;;;;;;;;;;;;;;;48010:55;48019:45;48023:20;48045:18;;48019:3;:45::i;:::-;48010:8;:55::i;:::-;48091:5;48080:8;;:16;;;;;;;;;;;;;;;;;;47691:417;48120:12;48136:8;;;;;;;;;;;48135:9;48120:24;;48161:19;:25;48181:4;48161:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48190:19;:23;48210:2;48190:23;;;;;;;;;;;;;;;;;;;;;;;;;48161:52;48157:100;;;48240:5;48230:15;;48157:100;48269:12;48302:7;48298:993;;;48354:25;:29;48380:2;48354:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;48398:1;48387:8;;:12;48354:45;48350:363;;;48427:33;48452:7;;48427:20;48438:8;;48427:6;:10;;:20;;;;:::i;:::-;:24;;:33;;;;:::i;:::-;48420:40;;48350:363;;;48522:25;:31;48548:4;48522:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;48567:1;48557:7;;:11;48522:46;48518:195;;;48596:32;48620:7;;48596:19;48607:7;;48596:6;:10;;:19;;;;:::i;:::-;:23;;:32;;;;:::i;:::-;48589:39;;48647:10;;:12;;;;;;;;;:::i;:::-;;;;;;48680:17;48694:2;48680:13;:17::i;:::-;48518:195;48350:363;48739:4;48729:14;;;;;:::i;:::-;;;48845:25;:29;48871:2;48845:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;48889:1;48878:8;;:12;48845:45;48841:295;;;48935:6;48911:20;;:30;;;;;;;:::i;:::-;;;;;;;;48841:295;;;49023:25;:31;49049:4;49023:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;49068:1;49058:7;;:11;49023:46;49019:117;;;49114:6;49090:20;;:30;;;;;;;:::i;:::-;;;;;;;;49019:117;48841:295;49200:1;49193:4;:8;49189:91;;;49222:42;49238:4;49252;49259;49222:15;:42::i;:::-;49189:91;48298:993;49303:33;49319:4;49325:2;49329:6;49303:15;:33::i;:::-;49388:7;49384:188;;;49460:25;:29;49486:2;49460:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;49504:1;49493:8;;:12;49460:45;49456:105;;;49526:19;49540:4;49526:13;:19::i;:::-;49456:105;49384:188;49637:15;;49623:10;;:29;;:47;;;;;49656:14;;;;;;;;;;;49623:47;49619:141;;;49687:14;:12;:14::i;:::-;;49721:27;49735:12;49721:27;;;;;;:::i;:::-;;;;;;;;49619:141;44999:4768;;;;44886:4881;;;;:::o;36527:98::-;36585:7;36616:1;36612;:5;;;;:::i;:::-;36605:12;;36527:98;;;;:::o;22893:293::-;22295:1;23027:7;;:19;23019:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22295:1;23160:7;:18;;;;22893:293::o;49915:475::-;49973:27;50003:3;49973:33;;50019:20;50042:77;50079:21;:29;50101:6;50079:29;;;;;;;;;;;;;;;;50042:18;;:22;;:77;;;;:::i;:::-;50019:100;;50130:19;50152:17;50162:6;50152:9;:17::i;:::-;50130:39;;50180:12;50195:54;50229:19;50195:29;50211:12;50195:11;:15;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;50180:69;;50288:33;50316:4;50288:15;:23;50304:6;50288:23;;;;;;;;;;;;;;;;:27;;:33;;;;:::i;:::-;50262:15;:23;50278:6;50262:23;;;;;;;;;;;;;;;:59;;;;50364:18;;50332:21;:29;50354:6;50332:29;;;;;;;;;;;;;;;:50;;;;49962:428;;;;49915:475;:::o;23194:213::-;22251:1;23377:7;:22;;;;23194:213::o;31620:132::-;31695:12;:10;:12::i;:::-;31684:23;;:7;:5;:7::i;:::-;:23;;;31676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:132::o;32715:191::-;32789:16;32808:6;;;;;;;;;;;32789:25;;32834:8;32825:6;;:17;;;;;;;;;;;;;;;;;;32889:8;32858:40;;32879:8;32858:40;;;;;;;;;;;;32778:128;32715:191;:::o;759:4081::-;875:14;1210:13;1279;1398:1;1394:6;1391:1;1388;1381:20;1431:1;1428;1424:9;1415:18;;1483:5;1479:2;1476:13;1468:5;1464:2;1460:14;1456:34;1447:43;;1356:145;1585:1;1576:5;:10;1572:185;;1625:1;1611:11;:15;1603:24;;;;;;1691:11;1684:5;1680:23;1670:33;;1732:13;;;;1572:185;1888:5;1874:11;:19;1866:28;;;;;;2179:17;2257:11;2254:1;2251;2244:25;2231:38;;2404:5;2393:9;2390:20;2383:5;2379:32;2370:41;;2445:9;2438:5;2434:21;2425:30;;2645:12;2700:11;2695:1;2681:11;2661:17;:31;:35;2660:51;2645:66;;2837:4;2824:11;2820:22;2805:37;;2980:4;2973:5;2969:16;2960:25;;3264:1;3257:4;3250;3247:1;3243:12;3239:23;3235:31;3227:39;;3312:4;3304:5;:12;3295:21;;;;3681:11;3715:1;3700:11;3696:1;:15;3695:21;3681:35;;3976:3;3962:11;:17;3958:1;:21;3951:28;;;;4039:3;4025:11;:17;4021:1;:21;4014:28;;;;4103:3;4089:11;:17;4085:1;:21;4078:28;;;;4167:3;4153:11;:17;4149:1;:21;4142:28;;;;4231:3;4217:11;:17;4213:1;:21;4206:28;;;;4296:3;4282:11;:17;4278:1;:21;4271:28;;;;4790:3;4782:5;:11;4773:20;;4808:13;;;;;759:4081;;;;;;:::o;27784:770::-;27942:1;27924:20;;:6;:20;;;27916:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28026:1;28005:23;;:9;:23;;;27997:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28081:47;28102:6;28110:9;28121:6;28081:20;:47::i;:::-;28141:21;28165:9;:17;28175:6;28165:17;;;;;;;;;;;;;;;;28141:41;;28232:6;28215:13;:23;;28193:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28376:6;28360:13;:22;28340:9;:17;28350:6;28340:17;;;;;;;;;;;;;;;:42;;;;28428:6;28404:9;:20;28414:9;28404:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;28469:9;28452:35;;28461:6;28452:35;;;28480:6;28452:35;;;;;;:::i;:::-;;;;;;;;28500:46;28520:6;28528:9;28539:6;28500:19;:46::i;:::-;27905:649;27784:770;;;:::o;49775:107::-;49832:7;49864:1;49860;:5;49859:15;;49873:1;49859:15;;;49869:1;49859:15;49852:22;;49775:107;;;;:::o;51579:367::-;51632:12;51669:1;51659:6;:11;51655:50;;51687:7;;;51655:50;51717:30;51750:6;51717:39;;51767:38;51782:22;51767:14;:38::i;:::-;51816:18;51837:21;51816:42;;51893:16;;;;;;;;;;;51885:30;;51923:10;51885:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51871:67;;;;;51621:325;;;51579:367;;:::o;36926:98::-;36984:7;37015:1;37011;:5;;;;:::i;:::-;37004:12;;36926:98;;;;:::o;44006:237::-;44048:4;44082:5;44065:14;;:22;;;;;;;;;;;;;;;;;;44121:5;44098:20;;:28;;;;;;;;;;;;;;;;;;44158:4;44137:18;;:25;;;;;;;;;;;;;;;;;;44185:3;44175:7;:13;;;;44210:3;44199:8;:14;;;;44231:4;44224:11;;44006:237;:::o;36170:98::-;36228:7;36259:1;36255;:5;;;;:::i;:::-;36248:12;;36170:98;;;;:::o;35789:::-;35847:7;35878:1;35874;:5;;;;:::i;:::-;35867:12;;35789:98;;;;:::o;29956:125::-;;;;:::o;30089:124::-;;;;:::o;51954:1272::-;52018:21;52056:1;52042:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52018:40;;52087:4;52069;52074:1;52069:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;52113:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52103:4;52108:1;52103:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;52148:62;52165:4;52180:15;52198:11;52148:8;:62::i;:::-;52223:15;:66;;;52304:11;52330:1;52346:4;52373;52393:15;52223:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52465:18;;;;;;;;;;;52461:729;;;52500:10;52519:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52500:42;;52559:26;52588:133;52622:21;52662:6;:18;;;52699:7;;52588:15;:133::i;:::-;52559:162;;52738:4;:12;;;52758:18;52738:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52794:17;41836:42;52794:32;;52841:20;52864:10;:20;;;52893:4;52864:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52841:58;;52916:20;52939:24;52950:12;52939:10;:24::i;:::-;52916:47;;53000:12;52978:18;;:34;;;;;;;:::i;:::-;;;;;;;;53029:27;53059:3;53029:33;;53157:20;;53100:37;53117:19;53100:12;:16;;:37;;;;:::i;:::-;:77;;;;:::i;:::-;53077:18;;:101;;;;;;;:::i;:::-;;;;;;;;52485:705;;;;;;52461:729;52007:1219;51954:1272;:::o;53234:640::-;53289:17;53319:63;41836:42;53360:10;53373:8;53319:26;:63::i;:::-;53395:48;53446:360;;;;;;;;41836:42;53446:360;;;;;;41756:42;53446:360;;;;;;53584:5;53446:360;;;;;;53627:4;53446:360;;;;;;53661:15;53446:360;;;;53705:8;53446:360;;;;53750:1;53446:360;;;;53789:1;53446:360;;;;;53395:411;;53831:10;:27;;;53859:6;53831:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53819:47;;53308:566;53234:640;;;:::o;10313:314::-;10431:12;10445:17;10466:5;:10;;10500:23;;;10525:2;10529:5;10477:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10466:70;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10430:106;;;;10555:7;:57;;;;;10582:1;10567:4;:11;:16;:44;;;;10598:4;10587:24;;;;;;;;;;;;:::i;:::-;10567:44;10555:57;10547:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10419:208;;10313:314;;;:::o;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;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:329::-;5885:6;5934:2;5922:9;5913:7;5909:23;5905:32;5902:119;;;5940:79;;:::i;:::-;5902:119;6060:1;6085:53;6130:7;6121:6;6110:9;6106:22;6085:53;:::i;:::-;6075:63;;6031:117;5826:329;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:329::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:145::-;6917:9;6950:37;6981:5;6950:37;:::i;:::-;6937:50;;6848:145;;;:::o;6999:169::-;7105:56;7155:5;7105:56;:::i;:::-;7100:3;7093:69;6999:169;;:::o;7174:260::-;7286:4;7324:2;7313:9;7309:18;7301:26;;7337:90;7424:1;7413:9;7409:17;7400:6;7337:90;:::i;:::-;7174:260;;;;:::o;7440:332::-;7561:4;7599:2;7588:9;7584:18;7576:26;;7612:71;7680:1;7669:9;7665:17;7656:6;7612:71;:::i;:::-;7693:72;7761:2;7750:9;7746:18;7737:6;7693:72;:::i;:::-;7440:332;;;;;:::o;7778:116::-;7848:21;7863:5;7848:21;:::i;:::-;7841:5;7838:32;7828:60;;7884:1;7881;7874:12;7828:60;7778:116;:::o;7900:133::-;7943:5;7981:6;7968:20;7959:29;;7997:30;8021:5;7997:30;:::i;:::-;7900:133;;;;:::o;8039:323::-;8095:6;8144:2;8132:9;8123:7;8119:23;8115:32;8112:119;;;8150:79;;:::i;:::-;8112:119;8270:1;8295:50;8337:7;8328:6;8317:9;8313:22;8295:50;:::i;:::-;8285:60;;8241:114;8039:323;;;;:::o;8368:474::-;8436:6;8444;8493:2;8481:9;8472:7;8468:23;8464:32;8461:119;;;8499:79;;:::i;:::-;8461:119;8619:1;8644:53;8689:7;8680:6;8669:9;8665:22;8644:53;:::i;:::-;8634:63;;8590:117;8746:2;8772:53;8817:7;8808:6;8797:9;8793:22;8772:53;:::i;:::-;8762:63;;8717:118;8368:474;;;;;:::o;8848:180::-;8896:77;8893:1;8886:88;8993:4;8990:1;8983:15;9017:4;9014:1;9007:15;9034:320;9078:6;9115:1;9109:4;9105:12;9095:22;;9162:1;9156:4;9152:12;9183:18;9173:81;;9239:4;9231:6;9227:17;9217:27;;9173:81;9301:2;9293:6;9290:14;9270:18;9267:38;9264:84;;9320:18;;:::i;:::-;9264:84;9085:269;9034:320;;;:::o;9360:227::-;9500:34;9496:1;9488:6;9484:14;9477:58;9569:10;9564:2;9556:6;9552:15;9545:35;9360:227;:::o;9593:366::-;9735:3;9756:67;9820:2;9815:3;9756:67;:::i;:::-;9749:74;;9832:93;9921:3;9832:93;:::i;:::-;9950:2;9945:3;9941:12;9934:19;;9593:366;;;:::o;9965:419::-;10131:4;10169:2;10158:9;10154:18;10146:26;;10218:9;10212:4;10208:20;10204:1;10193:9;10189:17;10182:47;10246:131;10372:4;10246:131;:::i;:::-;10238:139;;9965:419;;;:::o;10390:180::-;10438:77;10435:1;10428:88;10535:4;10532:1;10525:15;10559:4;10556:1;10549:15;10576:194;10616:4;10636:20;10654:1;10636:20;:::i;:::-;10631:25;;10670:20;10688:1;10670:20;:::i;:::-;10665:25;;10714:1;10711;10707:9;10699:17;;10738:1;10732:4;10729:11;10726:37;;;10743:18;;:::i;:::-;10726:37;10576:194;;;;:::o;10776:180::-;10824:77;10821:1;10814:88;10921:4;10918:1;10911:15;10945:4;10942:1;10935:15;10962:185;11002:1;11019:20;11037:1;11019:20;:::i;:::-;11014:25;;11053:20;11071:1;11053:20;:::i;:::-;11048:25;;11092:1;11082:35;;11097:18;;:::i;:::-;11082:35;11139:1;11136;11132:9;11127:14;;10962:185;;;;:::o;11153:159::-;11293:11;11289:1;11281:6;11277:14;11270:35;11153:159;:::o;11318:365::-;11460:3;11481:66;11545:1;11540:3;11481:66;:::i;:::-;11474:73;;11556:93;11645:3;11556:93;:::i;:::-;11674:2;11669:3;11665:12;11658:19;;11318:365;;;:::o;11689:419::-;11855:4;11893:2;11882:9;11878:18;11870:26;;11942:9;11936:4;11932:20;11928:1;11917:9;11913:17;11906:47;11970:131;12096:4;11970:131;:::i;:::-;11962:139;;11689:419;;;:::o;12114:332::-;12235:4;12273:2;12262:9;12258:18;12250:26;;12286:71;12354:1;12343:9;12339:17;12330:6;12286:71;:::i;:::-;12367:72;12435:2;12424:9;12420:18;12411:6;12367:72;:::i;:::-;12114:332;;;;;:::o;12452:137::-;12506:5;12537:6;12531:13;12522:22;;12553:30;12577:5;12553:30;:::i;:::-;12452:137;;;;:::o;12595:345::-;12662:6;12711:2;12699:9;12690:7;12686:23;12682:32;12679:119;;;12717:79;;:::i;:::-;12679:119;12837:1;12862:61;12915:7;12906:6;12895:9;12891:22;12862:61;:::i;:::-;12852:71;;12808:125;12595:345;;;;:::o;12946:191::-;12986:3;13005:20;13023:1;13005:20;:::i;:::-;13000:25;;13039:20;13057:1;13039:20;:::i;:::-;13034:25;;13082:1;13079;13075:9;13068:16;;13103:3;13100:1;13097:10;13094:36;;;13110:18;;:::i;:::-;13094:36;12946:191;;;;:::o;13143:164::-;13283:16;13279:1;13271:6;13267:14;13260:40;13143:164;:::o;13313:366::-;13455:3;13476:67;13540:2;13535:3;13476:67;:::i;:::-;13469:74;;13552:93;13641:3;13552:93;:::i;:::-;13670:2;13665:3;13661:12;13654:19;;13313:366;;;:::o;13685:419::-;13851:4;13889:2;13878:9;13874:18;13866:26;;13938:9;13932:4;13928:20;13924:1;13913:9;13909:17;13902:47;13966:131;14092:4;13966:131;:::i;:::-;13958:139;;13685:419;;;:::o;14110:171::-;14250:23;14246:1;14238:6;14234:14;14227:47;14110:171;:::o;14287:366::-;14429:3;14450:67;14514:2;14509:3;14450:67;:::i;:::-;14443:74;;14526:93;14615:3;14526:93;:::i;:::-;14644:2;14639:3;14635:12;14628:19;;14287:366;;;:::o;14659:419::-;14825:4;14863:2;14852:9;14848:18;14840:26;;14912:9;14906:4;14902:20;14898:1;14887:9;14883:17;14876:47;14940:131;15066:4;14940:131;:::i;:::-;14932:139;;14659:419;;;:::o;15084:224::-;15224:34;15220:1;15212:6;15208:14;15201:58;15293:7;15288:2;15280:6;15276:15;15269:32;15084:224;:::o;15314:366::-;15456:3;15477:67;15541:2;15536:3;15477:67;:::i;:::-;15470:74;;15553:93;15642:3;15553:93;:::i;:::-;15671:2;15666:3;15662:12;15655:19;;15314:366;;;:::o;15686:419::-;15852:4;15890:2;15879:9;15875:18;15867:26;;15939:9;15933:4;15929:20;15925:1;15914:9;15910:17;15903:47;15967:131;16093:4;15967:131;:::i;:::-;15959:139;;15686:419;;;:::o;16111:225::-;16251:34;16247:1;16239:6;16235:14;16228:58;16320:8;16315:2;16307:6;16303:15;16296:33;16111:225;:::o;16342:366::-;16484:3;16505:67;16569:2;16564:3;16505:67;:::i;:::-;16498:74;;16581:93;16670:3;16581:93;:::i;:::-;16699:2;16694:3;16690:12;16683:19;;16342:366;;;:::o;16714:419::-;16880:4;16918:2;16907:9;16903:18;16895:26;;16967:9;16961:4;16957:20;16953:1;16942:9;16938:17;16931:47;16995:131;17121:4;16995:131;:::i;:::-;16987:139;;16714:419;;;:::o;17139:223::-;17279:34;17275:1;17267:6;17263:14;17256:58;17348:6;17343:2;17335:6;17331:15;17324:31;17139:223;:::o;17368:366::-;17510:3;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17607:93;17696:3;17607:93;:::i;:::-;17725:2;17720:3;17716:12;17709:19;;17368:366;;;:::o;17740:419::-;17906:4;17944:2;17933:9;17929:18;17921:26;;17993:9;17987:4;17983:20;17979:1;17968:9;17964:17;17957:47;18021:131;18147:4;18021:131;:::i;:::-;18013:139;;17740:419;;;:::o;18165:221::-;18305:34;18301:1;18293:6;18289:14;18282:58;18374:4;18369:2;18361:6;18357:15;18350:29;18165:221;:::o;18392:366::-;18534:3;18555:67;18619:2;18614:3;18555:67;:::i;:::-;18548:74;;18631:93;18720:3;18631:93;:::i;:::-;18749:2;18744:3;18740:12;18733:19;;18392:366;;;:::o;18764:419::-;18930:4;18968:2;18957:9;18953:18;18945:26;;19017:9;19011:4;19007:20;19003:1;18992:9;18988:17;18981:47;19045:131;19171:4;19045:131;:::i;:::-;19037:139;;18764:419;;;:::o;19189:224::-;19329:34;19325:1;19317:6;19313:14;19306:58;19398:7;19393:2;19385:6;19381:15;19374:32;19189:224;:::o;19419:366::-;19561:3;19582:67;19646:2;19641:3;19582:67;:::i;:::-;19575:74;;19658:93;19747:3;19658:93;:::i;:::-;19776:2;19771:3;19767:12;19760:19;;19419:366;;;:::o;19791:419::-;19957:4;19995:2;19984:9;19980:18;19972:26;;20044:9;20038:4;20034:20;20030:1;20019:9;20015:17;20008:47;20072:131;20198:4;20072:131;:::i;:::-;20064:139;;19791:419;;;:::o;20216:222::-;20356:34;20352:1;20344:6;20340:14;20333:58;20425:5;20420:2;20412:6;20408:15;20401:30;20216:222;:::o;20444:366::-;20586:3;20607:67;20671:2;20666:3;20607:67;:::i;:::-;20600:74;;20683:93;20772:3;20683:93;:::i;:::-;20801:2;20796:3;20792:12;20785:19;;20444:366;;;:::o;20816:419::-;20982:4;21020:2;21009:9;21005:18;20997:26;;21069:9;21063:4;21059:20;21055:1;21044:9;21040:17;21033:47;21097:131;21223:4;21097:131;:::i;:::-;21089:139;;20816:419;;;:::o;21241:172::-;21381:24;21377:1;21369:6;21365:14;21358:48;21241:172;:::o;21419:366::-;21561:3;21582:67;21646:2;21641:3;21582:67;:::i;:::-;21575:74;;21658:93;21747:3;21658:93;:::i;:::-;21776:2;21771:3;21767:12;21760:19;;21419:366;;;:::o;21791:419::-;21957:4;21995:2;21984:9;21980:18;21972:26;;22044:9;22038:4;22034:20;22030:1;22019:9;22015:17;22008:47;22072:131;22198:4;22072:131;:::i;:::-;22064:139;;21791:419;;;:::o;22216:296::-;22356:34;22352:1;22344:6;22340:14;22333:58;22425:34;22420:2;22412:6;22408:15;22401:59;22494:10;22489:2;22481:6;22477:15;22470:35;22216:296;:::o;22518:366::-;22660:3;22681:67;22745:2;22740:3;22681:67;:::i;:::-;22674:74;;22757:93;22846:3;22757:93;:::i;:::-;22875:2;22870:3;22866:12;22859:19;;22518:366;;;:::o;22890:419::-;23056:4;23094:2;23083:9;23079:18;23071:26;;23143:9;23137:4;23133:20;23129:1;23118:9;23114:17;23107:47;23171:131;23297:4;23171:131;:::i;:::-;23163:139;;22890:419;;;:::o;23315:234::-;23455:34;23451:1;23443:6;23439:14;23432:58;23524:17;23519:2;23511:6;23507:15;23500:42;23315:234;:::o;23555:366::-;23697:3;23718:67;23782:2;23777:3;23718:67;:::i;:::-;23711:74;;23794:93;23883:3;23794:93;:::i;:::-;23912:2;23907:3;23903:12;23896:19;;23555:366;;;:::o;23927:419::-;24093:4;24131:2;24120:9;24116:18;24108:26;;24180:9;24174:4;24170:20;24166:1;24155:9;24151:17;24144:47;24208:131;24334:4;24208:131;:::i;:::-;24200:139;;23927:419;;;:::o;24352:169::-;24492:21;24488:1;24480:6;24476:14;24469:45;24352:169;:::o;24527:366::-;24669:3;24690:67;24754:2;24749:3;24690:67;:::i;:::-;24683:74;;24766:93;24855:3;24766:93;:::i;:::-;24884:2;24879:3;24875:12;24868:19;;24527:366;;;:::o;24899:419::-;25065:4;25103:2;25092:9;25088:18;25080:26;;25152:9;25146:4;25142:20;25138:1;25127:9;25123:17;25116:47;25180:131;25306:4;25180:131;:::i;:::-;25172:139;;24899:419;;;:::o;25324:235::-;25464:34;25460:1;25452:6;25448:14;25441:58;25533:18;25528:2;25520:6;25516:15;25509:43;25324:235;:::o;25565:366::-;25707:3;25728:67;25792:2;25787:3;25728:67;:::i;:::-;25721:74;;25804:93;25893:3;25804:93;:::i;:::-;25922:2;25917:3;25913:12;25906:19;;25565:366;;;:::o;25937:419::-;26103:4;26141:2;26130:9;26126:18;26118:26;;26190:9;26184:4;26180:20;26176:1;26165:9;26161:17;26154:47;26218:131;26344:4;26218:131;:::i;:::-;26210:139;;25937:419;;;:::o;26362:233::-;26401:3;26424:24;26442:5;26424:24;:::i;:::-;26415:33;;26470:66;26463:5;26460:77;26457:103;;26540:18;;:::i;:::-;26457:103;26587:1;26580:5;26576:13;26569:20;;26362:233;;;:::o;26601:410::-;26641:7;26664:20;26682:1;26664:20;:::i;:::-;26659:25;;26698:20;26716:1;26698:20;:::i;:::-;26693:25;;26753:1;26750;26746:9;26775:30;26793:11;26775:30;:::i;:::-;26764:41;;26954:1;26945:7;26941:15;26938:1;26935:22;26915:1;26908:9;26888:83;26865:139;;26984:18;;:::i;:::-;26865:139;26649:362;26601:410;;;;:::o;27017:181::-;27157:33;27153:1;27145:6;27141:14;27134:57;27017:181;:::o;27204:366::-;27346:3;27367:67;27431:2;27426:3;27367:67;:::i;:::-;27360:74;;27443:93;27532:3;27443:93;:::i;:::-;27561:2;27556:3;27552:12;27545:19;;27204:366;;;:::o;27576:419::-;27742:4;27780:2;27769:9;27765:18;27757:26;;27829:9;27823:4;27819:20;27815:1;27804:9;27800:17;27793:47;27857:131;27983:4;27857:131;:::i;:::-;27849:139;;27576:419;;;:::o;28001:182::-;28141:34;28137:1;28129:6;28125:14;28118:58;28001:182;:::o;28189:366::-;28331:3;28352:67;28416:2;28411:3;28352:67;:::i;:::-;28345:74;;28428:93;28517:3;28428:93;:::i;:::-;28546:2;28541:3;28537:12;28530:19;;28189:366;;;:::o;28561:419::-;28727:4;28765:2;28754:9;28750:18;28742:26;;28814:9;28808:4;28804:20;28800:1;28789:9;28785:17;28778:47;28842:131;28968:4;28842:131;:::i;:::-;28834:139;;28561:419;;;:::o;28986:225::-;29126:34;29122:1;29114:6;29110:14;29103:58;29195:8;29190:2;29182:6;29178:15;29171:33;28986:225;:::o;29217:366::-;29359:3;29380:67;29444:2;29439:3;29380:67;:::i;:::-;29373:74;;29456:93;29545:3;29456:93;:::i;:::-;29574:2;29569:3;29565:12;29558:19;;29217:366;;;:::o;29589:419::-;29755:4;29793:2;29782:9;29778:18;29770:26;;29842:9;29836:4;29832:20;29828:1;29817:9;29813:17;29806:47;29870:131;29996:4;29870:131;:::i;:::-;29862:139;;29589:419;;;:::o;30014:147::-;30115:11;30152:3;30137:18;;30014:147;;;;:::o;30167:114::-;;:::o;30287:398::-;30446:3;30467:83;30548:1;30543:3;30467:83;:::i;:::-;30460:90;;30559:93;30648:3;30559:93;:::i;:::-;30677:1;30672:3;30668:11;30661:18;;30287:398;;;:::o;30691:379::-;30875:3;30897:147;31040:3;30897:147;:::i;:::-;30890:154;;31061:3;31054:10;;30691:379;;;:::o;31076:180::-;31124:77;31121:1;31114:88;31221:4;31218:1;31211:15;31245:4;31242:1;31235:15;31262:180;31310:77;31307:1;31300:88;31407:4;31404:1;31397:15;31431:4;31428:1;31421:15;31448:143;31505:5;31536:6;31530:13;31521:22;;31552:33;31579:5;31552:33;:::i;:::-;31448:143;;;;:::o;31597:351::-;31667:6;31716:2;31704:9;31695:7;31691:23;31687:32;31684:119;;;31722:79;;:::i;:::-;31684:119;31842:1;31867:64;31923:7;31914:6;31903:9;31899:22;31867:64;:::i;:::-;31857:74;;31813:128;31597:351;;;;:::o;31954:85::-;31999:7;32028:5;32017:16;;31954:85;;;:::o;32045:158::-;32103:9;32136:61;32154:42;32163:32;32189:5;32163:32;:::i;:::-;32154:42;:::i;:::-;32136:61;:::i;:::-;32123:74;;32045:158;;;:::o;32209:147::-;32304:45;32343:5;32304:45;:::i;:::-;32299:3;32292:58;32209:147;;:::o;32362:114::-;32429:6;32463:5;32457:12;32447:22;;32362:114;;;:::o;32482:184::-;32581:11;32615:6;32610:3;32603:19;32655:4;32650:3;32646:14;32631:29;;32482:184;;;;:::o;32672:132::-;32739:4;32762:3;32754:11;;32792:4;32787:3;32783:14;32775:22;;32672:132;;;:::o;32810:108::-;32887:24;32905:5;32887:24;:::i;:::-;32882:3;32875:37;32810:108;;:::o;32924:179::-;32993:10;33014:46;33056:3;33048:6;33014:46;:::i;:::-;33092:4;33087:3;33083:14;33069:28;;32924:179;;;;:::o;33109:113::-;33179:4;33211;33206:3;33202:14;33194:22;;33109:113;;;:::o;33258:732::-;33377:3;33406:54;33454:5;33406:54;:::i;:::-;33476:86;33555:6;33550:3;33476:86;:::i;:::-;33469:93;;33586:56;33636:5;33586:56;:::i;:::-;33665:7;33696:1;33681:284;33706:6;33703:1;33700:13;33681:284;;;33782:6;33776:13;33809:63;33868:3;33853:13;33809:63;:::i;:::-;33802:70;;33895:60;33948:6;33895:60;:::i;:::-;33885:70;;33741:224;33728:1;33725;33721:9;33716:14;;33681:284;;;33685:14;33981:3;33974:10;;33382:608;;;33258:732;;;;:::o;33996:831::-;34259:4;34297:3;34286:9;34282:19;34274:27;;34311:71;34379:1;34368:9;34364:17;34355:6;34311:71;:::i;:::-;34392:80;34468:2;34457:9;34453:18;34444:6;34392:80;:::i;:::-;34519:9;34513:4;34509:20;34504:2;34493:9;34489:18;34482:48;34547:108;34650:4;34641:6;34547:108;:::i;:::-;34539:116;;34665:72;34733:2;34722:9;34718:18;34709:6;34665:72;:::i;:::-;34747:73;34815:3;34804:9;34800:19;34791:6;34747:73;:::i;:::-;33996:831;;;;;;;;:::o;34833:143::-;34890:5;34921:6;34915:13;34906:22;;34937:33;34964:5;34937:33;:::i;:::-;34833:143;;;;:::o;34982:351::-;35052:6;35101:2;35089:9;35080:7;35076:23;35072:32;35069:119;;;35107:79;;:::i;:::-;35069:119;35227:1;35252:64;35308:7;35299:6;35288:9;35284:22;35252:64;:::i;:::-;35242:74;;35198:128;34982:351;;;;:::o;35339:91::-;35375:7;35415:8;35408:5;35404:20;35393:31;;35339:91;;;:::o;35436:105::-;35511:23;35528:5;35511:23;:::i;:::-;35506:3;35499:36;35436:105;;:::o;35547:108::-;35624:24;35642:5;35624:24;:::i;:::-;35619:3;35612:37;35547:108;;:::o;35661:::-;35738:24;35756:5;35738:24;:::i;:::-;35733:3;35726:37;35661:108;;:::o;35869:1623::-;36044:6;36039:3;36035:16;36136:4;36129:5;36125:16;36119:23;36155:63;36212:4;36207:3;36203:14;36189:12;36155:63;:::i;:::-;36061:167;36314:4;36307:5;36303:16;36297:23;36333:63;36390:4;36385:3;36381:14;36367:12;36333:63;:::i;:::-;36238:168;36487:4;36480:5;36476:16;36470:23;36506:61;36561:4;36556:3;36552:14;36538:12;36506:61;:::i;:::-;36416:161;36664:4;36657:5;36653:16;36647:23;36683:63;36740:4;36735:3;36731:14;36717:12;36683:63;:::i;:::-;36587:169;36842:4;36835:5;36831:16;36825:23;36861:63;36918:4;36913:3;36909:14;36895:12;36861:63;:::i;:::-;36766:168;37020:4;37013:5;37009:16;37003:23;37039:63;37096:4;37091:3;37087:14;37073:12;37039:63;:::i;:::-;36944:168;37206:4;37199:5;37195:16;37189:23;37225:63;37282:4;37277:3;37273:14;37259:12;37225:63;:::i;:::-;37122:176;37393:4;37386:5;37382:16;37376:23;37412:63;37469:4;37464:3;37460:14;37446:12;37412:63;:::i;:::-;37308:177;36013:1479;35869:1623;;:::o;37498:379::-;37669:4;37707:3;37696:9;37692:19;37684:27;;37721:149;37867:1;37856:9;37852:17;37843:6;37721:149;:::i;:::-;37498:379;;;;:::o;37883:98::-;37934:6;37968:5;37962:12;37952:22;;37883:98;;;:::o;37987:386::-;38091:3;38119:38;38151:5;38119:38;:::i;:::-;38173:88;38254:6;38249:3;38173:88;:::i;:::-;38166:95;;38270:65;38328:6;38323:3;38316:4;38309:5;38305:16;38270:65;:::i;:::-;38360:6;38355:3;38351:16;38344:23;;38095:278;37987:386;;;;:::o;38379:271::-;38509:3;38531:93;38620:3;38611:6;38531:93;:::i;:::-;38524:100;;38641:3;38634:10;;38379:271;;;;:::o;38656:152::-;38796:4;38792:1;38784:6;38780:14;38773:28;38656:152;:::o;38814:365::-;38956:3;38977:66;39041:1;39036:3;38977:66;:::i;:::-;38970:73;;39052:93;39141:3;39052:93;:::i;:::-;39170:2;39165:3;39161:12;39154:19;;38814:365;;;:::o;39185:419::-;39351:4;39389:2;39378:9;39374:18;39366:26;;39438:9;39432:4;39428:20;39424:1;39413:9;39409:17;39402:47;39466:131;39592:4;39466:131;:::i;:::-;39458:139;;39185:419;;;:::o

Swarm Source

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