ETH Price: $3,106.68 (-0.49%)

Contract

0x66580f80a00deAfab4519dC33C35BF44d8A12B00
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve206158242024-08-26 22:43:3584 days ago1724712215IN
0x66580f80...4d8A12B00
0 ETH0.000048281.02865453
Approve205855082024-08-22 17:02:1188 days ago1724346131IN
0x66580f80...4d8A12B00
0 ETH0.000055711.18648913
Approve205214002024-08-13 18:09:2397 days ago1723572563IN
0x66580f80...4d8A12B00
0 ETH0.000244615.20900836
Approve204166332024-07-30 3:14:59112 days ago1722309299IN
0x66580f80...4d8A12B00
0 ETH0.000073691.56255755
Approve203631572024-07-22 16:06:59119 days ago1721664419IN
0x66580f80...4d8A12B00
0 ETH0.0006005312.73290289
Approve203331482024-07-18 11:36:35123 days ago1721302595IN
0x66580f80...4d8A12B00
0 ETH0.000456639.68178724
Transfer202495922024-07-06 19:35:11135 days ago1720294511IN
0x66580f80...4d8A12B00
0 ETH0.000171821.81122252
Approve201349442024-06-20 19:12:23151 days ago1718910743IN
0x66580f80...4d8A12B00
0 ETH0.000151736.09886923
Approve201114772024-06-17 12:22:47154 days ago1718626967IN
0x66580f80...4d8A12B00
0 ETH0.000234434.97062041
Approve200523352024-06-09 5:58:59163 days ago1717912739IN
0x66580f80...4d8A12B00
0 ETH0.000181473.86931199
Approve199975382024-06-01 14:22:47170 days ago1717251767IN
0x66580f80...4d8A12B00
0 ETH0.0002507810.07970075
Approve199882722024-05-31 7:17:47172 days ago1717139867IN
0x66580f80...4d8A12B00
0 ETH0.000354387.55624953
Approve199579812024-05-27 1:39:35176 days ago1716773975IN
0x66580f80...4d8A12B00
0 ETH0.0001214.43446304
Approve199579582024-05-27 1:34:59176 days ago1716773699IN
0x66580f80...4d8A12B00
0 ETH0.000120244.40640717
Approve199359712024-05-23 23:50:35179 days ago1716508235IN
0x66580f80...4d8A12B00
0 ETH0.000377318
Approve197172162024-04-23 9:31:23210 days ago1713864683IN
0x66580f80...4d8A12B00
0 ETH0.000219788.83385416
Approve196089562024-04-08 5:45:59225 days ago1712555159IN
0x66580f80...4d8A12B00
0 ETH0.000470769.98146581
Transfer191482932024-02-03 14:02:23289 days ago1706968943IN
0x66580f80...4d8A12B00
0 ETH0.0032306720.61168363
Approve191009202024-01-27 22:36:11296 days ago1706394971IN
0x66580f80...4d8A12B00
0 ETH0.0003038411.23855711
Approve191009172024-01-27 22:35:23296 days ago1706394923IN
0x66580f80...4d8A12B00
0 ETH0.0003125310.4750222
Approve191009142024-01-27 22:34:47296 days ago1706394887IN
0x66580f80...4d8A12B00
0 ETH0.0005753312.25156822
Approve191008702024-01-27 22:25:47296 days ago1706394347IN
0x66580f80...4d8A12B00
0 ETH0.0002837410.50925503
Approve191008672024-01-27 22:25:11296 days ago1706394311IN
0x66580f80...4d8A12B00
0 ETH0.00043589.29211566
Transfer189090152024-01-01 0:24:59323 days ago1704068699IN
0x66580f80...4d8A12B00
0 ETH0.0017169810.95437601
Approve188786832023-12-27 18:09:23327 days ago1703700563IN
0x66580f80...4d8A12B00
0 ETH0.0016664935.33402596
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
183581942023-10-15 20:34:35400 days ago1697402075
0x66580f80...4d8A12B00
0.005946 ETH
183581942023-10-15 20:34:35400 days ago1697402075
0x66580f80...4d8A12B00
0.003964 ETH
183581942023-10-15 20:34:35400 days ago1697402075
0x66580f80...4d8A12B00
0.00991 ETH
183127862023-10-09 12:02:11406 days ago1696852931
0x66580f80...4d8A12B00
0.005946 ETH
183127862023-10-09 12:02:11406 days ago1696852931
0x66580f80...4d8A12B00
0.003964 ETH
183127862023-10-09 12:02:11406 days ago1696852931
0x66580f80...4d8A12B00
0.00991 ETH
182494842023-09-30 15:42:23415 days ago1696088543
0x66580f80...4d8A12B00
0.005946 ETH
182494842023-09-30 15:42:23415 days ago1696088543
0x66580f80...4d8A12B00
0.003964 ETH
182494842023-09-30 15:42:23415 days ago1696088543
0x66580f80...4d8A12B00
0.00991 ETH
182161982023-09-25 23:51:59420 days ago1695685919
0x66580f80...4d8A12B00
0.005946 ETH
182161982023-09-25 23:51:59420 days ago1695685919
0x66580f80...4d8A12B00
0.003964 ETH
182161982023-09-25 23:51:59420 days ago1695685919
0x66580f80...4d8A12B00
0.00991 ETH
181611012023-09-18 6:37:59428 days ago1695019079
0x66580f80...4d8A12B00
0.005946 ETH
181611012023-09-18 6:37:59428 days ago1695019079
0x66580f80...4d8A12B00
0.003964 ETH
181611012023-09-18 6:37:59428 days ago1695019079
0x66580f80...4d8A12B00
0.00991 ETH
181538582023-09-17 6:00:23429 days ago1694930423
0x66580f80...4d8A12B00
0.005946 ETH
181538582023-09-17 6:00:23429 days ago1694930423
0x66580f80...4d8A12B00
0.003964 ETH
181538582023-09-17 6:00:23429 days ago1694930423
0x66580f80...4d8A12B00
0.00991 ETH
181538552023-09-17 5:59:35429 days ago1694930375
0x66580f80...4d8A12B00
0.005946 ETH
181538552023-09-17 5:59:35429 days ago1694930375
0x66580f80...4d8A12B00
0.003964 ETH
181538552023-09-17 5:59:35429 days ago1694930375
0x66580f80...4d8A12B00
0.00991 ETH
180911222023-09-08 10:32:35437 days ago1694169155
0x66580f80...4d8A12B00
1 wei
180911222023-09-08 10:32:35437 days ago1694169155
0x66580f80...4d8A12B00
1 wei
180898032023-09-08 6:05:35438 days ago1694153135
0x66580f80...4d8A12B00
0.25669421 ETH
180898032023-09-08 6:05:35438 days ago1694153135
0x66580f80...4d8A12B00
0.17112947 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiqWrap

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-01
*/

// SPDX-License-Identifier: MIT

/*
                     
██╗         ██╗     ██████╗     ██╗    ██╗    ██████╗      █████╗     ██████╗ 
██║         ██║    ██╔═══██╗    ██║    ██║    ██╔══██╗    ██╔══██╗    ██╔══██╗
██║         ██║    ██║   ██║    ██║ █╗ ██║    ██████╔╝    ███████║    ██████╔╝
██║         ██║    ██║▄▄ ██║    ██║███╗██║    ██╔══██╗    ██╔══██║    ██╔═══╝ 
███████╗    ██║    ╚██████╔╝    ╚███╔███╔╝    ██║  ██║    ██║  ██║    ██║     
╚══════╝    ╚═╝     ╚══▀▀═╝      ╚══╝╚══╝     ╚═╝  ╚═╝    ╚═╝  ╚═╝    ╚═╝     
                                                                                                               
$LQW solves the limitations that current Decentralized Liquidity projects are facing.

Website: https://liqwrap.com/
Docs: https://docs.liqwrap.com/
Twitter: https://twitter.com/LiqWrap
Telegram: https://t.me/LiqWrap
Channel: https://t.me/LiqWrapChannel

*/

pragma solidity ^0.8.6;

interface IWrapper {
    function accumulativeDividendOf(
        address _owner
    ) external view returns (uint256);

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

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

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

    function decimals() external view returns (uint8);

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) external returns (bool);

    function distributeReward(uint256 amount) external;

    function dividendOf(address _owner) external view returns (uint256);

    function excludeFromWraper(address account, bool value) external;

    function excludedFromWrapper(address) external view returns (bool);

    function getAccount(
        address account
    ) external view returns (address, uint256, uint256, uint256, uint256);

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) external returns (bool);

    function initializeWrapper(
        address _pairAddress,
        address _liqwrapAddress
    ) external;

    function isWraperEnabled() external view returns (bool);

    function lastClaimTimes(address) external view returns (uint256);

    function liqwrapAddress() external view returns (address);

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

    function owner() external view returns (address);

    function processAccount(address account) external returns (bool);

    function renounceOwnership() external;

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

    function totalDividendsDistributed() external view returns (uint256);

    function totalDividendsWithdrawn() external view returns (uint256);

    function totalSupply() external view returns (uint256);

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

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

    function transferOwnership(address newOwner) external;

    function unwrap() external;

    function unwrapEnabled() external view returns (bool);

    function updateUnWrapperStatus(bool _status) external;

    function withdrawDividend() external;

    function withdrawableDividendOf(
        address _owner
    ) external view returns (uint256);

    function withdrawnDividendOf(
        address _owner
    ) external view returns (uint256);

    function wrap(uint256 amouunt) external;

    function wrapInternal(address account, uint256 newBalance) external;
}

pragma solidity ^0.8.0;

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

    function token0() external view returns (address);
}

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

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

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

    function WETH() external pure returns (address);

    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 swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

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

// 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);
}

// 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);
}

// OpenZeppelin Contracts v4.4.1 (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;
    }
}

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

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// 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);
    }
}

pragma solidity ^0.8.21;

contract LiqWrap is ERC20, Ownable {
    IUniswapRouter public router;
    address public pair;

    bool private swapping;
    bool public claimStatus;
    bool public tradingStatus;

    IWrapper public wrapper;

    address public marketingWallet;

    uint256 public swapTokensAtAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    struct Fees {
        uint256 rewards;
        uint256 dev;
    }

    Fees public fees = Fees(3, 2);

    uint256 public tax = 5;

    uint256 private _initialTax = 25;
    uint256 private _reduceTaxAt = 40;
    uint256 private _buyCount = 0;
    uint256 private _sellCount = 0;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor(address _wrapper) ERC20("LiqWrap", "LQW") {
        marketingWallet = _msgSender();

        IUniswapRouter _router = IUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );

        router = _router;
        pair = _pair;

        wrapper = IWrapper(_wrapper);

        wrapper.initializeWrapper(_pair, address(this));

        wrapper.excludeFromWraper(address(wrapper), true);
        wrapper.excludeFromWraper(address(this), true);
        wrapper.excludeFromWraper(owner(), true);
        wrapper.excludeFromWraper(address(0xdead), true);
        wrapper.excludeFromWraper(address(router), true);

        _approve(address(this), address(router), type(uint256).max);

        setSwapTokensAtAmount(250000);
        setMaxWallet(2000000);
        setMaxBuySell(2000000, 2000000);

        _setAutomatedMarketMakerPair(_pair, true);

        setExcludeFromMaxWallet(address(_pair), true);
        setExcludeFromMaxWallet(address(this), true);
        setExcludeFromMaxWallet(address(_router), true);

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

        _mint(owner(), 100000000 * (10 ** 18));
    }

    receive() external payable {}

    function setMaxWallet(uint256 newNum) public onlyOwner {
        require(newNum >= 1000000, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * 10 ** 18;
    }

    function claim() external {
        require(claimStatus, "Claim not enabled");
        wrapper.processAccount(payable(_msgSender()));
    }

    function setClaimStatus(bool _status) external onlyOwner {
        claimStatus = _status;
    }

    function setMaxBuySell(uint256 maxBuy, uint256 maxSell) public onlyOwner {
        require(maxBuy >= 1000000, "Can't set maxbuy lower than 1% ");
        require(maxSell >= 500000, "Can't set maxsell lower than 0.5% ");
        maxBuyAmount = maxBuy * 10 ** 18;
        maxSellAmount = maxSell * 10 ** 18;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * 10 ** 18;
    }

    function setExcludeFromMaxWallet(
        address account,
        bool excluded
    ) public onlyOwner {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function enableTrading() external onlyOwner {
        require(!tradingStatus, "Already enabled");
        tradingStatus = true;
    }

    function _setAutomatedMarketMakerPair(address newPair, bool value) private {
        require(
            automatedMarketMakerPairs[newPair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[newPair] = value;

        emit SetAutomatedMarketMakerPair(newPair, value);
    }

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

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

        if (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping
        ) {
            require(tradingStatus, "Trading not active");
            if (automatedMarketMakerPairs[to]) {
                require(
                    amount <= maxSellAmount,
                    "You are exceeding maxSellAmount"
                );
                _sellCount++;
            } else if (automatedMarketMakerPairs[from]) {
                require(
                    amount <= maxBuyAmount,
                    "You are exceeding maxBuyAmount"
                );
                _buyCount++;
            }
            if (!_isExcludedFromMaxWallet[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }

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

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

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

            swap(swapTokensAtAmount);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from])
            takeFee = false;

        if (takeFee) {
            uint256 feeAmt;
            if (automatedMarketMakerPairs[to]) {
                feeAmt =
                    (amount * (_sellCount > _reduceTaxAt ? tax : _initialTax)) /
                    100;
            } else if (automatedMarketMakerPairs[from]) {
                feeAmt =
                    (amount * (_buyCount > _reduceTaxAt ? tax : _initialTax)) /
                    100;
            }

            amount = amount - feeAmt;
            super._transfer(from, address(this), feeAmt);
        }
        super._transfer(from, to, amount);

        if (address(wrapper) == address(0)) return;

        try wrapper.wrapInternal(from, balanceOf(from)) {} catch {}
        try wrapper.wrapInternal(to, balanceOf(to)) {} catch {}
    }

    function swap(uint256 tokens) private {
        uint256 currentbalance = address(this).balance;

        swapTokensForETH(tokens);

        uint256 balance = address(this).balance;

        uint256 ethToReward = (((balance - currentbalance) * fees.rewards) /
            tax);
        uint256 ethForDev = balance - ethToReward;

        if (ethForDev > 0) {
            (bool success, ) = payable(marketingWallet).call{value: ethForDev}(
                ""
            );
            require(success, "Failed to send ETH to dev wallet");
        }
        if (ethToReward > 0) {
            (bool success, ) = payable(address(wrapper)).call{
                value: ethToReward
            }("");
            require(success, "Failed to send ETH to wrapper");
            try wrapper.distributeReward(ethToReward) {} catch {}
        }
    }

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

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

    // GETTERS

    function getTotalDividendsDistributed() external view returns (uint256) {
        return wrapper.totalDividendsDistributed();
    }

    function withdrawableDividendOf(
        address account
    ) public view returns (uint256) {
        return wrapper.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(
        address account
    ) public view returns (uint256) {
        return wrapper.balanceOf(account);
    }

    function getAccountInfo(
        address account
    ) external view returns (address, uint256, uint256, uint256, uint256) {
        return wrapper.getAccount(account);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_wrapper","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setClaimStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxBuySell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"tax","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":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrapper","outputs":[{"internalType":"contract IWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600381526020016002815250600e5f820151815f01556020820151816001015550506005601055601960115560286012555f6013555f60145534801562000054575f80fd5b5060405162005a4138038062005a4183398181016040528101906200007a91906200122a565b6040518060400160405280600781526020017f4c697157726170000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c515700000000000000000000000000000000000000000000000000000000008152508160039081620000f79190620014be565b508060049081620001099190620014be565b5050506200012c62000120620008a160201b60201c565b620008a860201b60201c565b6200013c620008a160201b60201c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020491906200122a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200029091906200122a565b6040518363ffffffff1660e01b8152600401620002af929190620015b3565b6020604051808303815f875af1158015620002cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f291906200122a565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba3749f982306040518363ffffffff1660e01b815260040162000412929190620015b3565b5f604051808303815f87803b1580156200042a575f80fd5b505af11580156200043d573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603fe3bb60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401620004c1929190620015fa565b5f604051808303815f87803b158015620004d9575f80fd5b505af1158015620004ec573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603fe3bb3060016040518363ffffffff1660e01b81526004016200054f929190620015fa565b5f604051808303815f87803b15801562000567575f80fd5b505af11580156200057a573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603fe3bb620005cb6200096b60201b60201c565b60016040518363ffffffff1660e01b8152600401620005ec929190620015fa565b5f604051808303815f87803b15801562000604575f80fd5b505af115801562000617573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603fe3bb61dead60016040518363ffffffff1660e01b81526004016200067c929190620015fa565b5f604051808303815f87803b15801562000694575f80fd5b505af1158015620006a7573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603fe3bb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b81526004016200072b929190620015fa565b5f604051808303815f87803b15801562000743575f80fd5b505af115801562000756573d5f803e3d5ffd5b50505050620007ae3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200099360201b60201c565b620007c26203d09062000b5e60201b60201c565b620007d6621e848062000b8d60201b60201c565b620007eb621e84808062000c0560201b60201c565b620007fe81600162000ce360201b60201c565b6200081181600162000e1360201b60201c565b6200082430600162000e1360201b60201c565b6200083782600162000e1360201b60201c565b620008596200084b6200096b60201b60201c565b600162000e7b60201b60201c565b6200086c30600162000e7b60201b60201c565b62000898620008806200096b60201b60201c565b6a52b7d2dcc80cd2e400000062000fc560201b60201c565b50505062001bef565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fb90620016a9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6c906200173d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b5191906200176e565b60405180910390a3505050565b62000b6e6200112a60201b60201c565b670de0b6b3a76400008162000b849190620017b6565b600a8190555050565b62000b9d6200112a60201b60201c565b620f424081101562000be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdd9062001874565b60405180910390fd5b670de0b6b3a76400008162000bfc9190620017b6565b600d8190555050565b62000c156200112a60201b60201c565b620f424082101562000c5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5590620018e2565b60405180910390fd5b6207a12081101562000ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9e9062001976565b60405180910390fd5b670de0b6b3a76400008262000cbd9190620017b6565b600b81905550670de0b6b3a76400008162000cd99190620017b6565b600c819055505050565b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000d75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d6c9062001a0a565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000e236200112a60201b60201c565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b62000e8b6200112a60201b60201c565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f149062001a9e565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000fb9919062001abe565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200102d9062001b27565b60405180910390fd5b620010495f8383620011bb60201b60201c565b8060025f8282546200105c919062001b47565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200110b91906200176e565b60405180910390a3620011265f8383620011c060201b60201c565b5050565b6200113a620008a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620011606200096b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620011b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011b09062001bcf565b60405180910390fd5b565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620011f482620011c9565b9050919050565b6200120681620011e8565b811462001211575f80fd5b50565b5f815190506200122481620011fb565b92915050565b5f60208284031215620012425762001241620011c5565b5b5f620012518482850162001214565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620012d657607f821691505b602082108103620012ec57620012eb62001291565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620013507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001313565b6200135c868362001313565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620013a6620013a06200139a8462001374565b6200137d565b62001374565b9050919050565b5f819050919050565b620013c18362001386565b620013d9620013d082620013ad565b8484546200131f565b825550505050565b5f90565b620013ef620013e1565b620013fc818484620013b6565b505050565b5b818110156200142357620014175f82620013e5565b60018101905062001402565b5050565b601f82111562001472576200143c81620012f2565b620014478462001304565b8101602085101562001457578190505b6200146f620014668562001304565b83018262001401565b50505b505050565b5f82821c905092915050565b5f620014945f198460080262001477565b1980831691505092915050565b5f620014ae838362001483565b9150826002028217905092915050565b620014c9826200125a565b67ffffffffffffffff811115620014e557620014e462001264565b5b620014f18254620012be565b620014fe82828562001427565b5f60209050601f83116001811462001534575f84156200151f578287015190505b6200152b8582620014a1565b8655506200159a565b601f1984166200154486620012f2565b5f5b828110156200156d5784890151825560018201915060208501945060208101905062001546565b868310156200158d578489015162001589601f89168262001483565b8355505b6001600288020188555050505b505050505050565b620015ad81620011e8565b82525050565b5f604082019050620015c85f830185620015a2565b620015d76020830184620015a2565b9392505050565b5f8115159050919050565b620015f481620015de565b82525050565b5f6040820190506200160f5f830185620015a2565b6200161e6020830184620015e9565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200169160248362001625565b91506200169e8262001635565b604082019050919050565b5f6020820190508181035f830152620016c28162001683565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200172560228362001625565b91506200173282620016c9565b604082019050919050565b5f6020820190508181035f830152620017568162001717565b9050919050565b620017688162001374565b82525050565b5f602082019050620017835f8301846200175d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620017c28262001374565b9150620017cf8362001374565b9250828202620017df8162001374565b91508282048414831517620017f957620017f862001789565b5b5092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200185c60228362001625565b9150620018698262001800565b604082019050919050565b5f6020820190508181035f8301526200188d816200184e565b9050919050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f620018ca601f8362001625565b9150620018d78262001894565b602082019050919050565b5f6020820190508181035f830152620018fb81620018bc565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200195e60228362001625565b91506200196b8262001902565b604082019050919050565b5f6020820190508181035f8301526200198f8162001950565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f620019f260388362001625565b9150620019ff8262001996565b604082019050919050565b5f6020820190508181035f83015262001a2381620019e4565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f62001a86602a8362001625565b915062001a938262001a2a565b604082019050919050565b5f6020820190508181035f83015262001ab78162001a78565b9050919050565b5f60208201905062001ad35f830184620015e9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001b0f601f8362001625565b915062001b1c8262001ad9565b602082019050919050565b5f6020820190508181035f83015262001b408162001b01565b9050919050565b5f62001b538262001374565b915062001b608362001374565b925082820190508082111562001b7b5762001b7a62001789565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62001bb760208362001625565b915062001bc48262001b81565b602082019050919050565b5f6020820190508181035f83015262001be88162001ba9565b9050919050565b613e448062001bfd5f395ff3fe60806040526004361061023e575f3560e01c80638ff07cc11161012d578063ae87fc4b116100aa578063dd62ed3e1161006e578063dd62ed3e1461088a578063e2f45605146108c6578063f2fde38b146108f0578063f887ea4014610918578063f8b45b051461094257610245565b8063ae87fc4b146107aa578063afa4f3b2146107d4578063b62496f5146107fc578063d4fb9a0114610838578063d63cad221461086257610245565b8063a457c2d7116100f1578063a457c2d7146106a2578063a8aa1b31146106de578063a8b9d24014610708578063a9059cbb14610744578063ac210cc71461078057610245565b80638ff07cc1146105d3578063929f1360146105fb57806395d89b411461062357806399c8d5561461064d5780639af1d35a1461067757610245565b8063654f97a3116101bb57806375f0a8741161017f57806375f0a874146104ff5780637b510fe81461052957806388e765ff146105695780638a8c523c146105935780638da5cb5b146105a957610245565b8063654f97a31461041f57806366d602ae146104475780636843cd841461047157806370a08231146104ad578063715018a6146104e957610245565b8063313ce56711610202578063313ce5671461033f57806339509351146103695780634e71d92d146103a55780634fbee193146103bb5780635d0044ca146103f757610245565b806306fdde0314610249578063095ea7b31461027357806318160ddd146102af57806323b872dd146102d957806330bb4cff1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d61096c565b60405161026a9190612a3e565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612aef565b6109fc565b6040516102a69190612b47565b60405180910390f35b3480156102ba575f80fd5b506102c3610a1e565b6040516102d09190612b6f565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa9190612b88565b610a27565b60405161030c9190612b47565b60405180910390f35b348015610320575f80fd5b50610329610a55565b6040516103369190612b6f565b60405180910390f35b34801561034a575f80fd5b50610353610ae9565b6040516103609190612bf3565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612aef565b610af1565b60405161039c9190612b47565b60405180910390f35b3480156103b0575f80fd5b506103b9610b27565b005b3480156103c6575f80fd5b506103e160048036038101906103dc9190612c0c565b610c1a565b6040516103ee9190612b47565b60405180910390f35b348015610402575f80fd5b5061041d60048036038101906104189190612c37565b610c6c565b005b34801561042a575f80fd5b5061044560048036038101906104409190612c8c565b610cd7565b005b348015610452575f80fd5b5061045b610cfc565b6040516104689190612b6f565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190612c0c565b610d02565b6040516104a49190612b6f565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190612c0c565b610da3565b6040516104e09190612b6f565b60405180910390f35b3480156104f4575f80fd5b506104fd610de8565b005b34801561050a575f80fd5b50610513610dfb565b6040516105209190612cc6565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190612c0c565b610e20565b604051610560959493929190612cdf565b60405180910390f35b348015610574575f80fd5b5061057d610ed1565b60405161058a9190612b6f565b60405180910390f35b34801561059e575f80fd5b506105a7610ed7565b005b3480156105b4575f80fd5b506105bd610f4c565b6040516105ca9190612cc6565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f49190612d30565b610f74565b005b348015610606575f80fd5b50610621600480360381019061061c9190612d6e565b611040565b005b34801561062e575f80fd5b506106376110a0565b6040516106449190612a3e565b60405180910390f35b348015610658575f80fd5b50610661611130565b60405161066e9190612b6f565b60405180910390f35b348015610682575f80fd5b5061068b611136565b604051610699929190612dac565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c39190612aef565b611147565b6040516106d59190612b47565b60405180910390f35b3480156106e9575f80fd5b506106f26111bc565b6040516106ff9190612cc6565b60405180910390f35b348015610713575f80fd5b5061072e60048036038101906107299190612c0c565b6111e1565b60405161073b9190612b6f565b60405180910390f35b34801561074f575f80fd5b5061076a60048036038101906107659190612aef565b611282565b6040516107779190612b47565b60405180910390f35b34801561078b575f80fd5b506107946112a4565b6040516107a19190612e2e565b60405180910390f35b3480156107b5575f80fd5b506107be6112c9565b6040516107cb9190612b47565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f59190612c37565b6112dc565b005b348015610807575f80fd5b50610822600480360381019061081d9190612c0c565b611301565b60405161082f9190612b47565b60405180910390f35b348015610843575f80fd5b5061084c61131e565b6040516108599190612b47565b60405180910390f35b34801561086d575f80fd5b5061088860048036038101906108839190612d6e565b611331565b005b348015610895575f80fd5b506108b060048036038101906108ab9190612e47565b61146e565b6040516108bd9190612b6f565b60405180910390f35b3480156108d1575f80fd5b506108da6114f0565b6040516108e79190612b6f565b60405180910390f35b3480156108fb575f80fd5b5061091660048036038101906109119190612c0c565b6114f6565b005b348015610923575f80fd5b5061092c611578565b6040516109399190612ea5565b60405180910390f35b34801561094d575f80fd5b5061095661159d565b6040516109639190612b6f565b60405180910390f35b60606003805461097b90612eeb565b80601f01602080910402602001604051908101604052809291908181526020018280546109a790612eeb565b80156109f25780601f106109c9576101008083540402835291602001916109f2565b820191905f5260205f20905b8154815290600101906020018083116109d557829003601f168201915b5050505050905090565b5f80610a066115a3565b9050610a138185856115aa565b600191505092915050565b5f600254905090565b5f80610a316115a3565b9050610a3e85828561176d565b610a498585856117f8565b60019150509392505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae49190612f2f565b905090565b5f6012905090565b5f80610afb6115a3565b9050610b1c818585610b0d858961146e565b610b179190612f87565b6115aa565b600191505092915050565b600760159054906101000a900460ff16610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90613004565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7610bbb6115a3565b6040518263ffffffff1660e01b8152600401610bd79190613042565b6020604051808303815f875af1158015610bf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c17919061306f565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610c74612178565b620f4240811015610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb19061310a565b60405180910390fd5b670de0b6b3a764000081610cce9190613128565b600d8190555050565b610cdf612178565b80600760156101000a81548160ff02191690831515021790555050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610d5d9190612cc6565b602060405180830381865afa158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190612f2f565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610df0612178565b610df95f6121f6565b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b8152600401610e7f9190612cc6565b60a060405180830381865afa158015610e9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebe919061317d565b9450945094509450945091939590929450565b600b5481565b610edf612178565b600760169054906101000a900460ff1615610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f269061323e565b60405180910390fd5b6001600760166101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f7c612178565b620f4240821015610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906132a6565b60405180910390fd5b6207a120811015611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613334565b60405180910390fd5b670de0b6b3a76400008261101c9190613128565b600b81905550670de0b6b3a7640000816110369190613128565b600c819055505050565b611048612178565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6060600480546110af90612eeb565b80601f01602080910402602001604051908101604052809291908181526020018280546110db90612eeb565b80156111265780601f106110fd57610100808354040283529160200191611126565b820191905f5260205f20905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b60105481565b600e805f0154908060010154905082565b5f806111516115a3565b90505f61115e828661146e565b9050838110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906133c2565b60405180910390fd5b6111b082868684036115aa565b60019250505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b815260040161123c9190612cc6565b602060405180830381865afa158015611257573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127b9190612f2f565b9050919050565b5f8061128c6115a3565b90506112998185856117f8565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b6112e4612178565b670de0b6b3a7640000816112f89190613128565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600760169054906101000a900460ff1681565b611339612178565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613450565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114629190612b47565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6114fe612178565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906134de565b60405180910390fd5b611575816121f6565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f9061356c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906135fa565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117609190612b6f565b60405180910390a3505050565b5f611778848461146e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117f257818110156117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613662565b60405180910390fd5b6117f184848484036115aa565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d906136f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb9061377e565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611972575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561198b5750600760149054906101000a900460ff16155b15611be457600760169054906101000a900460ff166119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906137e6565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a8f57600c54811115611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a9061384e565b60405180910390fd5b60145f815480929190611a859061386c565b9190505550611b3c565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b3b57600b54811115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a906138fd565b60405180910390fd5b60135f815480929190611b359061386c565b91905055505b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611be357600d54611b9683610da3565b82611ba19190612f87565b1115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613965565b60405180910390fd5b5b5b5f8103611bfb57611bf683835f6122b9565b612173565b5f611c0530610da3565b90505f600a548210159050808015611c2a5750600760149054906101000a900460ff16155b8015611c7c575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611ccf575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611d22575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d68576001600760146101000a81548160ff021916908315150217905550611d4d600a54612525565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611e17575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611e20575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611ebe575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611ec7575f90505b8015611fee575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f5257606460125460145411611f3257601154611f36565b6010545b86611f419190613128565b611f4b91906139b0565b9050611fd3565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611fd257606460125460135411611fb657601154611fba565b6010545b86611fc59190613128565b611fcf91906139b0565b90505b5b8085611fdf91906139e0565b9450611fec8730836122b9565b505b611ff98686866122b9565b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205557505050612173565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c99d0f48761209c89610da3565b6040518363ffffffff1660e01b81526004016120b9929190613a13565b5f604051808303815f87803b1580156120d0575f80fd5b505af19250505080156120e1575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c99d0f48661212988610da3565b6040518363ffffffff1660e01b8152600401612146929190613a13565b5f604051808303815f87803b15801561215d575f80fd5b505af192505050801561216e575060015b505050505b505050565b6121806115a3565b73ffffffffffffffffffffffffffffffffffffffff1661219e610f4c565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613a84565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906136f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061377e565b60405180910390fd5b6123a08383836127a0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613b12565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250c9190612b6f565b60405180910390a361251f8484846127a5565b50505050565b5f479050612532826127aa565b5f4790505f601054600e5f0154848461254b91906139e0565b6125559190613128565b61255f91906139b0565b90505f818361256e91906139e0565b90505f811115612643575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516125be90613b5d565b5f6040518083038185875af1925050503d805f81146125f8576040519150601f19603f3d011682016040523d82523d5f602084013e6125fd565b606091505b5050905080612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890613bbb565b60405180910390fd5b505b5f821115612799575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161269190613b5d565b5f6040518083038185875af1925050503d805f81146126cb576040519150601f19603f3d011682016040523d82523d5f602084013e6126d0565b606091505b5050905080612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90613c23565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663940a4e45846040518263ffffffff1660e01b815260040161276e9190612b6f565b5f604051808303815f87803b158015612785575f80fd5b505af1925050508015612796575060015b50505b5050505050565b505050565b505050565b5f600267ffffffffffffffff8111156127c6576127c5613c41565b5b6040519080825280602002602001820160405280156127f45781602001602082028036833780820191505090505b50905030815f8151811061280b5761280a613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d39190613c9b565b816001815181106128e7576128e6613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612983959493929190613db6565b5f604051808303815f87803b15801561299a575f80fd5b505af11580156129ac573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129eb5780820151818401526020810190506129d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a10826129b4565b612a1a81856129be565b9350612a2a8185602086016129ce565b612a33816129f6565b840191505092915050565b5f6020820190508181035f830152612a568184612a06565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8b82612a62565b9050919050565b612a9b81612a81565b8114612aa5575f80fd5b50565b5f81359050612ab681612a92565b92915050565b5f819050919050565b612ace81612abc565b8114612ad8575f80fd5b50565b5f81359050612ae981612ac5565b92915050565b5f8060408385031215612b0557612b04612a5e565b5b5f612b1285828601612aa8565b9250506020612b2385828601612adb565b9150509250929050565b5f8115159050919050565b612b4181612b2d565b82525050565b5f602082019050612b5a5f830184612b38565b92915050565b612b6981612abc565b82525050565b5f602082019050612b825f830184612b60565b92915050565b5f805f60608486031215612b9f57612b9e612a5e565b5b5f612bac86828701612aa8565b9350506020612bbd86828701612aa8565b9250506040612bce86828701612adb565b9150509250925092565b5f60ff82169050919050565b612bed81612bd8565b82525050565b5f602082019050612c065f830184612be4565b92915050565b5f60208284031215612c2157612c20612a5e565b5b5f612c2e84828501612aa8565b91505092915050565b5f60208284031215612c4c57612c4b612a5e565b5b5f612c5984828501612adb565b91505092915050565b612c6b81612b2d565b8114612c75575f80fd5b50565b5f81359050612c8681612c62565b92915050565b5f60208284031215612ca157612ca0612a5e565b5b5f612cae84828501612c78565b91505092915050565b612cc081612a81565b82525050565b5f602082019050612cd95f830184612cb7565b92915050565b5f60a082019050612cf25f830188612cb7565b612cff6020830187612b60565b612d0c6040830186612b60565b612d196060830185612b60565b612d266080830184612b60565b9695505050505050565b5f8060408385031215612d4657612d45612a5e565b5b5f612d5385828601612adb565b9250506020612d6485828601612adb565b9150509250929050565b5f8060408385031215612d8457612d83612a5e565b5b5f612d9185828601612aa8565b9250506020612da285828601612c78565b9150509250929050565b5f604082019050612dbf5f830185612b60565b612dcc6020830184612b60565b9392505050565b5f819050919050565b5f612df6612df1612dec84612a62565b612dd3565b612a62565b9050919050565b5f612e0782612ddc565b9050919050565b5f612e1882612dfd565b9050919050565b612e2881612e0e565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b5f8060408385031215612e5d57612e5c612a5e565b5b5f612e6a85828601612aa8565b9250506020612e7b85828601612aa8565b9150509250929050565b5f612e8f82612dfd565b9050919050565b612e9f81612e85565b82525050565b5f602082019050612eb85f830184612e96565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f0257607f821691505b602082108103612f1557612f14612ebe565b5b50919050565b5f81519050612f2981612ac5565b92915050565b5f60208284031215612f4457612f43612a5e565b5b5f612f5184828501612f1b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9182612abc565b9150612f9c83612abc565b9250828201905080821115612fb457612fb3612f5a565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f612fee6011836129be565b9150612ff982612fba565b602082019050919050565b5f6020820190508181035f83015261301b81612fe2565b9050919050565b5f61302c82612dfd565b9050919050565b61303c81613022565b82525050565b5f6020820190506130555f830184613033565b92915050565b5f8151905061306981612c62565b92915050565b5f6020828403121561308457613083612a5e565b5b5f6130918482850161305b565b91505092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130f46022836129be565b91506130ff8261309a565b604082019050919050565b5f6020820190508181035f830152613121816130e8565b9050919050565b5f61313282612abc565b915061313d83612abc565b925082820261314b81612abc565b9150828204841483151761316257613161612f5a565b5b5092915050565b5f8151905061317781612a92565b92915050565b5f805f805f60a0868803121561319657613195612a5e565b5b5f6131a388828901613169565b95505060206131b488828901612f1b565b94505060406131c588828901612f1b565b93505060606131d688828901612f1b565b92505060806131e788828901612f1b565b9150509295509295909350565b7f416c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f613228600f836129be565b9150613233826131f4565b602082019050919050565b5f6020820190508181035f8301526132558161321c565b9050919050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f613290601f836129be565b915061329b8261325c565b602082019050919050565b5f6020820190508181035f8301526132bd81613284565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f61331e6022836129be565b9150613329826132c4565b604082019050919050565b5f6020820190508181035f83015261334b81613312565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6133ac6025836129be565b91506133b782613352565b604082019050919050565b5f6020820190508181035f8301526133d9816133a0565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61343a602a836129be565b9150613445826133e0565b604082019050919050565b5f6020820190508181035f8301526134678161342e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134c86026836129be565b91506134d38261346e565b604082019050919050565b5f6020820190508181035f8301526134f5816134bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135566024836129be565b9150613561826134fc565b604082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135e46022836129be565b91506135ef8261358a565b604082019050919050565b5f6020820190508181035f830152613611816135d8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61364c601d836129be565b915061365782613618565b602082019050919050565b5f6020820190508181035f83015261367981613640565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136da6025836129be565b91506136e582613680565b604082019050919050565b5f6020820190508181035f830152613707816136ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6137686023836129be565b91506137738261370e565b604082019050919050565b5f6020820190508181035f8301526137958161375c565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6137d06012836129be565b91506137db8261379c565b602082019050919050565b5f6020820190508181035f8301526137fd816137c4565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f613838601f836129be565b915061384382613804565b602082019050919050565b5f6020820190508181035f8301526138658161382c565b9050919050565b5f61387682612abc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138a8576138a7612f5a565b5b600182019050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f6138e7601e836129be565b91506138f2826138b3565b602082019050919050565b5f6020820190508181035f830152613914816138db565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f61394f601b836129be565b915061395a8261391b565b602082019050919050565b5f6020820190508181035f83015261397c81613943565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6139ba82612abc565b91506139c583612abc565b9250826139d5576139d4613983565b5b828204905092915050565b5f6139ea82612abc565b91506139f583612abc565b9250828203905081811115613a0d57613a0c612f5a565b5b92915050565b5f604082019050613a265f830185612cb7565b613a336020830184612b60565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a6e6020836129be565b9150613a7982613a3a565b602082019050919050565b5f6020820190508181035f830152613a9b81613a62565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613afc6026836129be565b9150613b0782613aa2565b604082019050919050565b5f6020820190508181035f830152613b2981613af0565b9050919050565b5f81905092915050565b50565b5f613b485f83613b30565b9150613b5382613b3a565b5f82019050919050565b5f613b6782613b3d565b9150819050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f613ba56020836129be565b9150613bb082613b71565b602082019050919050565b5f6020820190508181035f830152613bd281613b99565b9050919050565b7f4661696c656420746f2073656e642045544820746f20777261707065720000005f82015250565b5f613c0d601d836129be565b9150613c1882613bd9565b602082019050919050565b5f6020820190508181035f830152613c3a81613c01565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613cb057613caf612a5e565b5b5f613cbd84828501613169565b91505092915050565b5f819050919050565b5f613ce9613ce4613cdf84613cc6565b612dd3565b612abc565b9050919050565b613cf981613ccf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d3181612a81565b82525050565b5f613d428383613d28565b60208301905092915050565b5f602082019050919050565b5f613d6482613cff565b613d6e8185613d09565b9350613d7983613d19565b805f5b83811015613da9578151613d908882613d37565b9750613d9b83613d4e565b925050600181019050613d7c565b5085935050505092915050565b5f60a082019050613dc95f830188612b60565b613dd66020830187613cf0565b8181036040830152613de88186613d5a565b9050613df76060830185612cb7565b613e046080830184612b60565b969550505050505056fea26469706673582212207f8b966f83fbcc3fe0d35995c20d47c5240e9d4648d1e8fcbad6259d84e5768964736f6c634300081500330000000000000000000000002b65ae2fc9eb656440f0134585763f138934cf3c

Deployed Bytecode

0x60806040526004361061023e575f3560e01c80638ff07cc11161012d578063ae87fc4b116100aa578063dd62ed3e1161006e578063dd62ed3e1461088a578063e2f45605146108c6578063f2fde38b146108f0578063f887ea4014610918578063f8b45b051461094257610245565b8063ae87fc4b146107aa578063afa4f3b2146107d4578063b62496f5146107fc578063d4fb9a0114610838578063d63cad221461086257610245565b8063a457c2d7116100f1578063a457c2d7146106a2578063a8aa1b31146106de578063a8b9d24014610708578063a9059cbb14610744578063ac210cc71461078057610245565b80638ff07cc1146105d3578063929f1360146105fb57806395d89b411461062357806399c8d5561461064d5780639af1d35a1461067757610245565b8063654f97a3116101bb57806375f0a8741161017f57806375f0a874146104ff5780637b510fe81461052957806388e765ff146105695780638a8c523c146105935780638da5cb5b146105a957610245565b8063654f97a31461041f57806366d602ae146104475780636843cd841461047157806370a08231146104ad578063715018a6146104e957610245565b8063313ce56711610202578063313ce5671461033f57806339509351146103695780634e71d92d146103a55780634fbee193146103bb5780635d0044ca146103f757610245565b806306fdde0314610249578063095ea7b31461027357806318160ddd146102af57806323b872dd146102d957806330bb4cff1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d61096c565b60405161026a9190612a3e565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612aef565b6109fc565b6040516102a69190612b47565b60405180910390f35b3480156102ba575f80fd5b506102c3610a1e565b6040516102d09190612b6f565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa9190612b88565b610a27565b60405161030c9190612b47565b60405180910390f35b348015610320575f80fd5b50610329610a55565b6040516103369190612b6f565b60405180910390f35b34801561034a575f80fd5b50610353610ae9565b6040516103609190612bf3565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612aef565b610af1565b60405161039c9190612b47565b60405180910390f35b3480156103b0575f80fd5b506103b9610b27565b005b3480156103c6575f80fd5b506103e160048036038101906103dc9190612c0c565b610c1a565b6040516103ee9190612b47565b60405180910390f35b348015610402575f80fd5b5061041d60048036038101906104189190612c37565b610c6c565b005b34801561042a575f80fd5b5061044560048036038101906104409190612c8c565b610cd7565b005b348015610452575f80fd5b5061045b610cfc565b6040516104689190612b6f565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190612c0c565b610d02565b6040516104a49190612b6f565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190612c0c565b610da3565b6040516104e09190612b6f565b60405180910390f35b3480156104f4575f80fd5b506104fd610de8565b005b34801561050a575f80fd5b50610513610dfb565b6040516105209190612cc6565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190612c0c565b610e20565b604051610560959493929190612cdf565b60405180910390f35b348015610574575f80fd5b5061057d610ed1565b60405161058a9190612b6f565b60405180910390f35b34801561059e575f80fd5b506105a7610ed7565b005b3480156105b4575f80fd5b506105bd610f4c565b6040516105ca9190612cc6565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f49190612d30565b610f74565b005b348015610606575f80fd5b50610621600480360381019061061c9190612d6e565b611040565b005b34801561062e575f80fd5b506106376110a0565b6040516106449190612a3e565b60405180910390f35b348015610658575f80fd5b50610661611130565b60405161066e9190612b6f565b60405180910390f35b348015610682575f80fd5b5061068b611136565b604051610699929190612dac565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c39190612aef565b611147565b6040516106d59190612b47565b60405180910390f35b3480156106e9575f80fd5b506106f26111bc565b6040516106ff9190612cc6565b60405180910390f35b348015610713575f80fd5b5061072e60048036038101906107299190612c0c565b6111e1565b60405161073b9190612b6f565b60405180910390f35b34801561074f575f80fd5b5061076a60048036038101906107659190612aef565b611282565b6040516107779190612b47565b60405180910390f35b34801561078b575f80fd5b506107946112a4565b6040516107a19190612e2e565b60405180910390f35b3480156107b5575f80fd5b506107be6112c9565b6040516107cb9190612b47565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f59190612c37565b6112dc565b005b348015610807575f80fd5b50610822600480360381019061081d9190612c0c565b611301565b60405161082f9190612b47565b60405180910390f35b348015610843575f80fd5b5061084c61131e565b6040516108599190612b47565b60405180910390f35b34801561086d575f80fd5b5061088860048036038101906108839190612d6e565b611331565b005b348015610895575f80fd5b506108b060048036038101906108ab9190612e47565b61146e565b6040516108bd9190612b6f565b60405180910390f35b3480156108d1575f80fd5b506108da6114f0565b6040516108e79190612b6f565b60405180910390f35b3480156108fb575f80fd5b5061091660048036038101906109119190612c0c565b6114f6565b005b348015610923575f80fd5b5061092c611578565b6040516109399190612ea5565b60405180910390f35b34801561094d575f80fd5b5061095661159d565b6040516109639190612b6f565b60405180910390f35b60606003805461097b90612eeb565b80601f01602080910402602001604051908101604052809291908181526020018280546109a790612eeb565b80156109f25780601f106109c9576101008083540402835291602001916109f2565b820191905f5260205f20905b8154815290600101906020018083116109d557829003601f168201915b5050505050905090565b5f80610a066115a3565b9050610a138185856115aa565b600191505092915050565b5f600254905090565b5f80610a316115a3565b9050610a3e85828561176d565b610a498585856117f8565b60019150509392505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae49190612f2f565b905090565b5f6012905090565b5f80610afb6115a3565b9050610b1c818585610b0d858961146e565b610b179190612f87565b6115aa565b600191505092915050565b600760159054906101000a900460ff16610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90613004565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7610bbb6115a3565b6040518263ffffffff1660e01b8152600401610bd79190613042565b6020604051808303815f875af1158015610bf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c17919061306f565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610c74612178565b620f4240811015610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb19061310a565b60405180910390fd5b670de0b6b3a764000081610cce9190613128565b600d8190555050565b610cdf612178565b80600760156101000a81548160ff02191690831515021790555050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610d5d9190612cc6565b602060405180830381865afa158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190612f2f565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610df0612178565b610df95f6121f6565b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b8152600401610e7f9190612cc6565b60a060405180830381865afa158015610e9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebe919061317d565b9450945094509450945091939590929450565b600b5481565b610edf612178565b600760169054906101000a900460ff1615610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f269061323e565b60405180910390fd5b6001600760166101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f7c612178565b620f4240821015610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906132a6565b60405180910390fd5b6207a120811015611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613334565b60405180910390fd5b670de0b6b3a76400008261101c9190613128565b600b81905550670de0b6b3a7640000816110369190613128565b600c819055505050565b611048612178565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6060600480546110af90612eeb565b80601f01602080910402602001604051908101604052809291908181526020018280546110db90612eeb565b80156111265780601f106110fd57610100808354040283529160200191611126565b820191905f5260205f20905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b60105481565b600e805f0154908060010154905082565b5f806111516115a3565b90505f61115e828661146e565b9050838110156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906133c2565b60405180910390fd5b6111b082868684036115aa565b60019250505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b815260040161123c9190612cc6565b602060405180830381865afa158015611257573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127b9190612f2f565b9050919050565b5f8061128c6115a3565b90506112998185856117f8565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b6112e4612178565b670de0b6b3a7640000816112f89190613128565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600760169054906101000a900460ff1681565b611339612178565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613450565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114629190612b47565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6114fe612178565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906134de565b60405180910390fd5b611575816121f6565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f9061356c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906135fa565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117609190612b6f565b60405180910390a3505050565b5f611778848461146e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117f257818110156117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613662565b60405180910390fd5b6117f184848484036115aa565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d906136f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb9061377e565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611972575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561198b5750600760149054906101000a900460ff16155b15611be457600760169054906101000a900460ff166119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906137e6565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a8f57600c54811115611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a9061384e565b60405180910390fd5b60145f815480929190611a859061386c565b9190505550611b3c565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b3b57600b54811115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a906138fd565b60405180910390fd5b60135f815480929190611b359061386c565b91905055505b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611be357600d54611b9683610da3565b82611ba19190612f87565b1115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613965565b60405180910390fd5b5b5b5f8103611bfb57611bf683835f6122b9565b612173565b5f611c0530610da3565b90505f600a548210159050808015611c2a5750600760149054906101000a900460ff16155b8015611c7c575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611ccf575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611d22575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d68576001600760146101000a81548160ff021916908315150217905550611d4d600a54612525565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611e17575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611e20575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611ebe575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611ec7575f90505b8015611fee575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f5257606460125460145411611f3257601154611f36565b6010545b86611f419190613128565b611f4b91906139b0565b9050611fd3565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611fd257606460125460135411611fb657601154611fba565b6010545b86611fc59190613128565b611fcf91906139b0565b90505b5b8085611fdf91906139e0565b9450611fec8730836122b9565b505b611ff98686866122b9565b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205557505050612173565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c99d0f48761209c89610da3565b6040518363ffffffff1660e01b81526004016120b9929190613a13565b5f604051808303815f87803b1580156120d0575f80fd5b505af19250505080156120e1575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c99d0f48661212988610da3565b6040518363ffffffff1660e01b8152600401612146929190613a13565b5f604051808303815f87803b15801561215d575f80fd5b505af192505050801561216e575060015b505050505b505050565b6121806115a3565b73ffffffffffffffffffffffffffffffffffffffff1661219e610f4c565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613a84565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906136f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061377e565b60405180910390fd5b6123a08383836127a0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613b12565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250c9190612b6f565b60405180910390a361251f8484846127a5565b50505050565b5f479050612532826127aa565b5f4790505f601054600e5f0154848461254b91906139e0565b6125559190613128565b61255f91906139b0565b90505f818361256e91906139e0565b90505f811115612643575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516125be90613b5d565b5f6040518083038185875af1925050503d805f81146125f8576040519150601f19603f3d011682016040523d82523d5f602084013e6125fd565b606091505b5050905080612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890613bbb565b60405180910390fd5b505b5f821115612799575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161269190613b5d565b5f6040518083038185875af1925050503d805f81146126cb576040519150601f19603f3d011682016040523d82523d5f602084013e6126d0565b606091505b5050905080612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90613c23565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663940a4e45846040518263ffffffff1660e01b815260040161276e9190612b6f565b5f604051808303815f87803b158015612785575f80fd5b505af1925050508015612796575060015b50505b5050505050565b505050565b505050565b5f600267ffffffffffffffff8111156127c6576127c5613c41565b5b6040519080825280602002602001820160405280156127f45781602001602082028036833780820191505090505b50905030815f8151811061280b5761280a613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d39190613c9b565b816001815181106128e7576128e6613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612983959493929190613db6565b5f604051808303815f87803b15801561299a575f80fd5b505af11580156129ac573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129eb5780820151818401526020810190506129d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a10826129b4565b612a1a81856129be565b9350612a2a8185602086016129ce565b612a33816129f6565b840191505092915050565b5f6020820190508181035f830152612a568184612a06565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8b82612a62565b9050919050565b612a9b81612a81565b8114612aa5575f80fd5b50565b5f81359050612ab681612a92565b92915050565b5f819050919050565b612ace81612abc565b8114612ad8575f80fd5b50565b5f81359050612ae981612ac5565b92915050565b5f8060408385031215612b0557612b04612a5e565b5b5f612b1285828601612aa8565b9250506020612b2385828601612adb565b9150509250929050565b5f8115159050919050565b612b4181612b2d565b82525050565b5f602082019050612b5a5f830184612b38565b92915050565b612b6981612abc565b82525050565b5f602082019050612b825f830184612b60565b92915050565b5f805f60608486031215612b9f57612b9e612a5e565b5b5f612bac86828701612aa8565b9350506020612bbd86828701612aa8565b9250506040612bce86828701612adb565b9150509250925092565b5f60ff82169050919050565b612bed81612bd8565b82525050565b5f602082019050612c065f830184612be4565b92915050565b5f60208284031215612c2157612c20612a5e565b5b5f612c2e84828501612aa8565b91505092915050565b5f60208284031215612c4c57612c4b612a5e565b5b5f612c5984828501612adb565b91505092915050565b612c6b81612b2d565b8114612c75575f80fd5b50565b5f81359050612c8681612c62565b92915050565b5f60208284031215612ca157612ca0612a5e565b5b5f612cae84828501612c78565b91505092915050565b612cc081612a81565b82525050565b5f602082019050612cd95f830184612cb7565b92915050565b5f60a082019050612cf25f830188612cb7565b612cff6020830187612b60565b612d0c6040830186612b60565b612d196060830185612b60565b612d266080830184612b60565b9695505050505050565b5f8060408385031215612d4657612d45612a5e565b5b5f612d5385828601612adb565b9250506020612d6485828601612adb565b9150509250929050565b5f8060408385031215612d8457612d83612a5e565b5b5f612d9185828601612aa8565b9250506020612da285828601612c78565b9150509250929050565b5f604082019050612dbf5f830185612b60565b612dcc6020830184612b60565b9392505050565b5f819050919050565b5f612df6612df1612dec84612a62565b612dd3565b612a62565b9050919050565b5f612e0782612ddc565b9050919050565b5f612e1882612dfd565b9050919050565b612e2881612e0e565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b5f8060408385031215612e5d57612e5c612a5e565b5b5f612e6a85828601612aa8565b9250506020612e7b85828601612aa8565b9150509250929050565b5f612e8f82612dfd565b9050919050565b612e9f81612e85565b82525050565b5f602082019050612eb85f830184612e96565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f0257607f821691505b602082108103612f1557612f14612ebe565b5b50919050565b5f81519050612f2981612ac5565b92915050565b5f60208284031215612f4457612f43612a5e565b5b5f612f5184828501612f1b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9182612abc565b9150612f9c83612abc565b9250828201905080821115612fb457612fb3612f5a565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f612fee6011836129be565b9150612ff982612fba565b602082019050919050565b5f6020820190508181035f83015261301b81612fe2565b9050919050565b5f61302c82612dfd565b9050919050565b61303c81613022565b82525050565b5f6020820190506130555f830184613033565b92915050565b5f8151905061306981612c62565b92915050565b5f6020828403121561308457613083612a5e565b5b5f6130918482850161305b565b91505092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130f46022836129be565b91506130ff8261309a565b604082019050919050565b5f6020820190508181035f830152613121816130e8565b9050919050565b5f61313282612abc565b915061313d83612abc565b925082820261314b81612abc565b9150828204841483151761316257613161612f5a565b5b5092915050565b5f8151905061317781612a92565b92915050565b5f805f805f60a0868803121561319657613195612a5e565b5b5f6131a388828901613169565b95505060206131b488828901612f1b565b94505060406131c588828901612f1b565b93505060606131d688828901612f1b565b92505060806131e788828901612f1b565b9150509295509295909350565b7f416c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f613228600f836129be565b9150613233826131f4565b602082019050919050565b5f6020820190508181035f8301526132558161321c565b9050919050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f613290601f836129be565b915061329b8261325c565b602082019050919050565b5f6020820190508181035f8301526132bd81613284565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f61331e6022836129be565b9150613329826132c4565b604082019050919050565b5f6020820190508181035f83015261334b81613312565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6133ac6025836129be565b91506133b782613352565b604082019050919050565b5f6020820190508181035f8301526133d9816133a0565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61343a602a836129be565b9150613445826133e0565b604082019050919050565b5f6020820190508181035f8301526134678161342e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134c86026836129be565b91506134d38261346e565b604082019050919050565b5f6020820190508181035f8301526134f5816134bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135566024836129be565b9150613561826134fc565b604082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135e46022836129be565b91506135ef8261358a565b604082019050919050565b5f6020820190508181035f830152613611816135d8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61364c601d836129be565b915061365782613618565b602082019050919050565b5f6020820190508181035f83015261367981613640565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136da6025836129be565b91506136e582613680565b604082019050919050565b5f6020820190508181035f830152613707816136ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6137686023836129be565b91506137738261370e565b604082019050919050565b5f6020820190508181035f8301526137958161375c565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f6137d06012836129be565b91506137db8261379c565b602082019050919050565b5f6020820190508181035f8301526137fd816137c4565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f613838601f836129be565b915061384382613804565b602082019050919050565b5f6020820190508181035f8301526138658161382c565b9050919050565b5f61387682612abc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138a8576138a7612f5a565b5b600182019050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f6138e7601e836129be565b91506138f2826138b3565b602082019050919050565b5f6020820190508181035f830152613914816138db565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f61394f601b836129be565b915061395a8261391b565b602082019050919050565b5f6020820190508181035f83015261397c81613943565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6139ba82612abc565b91506139c583612abc565b9250826139d5576139d4613983565b5b828204905092915050565b5f6139ea82612abc565b91506139f583612abc565b9250828203905081811115613a0d57613a0c612f5a565b5b92915050565b5f604082019050613a265f830185612cb7565b613a336020830184612b60565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a6e6020836129be565b9150613a7982613a3a565b602082019050919050565b5f6020820190508181035f830152613a9b81613a62565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613afc6026836129be565b9150613b0782613aa2565b604082019050919050565b5f6020820190508181035f830152613b2981613af0565b9050919050565b5f81905092915050565b50565b5f613b485f83613b30565b9150613b5382613b3a565b5f82019050919050565b5f613b6782613b3d565b9150819050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f613ba56020836129be565b9150613bb082613b71565b602082019050919050565b5f6020820190508181035f830152613bd281613b99565b9050919050565b7f4661696c656420746f2073656e642045544820746f20777261707065720000005f82015250565b5f613c0d601d836129be565b9150613c1882613bd9565b602082019050919050565b5f6020820190508181035f830152613c3a81613c01565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613cb057613caf612a5e565b5b5f613cbd84828501613169565b91505092915050565b5f819050919050565b5f613ce9613ce4613cdf84613cc6565b612dd3565b612abc565b9050919050565b613cf981613ccf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d3181612a81565b82525050565b5f613d428383613d28565b60208301905092915050565b5f602082019050919050565b5f613d6482613cff565b613d6e8185613d09565b9350613d7983613d19565b805f5b83811015613da9578151613d908882613d37565b9750613d9b83613d4e565b925050600181019050613d7c565b5085935050505092915050565b5f60a082019050613dc95f830188612b60565b613dd66020830187613cf0565b8181036040830152613de88186613d5a565b9050613df76060830185612cb7565b613e046080830184612b60565b969550505050505056fea26469706673582212207f8b966f83fbcc3fe0d35995c20d47c5240e9d4648d1e8fcbad6259d84e5768964736f6c63430008150033

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

0000000000000000000000002b65ae2fc9eb656440f0134585763f138934cf3c

-----Decoded View---------------
Arg [0] : _wrapper (address): 0x2b65AE2Fc9EB656440F0134585763f138934cf3C

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002b65ae2fc9eb656440f0134585763f138934cf3c


Deployed Bytecode Sourcemap

26511:9346:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12326:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14752:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13455:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15558:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35212:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13297:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16262:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29151:142;;;;;;;;;;;;;:::i;:::-;;30909:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28965:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29301:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26853:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35521:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13626:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25629:103;;;;;;;;;;;;;:::i;:::-;;26740:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35676:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;26819:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:136;;;;;;;;;;;;;:::i;:::-;;24988:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29406:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29859:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12545:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27035:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26997:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;17028:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26588:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35353:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13975:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26708:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26644;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29730:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27279:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26674:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30037:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14256:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26779:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25887:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26553:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26888:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12326:100;12380:13;12413:5;12406:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12326:100;:::o;14752:226::-;14860:4;14877:13;14893:12;:10;:12::i;:::-;14877:28;;14916:32;14925:5;14932:7;14941:6;14916:8;:32::i;:::-;14966:4;14959:11;;;14752:226;;;;:::o;13455:108::-;13516:7;13543:12;;13536:19;;13455:108;:::o;15558:295::-;15689:4;15706:15;15724:12;:10;:12::i;:::-;15706:30;;15747:38;15763:4;15769:7;15778:6;15747:15;:38::i;:::-;15796:27;15806:4;15812:2;15816:6;15796:9;:27::i;:::-;15841:4;15834:11;;;15558:295;;;;;:::o;35212:133::-;35275:7;35302;;;;;;;;;;;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35295:42;;35212:133;:::o;13297:93::-;13355:5;13380:2;13373:9;;13297:93;:::o;16262:263::-;16375:4;16392:13;16408:12;:10;:12::i;:::-;16392:28;;16431:64;16440:5;16447:7;16484:10;16456:25;16466:5;16473:7;16456:9;:25::i;:::-;:38;;;;:::i;:::-;16431:8;:64::i;:::-;16513:4;16506:11;;;16262:263;;;;:::o;29151:142::-;29196:11;;;;;;;;;;;29188:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29240:7;;;;;;;;;;;:22;;;29271:12;:10;:12::i;:::-;29240:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29151:142::o;30909:126::-;30975:4;30999:19;:28;31019:7;30999:28;;;;;;;;;;;;;;;;;;;;;;;;;30992:35;;30909:126;;;:::o;28965:178::-;24874:13;:11;:13::i;:::-;29049:7:::1;29039:6;:17;;29031:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29127:8;29118:6;:17;;;;:::i;:::-;29106:9;:29;;;;28965:178:::0;:::o;29301:97::-;24874:13;:11;:13::i;:::-;29383:7:::1;29369:11;;:21;;;;;;;;;;;;;;;;;;29301:97:::0;:::o;26853:28::-;;;;:::o;35521:147::-;35607:7;35634;;;;;;;;;;;:17;;;35652:7;35634:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35627:33;;35521:147;;;:::o;13626:143::-;13716:7;13743:9;:18;13753:7;13743:18;;;;;;;;;;;;;;;;13736:25;;13626:143;;;:::o;25629:103::-;24874:13;:11;:13::i;:::-;25694:30:::1;25721:1;25694:18;:30::i;:::-;25629:103::o:0;26740:30::-;;;;;;;;;;;;;:::o;35676:178::-;35756:7;35765;35774;35783;35792;35819;;;;;;;;;;;:18;;;35838:7;35819:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35812:34;;;;;;;;;;35676:178;;;;;;;:::o;26819:27::-;;;;:::o;30400:136::-;24874:13;:11;:13::i;:::-;30464::::1;;;;;;;;;;;30463:14;30455:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;30524:4;30508:13;;:20;;;;;;;;;;;;;;;;;;30400:136::o:0;24988:87::-;25034:7;25061:6;;;;;;;;;;;25054:13;;24988:87;:::o;29406:316::-;24874:13;:11;:13::i;:::-;29508:7:::1;29498:6;:17;;29490:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29581:6;29570:7;:17;;29562:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29661:8;29652:6;:17;;;;:::i;:::-;29637:12;:32;;;;29706:8;29696:7;:18;;;;:::i;:::-;29680:13;:34;;;;29406:316:::0;;:::o;29859:170::-;24874:13;:11;:13::i;:::-;30013:8:::1;29977:24;:33;30002:7;29977:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;29859:170:::0;;:::o;12545:104::-;12601:13;12634:7;12627:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12545:104;:::o;27035:22::-;;;;:::o;26997:29::-;;;;;;;;;;;;;;:::o;17028:498::-;17146:4;17163:13;17179:12;:10;:12::i;:::-;17163:28;;17202:24;17229:25;17239:5;17246:7;17229:9;:25::i;:::-;17202:52;;17307:15;17287:16;:35;;17265:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;17423:60;17432:5;17439:7;17467:15;17448:16;:34;17423:8;:60::i;:::-;17514:4;17507:11;;;;17028:498;;;;:::o;26588:19::-;;;;;;;;;;;;;:::o;35353:160::-;35439:7;35466;;;;;;;;;;;:30;;;35497:7;35466:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35459:46;;35353:160;;;:::o;13975:218::-;14079:4;14096:13;14112:12;:10;:12::i;:::-;14096:28;;14135;14145:5;14152:2;14156:6;14135:9;:28::i;:::-;14181:4;14174:11;;;13975:218;;;;:::o;26708:23::-;;;;;;;;;;;;;:::o;26644:::-;;;;;;;;;;;;;:::o;29730:121::-;24874:13;:11;:13::i;:::-;29835:8:::1;29826:6;:17;;;;:::i;:::-;29805:18;:38;;;;29730:121:::0;:::o;27279:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26674:25::-;;;;;;;;;;;;;:::o;30037:355::-;24874:13;:11;:13::i;:::-;30204:8:::1;30172:40;;:19;:28;30192:7;30172:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;30150:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30324:8;30293:19;:28;30313:7;30293:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30366:7;30350:34;;;30375:8;30350:34;;;;;;:::i;:::-;;;;;;;;30037:355:::0;;:::o;14256:176::-;14370:7;14397:11;:18;14409:5;14397:18;;;;;;;;;;;;;;;:27;14416:7;14397:27;;;;;;;;;;;;;;;;14390:34;;14256:176;;;;:::o;26779:33::-;;;;:::o;25887:238::-;24874:13;:11;:13::i;:::-;26010:1:::1;25990:22;;:8;:22;;::::0;25968:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26089:28;26108:8;26089:18;:28::i;:::-;25887:238:::0;:::o;26553:28::-;;;;;;;;;;;;;:::o;26888:24::-;;;;:::o;10030:98::-;10083:7;10110:10;10103:17;;10030:98;:::o;21154:380::-;21307:1;21290:19;;:5;:19;;;21282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21388:1;21369:21;;:7;:21;;;21361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21472:6;21442:11;:18;21454:5;21442:18;;;;;;;;;;;;;;;:27;21461:7;21442:27;;;;;;;;;;;;;;;:36;;;;21510:7;21494:32;;21503:5;21494:32;;;21519:6;21494:32;;;;;;:::i;:::-;;;;;;;;21154:380;;;:::o;21825:502::-;21960:24;21987:25;21997:5;22004:7;21987:9;:25::i;:::-;21960:52;;22047:17;22027:16;:37;22023:297;;22127:6;22107:16;:26;;22081:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:51;22251:5;22258:7;22286:6;22267:16;:25;22242:8;:51::i;:::-;22023:297;21949:378;21825:502;;;:::o;31043:2853::-;31191:1;31175:18;;:4;:18;;;31167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31268:1;31254:16;;:2;:16;;;31246:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31342:19;:25;31362:4;31342:25;;;;;;;;;;;;;;;;;;;;;;;;;31341:26;:54;;;;;31372:19;:23;31392:2;31372:23;;;;;;;;;;;;;;;;;;;;;;;;;31371:24;31341:54;:67;;;;;31400:8;;;;;;;;;;;31399:9;31341:67;31323:865;;;31443:13;;;;;;;;;;;31435:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31498:25;:29;31524:2;31498:29;;;;;;;;;;;;;;;;;;;;;;;;;31494:463;;;31588:13;;31578:6;:23;;31548:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31695:10;;:12;;;;;;;;;:::i;:::-;;;;;;31494:463;;;31733:25;:31;31759:4;31733:31;;;;;;;;;;;;;;;;;;;;;;;;;31729:228;;;31825:12;;31815:6;:22;;31785:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;31930:9;;:11;;;;;;;;;:::i;:::-;;;;;;31729:228;31494:463;31976:24;:28;32001:2;31976:28;;;;;;;;;;;;;;;;;;;;;;;;;31971:206;;32081:9;;32064:13;32074:2;32064:9;:13::i;:::-;32055:6;:22;;;;:::i;:::-;:35;;32025:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;31971:206;31323:865;32214:1;32204:6;:11;32200:93;;32232:28;32248:4;32254:2;32258:1;32232:15;:28::i;:::-;32275:7;;32200:93;32305:28;32336:24;32354:4;32336:9;:24::i;:::-;32305:55;;32371:12;32410:18;;32386:20;:42;;32371:57;;32459:7;:33;;;;;32484:8;;;;;;;;;;;32483:9;32459:33;:79;;;;;32509:25;:29;32535:2;32509:29;;;;;;;;;;;;;;;;;;;;;;;;;32459:79;:122;;;;;32556:19;:25;32576:4;32556:25;;;;;;;;;;;;;;;;;;;;;;;;;32555:26;32459:122;:163;;;;;32599:19;:23;32619:2;32599:23;;;;;;;;;;;;;;;;;;;;;;;;;32598:24;32459:163;32441:309;;;32660:4;32649:8;;:15;;;;;;;;;;;;;;;;;;32681:24;32686:18;;32681:4;:24::i;:::-;32733:5;32722:8;;:16;;;;;;;;;;;;;;;;;;32441:309;32762:12;32778:8;;;;;;;;;;;32777:9;32762:24;;32888:19;:25;32908:4;32888:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32917:19;:23;32937:2;32917:23;;;;;;;;;;;;;;;;;;;;;;;;;32888:52;32884:100;;;32967:5;32957:15;;32884:100;33001:25;:29;33027:2;33001:29;;;;;;;;;;;;;;;;;;;;;;;;;33000:30;:66;;;;;33035:25;:31;33061:4;33035:31;;;;;;;;;;;;;;;;;;;;;;;;;33034:32;33000:66;32996:100;;;33091:5;33081:15;;32996:100;33113:7;33109:545;;;33137:14;33170:25;:29;33196:2;33170:29;;;;;;;;;;;;;;;;;;;;;;;;;33166:377;;;33332:3;33274:12;;33261:10;;:25;:45;;33295:11;;33261:45;;;33289:3;;33261:45;33251:6;:56;;;;:::i;:::-;33250:85;;;;:::i;:::-;33220:115;;33166:377;;;33361:25;:31;33387:4;33361:31;;;;;;;;;;;;;;;;;;;;;;;;;33357:186;;;33524:3;33466:12;;33454:9;;:24;:44;;33487:11;;33454:44;;;33481:3;;33454:44;33444:6;:55;;;;:::i;:::-;33443:84;;;;:::i;:::-;33413:114;;33357:186;33166:377;33577:6;33568;:15;;;;:::i;:::-;33559:24;;33598:44;33614:4;33628;33635:6;33598:15;:44::i;:::-;33122:532;33109:545;33664:33;33680:4;33686:2;33690:6;33664:15;:33::i;:::-;33742:1;33714:30;;33722:7;;;;;;;;;;;33714:30;;;33710:43;;33746:7;;;;;33710:43;33769:7;;;;;;;;;;;:20;;;33790:4;33796:15;33806:4;33796:9;:15::i;:::-;33769:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33765:59;33838:7;;;;;;;;;;;:20;;;33859:2;33863:13;33873:2;33863:9;:13::i;:::-;33838:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33834:55;31156:2740;;;31043:2853;;;;:::o;25153:132::-;25228:12;:10;:12::i;:::-;25217:23;;:7;:5;:7::i;:::-;:23;;;25209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25153:132::o;26285:191::-;26359:16;26378:6;;;;;;;;;;;26359:25;;26404:8;26395:6;;:17;;;;;;;;;;;;;;;;;;26459:8;26428:40;;26449:8;26428:40;;;;;;;;;;;;26348:128;26285:191;:::o;17996:877::-;18143:1;18127:18;;:4;:18;;;18119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18220:1;18206:16;;:2;:16;;;18198:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18275:38;18296:4;18302:2;18306:6;18275:20;:38::i;:::-;18326:19;18348:9;:15;18358:4;18348:15;;;;;;;;;;;;;;;;18326:37;;18411:6;18396:11;:21;;18374:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18551:6;18537:11;:20;18519:9;:15;18529:4;18519:15;;;;;;;;;;;;;;;:38;;;;18754:6;18737:9;:13;18747:2;18737:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;18804:2;18789:26;;18798:4;18789:26;;;18808:6;18789:26;;;;;;:::i;:::-;;;;;;;;18828:37;18848:4;18854:2;18858:6;18828:19;:37::i;:::-;18108:765;17996:877;;;:::o;33904:864::-;33953:22;33978:21;33953:46;;34012:24;34029:6;34012:16;:24::i;:::-;34049:15;34067:21;34049:39;;34101:19;34183:3;;34154:4;:12;;;34136:14;34126:7;:24;;;;:::i;:::-;34125:41;;;;:::i;:::-;34124:62;;;;:::i;:::-;34101:86;;34198:17;34228:11;34218:7;:21;;;;:::i;:::-;34198:41;;34268:1;34256:9;:13;34252:215;;;34287:12;34313:15;;;;;;;;;;;34305:29;;34342:9;34305:83;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34286:102;;;34411:7;34403:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34271:196;34252:215;34495:1;34481:11;:15;34477:284;;;34514:12;34548:7;;;;;;;;;;;34532:30;;34588:11;34532:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34513:105;;;34641:7;34633:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;34701:7;;;;;;;;;;;:24;;;34726:11;34701:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34697:53;34498:263;34477:284;33942:826;;;;33904:864;:::o;22927:125::-;;;;:::o;23656:124::-;;;;:::o;34776:410::-;34842:21;34880:1;34866:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34842:40;;34911:4;34893;34898:1;34893:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34937:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34927:4;34932:1;34927:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34963:6;;;;;;;;;;;:57;;;35035:11;35061:1;35105:4;35132;35152:15;34963:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34831:355;34776:410;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:323::-;5840:6;5889:2;5877:9;5868:7;5864:23;5860:32;5857:119;;;5895:79;;:::i;:::-;5857:119;6015:1;6040:50;6082:7;6073:6;6062:9;6058:22;6040:50;:::i;:::-;6030:60;;5986:114;5784:323;;;;:::o;6113:118::-;6200:24;6218:5;6200:24;:::i;:::-;6195:3;6188:37;6113:118;;:::o;6237:222::-;6330:4;6368:2;6357:9;6353:18;6345:26;;6381:71;6449:1;6438:9;6434:17;6425:6;6381:71;:::i;:::-;6237:222;;;;:::o;6465:664::-;6670:4;6708:3;6697:9;6693:19;6685:27;;6722:71;6790:1;6779:9;6775:17;6766:6;6722:71;:::i;:::-;6803:72;6871:2;6860:9;6856:18;6847:6;6803:72;:::i;:::-;6885;6953:2;6942:9;6938:18;6929:6;6885:72;:::i;:::-;6967;7035:2;7024:9;7020:18;7011:6;6967:72;:::i;:::-;7049:73;7117:3;7106:9;7102:19;7093:6;7049:73;:::i;:::-;6465:664;;;;;;;;:::o;7135:474::-;7203:6;7211;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7513:2;7539:53;7584:7;7575:6;7564:9;7560:22;7539:53;:::i;:::-;7529:63;;7484:118;7135:474;;;;;:::o;7615:468::-;7680:6;7688;7737:2;7725:9;7716:7;7712:23;7708:32;7705:119;;;7743:79;;:::i;:::-;7705:119;7863:1;7888:53;7933:7;7924:6;7913:9;7909:22;7888:53;:::i;:::-;7878:63;;7834:117;7990:2;8016:50;8058:7;8049:6;8038:9;8034:22;8016:50;:::i;:::-;8006:60;;7961:115;7615:468;;;;;:::o;8089:332::-;8210:4;8248:2;8237:9;8233:18;8225:26;;8261:71;8329:1;8318:9;8314:17;8305:6;8261:71;:::i;:::-;8342:72;8410:2;8399:9;8395:18;8386:6;8342:72;:::i;:::-;8089:332;;;;;:::o;8427:60::-;8455:3;8476:5;8469:12;;8427:60;;;:::o;8493:142::-;8543:9;8576:53;8594:34;8603:24;8621:5;8603:24;:::i;:::-;8594:34;:::i;:::-;8576:53;:::i;:::-;8563:66;;8493:142;;;:::o;8641:126::-;8691:9;8724:37;8755:5;8724:37;:::i;:::-;8711:50;;8641:126;;;:::o;8773:142::-;8839:9;8872:37;8903:5;8872:37;:::i;:::-;8859:50;;8773:142;;;:::o;8921:163::-;9024:53;9071:5;9024:53;:::i;:::-;9019:3;9012:66;8921:163;;:::o;9090:254::-;9199:4;9237:2;9226:9;9222:18;9214:26;;9250:87;9334:1;9323:9;9319:17;9310:6;9250:87;:::i;:::-;9090:254;;;;:::o;9350:474::-;9418:6;9426;9475:2;9463:9;9454:7;9450:23;9446:32;9443:119;;;9481:79;;:::i;:::-;9443:119;9601:1;9626:53;9671:7;9662:6;9651:9;9647:22;9626:53;:::i;:::-;9616:63;;9572:117;9728:2;9754:53;9799:7;9790:6;9779:9;9775:22;9754:53;:::i;:::-;9744:63;;9699:118;9350:474;;;;;:::o;9830:148::-;9902:9;9935:37;9966:5;9935:37;:::i;:::-;9922:50;;9830:148;;;:::o;9984:175::-;10093:59;10146:5;10093:59;:::i;:::-;10088:3;10081:72;9984:175;;:::o;10165:266::-;10280:4;10318:2;10307:9;10303:18;10295:26;;10331:93;10421:1;10410:9;10406:17;10397:6;10331:93;:::i;:::-;10165:266;;;;:::o;10437:180::-;10485:77;10482:1;10475:88;10582:4;10579:1;10572:15;10606:4;10603:1;10596:15;10623:320;10667:6;10704:1;10698:4;10694:12;10684:22;;10751:1;10745:4;10741:12;10772:18;10762:81;;10828:4;10820:6;10816:17;10806:27;;10762:81;10890:2;10882:6;10879:14;10859:18;10856:38;10853:84;;10909:18;;:::i;:::-;10853:84;10674:269;10623:320;;;:::o;10949:143::-;11006:5;11037:6;11031:13;11022:22;;11053:33;11080:5;11053:33;:::i;:::-;10949:143;;;;:::o;11098:351::-;11168:6;11217:2;11205:9;11196:7;11192:23;11188:32;11185:119;;;11223:79;;:::i;:::-;11185:119;11343:1;11368:64;11424:7;11415:6;11404:9;11400:22;11368:64;:::i;:::-;11358:74;;11314:128;11098:351;;;;:::o;11455:180::-;11503:77;11500:1;11493:88;11600:4;11597:1;11590:15;11624:4;11621:1;11614:15;11641:191;11681:3;11700:20;11718:1;11700:20;:::i;:::-;11695:25;;11734:20;11752:1;11734:20;:::i;:::-;11729:25;;11777:1;11774;11770:9;11763:16;;11798:3;11795:1;11792:10;11789:36;;;11805:18;;:::i;:::-;11789:36;11641:191;;;;:::o;11838:167::-;11978:19;11974:1;11966:6;11962:14;11955:43;11838:167;:::o;12011:366::-;12153:3;12174:67;12238:2;12233:3;12174:67;:::i;:::-;12167:74;;12250:93;12339:3;12250:93;:::i;:::-;12368:2;12363:3;12359:12;12352:19;;12011:366;;;:::o;12383:419::-;12549:4;12587:2;12576:9;12572:18;12564:26;;12636:9;12630:4;12626:20;12622:1;12611:9;12607:17;12600:47;12664:131;12790:4;12664:131;:::i;:::-;12656:139;;12383:419;;;:::o;12808:134::-;12866:9;12899:37;12930:5;12899:37;:::i;:::-;12886:50;;12808:134;;;:::o;12948:147::-;13043:45;13082:5;13043:45;:::i;:::-;13038:3;13031:58;12948:147;;:::o;13101:238::-;13202:4;13240:2;13229:9;13225:18;13217:26;;13253:79;13329:1;13318:9;13314:17;13305:6;13253:79;:::i;:::-;13101:238;;;;:::o;13345:137::-;13399:5;13430:6;13424:13;13415:22;;13446:30;13470:5;13446:30;:::i;:::-;13345:137;;;;:::o;13488:345::-;13555:6;13604:2;13592:9;13583:7;13579:23;13575:32;13572:119;;;13610:79;;:::i;:::-;13572:119;13730:1;13755:61;13808:7;13799:6;13788:9;13784:22;13755:61;:::i;:::-;13745:71;;13701:125;13488:345;;;;:::o;13839:221::-;13979:34;13975:1;13967:6;13963:14;13956:58;14048:4;14043:2;14035:6;14031:15;14024:29;13839:221;:::o;14066:366::-;14208:3;14229:67;14293:2;14288:3;14229:67;:::i;:::-;14222:74;;14305:93;14394:3;14305:93;:::i;:::-;14423:2;14418:3;14414:12;14407:19;;14066:366;;;:::o;14438:419::-;14604:4;14642:2;14631:9;14627:18;14619:26;;14691:9;14685:4;14681:20;14677:1;14666:9;14662:17;14655:47;14719:131;14845:4;14719:131;:::i;:::-;14711:139;;14438:419;;;:::o;14863:410::-;14903:7;14926:20;14944:1;14926:20;:::i;:::-;14921:25;;14960:20;14978:1;14960:20;:::i;:::-;14955:25;;15015:1;15012;15008:9;15037:30;15055:11;15037:30;:::i;:::-;15026:41;;15216:1;15207:7;15203:15;15200:1;15197:22;15177:1;15170:9;15150:83;15127:139;;15246:18;;:::i;:::-;15127:139;14911:362;14863:410;;;;:::o;15279:143::-;15336:5;15367:6;15361:13;15352:22;;15383:33;15410:5;15383:33;:::i;:::-;15279:143;;;;:::o;15428:977::-;15534:6;15542;15550;15558;15566;15615:3;15603:9;15594:7;15590:23;15586:33;15583:120;;;15622:79;;:::i;:::-;15583:120;15742:1;15767:64;15823:7;15814:6;15803:9;15799:22;15767:64;:::i;:::-;15757:74;;15713:128;15880:2;15906:64;15962:7;15953:6;15942:9;15938:22;15906:64;:::i;:::-;15896:74;;15851:129;16019:2;16045:64;16101:7;16092:6;16081:9;16077:22;16045:64;:::i;:::-;16035:74;;15990:129;16158:2;16184:64;16240:7;16231:6;16220:9;16216:22;16184:64;:::i;:::-;16174:74;;16129:129;16297:3;16324:64;16380:7;16371:6;16360:9;16356:22;16324:64;:::i;:::-;16314:74;;16268:130;15428:977;;;;;;;;:::o;16411:165::-;16551:17;16547:1;16539:6;16535:14;16528:41;16411:165;:::o;16582:366::-;16724:3;16745:67;16809:2;16804:3;16745:67;:::i;:::-;16738:74;;16821:93;16910:3;16821:93;:::i;:::-;16939:2;16934:3;16930:12;16923:19;;16582:366;;;:::o;16954:419::-;17120:4;17158:2;17147:9;17143:18;17135:26;;17207:9;17201:4;17197:20;17193:1;17182:9;17178:17;17171:47;17235:131;17361:4;17235:131;:::i;:::-;17227:139;;16954:419;;;:::o;17379:181::-;17519:33;17515:1;17507:6;17503:14;17496:57;17379:181;:::o;17566:366::-;17708:3;17729:67;17793:2;17788:3;17729:67;:::i;:::-;17722:74;;17805:93;17894:3;17805:93;:::i;:::-;17923:2;17918:3;17914:12;17907:19;;17566:366;;;:::o;17938:419::-;18104:4;18142:2;18131:9;18127:18;18119:26;;18191:9;18185:4;18181:20;18177:1;18166:9;18162:17;18155:47;18219:131;18345:4;18219:131;:::i;:::-;18211:139;;17938:419;;;:::o;18363:221::-;18503:34;18499:1;18491:6;18487:14;18480:58;18572:4;18567:2;18559:6;18555:15;18548:29;18363:221;:::o;18590:366::-;18732:3;18753:67;18817:2;18812:3;18753:67;:::i;:::-;18746:74;;18829:93;18918:3;18829:93;:::i;:::-;18947:2;18942:3;18938:12;18931:19;;18590:366;;;:::o;18962:419::-;19128:4;19166:2;19155:9;19151:18;19143:26;;19215:9;19209:4;19205:20;19201:1;19190:9;19186:17;19179:47;19243:131;19369:4;19243:131;:::i;:::-;19235:139;;18962:419;;;:::o;19387:224::-;19527:34;19523:1;19515:6;19511:14;19504:58;19596:7;19591:2;19583:6;19579:15;19572:32;19387:224;:::o;19617:366::-;19759:3;19780:67;19844:2;19839:3;19780:67;:::i;:::-;19773:74;;19856:93;19945:3;19856:93;:::i;:::-;19974:2;19969:3;19965:12;19958:19;;19617:366;;;:::o;19989:419::-;20155:4;20193:2;20182:9;20178:18;20170:26;;20242:9;20236:4;20232:20;20228:1;20217:9;20213:17;20206:47;20270:131;20396:4;20270:131;:::i;:::-;20262:139;;19989:419;;;:::o;20414:229::-;20554:34;20550:1;20542:6;20538:14;20531:58;20623:12;20618:2;20610:6;20606:15;20599:37;20414:229;:::o;20649:366::-;20791:3;20812:67;20876:2;20871:3;20812:67;:::i;:::-;20805:74;;20888:93;20977:3;20888:93;:::i;:::-;21006:2;21001:3;20997:12;20990:19;;20649:366;;;:::o;21021:419::-;21187:4;21225:2;21214:9;21210:18;21202:26;;21274:9;21268:4;21264:20;21260:1;21249:9;21245:17;21238:47;21302:131;21428:4;21302:131;:::i;:::-;21294:139;;21021:419;;;:::o;21446:225::-;21586:34;21582:1;21574:6;21570:14;21563:58;21655:8;21650:2;21642:6;21638:15;21631:33;21446:225;:::o;21677:366::-;21819:3;21840:67;21904:2;21899:3;21840:67;:::i;:::-;21833:74;;21916:93;22005:3;21916:93;:::i;:::-;22034:2;22029:3;22025:12;22018:19;;21677:366;;;:::o;22049:419::-;22215:4;22253:2;22242:9;22238:18;22230:26;;22302:9;22296:4;22292:20;22288:1;22277:9;22273:17;22266:47;22330:131;22456:4;22330:131;:::i;:::-;22322:139;;22049:419;;;:::o;22474:223::-;22614:34;22610:1;22602:6;22598:14;22591:58;22683:6;22678:2;22670:6;22666:15;22659:31;22474:223;:::o;22703:366::-;22845:3;22866:67;22930:2;22925:3;22866:67;:::i;:::-;22859:74;;22942:93;23031:3;22942:93;:::i;:::-;23060:2;23055:3;23051:12;23044:19;;22703:366;;;:::o;23075:419::-;23241:4;23279:2;23268:9;23264:18;23256:26;;23328:9;23322:4;23318:20;23314:1;23303:9;23299:17;23292:47;23356:131;23482:4;23356:131;:::i;:::-;23348:139;;23075:419;;;:::o;23500:221::-;23640:34;23636:1;23628:6;23624:14;23617:58;23709:4;23704:2;23696:6;23692:15;23685:29;23500:221;:::o;23727:366::-;23869:3;23890:67;23954:2;23949:3;23890:67;:::i;:::-;23883:74;;23966:93;24055:3;23966:93;:::i;:::-;24084:2;24079:3;24075:12;24068:19;;23727:366;;;:::o;24099:419::-;24265:4;24303:2;24292:9;24288:18;24280:26;;24352:9;24346:4;24342:20;24338:1;24327:9;24323:17;24316:47;24380:131;24506:4;24380:131;:::i;:::-;24372:139;;24099:419;;;:::o;24524:179::-;24664:31;24660:1;24652:6;24648:14;24641:55;24524:179;:::o;24709:366::-;24851:3;24872:67;24936:2;24931:3;24872:67;:::i;:::-;24865:74;;24948:93;25037:3;24948:93;:::i;:::-;25066:2;25061:3;25057:12;25050:19;;24709:366;;;:::o;25081:419::-;25247:4;25285:2;25274:9;25270:18;25262:26;;25334:9;25328:4;25324:20;25320:1;25309:9;25305:17;25298:47;25362:131;25488:4;25362:131;:::i;:::-;25354:139;;25081:419;;;:::o;25506:224::-;25646:34;25642:1;25634:6;25630:14;25623:58;25715:7;25710:2;25702:6;25698:15;25691:32;25506:224;:::o;25736:366::-;25878:3;25899:67;25963:2;25958:3;25899:67;:::i;:::-;25892:74;;25975:93;26064:3;25975:93;:::i;:::-;26093:2;26088:3;26084:12;26077:19;;25736:366;;;:::o;26108:419::-;26274:4;26312:2;26301:9;26297:18;26289:26;;26361:9;26355:4;26351:20;26347:1;26336:9;26332:17;26325:47;26389:131;26515:4;26389:131;:::i;:::-;26381:139;;26108:419;;;:::o;26533:222::-;26673:34;26669:1;26661:6;26657:14;26650:58;26742:5;26737:2;26729:6;26725:15;26718:30;26533:222;:::o;26761:366::-;26903:3;26924:67;26988:2;26983:3;26924:67;:::i;:::-;26917:74;;27000:93;27089:3;27000:93;:::i;:::-;27118:2;27113:3;27109:12;27102:19;;26761:366;;;:::o;27133:419::-;27299:4;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27133:419;;;:::o;27558:168::-;27698:20;27694:1;27686:6;27682:14;27675:44;27558:168;:::o;27732:366::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:419::-;28270:4;28308:2;28297:9;28293:18;28285:26;;28357:9;28351:4;28347:20;28343:1;28332:9;28328:17;28321:47;28385:131;28511:4;28385:131;:::i;:::-;28377:139;;28104:419;;;:::o;28529:181::-;28669:33;28665:1;28657:6;28653:14;28646:57;28529:181;:::o;28716:366::-;28858:3;28879:67;28943:2;28938:3;28879:67;:::i;:::-;28872:74;;28955:93;29044:3;28955:93;:::i;:::-;29073:2;29068:3;29064:12;29057:19;;28716:366;;;:::o;29088:419::-;29254:4;29292:2;29281:9;29277:18;29269:26;;29341:9;29335:4;29331:20;29327:1;29316:9;29312:17;29305:47;29369:131;29495:4;29369:131;:::i;:::-;29361:139;;29088:419;;;:::o;29513:233::-;29552:3;29575:24;29593:5;29575:24;:::i;:::-;29566:33;;29621:66;29614:5;29611:77;29608:103;;29691:18;;:::i;:::-;29608:103;29738:1;29731:5;29727:13;29720:20;;29513:233;;;:::o;29752:180::-;29892:32;29888:1;29880:6;29876:14;29869:56;29752:180;:::o;29938:366::-;30080:3;30101:67;30165:2;30160:3;30101:67;:::i;:::-;30094:74;;30177:93;30266:3;30177:93;:::i;:::-;30295:2;30290:3;30286:12;30279:19;;29938:366;;;:::o;30310:419::-;30476:4;30514:2;30503:9;30499:18;30491:26;;30563:9;30557:4;30553:20;30549:1;30538:9;30534:17;30527:47;30591:131;30717:4;30591:131;:::i;:::-;30583:139;;30310:419;;;:::o;30735:177::-;30875:29;30871:1;30863:6;30859:14;30852:53;30735:177;:::o;30918:366::-;31060:3;31081:67;31145:2;31140:3;31081:67;:::i;:::-;31074:74;;31157:93;31246:3;31157:93;:::i;:::-;31275:2;31270:3;31266:12;31259:19;;30918:366;;;:::o;31290:419::-;31456:4;31494:2;31483:9;31479:18;31471:26;;31543:9;31537:4;31533:20;31529:1;31518:9;31514:17;31507:47;31571:131;31697:4;31571:131;:::i;:::-;31563:139;;31290:419;;;:::o;31715:180::-;31763:77;31760:1;31753:88;31860:4;31857:1;31850:15;31884:4;31881:1;31874:15;31901:185;31941:1;31958:20;31976:1;31958:20;:::i;:::-;31953:25;;31992:20;32010:1;31992:20;:::i;:::-;31987:25;;32031:1;32021:35;;32036:18;;:::i;:::-;32021:35;32078:1;32075;32071:9;32066:14;;31901:185;;;;:::o;32092:194::-;32132:4;32152:20;32170:1;32152:20;:::i;:::-;32147:25;;32186:20;32204:1;32186:20;:::i;:::-;32181:25;;32230:1;32227;32223:9;32215:17;;32254:1;32248:4;32245:11;32242:37;;;32259:18;;:::i;:::-;32242:37;32092:194;;;;:::o;32292:332::-;32413:4;32451:2;32440:9;32436:18;32428:26;;32464:71;32532:1;32521:9;32517:17;32508:6;32464:71;:::i;:::-;32545:72;32613:2;32602:9;32598:18;32589:6;32545:72;:::i;:::-;32292:332;;;;;:::o;32630:182::-;32770:34;32766:1;32758:6;32754:14;32747:58;32630:182;:::o;32818:366::-;32960:3;32981:67;33045:2;33040:3;32981:67;:::i;:::-;32974:74;;33057:93;33146:3;33057:93;:::i;:::-;33175:2;33170:3;33166:12;33159:19;;32818:366;;;:::o;33190:419::-;33356:4;33394:2;33383:9;33379:18;33371:26;;33443:9;33437:4;33433:20;33429:1;33418:9;33414:17;33407:47;33471:131;33597:4;33471:131;:::i;:::-;33463:139;;33190:419;;;:::o;33615:225::-;33755:34;33751:1;33743:6;33739:14;33732:58;33824:8;33819:2;33811:6;33807:15;33800:33;33615:225;:::o;33846:366::-;33988:3;34009:67;34073:2;34068:3;34009:67;:::i;:::-;34002:74;;34085:93;34174:3;34085:93;:::i;:::-;34203:2;34198:3;34194:12;34187:19;;33846:366;;;:::o;34218:419::-;34384:4;34422:2;34411:9;34407:18;34399:26;;34471:9;34465:4;34461:20;34457:1;34446:9;34442:17;34435:47;34499:131;34625:4;34499:131;:::i;:::-;34491:139;;34218:419;;;:::o;34643:147::-;34744:11;34781:3;34766:18;;34643:147;;;;:::o;34796:114::-;;:::o;34916:398::-;35075:3;35096:83;35177:1;35172:3;35096:83;:::i;:::-;35089:90;;35188:93;35277:3;35188:93;:::i;:::-;35306:1;35301:3;35297:11;35290:18;;34916:398;;;:::o;35320:379::-;35504:3;35526:147;35669:3;35526:147;:::i;:::-;35519:154;;35690:3;35683:10;;35320:379;;;:::o;35705:182::-;35845:34;35841:1;35833:6;35829:14;35822:58;35705:182;:::o;35893:366::-;36035:3;36056:67;36120:2;36115:3;36056:67;:::i;:::-;36049:74;;36132:93;36221:3;36132:93;:::i;:::-;36250:2;36245:3;36241:12;36234:19;;35893:366;;;:::o;36265:419::-;36431:4;36469:2;36458:9;36454:18;36446:26;;36518:9;36512:4;36508:20;36504:1;36493:9;36489:17;36482:47;36546:131;36672:4;36546:131;:::i;:::-;36538:139;;36265:419;;;:::o;36690:179::-;36830:31;36826:1;36818:6;36814:14;36807:55;36690:179;:::o;36875:366::-;37017:3;37038:67;37102:2;37097:3;37038:67;:::i;:::-;37031:74;;37114:93;37203:3;37114:93;:::i;:::-;37232:2;37227:3;37223:12;37216:19;;36875:366;;;:::o;37247:419::-;37413:4;37451:2;37440:9;37436:18;37428:26;;37500:9;37494:4;37490:20;37486:1;37475:9;37471:17;37464:47;37528:131;37654:4;37528:131;:::i;:::-;37520:139;;37247:419;;;:::o;37672:180::-;37720:77;37717:1;37710:88;37817:4;37814:1;37807:15;37841:4;37838:1;37831:15;37858:180;37906:77;37903:1;37896:88;38003:4;38000:1;37993:15;38027:4;38024:1;38017:15;38044:351;38114:6;38163:2;38151:9;38142:7;38138:23;38134:32;38131:119;;;38169:79;;:::i;:::-;38131:119;38289:1;38314:64;38370:7;38361:6;38350:9;38346:22;38314:64;:::i;:::-;38304:74;;38260:128;38044:351;;;;:::o;38401:85::-;38446:7;38475:5;38464:16;;38401:85;;;:::o;38492:158::-;38550:9;38583:61;38601:42;38610:32;38636:5;38610:32;:::i;:::-;38601:42;:::i;:::-;38583:61;:::i;:::-;38570:74;;38492:158;;;:::o;38656:147::-;38751:45;38790:5;38751:45;:::i;:::-;38746:3;38739:58;38656:147;;:::o;38809:114::-;38876:6;38910:5;38904:12;38894:22;;38809:114;;;:::o;38929:184::-;39028:11;39062:6;39057:3;39050:19;39102:4;39097:3;39093:14;39078:29;;38929:184;;;;:::o;39119:132::-;39186:4;39209:3;39201:11;;39239:4;39234:3;39230:14;39222:22;;39119:132;;;:::o;39257:108::-;39334:24;39352:5;39334:24;:::i;:::-;39329:3;39322:37;39257:108;;:::o;39371:179::-;39440:10;39461:46;39503:3;39495:6;39461:46;:::i;:::-;39539:4;39534:3;39530:14;39516:28;;39371:179;;;;:::o;39556:113::-;39626:4;39658;39653:3;39649:14;39641:22;;39556:113;;;:::o;39705:732::-;39824:3;39853:54;39901:5;39853:54;:::i;:::-;39923:86;40002:6;39997:3;39923:86;:::i;:::-;39916:93;;40033:56;40083:5;40033:56;:::i;:::-;40112:7;40143:1;40128:284;40153:6;40150:1;40147:13;40128:284;;;40229:6;40223:13;40256:63;40315:3;40300:13;40256:63;:::i;:::-;40249:70;;40342:60;40395:6;40342:60;:::i;:::-;40332:70;;40188:224;40175:1;40172;40168:9;40163:14;;40128:284;;;40132:14;40428:3;40421:10;;39829:608;;;39705:732;;;;:::o;40443:831::-;40706:4;40744:3;40733:9;40729:19;40721:27;;40758:71;40826:1;40815:9;40811:17;40802:6;40758:71;:::i;:::-;40839:80;40915:2;40904:9;40900:18;40891:6;40839:80;:::i;:::-;40966:9;40960:4;40956:20;40951:2;40940:9;40936:18;40929:48;40994:108;41097:4;41088:6;40994:108;:::i;:::-;40986:116;;41112:72;41180:2;41169:9;41165:18;41156:6;41112:72;:::i;:::-;41194:73;41262:3;41251:9;41247:19;41238:6;41194:73;:::i;:::-;40443:831;;;;;;;;:::o

Swarm Source

ipfs://7f8b966f83fbcc3fe0d35995c20d47c5240e9d4648d1e8fcbad6259d84e57689

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.