ETH Price: $2,390.06 (+2.24%)

Token

babybad (BBAD)
 

Overview

Max Total Supply

327 BBAD

Holders

168

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
*屋顶上的猫.eth
Balance
1 BBAD
0xf8db01f59d0caa15067156ff7ed786eaf207753e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BabybadCollection

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-25
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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


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

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


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}
}

// File: contracts/3_Ballot.sol



pragma solidity ^0.8.0;







contract OwnableDelegateProxy {}

/**
 * Used to delegate ownership of a contract to another address, to save on unneeded transactions to approve contract use for users
 */
contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

contract BabybadCollection is ERC721, Ownable, ReentrancyGuard {
  using Strings for uint256;
  using SafeMath for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private _nextTokenId;
  address proxyRegistryAddress;

  string public baseURI;
  string public baseExtension = ".json";

  bool public paused = false;
  bool public whitelistPaused = false;

  uint256 public MAX_SUPPLY = 10000;

  uint256 public MAX_PER_MINT = 20;  

  uint256 public WHITELIST_MAX_PER_MINT = 1;  

  uint256 public PRICE = 0.04 ether; // ../

  uint256 public WHITELIST_PRICE = 0.03 ether; // 30000000000000000

  uint256 public WHITELIST_LIMIT = 500;

  mapping(address => bool) private _whitelist;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    address _proxyRegistryAddress
  ) ERC721(_name, _symbol) {
    proxyRegistryAddress = _proxyRegistryAddress;
    // nextTokenId is initialized to 1, since starting at 0 leads to higher gas cost for the first minter
    _nextTokenId.increment();
    setBaseURI(_initBaseURI);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, Strings.toString(_tokenId), baseExtension))
        : "";
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function mint(address _to, uint256 _mintAmount) public payable nonReentrant {
    if (whitelistPaused) {
      require(!paused, "Sale is not active");
    }
    require(_mintAmount > 0, "Mininum buy 1");

    uint256 supply = totalSupply();
    require(supply + _mintAmount <= MAX_SUPPLY, "Could not exceed the max supply");

    require(_mintAmount <= MAX_PER_MINT, "Exceeds max quantity in one transaction");
    if (msg.sender != owner()) {
      if (!whitelistPaused) 
      {
        require(_mintAmount <= WHITELIST_MAX_PER_MINT, "Out of limit");
        require(supply + _mintAmount <= WHITELIST_LIMIT, "Out of limit");
        require(msg.value >= WHITELIST_PRICE * _mintAmount, "Ether value sent is not correct");
        require(_whitelist[_to], "Address not in the whitelist");

        _whitelist[_to] = false;
      } 
      else 
      {
        require(msg.value >= PRICE * _mintAmount, "Ether value sent is not correct");
      }
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(_to, _nextTokenId.current());
      _nextTokenId.increment();
    }
  }

  function airdropMint(address[] calldata _addresses, uint[] calldata _mintAmounts) public payable nonReentrant onlyOwner {
    require(_addresses.length == _mintAmounts.length,  "Size not same");
    uint256 supply = totalSupply();

    for (uint256 i = 0; i < _addresses.length; i++) {

      require(_mintAmounts[i] > 0, "Mininum buy 1");
      require(supply + _mintAmounts[i] <= WHITELIST_LIMIT, "Out of limit");
      require(supply + _mintAmounts[i] <= MAX_SUPPLY, "Could not exceed the max supply");

      for (uint256 j = 0; j < _mintAmounts[i]; j++) {
        _safeMint(_addresses[i], _nextTokenId.current());
        _nextTokenId.increment();
      }
    }
  }

  function isOnWhitelist(address _addr) external view returns (bool) {
    return _whitelist[_addr];
  }  

  function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {
    for (uint256 i = 0; i < _tokenIds.length; i++) {
      transferFrom(_from, _to, _tokenIds[i]);
    }
  }

  function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public {
    for (uint256 i = 0; i < _tokenIds.length; i++) {
      safeTransferFrom(_from, _to, _tokenIds[i], data_);
    }
  }

  function addToWhitelist(address[] calldata _addresses) external onlyOwner {
    for (uint256 i = 0; i < _addresses.length; i++) {
      require(_addresses[i] != address(0), "Cannot add the null address");
      _whitelist[_addresses[i]] = true;
    }
  }

  function removeFromWhitelist(address[] calldata _addresses) external onlyOwner {
    for (uint256 i = 0; i < _addresses.length; i++) {
      require(_addresses[i] != address(0), "Cannot add the null address");
      _whitelist[_addresses[i]] = false;
    }
  }

  function setCost(uint256 _newCost) public onlyOwner {
    require(_newCost > 0, "Minimum 0");
    PRICE = _newCost;
  }

  function setWhitelistCost(uint256 _newCost) public onlyOwner {
    require(_newCost > 0, "Minimum 0");
    WHITELIST_PRICE = _newCost;
  }

  function setMaxPerMintAmount(uint256 _newAmount) public onlyOwner {
    MAX_PER_MINT = _newAmount;
  }

  function setWhitelistMaxPerMintAmount(uint256 _newAmount) public onlyOwner {
    WHITELIST_MAX_PER_MINT = _newAmount;
  }

  function setMaxSupply(uint256 _newAmount) public onlyOwner {
    MAX_SUPPLY = _newAmount;
  }

  function setWhitelistLimit(uint256 _newAmount) public onlyOwner {
    WHITELIST_LIMIT = _newAmount;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

  function presalePause(bool _state) public onlyOwner {
    whitelistPaused = _state;
  }

  function totalSupply() public view returns (uint256) {
    return _nextTokenId.current() - 1;
  }
    
  function isApprovedForAll(address owner, address operator) override public view returns (bool) {
    ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
    if (address(proxyRegistry.proxies(owner)) == operator) {
      return true;
    }

    return super.isApprovedForAll(owner, operator);
  }

  function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner {
    proxyRegistryAddress = _proxyRegistryAddress;
  }
 
  function withdraw() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"airdropMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isOnWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"presalePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMaxPerMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWhitelistCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setWhitelistLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setWhitelistMaxPerMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005192919062000371565b506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550612710600d556014600e556001600f55668e1bc9bf040000601055666a94d74f4300006011556101f4601255348015620000c157600080fd5b5060405162005b5e38038062005b5e8339818101604052810190620000e79190620004b6565b838381600090805190602001906200010192919062000371565b5080600190805190602001906200011a92919062000371565b5050506200013d62000131620001b860201b60201c565b620001c060201b60201c565b600160078190555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200019d60086200028660201b620028461760201c565b620001ae826200029c60201b60201c565b50505050620007da565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b620002ac620001b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d26200034760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032290620005ac565b60405180910390fd5b80600a90805190602001906200034392919062000371565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037f90620006a8565b90600052602060002090601f016020900481019282620003a35760008555620003ef565b82601f10620003be57805160ff1916838001178555620003ef565b82800160010185558215620003ef579182015b82811115620003ee578251825591602001919060010190620003d1565b5b509050620003fe919062000402565b5090565b5b808211156200041d57600081600090555060010162000403565b5090565b6000620004386200043284620005f7565b620005ce565b90508281526020810184848401111562000457576200045662000777565b5b6200046484828562000672565b509392505050565b6000815190506200047d81620007c0565b92915050565b600082601f8301126200049b576200049a62000772565b5b8151620004ad84826020860162000421565b91505092915050565b60008060008060808587031215620004d357620004d262000781565b5b600085015167ffffffffffffffff811115620004f457620004f36200077c565b5b620005028782880162000483565b945050602085015167ffffffffffffffff8111156200052657620005256200077c565b5b620005348782880162000483565b935050604085015167ffffffffffffffff8111156200055857620005576200077c565b5b620005668782880162000483565b925050606062000579878288016200046c565b91505092959194509250565b6000620005946020836200062d565b9150620005a18262000797565b602082019050919050565b60006020820190508181036000830152620005c78162000585565b9050919050565b6000620005da620005ed565b9050620005e88282620006de565b919050565b6000604051905090565b600067ffffffffffffffff82111562000615576200061462000743565b5b620006208262000786565b9050602081019050919050565b600082825260208201905092915050565b60006200064b8262000652565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200069257808201518184015260208101905062000675565b83811115620006a2576000848401525b50505050565b60006002820490506001821680620006c157607f821691505b60208210811415620006d857620006d762000714565b5b50919050565b620006e98262000786565b810181811067ffffffffffffffff821117156200070b576200070a62000743565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620007cb816200063e565b8114620007d757600080fd5b50565b61537480620007ea6000396000f3fe60806040526004361061027d5760003560e01c80636352211e1161014f578063b6e61627116100c1578063d49479eb1161007a578063d49479eb14610933578063da3ef23f1461095c578063e985e9c514610985578063f2fde38b146109c2578063f3993d11146109eb578063fb8b0c0414610a145761027d565b8063b6e6162714610827578063b88d4fde14610850578063c668286214610879578063c87b56dd146108a4578063d2521ae8146108e1578063d26ea6c01461090a5761027d565b80637f649783116101135780637f649783146107295780638d859f3e146107525780638da5cb5b1461077d57806395d89b41146107a8578063a08c61d3146107d3578063a22cb465146107fe5761027d565b80636352211e146106445780636c0360eb146106815780636f8b44b0146106ac57806370a08231146106d5578063715018a6146107125761027d565b8063279a669e116101f357806344a0d68a116101ac57806344a0d68a1461054a578063548db1741461057357806355f804b31461059c5780635a4fee30146105c55780635c975abb146105ee57806361e61a25146106195761027d565b8063279a669e1461047757806332cb6b0c146104935780633a3ab672146104be5780633ccfd60b146104fb57806340c10f191461050557806342842e0e146105215761027d565b806309d42b301161024557806309d42b301461037957806310b06732146103a457806315eec013146103cf57806317e7f295146103f857806318160ddd1461042357806323b872dd1461044e5761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613d5e565b610a3d565b6040516102b691906143f3565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613d31565b610b1f565b005b3480156102f457600080fd5b506102fd610bb8565b60405161030a919061440e565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613e2e565b610c4a565b604051610347919061438c565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190613c23565b610ccf565b005b34801561038557600080fd5b5061038e610de7565b60405161039b9190614790565b60405180910390f35b3480156103b057600080fd5b506103b9610ded565b6040516103c69190614790565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190613e2e565b610df3565b005b34801561040457600080fd5b5061040d610e79565b60405161041a9190614790565b60405180910390f35b34801561042f57600080fd5b50610438610e7f565b6040516104459190614790565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613b0d565b610e9c565b005b610491600480360381019061048c9190613cb0565b610efc565b005b34801561049f57600080fd5b506104a86111f5565b6040516104b59190614790565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613992565b6111fb565b6040516104f291906143f3565b60405180910390f35b610503611251565b005b61051f600480360381019061051a9190613c23565b61130d565b005b34801561052d57600080fd5b5061054860048036038101906105439190613b0d565b61175f565b005b34801561055657600080fd5b50610571600480360381019061056c9190613e2e565b61177f565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613c63565b611848565b005b3480156105a857600080fd5b506105c360048036038101906105be9190613de5565b611a00565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613a6e565b611a96565b005b3480156105fa57600080fd5b50610603611ae2565b60405161061091906143f3565b60405180910390f35b34801561062557600080fd5b5061062e611af5565b60405161063b91906143f3565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190613e2e565b611b08565b604051610678919061438c565b60405180910390f35b34801561068d57600080fd5b50610696611bba565b6040516106a3919061440e565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190613e2e565b611c48565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613992565b611cce565b6040516107099190614790565b60405180910390f35b34801561071e57600080fd5b50610727611d86565b005b34801561073557600080fd5b50610750600480360381019061074b9190613c63565b611e0e565b005b34801561075e57600080fd5b50610767611fc6565b6040516107749190614790565b60405180910390f35b34801561078957600080fd5b50610792611fcc565b60405161079f919061438c565b60405180910390f35b3480156107b457600080fd5b506107bd611ff6565b6040516107ca919061440e565b60405180910390f35b3480156107df57600080fd5b506107e8612088565b6040516107f59190614790565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613be3565b61208e565b005b34801561083357600080fd5b5061084e60048036038101906108499190613e2e565b6120a4565b005b34801561085c57600080fd5b5061087760048036038101906108729190613b60565b61212a565b005b34801561088557600080fd5b5061088e61218c565b60405161089b919061440e565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613e2e565b61221a565b6040516108d8919061440e565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613e2e565b6122c4565b005b34801561091657600080fd5b50610931600480360381019061092c9190613992565b61234a565b005b34801561093f57600080fd5b5061095a60048036038101906109559190613e2e565b61240a565b005b34801561096857600080fd5b50610983600480360381019061097e9190613de5565b6124d3565b005b34801561099157600080fd5b506109ac60048036038101906109a791906139bf565b612569565b6040516109b991906143f3565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613992565b61266b565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906139ff565b612763565b005b348015610a2057600080fd5b50610a3b6004803603810190610a369190613d31565b6127ad565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b185750610b178261285c565b5b9050919050565b610b276128c6565b73ffffffffffffffffffffffffffffffffffffffff16610b45611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290614690565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060008054610bc790614a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390614a93565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c55826128ce565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614670565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611b08565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906146f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a6128c6565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d936128c6565b612569565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf906145b0565b60405180910390fd5b610de2838361293a565b505050565b600e5481565b600f5481565b610dfb6128c6565b73ffffffffffffffffffffffffffffffffffffffff16610e19611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690614690565b60405180910390fd5b80600f8190555050565b60115481565b60006001610e8d60086129f3565b610e979190614997565b905090565b610ead610ea76128c6565b82612a01565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390614730565b60405180910390fd5b610ef7838383612adf565b505050565b60026007541415610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990614750565b60405180910390fd5b6002600781905550610f526128c6565b73ffffffffffffffffffffffffffffffffffffffff16610f70611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90614690565b60405180910390fd5b81819050848490501461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614550565b60405180910390fd5b6000611018610e7f565b905060005b858590508110156111e557600084848381811061103d5761103c614bfd565b5b9050602002013511611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90614450565b60405180910390fd5b60125484848381811061109a57611099614bfd565b5b90506020020135836110ac91906148b6565b11156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614770565b60405180910390fd5b600d5484848381811061110357611102614bfd565b5b905060200201358361111591906148b6565b1115611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614610565b60405180910390fd5b60005b84848381811061116c5761116b614bfd565b5b905060200201358110156111d1576111b48787848181106111905761118f614bfd565b5b90506020020160208101906111a59190613992565b6111af60086129f3565b612d3b565b6111be6008612846565b80806111c990614af6565b915050611159565b5080806111dd90614af6565b91505061101d565b5050600160078190555050505050565b600d5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112596128c6565b73ffffffffffffffffffffffffffffffffffffffff16611277611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490614690565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061130b57600080fd5b565b60026007541415611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90614750565b60405180910390fd5b6002600781905550600c60019054906101000a900460ff16156113c157600c60009054906101000a900460ff16156113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614510565b60405180910390fd5b5b60008111611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614450565b60405180910390fd5b600061140e610e7f565b9050600d54828261141f91906148b6565b1115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614610565b60405180910390fd5b600e548211156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906144b0565b60405180910390fd5b6114ad611fcc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171357600c60019054906101000a900460ff166116c157600f54821115611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614770565b60405180910390fd5b601254828261154791906148b6565b1115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614770565b60405180910390fd5b81601154611596919061493d565b3410156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614530565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614630565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611712565b816010546116cf919061493d565b341015611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890614530565b60405180910390fd5b5b5b6000600190505b828111611751576117348461172f60086129f3565b612d3b565b61173e6008612846565b808061174990614af6565b91505061171a565b505060016007819055505050565b61177a8383836040518060200160405280600081525061212a565b505050565b6117876128c6565b73ffffffffffffffffffffffffffffffffffffffff166117a5611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290614690565b60405180910390fd5b6000811161183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614710565b60405180910390fd5b8060108190555050565b6118506128c6565b73ffffffffffffffffffffffffffffffffffffffff1661186e611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90614690565b60405180910390fd5b60005b828290508110156119fb57600073ffffffffffffffffffffffffffffffffffffffff168383838181106118fd576118fc614bfd565b5b90506020020160208101906119129190613992565b73ffffffffffffffffffffffffffffffffffffffff161415611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090614590565b60405180910390fd5b60006013600085858581811061198257611981614bfd565b5b90506020020160208101906119979190613992565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119f390614af6565b9150506118c7565b505050565b611a086128c6565b73ffffffffffffffffffffffffffffffffffffffff16611a26611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390614690565b60405180910390fd5b80600a9080519060200190611a92929190613647565b5050565b60005b8251811015611adb57611ac88585858481518110611aba57611ab9614bfd565b5b60200260200101518561212a565b8080611ad390614af6565b915050611a99565b5050505050565b600c60009054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906145f0565b60405180910390fd5b80915050919050565b600a8054611bc790614a93565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf390614a93565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b505050505081565b611c506128c6565b73ffffffffffffffffffffffffffffffffffffffff16611c6e611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90614690565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906145d0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d8e6128c6565b73ffffffffffffffffffffffffffffffffffffffff16611dac611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614690565b60405180910390fd5b611e0c6000612d59565b565b611e166128c6565b73ffffffffffffffffffffffffffffffffffffffff16611e34611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190614690565b60405180910390fd5b60005b82829050811015611fc157600073ffffffffffffffffffffffffffffffffffffffff16838383818110611ec357611ec2614bfd565b5b9050602002016020810190611ed89190613992565b73ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690614590565b60405180910390fd5b600160136000858585818110611f4857611f47614bfd565b5b9050602002016020810190611f5d9190613992565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611fb990614af6565b915050611e8d565b505050565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461200590614a93565b80601f016020809104026020016040519081016040528092919081815260200182805461203190614a93565b801561207e5780601f106120535761010080835404028352916020019161207e565b820191906000526020600020905b81548152906001019060200180831161206157829003601f168201915b5050505050905090565b60125481565b6120a06120996128c6565b8383612e1f565b5050565b6120ac6128c6565b73ffffffffffffffffffffffffffffffffffffffff166120ca611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614690565b60405180910390fd5b80600e8190555050565b61213b6121356128c6565b83612a01565b61217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614730565b60405180910390fd5b61218684848484612f8c565b50505050565b600b805461219990614a93565b80601f01602080910402602001604051908101604052809291908181526020018280546121c590614a93565b80156122125780601f106121e757610100808354040283529160200191612212565b820191906000526020600020905b8154815290600101906020018083116121f557829003601f168201915b505050505081565b6060612225826128ce565b612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b906146d0565b60405180910390fd5b600061226e612fe8565b9050600081511161228e57604051806020016040528060008152506122bc565b806122988461307a565b600b6040516020016122ac9392919061435b565b6040516020818303038152906040525b915050919050565b6122cc6128c6565b73ffffffffffffffffffffffffffffffffffffffff166122ea611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614690565b60405180910390fd5b8060128190555050565b6123526128c6565b73ffffffffffffffffffffffffffffffffffffffff16612370611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614690565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124126128c6565b73ffffffffffffffffffffffffffffffffffffffff16612430611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614690565b60405180910390fd5b600081116124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090614710565b60405180910390fd5b8060118190555050565b6124db6128c6565b73ffffffffffffffffffffffffffffffffffffffff166124f9611fcc565b73ffffffffffffffffffffffffffffffffffffffff161461254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690614690565b60405180910390fd5b80600b9080519060200190612565929190613647565b5050565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016125e1919061438c565b60206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126319190613db8565b73ffffffffffffffffffffffffffffffffffffffff161415612657576001915050612665565b61266184846131db565b9150505b92915050565b6126736128c6565b73ffffffffffffffffffffffffffffffffffffffff16612691611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146126e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126de90614690565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614470565b60405180910390fd5b61276081612d59565b50565b60005b81518110156127a757612794848484848151811061278757612786614bfd565b5b6020026020010151610e9c565b808061279f90614af6565b915050612766565b50505050565b6127b56128c6565b73ffffffffffffffffffffffffffffffffffffffff166127d3611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614690565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ad83611b08565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612a0c826128ce565b612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4290614570565b60405180910390fd5b6000612a5683611b08565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ac557508373ffffffffffffffffffffffffffffffffffffffff16612aad84610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ad65750612ad58185612569565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aff82611b08565b73ffffffffffffffffffffffffffffffffffffffff1614612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c906146b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906144d0565b60405180910390fd5b612bd083838361326f565b612bdb60008261293a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c2b9190614997565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8291906148b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612d55828260405180602001604052806000815250613274565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e85906144f0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f7f91906143f3565b60405180910390a3505050565b612f97848484612adf565b612fa3848484846132cf565b612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd990614430565b60405180910390fd5b50505050565b6060600a8054612ff790614a93565b80601f016020809104026020016040519081016040528092919081815260200182805461302390614a93565b80156130705780601f1061304557610100808354040283529160200191613070565b820191906000526020600020905b81548152906001019060200180831161305357829003601f168201915b5050505050905090565b606060008214156130c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d6565b600082905060005b600082146130f45780806130dd90614af6565b915050600a826130ed919061490c565b91506130ca565b60008167ffffffffffffffff8111156131105761310f614c2c565b5b6040519080825280601f01601f1916602001820160405280156131425781602001600182028036833780820191505090505b5090505b600085146131cf5760018261315b9190614997565b9150600a8561316a9190614b3f565b603061317691906148b6565b60f81b81838151811061318c5761318b614bfd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c8919061490c565b9450613146565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b61327e8383613466565b61328b60008484846132cf565b6132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614430565b60405180910390fd5b505050565b60006132f08473ffffffffffffffffffffffffffffffffffffffff16613634565b15613459578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133196128c6565b8786866040518563ffffffff1660e01b815260040161333b94939291906143a7565b602060405180830381600087803b15801561335557600080fd5b505af192505050801561338657506040513d601f19601f820116820180604052508101906133839190613d8b565b60015b613409573d80600081146133b6576040519150601f19603f3d011682016040523d82523d6000602084013e6133bb565b606091505b50600081511415613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f890614430565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061345e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614650565b60405180910390fd5b6134df816128ce565b1561351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351690614490565b60405180910390fd5b61352b6000838361326f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357b91906148b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461365390614a93565b90600052602060002090601f01602090048101928261367557600085556136bc565b82601f1061368e57805160ff19168380011785556136bc565b828001600101855582156136bc579182015b828111156136bb5782518255916020019190600101906136a0565b5b5090506136c991906136cd565b5090565b5b808211156136e65760008160009055506001016136ce565b5090565b60006136fd6136f8846147d0565b6147ab565b905080838252602082019050828560208602820111156137205761371f614c65565b5b60005b858110156137505781613736888261397d565b845260208401935060208301925050600181019050613723565b5050509392505050565b600061376d613768846147fc565b6147ab565b90508281526020810184848401111561378957613788614c6a565b5b613794848285614a51565b509392505050565b60006137af6137aa8461482d565b6147ab565b9050828152602081018484840111156137cb576137ca614c6a565b5b6137d6848285614a51565b509392505050565b6000813590506137ed816152cb565b92915050565b60008083601f84011261380957613808614c60565b5b8235905067ffffffffffffffff81111561382657613825614c5b565b5b60208301915083602082028301111561384257613841614c65565b5b9250929050565b60008083601f84011261385f5761385e614c60565b5b8235905067ffffffffffffffff81111561387c5761387b614c5b565b5b60208301915083602082028301111561389857613897614c65565b5b9250929050565b600082601f8301126138b4576138b3614c60565b5b81356138c48482602086016136ea565b91505092915050565b6000813590506138dc816152e2565b92915050565b6000813590506138f1816152f9565b92915050565b600081519050613906816152f9565b92915050565b600082601f83011261392157613920614c60565b5b813561393184826020860161375a565b91505092915050565b60008151905061394981615310565b92915050565b600082601f83011261396457613963614c60565b5b813561397484826020860161379c565b91505092915050565b60008135905061398c81615327565b92915050565b6000602082840312156139a8576139a7614c74565b5b60006139b6848285016137de565b91505092915050565b600080604083850312156139d6576139d5614c74565b5b60006139e4858286016137de565b92505060206139f5858286016137de565b9150509250929050565b600080600060608486031215613a1857613a17614c74565b5b6000613a26868287016137de565b9350506020613a37868287016137de565b925050604084013567ffffffffffffffff811115613a5857613a57614c6f565b5b613a648682870161389f565b9150509250925092565b60008060008060808587031215613a8857613a87614c74565b5b6000613a96878288016137de565b9450506020613aa7878288016137de565b935050604085013567ffffffffffffffff811115613ac857613ac7614c6f565b5b613ad48782880161389f565b925050606085013567ffffffffffffffff811115613af557613af4614c6f565b5b613b018782880161390c565b91505092959194509250565b600080600060608486031215613b2657613b25614c74565b5b6000613b34868287016137de565b9350506020613b45868287016137de565b9250506040613b568682870161397d565b9150509250925092565b60008060008060808587031215613b7a57613b79614c74565b5b6000613b88878288016137de565b9450506020613b99878288016137de565b9350506040613baa8782880161397d565b925050606085013567ffffffffffffffff811115613bcb57613bca614c6f565b5b613bd78782880161390c565b91505092959194509250565b60008060408385031215613bfa57613bf9614c74565b5b6000613c08858286016137de565b9250506020613c19858286016138cd565b9150509250929050565b60008060408385031215613c3a57613c39614c74565b5b6000613c48858286016137de565b9250506020613c598582860161397d565b9150509250929050565b60008060208385031215613c7a57613c79614c74565b5b600083013567ffffffffffffffff811115613c9857613c97614c6f565b5b613ca4858286016137f3565b92509250509250929050565b60008060008060408587031215613cca57613cc9614c74565b5b600085013567ffffffffffffffff811115613ce857613ce7614c6f565b5b613cf4878288016137f3565b9450945050602085013567ffffffffffffffff811115613d1757613d16614c6f565b5b613d2387828801613849565b925092505092959194509250565b600060208284031215613d4757613d46614c74565b5b6000613d55848285016138cd565b91505092915050565b600060208284031215613d7457613d73614c74565b5b6000613d82848285016138e2565b91505092915050565b600060208284031215613da157613da0614c74565b5b6000613daf848285016138f7565b91505092915050565b600060208284031215613dce57613dcd614c74565b5b6000613ddc8482850161393a565b91505092915050565b600060208284031215613dfb57613dfa614c74565b5b600082013567ffffffffffffffff811115613e1957613e18614c6f565b5b613e258482850161394f565b91505092915050565b600060208284031215613e4457613e43614c74565b5b6000613e528482850161397d565b91505092915050565b613e64816149cb565b82525050565b613e73816149dd565b82525050565b6000613e8482614873565b613e8e8185614889565b9350613e9e818560208601614a60565b613ea781614c79565b840191505092915050565b6000613ebd8261487e565b613ec7818561489a565b9350613ed7818560208601614a60565b613ee081614c79565b840191505092915050565b6000613ef68261487e565b613f0081856148ab565b9350613f10818560208601614a60565b80840191505092915050565b60008154613f2981614a93565b613f3381866148ab565b94506001821660008114613f4e5760018114613f5f57613f92565b60ff19831686528186019350613f92565b613f688561485e565b60005b83811015613f8a57815481890152600182019150602081019050613f6b565b838801955050505b50505092915050565b6000613fa860328361489a565b9150613fb382614c8a565b604082019050919050565b6000613fcb600d8361489a565b9150613fd682614cd9565b602082019050919050565b6000613fee60268361489a565b9150613ff982614d02565b604082019050919050565b6000614011601c8361489a565b915061401c82614d51565b602082019050919050565b600061403460278361489a565b915061403f82614d7a565b604082019050919050565b600061405760248361489a565b915061406282614dc9565b604082019050919050565b600061407a60198361489a565b915061408582614e18565b602082019050919050565b600061409d60128361489a565b91506140a882614e41565b602082019050919050565b60006140c0601f8361489a565b91506140cb82614e6a565b602082019050919050565b60006140e3600d8361489a565b91506140ee82614e93565b602082019050919050565b6000614106602c8361489a565b915061411182614ebc565b604082019050919050565b6000614129601b8361489a565b915061413482614f0b565b602082019050919050565b600061414c60388361489a565b915061415782614f34565b604082019050919050565b600061416f602a8361489a565b915061417a82614f83565b604082019050919050565b600061419260298361489a565b915061419d82614fd2565b604082019050919050565b60006141b5601f8361489a565b91506141c082615021565b602082019050919050565b60006141d8601c8361489a565b91506141e38261504a565b602082019050919050565b60006141fb60208361489a565b915061420682615073565b602082019050919050565b600061421e602c8361489a565b91506142298261509c565b604082019050919050565b600061424160208361489a565b915061424c826150eb565b602082019050919050565b600061426460298361489a565b915061426f82615114565b604082019050919050565b6000614287602f8361489a565b915061429282615163565b604082019050919050565b60006142aa60218361489a565b91506142b5826151b2565b604082019050919050565b60006142cd60098361489a565b91506142d882615201565b602082019050919050565b60006142f060318361489a565b91506142fb8261522a565b604082019050919050565b6000614313601f8361489a565b915061431e82615279565b602082019050919050565b6000614336600c8361489a565b9150614341826152a2565b602082019050919050565b61435581614a47565b82525050565b60006143678286613eeb565b91506143738285613eeb565b915061437f8284613f1c565b9150819050949350505050565b60006020820190506143a16000830184613e5b565b92915050565b60006080820190506143bc6000830187613e5b565b6143c96020830186613e5b565b6143d6604083018561434c565b81810360608301526143e88184613e79565b905095945050505050565b60006020820190506144086000830184613e6a565b92915050565b600060208201905081810360008301526144288184613eb2565b905092915050565b6000602082019050818103600083015261444981613f9b565b9050919050565b6000602082019050818103600083015261446981613fbe565b9050919050565b6000602082019050818103600083015261448981613fe1565b9050919050565b600060208201905081810360008301526144a981614004565b9050919050565b600060208201905081810360008301526144c981614027565b9050919050565b600060208201905081810360008301526144e98161404a565b9050919050565b600060208201905081810360008301526145098161406d565b9050919050565b6000602082019050818103600083015261452981614090565b9050919050565b60006020820190508181036000830152614549816140b3565b9050919050565b60006020820190508181036000830152614569816140d6565b9050919050565b60006020820190508181036000830152614589816140f9565b9050919050565b600060208201905081810360008301526145a98161411c565b9050919050565b600060208201905081810360008301526145c98161413f565b9050919050565b600060208201905081810360008301526145e981614162565b9050919050565b6000602082019050818103600083015261460981614185565b9050919050565b60006020820190508181036000830152614629816141a8565b9050919050565b60006020820190508181036000830152614649816141cb565b9050919050565b60006020820190508181036000830152614669816141ee565b9050919050565b6000602082019050818103600083015261468981614211565b9050919050565b600060208201905081810360008301526146a981614234565b9050919050565b600060208201905081810360008301526146c981614257565b9050919050565b600060208201905081810360008301526146e98161427a565b9050919050565b600060208201905081810360008301526147098161429d565b9050919050565b60006020820190508181036000830152614729816142c0565b9050919050565b60006020820190508181036000830152614749816142e3565b9050919050565b6000602082019050818103600083015261476981614306565b9050919050565b6000602082019050818103600083015261478981614329565b9050919050565b60006020820190506147a5600083018461434c565b92915050565b60006147b56147c6565b90506147c18282614ac5565b919050565b6000604051905090565b600067ffffffffffffffff8211156147eb576147ea614c2c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561481757614816614c2c565b5b61482082614c79565b9050602081019050919050565b600067ffffffffffffffff82111561484857614847614c2c565b5b61485182614c79565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148c182614a47565b91506148cc83614a47565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490157614900614b70565b5b828201905092915050565b600061491782614a47565b915061492283614a47565b92508261493257614931614b9f565b5b828204905092915050565b600061494882614a47565b915061495383614a47565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561498c5761498b614b70565b5b828202905092915050565b60006149a282614a47565b91506149ad83614a47565b9250828210156149c0576149bf614b70565b5b828203905092915050565b60006149d682614a27565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614a20826149cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a7e578082015181840152602081019050614a63565b83811115614a8d576000848401525b50505050565b60006002820490506001821680614aab57607f821691505b60208210811415614abf57614abe614bce565b5b50919050565b614ace82614c79565b810181811067ffffffffffffffff82111715614aed57614aec614c2c565b5b80604052505050565b6000614b0182614a47565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b3457614b33614b70565b5b600182019050919050565b6000614b4a82614a47565b9150614b5583614a47565b925082614b6557614b64614b9f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e696e756d20627579203100000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178207175616e7469747920696e206f6e65207472616e60008201527f73616374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f53697a65206e6f742073616d6500000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e6e6f742061646420746865206e756c6c20616464726573730000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f436f756c64206e6f742065786365656420746865206d617820737570706c7900600082015250565b7f41646472657373206e6f7420696e207468652077686974656c69737400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e696d756d20300000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4f7574206f66206c696d69740000000000000000000000000000000000000000600082015250565b6152d4816149cb565b81146152df57600080fd5b50565b6152eb816149dd565b81146152f657600080fd5b50565b615302816149e9565b811461530d57600080fd5b50565b61531981614a15565b811461532457600080fd5b50565b61533081614a47565b811461533b57600080fd5b5056fea2646970667358221220d04119c0b81443dde5287d06043148cc11d90eceec5b74447bf2fd039251235f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000076261627962616400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000442424144000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54715a794a66476436664d62714c754b524477566f32427939454467736d4b567a37626b4a595150477750732f00000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80636352211e1161014f578063b6e61627116100c1578063d49479eb1161007a578063d49479eb14610933578063da3ef23f1461095c578063e985e9c514610985578063f2fde38b146109c2578063f3993d11146109eb578063fb8b0c0414610a145761027d565b8063b6e6162714610827578063b88d4fde14610850578063c668286214610879578063c87b56dd146108a4578063d2521ae8146108e1578063d26ea6c01461090a5761027d565b80637f649783116101135780637f649783146107295780638d859f3e146107525780638da5cb5b1461077d57806395d89b41146107a8578063a08c61d3146107d3578063a22cb465146107fe5761027d565b80636352211e146106445780636c0360eb146106815780636f8b44b0146106ac57806370a08231146106d5578063715018a6146107125761027d565b8063279a669e116101f357806344a0d68a116101ac57806344a0d68a1461054a578063548db1741461057357806355f804b31461059c5780635a4fee30146105c55780635c975abb146105ee57806361e61a25146106195761027d565b8063279a669e1461047757806332cb6b0c146104935780633a3ab672146104be5780633ccfd60b146104fb57806340c10f191461050557806342842e0e146105215761027d565b806309d42b301161024557806309d42b301461037957806310b06732146103a457806315eec013146103cf57806317e7f295146103f857806318160ddd1461042357806323b872dd1461044e5761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613d5e565b610a3d565b6040516102b691906143f3565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613d31565b610b1f565b005b3480156102f457600080fd5b506102fd610bb8565b60405161030a919061440e565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613e2e565b610c4a565b604051610347919061438c565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190613c23565b610ccf565b005b34801561038557600080fd5b5061038e610de7565b60405161039b9190614790565b60405180910390f35b3480156103b057600080fd5b506103b9610ded565b6040516103c69190614790565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190613e2e565b610df3565b005b34801561040457600080fd5b5061040d610e79565b60405161041a9190614790565b60405180910390f35b34801561042f57600080fd5b50610438610e7f565b6040516104459190614790565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613b0d565b610e9c565b005b610491600480360381019061048c9190613cb0565b610efc565b005b34801561049f57600080fd5b506104a86111f5565b6040516104b59190614790565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613992565b6111fb565b6040516104f291906143f3565b60405180910390f35b610503611251565b005b61051f600480360381019061051a9190613c23565b61130d565b005b34801561052d57600080fd5b5061054860048036038101906105439190613b0d565b61175f565b005b34801561055657600080fd5b50610571600480360381019061056c9190613e2e565b61177f565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613c63565b611848565b005b3480156105a857600080fd5b506105c360048036038101906105be9190613de5565b611a00565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613a6e565b611a96565b005b3480156105fa57600080fd5b50610603611ae2565b60405161061091906143f3565b60405180910390f35b34801561062557600080fd5b5061062e611af5565b60405161063b91906143f3565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190613e2e565b611b08565b604051610678919061438c565b60405180910390f35b34801561068d57600080fd5b50610696611bba565b6040516106a3919061440e565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190613e2e565b611c48565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613992565b611cce565b6040516107099190614790565b60405180910390f35b34801561071e57600080fd5b50610727611d86565b005b34801561073557600080fd5b50610750600480360381019061074b9190613c63565b611e0e565b005b34801561075e57600080fd5b50610767611fc6565b6040516107749190614790565b60405180910390f35b34801561078957600080fd5b50610792611fcc565b60405161079f919061438c565b60405180910390f35b3480156107b457600080fd5b506107bd611ff6565b6040516107ca919061440e565b60405180910390f35b3480156107df57600080fd5b506107e8612088565b6040516107f59190614790565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613be3565b61208e565b005b34801561083357600080fd5b5061084e60048036038101906108499190613e2e565b6120a4565b005b34801561085c57600080fd5b5061087760048036038101906108729190613b60565b61212a565b005b34801561088557600080fd5b5061088e61218c565b60405161089b919061440e565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613e2e565b61221a565b6040516108d8919061440e565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613e2e565b6122c4565b005b34801561091657600080fd5b50610931600480360381019061092c9190613992565b61234a565b005b34801561093f57600080fd5b5061095a60048036038101906109559190613e2e565b61240a565b005b34801561096857600080fd5b50610983600480360381019061097e9190613de5565b6124d3565b005b34801561099157600080fd5b506109ac60048036038101906109a791906139bf565b612569565b6040516109b991906143f3565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613992565b61266b565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906139ff565b612763565b005b348015610a2057600080fd5b50610a3b6004803603810190610a369190613d31565b6127ad565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b185750610b178261285c565b5b9050919050565b610b276128c6565b73ffffffffffffffffffffffffffffffffffffffff16610b45611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290614690565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b606060008054610bc790614a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390614a93565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c55826128ce565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614670565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611b08565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906146f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a6128c6565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d936128c6565b612569565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf906145b0565b60405180910390fd5b610de2838361293a565b505050565b600e5481565b600f5481565b610dfb6128c6565b73ffffffffffffffffffffffffffffffffffffffff16610e19611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690614690565b60405180910390fd5b80600f8190555050565b60115481565b60006001610e8d60086129f3565b610e979190614997565b905090565b610ead610ea76128c6565b82612a01565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390614730565b60405180910390fd5b610ef7838383612adf565b505050565b60026007541415610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990614750565b60405180910390fd5b6002600781905550610f526128c6565b73ffffffffffffffffffffffffffffffffffffffff16610f70611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90614690565b60405180910390fd5b81819050848490501461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614550565b60405180910390fd5b6000611018610e7f565b905060005b858590508110156111e557600084848381811061103d5761103c614bfd565b5b9050602002013511611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90614450565b60405180910390fd5b60125484848381811061109a57611099614bfd565b5b90506020020135836110ac91906148b6565b11156110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614770565b60405180910390fd5b600d5484848381811061110357611102614bfd565b5b905060200201358361111591906148b6565b1115611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614610565b60405180910390fd5b60005b84848381811061116c5761116b614bfd565b5b905060200201358110156111d1576111b48787848181106111905761118f614bfd565b5b90506020020160208101906111a59190613992565b6111af60086129f3565b612d3b565b6111be6008612846565b80806111c990614af6565b915050611159565b5080806111dd90614af6565b91505061101d565b5050600160078190555050505050565b600d5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112596128c6565b73ffffffffffffffffffffffffffffffffffffffff16611277611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490614690565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061130b57600080fd5b565b60026007541415611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90614750565b60405180910390fd5b6002600781905550600c60019054906101000a900460ff16156113c157600c60009054906101000a900460ff16156113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614510565b60405180910390fd5b5b60008111611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614450565b60405180910390fd5b600061140e610e7f565b9050600d54828261141f91906148b6565b1115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614610565b60405180910390fd5b600e548211156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906144b0565b60405180910390fd5b6114ad611fcc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171357600c60019054906101000a900460ff166116c157600f54821115611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614770565b60405180910390fd5b601254828261154791906148b6565b1115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614770565b60405180910390fd5b81601154611596919061493d565b3410156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614530565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614630565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611712565b816010546116cf919061493d565b341015611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890614530565b60405180910390fd5b5b5b6000600190505b828111611751576117348461172f60086129f3565b612d3b565b61173e6008612846565b808061174990614af6565b91505061171a565b505060016007819055505050565b61177a8383836040518060200160405280600081525061212a565b505050565b6117876128c6565b73ffffffffffffffffffffffffffffffffffffffff166117a5611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290614690565b60405180910390fd5b6000811161183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614710565b60405180910390fd5b8060108190555050565b6118506128c6565b73ffffffffffffffffffffffffffffffffffffffff1661186e611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90614690565b60405180910390fd5b60005b828290508110156119fb57600073ffffffffffffffffffffffffffffffffffffffff168383838181106118fd576118fc614bfd565b5b90506020020160208101906119129190613992565b73ffffffffffffffffffffffffffffffffffffffff161415611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090614590565b60405180910390fd5b60006013600085858581811061198257611981614bfd565b5b90506020020160208101906119979190613992565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119f390614af6565b9150506118c7565b505050565b611a086128c6565b73ffffffffffffffffffffffffffffffffffffffff16611a26611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390614690565b60405180910390fd5b80600a9080519060200190611a92929190613647565b5050565b60005b8251811015611adb57611ac88585858481518110611aba57611ab9614bfd565b5b60200260200101518561212a565b8080611ad390614af6565b915050611a99565b5050505050565b600c60009054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba8906145f0565b60405180910390fd5b80915050919050565b600a8054611bc790614a93565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf390614a93565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b505050505081565b611c506128c6565b73ffffffffffffffffffffffffffffffffffffffff16611c6e611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90614690565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906145d0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d8e6128c6565b73ffffffffffffffffffffffffffffffffffffffff16611dac611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614690565b60405180910390fd5b611e0c6000612d59565b565b611e166128c6565b73ffffffffffffffffffffffffffffffffffffffff16611e34611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190614690565b60405180910390fd5b60005b82829050811015611fc157600073ffffffffffffffffffffffffffffffffffffffff16838383818110611ec357611ec2614bfd565b5b9050602002016020810190611ed89190613992565b73ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690614590565b60405180910390fd5b600160136000858585818110611f4857611f47614bfd565b5b9050602002016020810190611f5d9190613992565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611fb990614af6565b915050611e8d565b505050565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461200590614a93565b80601f016020809104026020016040519081016040528092919081815260200182805461203190614a93565b801561207e5780601f106120535761010080835404028352916020019161207e565b820191906000526020600020905b81548152906001019060200180831161206157829003601f168201915b5050505050905090565b60125481565b6120a06120996128c6565b8383612e1f565b5050565b6120ac6128c6565b73ffffffffffffffffffffffffffffffffffffffff166120ca611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614690565b60405180910390fd5b80600e8190555050565b61213b6121356128c6565b83612a01565b61217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614730565b60405180910390fd5b61218684848484612f8c565b50505050565b600b805461219990614a93565b80601f01602080910402602001604051908101604052809291908181526020018280546121c590614a93565b80156122125780601f106121e757610100808354040283529160200191612212565b820191906000526020600020905b8154815290600101906020018083116121f557829003601f168201915b505050505081565b6060612225826128ce565b612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b906146d0565b60405180910390fd5b600061226e612fe8565b9050600081511161228e57604051806020016040528060008152506122bc565b806122988461307a565b600b6040516020016122ac9392919061435b565b6040516020818303038152906040525b915050919050565b6122cc6128c6565b73ffffffffffffffffffffffffffffffffffffffff166122ea611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614690565b60405180910390fd5b8060128190555050565b6123526128c6565b73ffffffffffffffffffffffffffffffffffffffff16612370611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614690565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124126128c6565b73ffffffffffffffffffffffffffffffffffffffff16612430611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614690565b60405180910390fd5b600081116124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090614710565b60405180910390fd5b8060118190555050565b6124db6128c6565b73ffffffffffffffffffffffffffffffffffffffff166124f9611fcc565b73ffffffffffffffffffffffffffffffffffffffff161461254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690614690565b60405180910390fd5b80600b9080519060200190612565929190613647565b5050565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016125e1919061438c565b60206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126319190613db8565b73ffffffffffffffffffffffffffffffffffffffff161415612657576001915050612665565b61266184846131db565b9150505b92915050565b6126736128c6565b73ffffffffffffffffffffffffffffffffffffffff16612691611fcc565b73ffffffffffffffffffffffffffffffffffffffff16146126e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126de90614690565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614470565b60405180910390fd5b61276081612d59565b50565b60005b81518110156127a757612794848484848151811061278757612786614bfd565b5b6020026020010151610e9c565b808061279f90614af6565b915050612766565b50505050565b6127b56128c6565b73ffffffffffffffffffffffffffffffffffffffff166127d3611fcc565b73ffffffffffffffffffffffffffffffffffffffff1614612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614690565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ad83611b08565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612a0c826128ce565b612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4290614570565b60405180910390fd5b6000612a5683611b08565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ac557508373ffffffffffffffffffffffffffffffffffffffff16612aad84610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ad65750612ad58185612569565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aff82611b08565b73ffffffffffffffffffffffffffffffffffffffff1614612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c906146b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906144d0565b60405180910390fd5b612bd083838361326f565b612bdb60008261293a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c2b9190614997565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8291906148b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612d55828260405180602001604052806000815250613274565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e85906144f0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f7f91906143f3565b60405180910390a3505050565b612f97848484612adf565b612fa3848484846132cf565b612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd990614430565b60405180910390fd5b50505050565b6060600a8054612ff790614a93565b80601f016020809104026020016040519081016040528092919081815260200182805461302390614a93565b80156130705780601f1061304557610100808354040283529160200191613070565b820191906000526020600020905b81548152906001019060200180831161305357829003601f168201915b5050505050905090565b606060008214156130c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d6565b600082905060005b600082146130f45780806130dd90614af6565b915050600a826130ed919061490c565b91506130ca565b60008167ffffffffffffffff8111156131105761310f614c2c565b5b6040519080825280601f01601f1916602001820160405280156131425781602001600182028036833780820191505090505b5090505b600085146131cf5760018261315b9190614997565b9150600a8561316a9190614b3f565b603061317691906148b6565b60f81b81838151811061318c5761318b614bfd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c8919061490c565b9450613146565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b61327e8383613466565b61328b60008484846132cf565b6132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614430565b60405180910390fd5b505050565b60006132f08473ffffffffffffffffffffffffffffffffffffffff16613634565b15613459578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133196128c6565b8786866040518563ffffffff1660e01b815260040161333b94939291906143a7565b602060405180830381600087803b15801561335557600080fd5b505af192505050801561338657506040513d601f19601f820116820180604052508101906133839190613d8b565b60015b613409573d80600081146133b6576040519150601f19603f3d011682016040523d82523d6000602084013e6133bb565b606091505b50600081511415613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f890614430565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061345e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614650565b60405180910390fd5b6134df816128ce565b1561351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351690614490565b60405180910390fd5b61352b6000838361326f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357b91906148b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461365390614a93565b90600052602060002090601f01602090048101928261367557600085556136bc565b82601f1061368e57805160ff19168380011785556136bc565b828001600101855582156136bc579182015b828111156136bb5782518255916020019190600101906136a0565b5b5090506136c991906136cd565b5090565b5b808211156136e65760008160009055506001016136ce565b5090565b60006136fd6136f8846147d0565b6147ab565b905080838252602082019050828560208602820111156137205761371f614c65565b5b60005b858110156137505781613736888261397d565b845260208401935060208301925050600181019050613723565b5050509392505050565b600061376d613768846147fc565b6147ab565b90508281526020810184848401111561378957613788614c6a565b5b613794848285614a51565b509392505050565b60006137af6137aa8461482d565b6147ab565b9050828152602081018484840111156137cb576137ca614c6a565b5b6137d6848285614a51565b509392505050565b6000813590506137ed816152cb565b92915050565b60008083601f84011261380957613808614c60565b5b8235905067ffffffffffffffff81111561382657613825614c5b565b5b60208301915083602082028301111561384257613841614c65565b5b9250929050565b60008083601f84011261385f5761385e614c60565b5b8235905067ffffffffffffffff81111561387c5761387b614c5b565b5b60208301915083602082028301111561389857613897614c65565b5b9250929050565b600082601f8301126138b4576138b3614c60565b5b81356138c48482602086016136ea565b91505092915050565b6000813590506138dc816152e2565b92915050565b6000813590506138f1816152f9565b92915050565b600081519050613906816152f9565b92915050565b600082601f83011261392157613920614c60565b5b813561393184826020860161375a565b91505092915050565b60008151905061394981615310565b92915050565b600082601f83011261396457613963614c60565b5b813561397484826020860161379c565b91505092915050565b60008135905061398c81615327565b92915050565b6000602082840312156139a8576139a7614c74565b5b60006139b6848285016137de565b91505092915050565b600080604083850312156139d6576139d5614c74565b5b60006139e4858286016137de565b92505060206139f5858286016137de565b9150509250929050565b600080600060608486031215613a1857613a17614c74565b5b6000613a26868287016137de565b9350506020613a37868287016137de565b925050604084013567ffffffffffffffff811115613a5857613a57614c6f565b5b613a648682870161389f565b9150509250925092565b60008060008060808587031215613a8857613a87614c74565b5b6000613a96878288016137de565b9450506020613aa7878288016137de565b935050604085013567ffffffffffffffff811115613ac857613ac7614c6f565b5b613ad48782880161389f565b925050606085013567ffffffffffffffff811115613af557613af4614c6f565b5b613b018782880161390c565b91505092959194509250565b600080600060608486031215613b2657613b25614c74565b5b6000613b34868287016137de565b9350506020613b45868287016137de565b9250506040613b568682870161397d565b9150509250925092565b60008060008060808587031215613b7a57613b79614c74565b5b6000613b88878288016137de565b9450506020613b99878288016137de565b9350506040613baa8782880161397d565b925050606085013567ffffffffffffffff811115613bcb57613bca614c6f565b5b613bd78782880161390c565b91505092959194509250565b60008060408385031215613bfa57613bf9614c74565b5b6000613c08858286016137de565b9250506020613c19858286016138cd565b9150509250929050565b60008060408385031215613c3a57613c39614c74565b5b6000613c48858286016137de565b9250506020613c598582860161397d565b9150509250929050565b60008060208385031215613c7a57613c79614c74565b5b600083013567ffffffffffffffff811115613c9857613c97614c6f565b5b613ca4858286016137f3565b92509250509250929050565b60008060008060408587031215613cca57613cc9614c74565b5b600085013567ffffffffffffffff811115613ce857613ce7614c6f565b5b613cf4878288016137f3565b9450945050602085013567ffffffffffffffff811115613d1757613d16614c6f565b5b613d2387828801613849565b925092505092959194509250565b600060208284031215613d4757613d46614c74565b5b6000613d55848285016138cd565b91505092915050565b600060208284031215613d7457613d73614c74565b5b6000613d82848285016138e2565b91505092915050565b600060208284031215613da157613da0614c74565b5b6000613daf848285016138f7565b91505092915050565b600060208284031215613dce57613dcd614c74565b5b6000613ddc8482850161393a565b91505092915050565b600060208284031215613dfb57613dfa614c74565b5b600082013567ffffffffffffffff811115613e1957613e18614c6f565b5b613e258482850161394f565b91505092915050565b600060208284031215613e4457613e43614c74565b5b6000613e528482850161397d565b91505092915050565b613e64816149cb565b82525050565b613e73816149dd565b82525050565b6000613e8482614873565b613e8e8185614889565b9350613e9e818560208601614a60565b613ea781614c79565b840191505092915050565b6000613ebd8261487e565b613ec7818561489a565b9350613ed7818560208601614a60565b613ee081614c79565b840191505092915050565b6000613ef68261487e565b613f0081856148ab565b9350613f10818560208601614a60565b80840191505092915050565b60008154613f2981614a93565b613f3381866148ab565b94506001821660008114613f4e5760018114613f5f57613f92565b60ff19831686528186019350613f92565b613f688561485e565b60005b83811015613f8a57815481890152600182019150602081019050613f6b565b838801955050505b50505092915050565b6000613fa860328361489a565b9150613fb382614c8a565b604082019050919050565b6000613fcb600d8361489a565b9150613fd682614cd9565b602082019050919050565b6000613fee60268361489a565b9150613ff982614d02565b604082019050919050565b6000614011601c8361489a565b915061401c82614d51565b602082019050919050565b600061403460278361489a565b915061403f82614d7a565b604082019050919050565b600061405760248361489a565b915061406282614dc9565b604082019050919050565b600061407a60198361489a565b915061408582614e18565b602082019050919050565b600061409d60128361489a565b91506140a882614e41565b602082019050919050565b60006140c0601f8361489a565b91506140cb82614e6a565b602082019050919050565b60006140e3600d8361489a565b91506140ee82614e93565b602082019050919050565b6000614106602c8361489a565b915061411182614ebc565b604082019050919050565b6000614129601b8361489a565b915061413482614f0b565b602082019050919050565b600061414c60388361489a565b915061415782614f34565b604082019050919050565b600061416f602a8361489a565b915061417a82614f83565b604082019050919050565b600061419260298361489a565b915061419d82614fd2565b604082019050919050565b60006141b5601f8361489a565b91506141c082615021565b602082019050919050565b60006141d8601c8361489a565b91506141e38261504a565b602082019050919050565b60006141fb60208361489a565b915061420682615073565b602082019050919050565b600061421e602c8361489a565b91506142298261509c565b604082019050919050565b600061424160208361489a565b915061424c826150eb565b602082019050919050565b600061426460298361489a565b915061426f82615114565b604082019050919050565b6000614287602f8361489a565b915061429282615163565b604082019050919050565b60006142aa60218361489a565b91506142b5826151b2565b604082019050919050565b60006142cd60098361489a565b91506142d882615201565b602082019050919050565b60006142f060318361489a565b91506142fb8261522a565b604082019050919050565b6000614313601f8361489a565b915061431e82615279565b602082019050919050565b6000614336600c8361489a565b9150614341826152a2565b602082019050919050565b61435581614a47565b82525050565b60006143678286613eeb565b91506143738285613eeb565b915061437f8284613f1c565b9150819050949350505050565b60006020820190506143a16000830184613e5b565b92915050565b60006080820190506143bc6000830187613e5b565b6143c96020830186613e5b565b6143d6604083018561434c565b81810360608301526143e88184613e79565b905095945050505050565b60006020820190506144086000830184613e6a565b92915050565b600060208201905081810360008301526144288184613eb2565b905092915050565b6000602082019050818103600083015261444981613f9b565b9050919050565b6000602082019050818103600083015261446981613fbe565b9050919050565b6000602082019050818103600083015261448981613fe1565b9050919050565b600060208201905081810360008301526144a981614004565b9050919050565b600060208201905081810360008301526144c981614027565b9050919050565b600060208201905081810360008301526144e98161404a565b9050919050565b600060208201905081810360008301526145098161406d565b9050919050565b6000602082019050818103600083015261452981614090565b9050919050565b60006020820190508181036000830152614549816140b3565b9050919050565b60006020820190508181036000830152614569816140d6565b9050919050565b60006020820190508181036000830152614589816140f9565b9050919050565b600060208201905081810360008301526145a98161411c565b9050919050565b600060208201905081810360008301526145c98161413f565b9050919050565b600060208201905081810360008301526145e981614162565b9050919050565b6000602082019050818103600083015261460981614185565b9050919050565b60006020820190508181036000830152614629816141a8565b9050919050565b60006020820190508181036000830152614649816141cb565b9050919050565b60006020820190508181036000830152614669816141ee565b9050919050565b6000602082019050818103600083015261468981614211565b9050919050565b600060208201905081810360008301526146a981614234565b9050919050565b600060208201905081810360008301526146c981614257565b9050919050565b600060208201905081810360008301526146e98161427a565b9050919050565b600060208201905081810360008301526147098161429d565b9050919050565b60006020820190508181036000830152614729816142c0565b9050919050565b60006020820190508181036000830152614749816142e3565b9050919050565b6000602082019050818103600083015261476981614306565b9050919050565b6000602082019050818103600083015261478981614329565b9050919050565b60006020820190506147a5600083018461434c565b92915050565b60006147b56147c6565b90506147c18282614ac5565b919050565b6000604051905090565b600067ffffffffffffffff8211156147eb576147ea614c2c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561481757614816614c2c565b5b61482082614c79565b9050602081019050919050565b600067ffffffffffffffff82111561484857614847614c2c565b5b61485182614c79565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148c182614a47565b91506148cc83614a47565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490157614900614b70565b5b828201905092915050565b600061491782614a47565b915061492283614a47565b92508261493257614931614b9f565b5b828204905092915050565b600061494882614a47565b915061495383614a47565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561498c5761498b614b70565b5b828202905092915050565b60006149a282614a47565b91506149ad83614a47565b9250828210156149c0576149bf614b70565b5b828203905092915050565b60006149d682614a27565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614a20826149cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a7e578082015181840152602081019050614a63565b83811115614a8d576000848401525b50505050565b60006002820490506001821680614aab57607f821691505b60208210811415614abf57614abe614bce565b5b50919050565b614ace82614c79565b810181811067ffffffffffffffff82111715614aed57614aec614c2c565b5b80604052505050565b6000614b0182614a47565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b3457614b33614b70565b5b600182019050919050565b6000614b4a82614a47565b9150614b5583614a47565b925082614b6557614b64614b9f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e696e756d20627579203100000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178207175616e7469747920696e206f6e65207472616e60008201527f73616374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f53697a65206e6f742073616d6500000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e6e6f742061646420746865206e756c6c20616464726573730000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f436f756c64206e6f742065786365656420746865206d617820737570706c7900600082015250565b7f41646472657373206e6f7420696e207468652077686974656c69737400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e696d756d20300000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4f7574206f66206c696d69740000000000000000000000000000000000000000600082015250565b6152d4816149cb565b81146152df57600080fd5b50565b6152eb816149dd565b81146152f657600080fd5b50565b615302816149e9565b811461530d57600080fd5b50565b61531981614a15565b811461532457600080fd5b50565b61533081614a47565b811461533b57600080fd5b5056fea2646970667358221220d04119c0b81443dde5287d06043148cc11d90eceec5b74447bf2fd039251235f64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000076261627962616400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000442424144000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54715a794a66476436664d62714c754b524477566f32427939454467736d4b567a37626b4a595150477750732f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): babybad
Arg [1] : _symbol (string): BBAD
Arg [2] : _initBaseURI (string): ipfs://QmTqZyJfGd6fMbqLuKRDwVo2By9EDgsmKVz7bkJYQPGwPs/
Arg [3] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 6261627962616400000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4242414400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d54715a794a66476436664d62714c754b524477566f3242
Arg [10] : 7939454467736d4b567a37626b4a595150477750732f00000000000000000000


Deployed Bytecode Sourcemap

47813:6373:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35026:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53316:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35971:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37530:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37053:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48244:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48285:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52975:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48382:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53490:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38280:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50796:685;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48204:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51487:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54069:114;;;:::i;:::-;;49671:1119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38690:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52590:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52319:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49439:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51809:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48131:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48162:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35665:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48061:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53104:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35395:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16014:103;;;;;;;;;;;;;:::i;:::-;;52054:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15363:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36140:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48453:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37823:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52865:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38946:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48087:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49049:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53205:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53922:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52718:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49543:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53599:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16272:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51599:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53395:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35026:305;35128:4;35180:25;35165:40;;;:11;:40;;;;:105;;;;35237:33;35222:48;;;:11;:48;;;;35165:105;:158;;;;35287:36;35311:11;35287:23;:36::i;:::-;35165:158;35145:178;;35026:305;;;:::o;53316:73::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53377:6:::1;53368;;:15;;;;;;;;;;;;;;;;;;53316:73:::0;:::o;35971:100::-;36025:13;36058:5;36051:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35971:100;:::o;37530:221::-;37606:7;37634:16;37642:7;37634;:16::i;:::-;37626:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37719:15;:24;37735:7;37719:24;;;;;;;;;;;;;;;;;;;;;37712:31;;37530:221;;;:::o;37053:411::-;37134:13;37150:23;37165:7;37150:14;:23::i;:::-;37134:39;;37198:5;37192:11;;:2;:11;;;;37184:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37292:5;37276:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37301:37;37318:5;37325:12;:10;:12::i;:::-;37301:16;:37::i;:::-;37276:62;37254:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:21;37444:2;37448:7;37435:8;:21::i;:::-;37123:341;37053:411;;:::o;48244:32::-;;;;:::o;48285:41::-;;;;:::o;52975:123::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53082:10:::1;53057:22;:35;;;;52975:123:::0;:::o;48382:43::-;;;;:::o;53490:99::-;53534:7;53582:1;53557:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;53550:33;;53490:99;:::o;38280:339::-;38475:41;38494:12;:10;:12::i;:::-;38508:7;38475:18;:41::i;:::-;38467:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38583:28;38593:4;38599:2;38603:7;38583:9;:28::i;:::-;38280:339;;;:::o;50796:685::-;1845:1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;15594:12:::1;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50952:12:::2;;:19;;50931:10;;:17;;:40;50923:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50997:14;51014:13;:11;:13::i;:::-;50997:30;;51041:9;51036:440;51060:10;;:17;;51056:1;:21;51036:440;;;51121:1;51103:12;;51116:1;51103:15;;;;;;;:::i;:::-;;;;;;;;:19;51095:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;51185:15;;51166:12;;51179:1;51166:15;;;;;;;:::i;:::-;;;;;;;;51157:6;:24;;;;:::i;:::-;:43;;51149:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51262:10;;51243:12;;51256:1;51243:15;;;;;;;:::i;:::-;;;;;;;;51234:6;:24;;;;:::i;:::-;:38;;51226:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;51324:9;51319:150;51343:12;;51356:1;51343:15;;;;;;;:::i;:::-;;;;;;;;51339:1;:19;51319:150;;;51376:48;51386:10;;51397:1;51386:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51401:22;:12;:20;:22::i;:::-;51376:9;:48::i;:::-;51435:24;:12;:22;:24::i;:::-;51360:3;;;;;:::i;:::-;;;;51319:150;;;;51079:3;;;;;:::i;:::-;;;;51036:440;;;;50916:565;1801:1:::0;2755:7;:22;;;;50796:685;;;;:::o;48204:33::-;;;;:::o;51487:104::-;51548:4;51568:10;:17;51579:5;51568:17;;;;;;;;;;;;;;;;;;;;;;;;;51561:24;;51487:104;;;:::o;54069:114::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54137:10:::1;54129:24;;:47;54154:21;54129:47;;;;;;;;;;;;;;;;;;;;;;;54121:56;;;::::0;::::1;;54069:114::o:0;49671:1119::-;1845:1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;49758:15:::1;;;;;;;;;;;49754:76;;;49793:6;;;;;;;;;;;49792:7;49784:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49754:76;49858:1;49844:11;:15;49836:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;49886:14;49903:13;:11;:13::i;:::-;49886:30;;49955:10;;49940:11;49931:6;:20;;;;:::i;:::-;:34;;49923:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;50033:12;;50018:11;:27;;50010:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50114:7;:5;:7::i;:::-;50100:21;;:10;:21;;;50096:550;;50137:15;;;;;;;;;;;50132:507;;50196:22;;50181:11;:37;;50173:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50278:15;;50263:11;50254:6;:20;;;;:::i;:::-;:39;;50246:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50360:11;50342:15;;:29;;;;:::i;:::-;50329:9;:42;;50321:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50426:10;:15;50437:3;50426:15;;;;;;;;;;;;;;;;;;;;;;;;;50418:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;50505:5;50487:10;:15;50498:3;50487:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;50132:507;;;50582:11;50574:5;;:19;;;;:::i;:::-;50561:9;:32;;50553:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50132:507;50096:550;50659:9;50671:1;50659:13;;50654:131;50679:11;50674:1;:16;50654:131;;50706:38;50716:3;50721:22;:12;:20;:22::i;:::-;50706:9;:38::i;:::-;50753:24;:12;:22;:24::i;:::-;50692:3;;;;;:::i;:::-;;;;50654:131;;;;49747:1043;1801:1:::0;2755:7;:22;;;;49671:1119;;:::o;38690:185::-;38828:39;38845:4;38851:2;38855:7;38828:39;;;;;;;;;;;;:16;:39::i;:::-;38690:185;;;:::o;52590:122::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52668:1:::1;52657:8;:12;52649:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;52698:8;52690:5;:16;;;;52590:122:::0;:::o;52319:265::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52410:9:::1;52405:174;52429:10;;:17;;52425:1;:21;52405:174;;;52495:1;52470:27;;:10;;52481:1;52470:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:27;;;;52462:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52566:5;52538:10;:25;52549:10;;52560:1;52549:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52538:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;52448:3;;;;;:::i;:::-;;;;52405:174;;;;52319:265:::0;;:::o;49439:98::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49520:11:::1;49510:7;:21;;;;;;;;;;;;:::i;:::-;;49439:98:::0;:::o;51809:239::-;51935:9;51930:113;51954:9;:16;51950:1;:20;51930:113;;;51986:49;52003:5;52010:3;52015:9;52025:1;52015:12;;;;;;;;:::i;:::-;;;;;;;;52029:5;51986:16;:49::i;:::-;51972:3;;;;;:::i;:::-;;;;51930:113;;;;51809:239;;;;:::o;48131:26::-;;;;;;;;;;;;;:::o;48162:35::-;;;;;;;;;;;;;:::o;35665:239::-;35737:7;35757:13;35773:7;:16;35781:7;35773:16;;;;;;;;;;;;;;;;;;;;;35757:32;;35825:1;35808:19;;:5;:19;;;;35800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35891:5;35884:12;;;35665:239;;;:::o;48061:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53104:95::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53183:10:::1;53170;:23;;;;53104:95:::0;:::o;35395:208::-;35467:7;35512:1;35495:19;;:5;:19;;;;35487:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:9;:16;35589:5;35579:16;;;;;;;;;;;;;;;;35572:23;;35395:208;;;:::o;16014:103::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16079:30:::1;16106:1;16079:18;:30::i;:::-;16014:103::o:0;52054:259::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52140:9:::1;52135:173;52159:10;;:17;;52155:1;:21;52135:173;;;52225:1;52200:27;;:10;;52211:1;52200:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:27;;;;52192:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52296:4;52268:10;:25;52279:10;;52290:1;52279:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52268:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;52178:3;;;;;:::i;:::-;;;;52135:173;;;;52054:259:::0;;:::o;48335:33::-;;;;:::o;15363:87::-;15409:7;15436:6;;;;;;;;;;;15429:13;;15363:87;:::o;36140:104::-;36196:13;36229:7;36222:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36140:104;:::o;48453:36::-;;;;:::o;37823:155::-;37918:52;37937:12;:10;:12::i;:::-;37951:8;37961;37918:18;:52::i;:::-;37823:155;;:::o;52865:104::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52953:10:::1;52938:12;:25;;;;52865:104:::0;:::o;38946:328::-;39121:41;39140:12;:10;:12::i;:::-;39154:7;39121:18;:41::i;:::-;39113:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39227:39;39241:4;39247:2;39251:7;39260:5;39227:13;:39::i;:::-;38946:328;;;;:::o;48087:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49049:384::-;49123:13;49153:17;49161:8;49153:7;:17::i;:::-;49145:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49231:28;49262:10;:8;:10::i;:::-;49231:41;;49317:1;49292:14;49286:28;:32;:141;;;;;;;;;;;;;;;;;49354:14;49370:26;49387:8;49370:16;:26::i;:::-;49398:13;49337:75;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49286:141;49279:148;;;49049:384;;;:::o;53205:105::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53294:10:::1;53276:15;:28;;;;53205:105:::0;:::o;53922:140::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54035:21:::1;54012:20;;:44;;;;;;;;;;;;;;;;;;53922:140:::0;:::o;52718:141::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52805:1:::1;52794:8;:12;52786:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;52845:8;52827:15;:26;;;;52718:141:::0;:::o;49543:122::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49642:17:::1;49626:13;:33;;;;;;;;;;;;:::i;:::-;;49543:122:::0;:::o;53599:317::-;53688:4;53701:27;53745:20;;;;;;;;;;;53701:65;;53818:8;53777:49;;53785:13;:21;;;53807:5;53785:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53777:49;;;53773:83;;;53844:4;53837:11;;;;;53773:83;53871:39;53894:5;53901:8;53871:22;:39::i;:::-;53864:46;;;53599:317;;;;;:::o;16272:201::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16381:1:::1;16361:22;;:8;:22;;;;16353:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16437:28;16456:8;16437:18;:28::i;:::-;16272:201:::0;:::o;51599:204::-;51701:9;51696:102;51720:9;:16;51716:1;:20;51696:102;;;51752:38;51765:5;51772:3;51777:9;51787:1;51777:12;;;;;;;;:::i;:::-;;;;;;;;51752;:38::i;:::-;51738:3;;;;;:::i;:::-;;;;51696:102;;;;51599:204;;;:::o;53395:89::-;15594:12;:10;:12::i;:::-;15583:23;;:7;:5;:7::i;:::-;:23;;;15575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53472:6:::1;53454:15;;:24;;;;;;;;;;;;;;;;;;53395:89:::0;:::o;10813:127::-;10920:1;10902:7;:14;;;:19;;;;;;;;;;;10813:127;:::o;27795:157::-;27880:4;27919:25;27904:40;;;:11;:40;;;;27897:47;;27795:157;;;:::o;14087:98::-;14140:7;14167:10;14160:17;;14087:98;:::o;40784:127::-;40849:4;40901:1;40873:30;;:7;:16;40881:7;40873:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40866:37;;40784:127;;;:::o;44766:174::-;44868:2;44841:15;:24;44857:7;44841:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44924:7;44920:2;44886:46;;44895:23;44910:7;44895:14;:23::i;:::-;44886:46;;;;;;;;;;;;44766:174;;:::o;10691:114::-;10756:7;10783;:14;;;10776:21;;10691:114;;;:::o;41078:348::-;41171:4;41196:16;41204:7;41196;:16::i;:::-;41188:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41272:13;41288:23;41303:7;41288:14;:23::i;:::-;41272:39;;41341:5;41330:16;;:7;:16;;;:51;;;;41374:7;41350:31;;:20;41362:7;41350:11;:20::i;:::-;:31;;;41330:51;:87;;;;41385:32;41402:5;41409:7;41385:16;:32::i;:::-;41330:87;41322:96;;;41078:348;;;;:::o;44070:578::-;44229:4;44202:31;;:23;44217:7;44202:14;:23::i;:::-;:31;;;44194:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44312:1;44298:16;;:2;:16;;;;44290:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44368:39;44389:4;44395:2;44399:7;44368:20;:39::i;:::-;44472:29;44489:1;44493:7;44472:8;:29::i;:::-;44533:1;44514:9;:15;44524:4;44514:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44562:1;44545:9;:13;44555:2;44545:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44593:2;44574:7;:16;44582:7;44574:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44632:7;44628:2;44613:27;;44622:4;44613:27;;;;;;;;;;;;44070:578;;;:::o;41768:110::-;41844:26;41854:2;41858:7;41844:26;;;;;;;;;;;;:9;:26::i;:::-;41768:110;;:::o;16633:191::-;16707:16;16726:6;;;;;;;;;;;16707:25;;16752:8;16743:6;;:17;;;;;;;;;;;;;;;;;;16807:8;16776:40;;16797:8;16776:40;;;;;;;;;;;;16696:128;16633:191;:::o;45082:315::-;45237:8;45228:17;;:5;:17;;;;45220:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:8;45286:18;:25;45305:5;45286:25;;;;;;;;;;;;;;;:35;45312:8;45286:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45370:8;45348:41;;45363:5;45348:41;;;45380:8;45348:41;;;;;;:::i;:::-;;;;;;;;45082:315;;;:::o;40156:::-;40313:28;40323:4;40329:2;40333:7;40313:9;:28::i;:::-;40360:48;40383:4;40389:2;40393:7;40402:5;40360:22;:48::i;:::-;40352:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40156:315;;;;:::o;48941:102::-;49001:13;49030:7;49023:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48941:102;:::o;11649:723::-;11705:13;11935:1;11926:5;:10;11922:53;;;11953:10;;;;;;;;;;;;;;;;;;;;;11922:53;11985:12;12000:5;11985:20;;12016:14;12041:78;12056:1;12048:4;:9;12041:78;;12074:8;;;;;:::i;:::-;;;;12105:2;12097:10;;;;;:::i;:::-;;;12041:78;;;12129:19;12161:6;12151:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12129:39;;12179:154;12195:1;12186:5;:10;12179:154;;12223:1;12213:11;;;;;:::i;:::-;;;12290:2;12282:5;:10;;;;:::i;:::-;12269:2;:24;;;;:::i;:::-;12256:39;;12239:6;12246;12239:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;12319:2;12310:11;;;;;:::i;:::-;;;12179:154;;;12357:6;12343:21;;;;;11649:723;;;;:::o;38049:164::-;38146:4;38170:18;:25;38189:5;38170:25;;;;;;;;;;;;;;;:35;38196:8;38170:35;;;;;;;;;;;;;;;;;;;;;;;;;38163:42;;38049:164;;;;:::o;47333:126::-;;;;:::o;42105:321::-;42235:18;42241:2;42245:7;42235:5;:18::i;:::-;42286:54;42317:1;42321:2;42325:7;42334:5;42286:22;:54::i;:::-;42264:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;42105:321;;;:::o;45962:799::-;46117:4;46138:15;:2;:13;;;:15::i;:::-;46134:620;;;46190:2;46174:36;;;46211:12;:10;:12::i;:::-;46225:4;46231:7;46240:5;46174:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46170:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46433:1;46416:6;:13;:18;46412:272;;;46459:60;;;;;;;;;;:::i;:::-;;;;;;;;46412:272;46634:6;46628:13;46619:6;46615:2;46611:15;46604:38;46170:529;46307:41;;;46297:51;;;:6;:51;;;;46290:58;;;;;46134:620;46738:4;46731:11;;45962:799;;;;;;;:::o;42762:382::-;42856:1;42842:16;;:2;:16;;;;42834:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42915:16;42923:7;42915;:16::i;:::-;42914:17;42906:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42977:45;43006:1;43010:2;43014:7;42977:20;:45::i;:::-;43052:1;43035:9;:13;43045:2;43035:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;43083:2;43064:7;:16;43072:7;43064:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43128:7;43124:2;43103:33;;43120:1;43103:33;;;;;;;;;;;;42762:382;;:::o;17651:387::-;17711:4;17919:12;17986:7;17974:20;17966:28;;18029:1;18022:4;:8;18015:15;;;17651:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:::-;2412:8;2422:6;2472:3;2465:4;2457:6;2453:17;2449:27;2439:122;;2480:79;;:::i;:::-;2439:122;2593:6;2580:20;2570:30;;2623:18;2615:6;2612:30;2609:117;;;2645:79;;:::i;:::-;2609:117;2759:4;2751:6;2747:17;2735:29;;2813:3;2805:4;2797:6;2793:17;2783:8;2779:32;2776:41;2773:128;;;2820:79;;:::i;:::-;2773:128;2339:568;;;;;:::o;2930:370::-;3001:5;3050:3;3043:4;3035:6;3031:17;3027:27;3017:122;;3058:79;;:::i;:::-;3017:122;3175:6;3162:20;3200:94;3290:3;3282:6;3275:4;3267:6;3263:17;3200:94;:::i;:::-;3191:103;;3007:293;2930:370;;;;:::o;3306:133::-;3349:5;3387:6;3374:20;3365:29;;3403:30;3427:5;3403:30;:::i;:::-;3306:133;;;;:::o;3445:137::-;3490:5;3528:6;3515:20;3506:29;;3544:32;3570:5;3544:32;:::i;:::-;3445:137;;;;:::o;3588:141::-;3644:5;3675:6;3669:13;3660:22;;3691:32;3717:5;3691:32;:::i;:::-;3588:141;;;;:::o;3748:338::-;3803:5;3852:3;3845:4;3837:6;3833:17;3829:27;3819:122;;3860:79;;:::i;:::-;3819:122;3977:6;3964:20;4002:78;4076:3;4068:6;4061:4;4053:6;4049:17;4002:78;:::i;:::-;3993:87;;3809:277;3748:338;;;;:::o;4092:201::-;4178:5;4209:6;4203:13;4194:22;;4225:62;4281:5;4225:62;:::i;:::-;4092:201;;;;:::o;4313:340::-;4369:5;4418:3;4411:4;4403:6;4399:17;4395:27;4385:122;;4426:79;;:::i;:::-;4385:122;4543:6;4530:20;4568:79;4643:3;4635:6;4628:4;4620:6;4616:17;4568:79;:::i;:::-;4559:88;;4375:278;4313:340;;;;:::o;4659:139::-;4705:5;4743:6;4730:20;4721:29;;4759:33;4786:5;4759:33;:::i;:::-;4659:139;;;;:::o;4804:329::-;4863:6;4912:2;4900:9;4891:7;4887:23;4883:32;4880:119;;;4918:79;;:::i;:::-;4880:119;5038:1;5063:53;5108:7;5099:6;5088:9;5084:22;5063:53;:::i;:::-;5053:63;;5009:117;4804:329;;;;:::o;5139:474::-;5207:6;5215;5264:2;5252:9;5243:7;5239:23;5235:32;5232:119;;;5270:79;;:::i;:::-;5232:119;5390:1;5415:53;5460:7;5451:6;5440:9;5436:22;5415:53;:::i;:::-;5405:63;;5361:117;5517:2;5543:53;5588:7;5579:6;5568:9;5564:22;5543:53;:::i;:::-;5533:63;;5488:118;5139:474;;;;;:::o;5619:829::-;5721:6;5729;5737;5786:2;5774:9;5765:7;5761:23;5757:32;5754:119;;;5792:79;;:::i;:::-;5754:119;5912:1;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5883:117;6039:2;6065:53;6110:7;6101:6;6090:9;6086:22;6065:53;:::i;:::-;6055:63;;6010:118;6195:2;6184:9;6180:18;6167:32;6226:18;6218:6;6215:30;6212:117;;;6248:79;;:::i;:::-;6212:117;6353:78;6423:7;6414:6;6403:9;6399:22;6353:78;:::i;:::-;6343:88;;6138:303;5619:829;;;;;:::o;6454:1153::-;6574:6;6582;6590;6598;6647:3;6635:9;6626:7;6622:23;6618:33;6615:120;;;6654:79;;:::i;:::-;6615:120;6774:1;6799:53;6844:7;6835:6;6824:9;6820:22;6799:53;:::i;:::-;6789:63;;6745:117;6901:2;6927:53;6972:7;6963:6;6952:9;6948:22;6927:53;:::i;:::-;6917:63;;6872:118;7057:2;7046:9;7042:18;7029:32;7088:18;7080:6;7077:30;7074:117;;;7110:79;;:::i;:::-;7074:117;7215:78;7285:7;7276:6;7265:9;7261:22;7215:78;:::i;:::-;7205:88;;7000:303;7370:2;7359:9;7355:18;7342:32;7401:18;7393:6;7390:30;7387:117;;;7423:79;;:::i;:::-;7387:117;7528:62;7582:7;7573:6;7562:9;7558:22;7528:62;:::i;:::-;7518:72;;7313:287;6454:1153;;;;;;;:::o;7613:619::-;7690:6;7698;7706;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:53;7951:7;7942:6;7931:9;7927:22;7906:53;:::i;:::-;7896:63;;7852:117;8008:2;8034:53;8079:7;8070:6;8059:9;8055:22;8034:53;:::i;:::-;8024:63;;7979:118;8136:2;8162:53;8207:7;8198:6;8187:9;8183:22;8162:53;:::i;:::-;8152:63;;8107:118;7613:619;;;;;:::o;8238:943::-;8333:6;8341;8349;8357;8406:3;8394:9;8385:7;8381:23;8377:33;8374:120;;;8413:79;;:::i;:::-;8374:120;8533:1;8558:53;8603:7;8594:6;8583:9;8579:22;8558:53;:::i;:::-;8548:63;;8504:117;8660:2;8686:53;8731:7;8722:6;8711:9;8707:22;8686:53;:::i;:::-;8676:63;;8631:118;8788:2;8814:53;8859:7;8850:6;8839:9;8835:22;8814:53;:::i;:::-;8804:63;;8759:118;8944:2;8933:9;8929:18;8916:32;8975:18;8967:6;8964:30;8961:117;;;8997:79;;:::i;:::-;8961:117;9102:62;9156:7;9147:6;9136:9;9132:22;9102:62;:::i;:::-;9092:72;;8887:287;8238:943;;;;;;;:::o;9187:468::-;9252:6;9260;9309:2;9297:9;9288:7;9284:23;9280:32;9277:119;;;9315:79;;:::i;:::-;9277:119;9435:1;9460:53;9505:7;9496:6;9485:9;9481:22;9460:53;:::i;:::-;9450:63;;9406:117;9562:2;9588:50;9630:7;9621:6;9610:9;9606:22;9588:50;:::i;:::-;9578:60;;9533:115;9187:468;;;;;:::o;9661:474::-;9729:6;9737;9786:2;9774:9;9765:7;9761:23;9757:32;9754:119;;;9792:79;;:::i;:::-;9754:119;9912:1;9937:53;9982:7;9973:6;9962:9;9958:22;9937:53;:::i;:::-;9927:63;;9883:117;10039:2;10065:53;10110:7;10101:6;10090:9;10086:22;10065:53;:::i;:::-;10055:63;;10010:118;9661:474;;;;;:::o;10141:559::-;10227:6;10235;10284:2;10272:9;10263:7;10259:23;10255:32;10252:119;;;10290:79;;:::i;:::-;10252:119;10438:1;10427:9;10423:17;10410:31;10468:18;10460:6;10457:30;10454:117;;;10490:79;;:::i;:::-;10454:117;10603:80;10675:7;10666:6;10655:9;10651:22;10603:80;:::i;:::-;10585:98;;;;10381:312;10141:559;;;;;:::o;10706:934::-;10828:6;10836;10844;10852;10901:2;10889:9;10880:7;10876:23;10872:32;10869:119;;;10907:79;;:::i;:::-;10869:119;11055:1;11044:9;11040:17;11027:31;11085:18;11077:6;11074:30;11071:117;;;11107:79;;:::i;:::-;11071:117;11220:80;11292:7;11283:6;11272:9;11268:22;11220:80;:::i;:::-;11202:98;;;;10998:312;11377:2;11366:9;11362:18;11349:32;11408:18;11400:6;11397:30;11394:117;;;11430:79;;:::i;:::-;11394:117;11543:80;11615:7;11606:6;11595:9;11591:22;11543:80;:::i;:::-;11525:98;;;;11320:313;10706:934;;;;;;;:::o;11646:323::-;11702:6;11751:2;11739:9;11730:7;11726:23;11722:32;11719:119;;;11757:79;;:::i;:::-;11719:119;11877:1;11902:50;11944:7;11935:6;11924:9;11920:22;11902:50;:::i;:::-;11892:60;;11848:114;11646:323;;;;:::o;11975:327::-;12033:6;12082:2;12070:9;12061:7;12057:23;12053:32;12050:119;;;12088:79;;:::i;:::-;12050:119;12208:1;12233:52;12277:7;12268:6;12257:9;12253:22;12233:52;:::i;:::-;12223:62;;12179:116;11975:327;;;;:::o;12308:349::-;12377:6;12426:2;12414:9;12405:7;12401:23;12397:32;12394:119;;;12432:79;;:::i;:::-;12394:119;12552:1;12577:63;12632:7;12623:6;12612:9;12608:22;12577:63;:::i;:::-;12567:73;;12523:127;12308:349;;;;:::o;12663:409::-;12762:6;12811:2;12799:9;12790:7;12786:23;12782:32;12779:119;;;12817:79;;:::i;:::-;12779:119;12937:1;12962:93;13047:7;13038:6;13027:9;13023:22;12962:93;:::i;:::-;12952:103;;12908:157;12663:409;;;;:::o;13078:509::-;13147:6;13196:2;13184:9;13175:7;13171:23;13167:32;13164:119;;;13202:79;;:::i;:::-;13164:119;13350:1;13339:9;13335:17;13322:31;13380:18;13372:6;13369:30;13366:117;;;13402:79;;:::i;:::-;13366:117;13507:63;13562:7;13553:6;13542:9;13538:22;13507:63;:::i;:::-;13497:73;;13293:287;13078:509;;;;:::o;13593:329::-;13652:6;13701:2;13689:9;13680:7;13676:23;13672:32;13669:119;;;13707:79;;:::i;:::-;13669:119;13827:1;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13798:117;13593:329;;;;:::o;13928:118::-;14015:24;14033:5;14015:24;:::i;:::-;14010:3;14003:37;13928:118;;:::o;14052:109::-;14133:21;14148:5;14133:21;:::i;:::-;14128:3;14121:34;14052:109;;:::o;14167:360::-;14253:3;14281:38;14313:5;14281:38;:::i;:::-;14335:70;14398:6;14393:3;14335:70;:::i;:::-;14328:77;;14414:52;14459:6;14454:3;14447:4;14440:5;14436:16;14414:52;:::i;:::-;14491:29;14513:6;14491:29;:::i;:::-;14486:3;14482:39;14475:46;;14257:270;14167:360;;;;:::o;14533:364::-;14621:3;14649:39;14682:5;14649:39;:::i;:::-;14704:71;14768:6;14763:3;14704:71;:::i;:::-;14697:78;;14784:52;14829:6;14824:3;14817:4;14810:5;14806:16;14784:52;:::i;:::-;14861:29;14883:6;14861:29;:::i;:::-;14856:3;14852:39;14845:46;;14625:272;14533:364;;;;:::o;14903:377::-;15009:3;15037:39;15070:5;15037:39;:::i;:::-;15092:89;15174:6;15169:3;15092:89;:::i;:::-;15085:96;;15190:52;15235:6;15230:3;15223:4;15216:5;15212:16;15190:52;:::i;:::-;15267:6;15262:3;15258:16;15251:23;;15013:267;14903:377;;;;:::o;15310:845::-;15413:3;15450:5;15444:12;15479:36;15505:9;15479:36;:::i;:::-;15531:89;15613:6;15608:3;15531:89;:::i;:::-;15524:96;;15651:1;15640:9;15636:17;15667:1;15662:137;;;;15813:1;15808:341;;;;15629:520;;15662:137;15746:4;15742:9;15731;15727:25;15722:3;15715:38;15782:6;15777:3;15773:16;15766:23;;15662:137;;15808:341;15875:38;15907:5;15875:38;:::i;:::-;15935:1;15949:154;15963:6;15960:1;15957:13;15949:154;;;16037:7;16031:14;16027:1;16022:3;16018:11;16011:35;16087:1;16078:7;16074:15;16063:26;;15985:4;15982:1;15978:12;15973:17;;15949:154;;;16132:6;16127:3;16123:16;16116:23;;15815:334;;15629:520;;15417:738;;15310:845;;;;:::o;16161:366::-;16303:3;16324:67;16388:2;16383:3;16324:67;:::i;:::-;16317:74;;16400:93;16489:3;16400:93;:::i;:::-;16518:2;16513:3;16509:12;16502:19;;16161:366;;;:::o;16533:::-;16675:3;16696:67;16760:2;16755:3;16696:67;:::i;:::-;16689:74;;16772:93;16861:3;16772:93;:::i;:::-;16890:2;16885:3;16881:12;16874:19;;16533:366;;;:::o;16905:::-;17047:3;17068:67;17132:2;17127:3;17068:67;:::i;:::-;17061:74;;17144:93;17233:3;17144:93;:::i;:::-;17262:2;17257:3;17253:12;17246:19;;16905:366;;;:::o;17277:::-;17419:3;17440:67;17504:2;17499:3;17440:67;:::i;:::-;17433:74;;17516:93;17605:3;17516:93;:::i;:::-;17634:2;17629:3;17625:12;17618:19;;17277:366;;;:::o;17649:::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:::-;18535:3;18556:67;18620:2;18615:3;18556:67;:::i;:::-;18549:74;;18632:93;18721:3;18632:93;:::i;:::-;18750:2;18745:3;18741:12;18734:19;;18393:366;;;:::o;18765:::-;18907:3;18928:67;18992:2;18987:3;18928:67;:::i;:::-;18921:74;;19004:93;19093:3;19004:93;:::i;:::-;19122:2;19117:3;19113:12;19106:19;;18765:366;;;:::o;19137:::-;19279:3;19300:67;19364:2;19359:3;19300:67;:::i;:::-;19293:74;;19376:93;19465:3;19376:93;:::i;:::-;19494:2;19489:3;19485:12;19478:19;;19137:366;;;:::o;19509:::-;19651:3;19672:67;19736:2;19731:3;19672:67;:::i;:::-;19665:74;;19748:93;19837:3;19748:93;:::i;:::-;19866:2;19861:3;19857:12;19850:19;;19509:366;;;:::o;19881:::-;20023:3;20044:67;20108:2;20103:3;20044:67;:::i;:::-;20037:74;;20120:93;20209:3;20120:93;:::i;:::-;20238:2;20233:3;20229:12;20222:19;;19881:366;;;:::o;20253:::-;20395:3;20416:67;20480:2;20475:3;20416:67;:::i;:::-;20409:74;;20492:93;20581:3;20492:93;:::i;:::-;20610:2;20605:3;20601:12;20594:19;;20253:366;;;:::o;20625:::-;20767:3;20788:67;20852:2;20847:3;20788:67;:::i;:::-;20781:74;;20864:93;20953:3;20864:93;:::i;:::-;20982:2;20977:3;20973:12;20966:19;;20625:366;;;:::o;20997:::-;21139:3;21160:67;21224:2;21219:3;21160:67;:::i;:::-;21153:74;;21236:93;21325:3;21236:93;:::i;:::-;21354:2;21349:3;21345:12;21338:19;;20997:366;;;:::o;21369:::-;21511:3;21532:67;21596:2;21591:3;21532:67;:::i;:::-;21525:74;;21608:93;21697:3;21608:93;:::i;:::-;21726:2;21721:3;21717:12;21710:19;;21369:366;;;:::o;21741:::-;21883:3;21904:67;21968:2;21963:3;21904:67;:::i;:::-;21897:74;;21980:93;22069:3;21980:93;:::i;:::-;22098:2;22093:3;22089:12;22082:19;;21741:366;;;:::o;22113:::-;22255:3;22276:67;22340:2;22335:3;22276:67;:::i;:::-;22269:74;;22352:93;22441:3;22352:93;:::i;:::-;22470:2;22465:3;22461:12;22454:19;;22113:366;;;:::o;22485:::-;22627:3;22648:67;22712:2;22707:3;22648:67;:::i;:::-;22641:74;;22724:93;22813:3;22724:93;:::i;:::-;22842:2;22837:3;22833:12;22826:19;;22485:366;;;:::o;22857:::-;22999:3;23020:67;23084:2;23079:3;23020:67;:::i;:::-;23013:74;;23096:93;23185:3;23096:93;:::i;:::-;23214:2;23209:3;23205:12;23198:19;;22857:366;;;:::o;23229:::-;23371:3;23392:67;23456:2;23451:3;23392:67;:::i;:::-;23385:74;;23468:93;23557:3;23468:93;:::i;:::-;23586:2;23581:3;23577:12;23570:19;;23229:366;;;:::o;23601:::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:::-;24115:3;24136:67;24200:2;24195:3;24136:67;:::i;:::-;24129:74;;24212:93;24301:3;24212:93;:::i;:::-;24330:2;24325:3;24321:12;24314:19;;23973:366;;;:::o;24345:::-;24487:3;24508:67;24572:2;24567:3;24508:67;:::i;:::-;24501:74;;24584:93;24673:3;24584:93;:::i;:::-;24702:2;24697:3;24693:12;24686:19;;24345:366;;;:::o;24717:365::-;24859:3;24880:66;24944:1;24939:3;24880:66;:::i;:::-;24873:73;;24955:93;25044:3;24955:93;:::i;:::-;25073:2;25068:3;25064:12;25057:19;;24717:365;;;:::o;25088:366::-;25230:3;25251:67;25315:2;25310:3;25251:67;:::i;:::-;25244:74;;25327:93;25416:3;25327:93;:::i;:::-;25445:2;25440:3;25436:12;25429:19;;25088:366;;;:::o;25460:::-;25602:3;25623:67;25687:2;25682:3;25623:67;:::i;:::-;25616:74;;25699:93;25788:3;25699:93;:::i;:::-;25817:2;25812:3;25808:12;25801:19;;25460:366;;;:::o;25832:::-;25974:3;25995:67;26059:2;26054:3;25995:67;:::i;:::-;25988:74;;26071:93;26160:3;26071:93;:::i;:::-;26189:2;26184:3;26180:12;26173:19;;25832:366;;;:::o;26204:118::-;26291:24;26309:5;26291:24;:::i;:::-;26286:3;26279:37;26204:118;;:::o;26328:589::-;26553:3;26575:95;26666:3;26657:6;26575:95;:::i;:::-;26568:102;;26687:95;26778:3;26769:6;26687:95;:::i;:::-;26680:102;;26799:92;26887:3;26878:6;26799:92;:::i;:::-;26792:99;;26908:3;26901:10;;26328:589;;;;;;:::o;26923:222::-;27016:4;27054:2;27043:9;27039:18;27031:26;;27067:71;27135:1;27124:9;27120:17;27111:6;27067:71;:::i;:::-;26923:222;;;;:::o;27151:640::-;27346:4;27384:3;27373:9;27369:19;27361:27;;27398:71;27466:1;27455:9;27451:17;27442:6;27398:71;:::i;:::-;27479:72;27547:2;27536:9;27532:18;27523:6;27479:72;:::i;:::-;27561;27629:2;27618:9;27614:18;27605:6;27561:72;:::i;:::-;27680:9;27674:4;27670:20;27665:2;27654:9;27650:18;27643:48;27708:76;27779:4;27770:6;27708:76;:::i;:::-;27700:84;;27151:640;;;;;;;:::o;27797:210::-;27884:4;27922:2;27911:9;27907:18;27899:26;;27935:65;27997:1;27986:9;27982:17;27973:6;27935:65;:::i;:::-;27797:210;;;;:::o;28013:313::-;28126:4;28164:2;28153:9;28149:18;28141:26;;28213:9;28207:4;28203:20;28199:1;28188:9;28184:17;28177:47;28241:78;28314:4;28305:6;28241:78;:::i;:::-;28233:86;;28013:313;;;;:::o;28332:419::-;28498:4;28536:2;28525:9;28521:18;28513:26;;28585:9;28579:4;28575:20;28571:1;28560:9;28556:17;28549:47;28613:131;28739:4;28613:131;:::i;:::-;28605:139;;28332:419;;;:::o;28757:::-;28923:4;28961:2;28950:9;28946:18;28938:26;;29010:9;29004:4;29000:20;28996:1;28985:9;28981:17;28974:47;29038:131;29164:4;29038:131;:::i;:::-;29030:139;;28757:419;;;:::o;29182:::-;29348:4;29386:2;29375:9;29371:18;29363:26;;29435:9;29429:4;29425:20;29421:1;29410:9;29406:17;29399:47;29463:131;29589:4;29463:131;:::i;:::-;29455:139;;29182:419;;;:::o;29607:::-;29773:4;29811:2;29800:9;29796:18;29788:26;;29860:9;29854:4;29850:20;29846:1;29835:9;29831:17;29824:47;29888:131;30014:4;29888:131;:::i;:::-;29880:139;;29607:419;;;:::o;30032:::-;30198:4;30236:2;30225:9;30221:18;30213:26;;30285:9;30279:4;30275:20;30271:1;30260:9;30256:17;30249:47;30313:131;30439:4;30313:131;:::i;:::-;30305:139;;30032:419;;;:::o;30457:::-;30623:4;30661:2;30650:9;30646:18;30638:26;;30710:9;30704:4;30700:20;30696:1;30685:9;30681:17;30674:47;30738:131;30864:4;30738:131;:::i;:::-;30730:139;;30457:419;;;:::o;30882:::-;31048:4;31086:2;31075:9;31071:18;31063:26;;31135:9;31129:4;31125:20;31121:1;31110:9;31106:17;31099:47;31163:131;31289:4;31163:131;:::i;:::-;31155:139;;30882:419;;;:::o;31307:::-;31473:4;31511:2;31500:9;31496:18;31488:26;;31560:9;31554:4;31550:20;31546:1;31535:9;31531:17;31524:47;31588:131;31714:4;31588:131;:::i;:::-;31580:139;;31307:419;;;:::o;31732:::-;31898:4;31936:2;31925:9;31921:18;31913:26;;31985:9;31979:4;31975:20;31971:1;31960:9;31956:17;31949:47;32013:131;32139:4;32013:131;:::i;:::-;32005:139;;31732:419;;;:::o;32157:::-;32323:4;32361:2;32350:9;32346:18;32338:26;;32410:9;32404:4;32400:20;32396:1;32385:9;32381:17;32374:47;32438:131;32564:4;32438:131;:::i;:::-;32430:139;;32157:419;;;:::o;32582:::-;32748:4;32786:2;32775:9;32771:18;32763:26;;32835:9;32829:4;32825:20;32821:1;32810:9;32806:17;32799:47;32863:131;32989:4;32863:131;:::i;:::-;32855:139;;32582:419;;;:::o;33007:::-;33173:4;33211:2;33200:9;33196:18;33188:26;;33260:9;33254:4;33250:20;33246:1;33235:9;33231:17;33224:47;33288:131;33414:4;33288:131;:::i;:::-;33280:139;;33007:419;;;:::o;33432:::-;33598:4;33636:2;33625:9;33621:18;33613:26;;33685:9;33679:4;33675:20;33671:1;33660:9;33656:17;33649:47;33713:131;33839:4;33713:131;:::i;:::-;33705:139;;33432:419;;;:::o;33857:::-;34023:4;34061:2;34050:9;34046:18;34038:26;;34110:9;34104:4;34100:20;34096:1;34085:9;34081:17;34074:47;34138:131;34264:4;34138:131;:::i;:::-;34130:139;;33857:419;;;:::o;34282:::-;34448:4;34486:2;34475:9;34471:18;34463:26;;34535:9;34529:4;34525:20;34521:1;34510:9;34506:17;34499:47;34563:131;34689:4;34563:131;:::i;:::-;34555:139;;34282:419;;;:::o;34707:::-;34873:4;34911:2;34900:9;34896:18;34888:26;;34960:9;34954:4;34950:20;34946:1;34935:9;34931:17;34924:47;34988:131;35114:4;34988:131;:::i;:::-;34980:139;;34707:419;;;:::o;35132:::-;35298:4;35336:2;35325:9;35321:18;35313:26;;35385:9;35379:4;35375:20;35371:1;35360:9;35356:17;35349:47;35413:131;35539:4;35413:131;:::i;:::-;35405:139;;35132:419;;;:::o;35557:::-;35723:4;35761:2;35750:9;35746:18;35738:26;;35810:9;35804:4;35800:20;35796:1;35785:9;35781:17;35774:47;35838:131;35964:4;35838:131;:::i;:::-;35830:139;;35557:419;;;:::o;35982:::-;36148:4;36186:2;36175:9;36171:18;36163:26;;36235:9;36229:4;36225:20;36221:1;36210:9;36206:17;36199:47;36263:131;36389:4;36263:131;:::i;:::-;36255:139;;35982:419;;;:::o;36407:::-;36573:4;36611:2;36600:9;36596:18;36588:26;;36660:9;36654:4;36650:20;36646:1;36635:9;36631:17;36624:47;36688:131;36814:4;36688:131;:::i;:::-;36680:139;;36407:419;;;:::o;36832:::-;36998:4;37036:2;37025:9;37021:18;37013:26;;37085:9;37079:4;37075:20;37071:1;37060:9;37056:17;37049:47;37113:131;37239:4;37113:131;:::i;:::-;37105:139;;36832:419;;;:::o;37257:::-;37423:4;37461:2;37450:9;37446:18;37438:26;;37510:9;37504:4;37500:20;37496:1;37485:9;37481:17;37474:47;37538:131;37664:4;37538:131;:::i;:::-;37530:139;;37257:419;;;:::o;37682:::-;37848:4;37886:2;37875:9;37871:18;37863:26;;37935:9;37929:4;37925:20;37921:1;37910:9;37906:17;37899:47;37963:131;38089:4;37963:131;:::i;:::-;37955:139;;37682:419;;;:::o;38107:::-;38273:4;38311:2;38300:9;38296:18;38288:26;;38360:9;38354:4;38350:20;38346:1;38335:9;38331:17;38324:47;38388:131;38514:4;38388:131;:::i;:::-;38380:139;;38107:419;;;:::o;38532:::-;38698:4;38736:2;38725:9;38721:18;38713:26;;38785:9;38779:4;38775:20;38771:1;38760:9;38756:17;38749:47;38813:131;38939:4;38813:131;:::i;:::-;38805:139;;38532:419;;;:::o;38957:::-;39123:4;39161:2;39150:9;39146:18;39138:26;;39210:9;39204:4;39200:20;39196:1;39185:9;39181:17;39174:47;39238:131;39364:4;39238:131;:::i;:::-;39230:139;;38957:419;;;:::o;39382:::-;39548:4;39586:2;39575:9;39571:18;39563:26;;39635:9;39629:4;39625:20;39621:1;39610:9;39606:17;39599:47;39663:131;39789:4;39663:131;:::i;:::-;39655:139;;39382:419;;;:::o;39807:222::-;39900:4;39938:2;39927:9;39923:18;39915:26;;39951:71;40019:1;40008:9;40004:17;39995:6;39951:71;:::i;:::-;39807:222;;;;:::o;40035:129::-;40069:6;40096:20;;:::i;:::-;40086:30;;40125:33;40153:4;40145:6;40125:33;:::i;:::-;40035:129;;;:::o;40170:75::-;40203:6;40236:2;40230:9;40220:19;;40170:75;:::o;40251:311::-;40328:4;40418:18;40410:6;40407:30;40404:56;;;40440:18;;:::i;:::-;40404:56;40490:4;40482:6;40478:17;40470:25;;40550:4;40544;40540:15;40532:23;;40251:311;;;:::o;40568:307::-;40629:4;40719:18;40711:6;40708:30;40705:56;;;40741:18;;:::i;:::-;40705:56;40779:29;40801:6;40779:29;:::i;:::-;40771:37;;40863:4;40857;40853:15;40845:23;;40568:307;;;:::o;40881:308::-;40943:4;41033:18;41025:6;41022:30;41019:56;;;41055:18;;:::i;:::-;41019:56;41093:29;41115:6;41093:29;:::i;:::-;41085:37;;41177:4;41171;41167:15;41159:23;;40881:308;;;:::o;41195:141::-;41244:4;41267:3;41259:11;;41290:3;41287:1;41280:14;41324:4;41321:1;41311:18;41303:26;;41195:141;;;:::o;41342:98::-;41393:6;41427:5;41421:12;41411:22;;41342:98;;;:::o;41446:99::-;41498:6;41532:5;41526:12;41516:22;;41446:99;;;:::o;41551:168::-;41634:11;41668:6;41663:3;41656:19;41708:4;41703:3;41699:14;41684:29;;41551:168;;;;:::o;41725:169::-;41809:11;41843:6;41838:3;41831:19;41883:4;41878:3;41874:14;41859:29;;41725:169;;;;:::o;41900:148::-;42002:11;42039:3;42024:18;;41900:148;;;;:::o;42054:305::-;42094:3;42113:20;42131:1;42113:20;:::i;:::-;42108:25;;42147:20;42165:1;42147:20;:::i;:::-;42142:25;;42301:1;42233:66;42229:74;42226:1;42223:81;42220:107;;;42307:18;;:::i;:::-;42220:107;42351:1;42348;42344:9;42337:16;;42054:305;;;;:::o;42365:185::-;42405:1;42422:20;42440:1;42422:20;:::i;:::-;42417:25;;42456:20;42474:1;42456:20;:::i;:::-;42451:25;;42495:1;42485:35;;42500:18;;:::i;:::-;42485:35;42542:1;42539;42535:9;42530:14;;42365:185;;;;:::o;42556:348::-;42596:7;42619:20;42637:1;42619:20;:::i;:::-;42614:25;;42653:20;42671:1;42653:20;:::i;:::-;42648:25;;42841:1;42773:66;42769:74;42766:1;42763:81;42758:1;42751:9;42744:17;42740:105;42737:131;;;42848:18;;:::i;:::-;42737:131;42896:1;42893;42889:9;42878:20;;42556:348;;;;:::o;42910:191::-;42950:4;42970:20;42988:1;42970:20;:::i;:::-;42965:25;;43004:20;43022:1;43004:20;:::i;:::-;42999:25;;43043:1;43040;43037:8;43034:34;;;43048:18;;:::i;:::-;43034:34;43093:1;43090;43086:9;43078:17;;42910:191;;;;:::o;43107:96::-;43144:7;43173:24;43191:5;43173:24;:::i;:::-;43162:35;;43107:96;;;:::o;43209:90::-;43243:7;43286:5;43279:13;43272:21;43261:32;;43209:90;;;:::o;43305:149::-;43341:7;43381:66;43374:5;43370:78;43359:89;;43305:149;;;:::o;43460:125::-;43526:7;43555:24;43573:5;43555:24;:::i;:::-;43544:35;;43460:125;;;:::o;43591:126::-;43628:7;43668:42;43661:5;43657:54;43646:65;;43591:126;;;:::o;43723:77::-;43760:7;43789:5;43778:16;;43723:77;;;:::o;43806:154::-;43890:6;43885:3;43880;43867:30;43952:1;43943:6;43938:3;43934:16;43927:27;43806:154;;;:::o;43966:307::-;44034:1;44044:113;44058:6;44055:1;44052:13;44044:113;;;44143:1;44138:3;44134:11;44128:18;44124:1;44119:3;44115:11;44108:39;44080:2;44077:1;44073:10;44068:15;;44044:113;;;44175:6;44172:1;44169:13;44166:101;;;44255:1;44246:6;44241:3;44237:16;44230:27;44166:101;44015:258;43966:307;;;:::o;44279:320::-;44323:6;44360:1;44354:4;44350:12;44340:22;;44407:1;44401:4;44397:12;44428:18;44418:81;;44484:4;44476:6;44472:17;44462:27;;44418:81;44546:2;44538:6;44535:14;44515:18;44512:38;44509:84;;;44565:18;;:::i;:::-;44509:84;44330:269;44279:320;;;:::o;44605:281::-;44688:27;44710:4;44688:27;:::i;:::-;44680:6;44676:40;44818:6;44806:10;44803:22;44782:18;44770:10;44767:34;44764:62;44761:88;;;44829:18;;:::i;:::-;44761:88;44869:10;44865:2;44858:22;44648:238;44605:281;;:::o;44892:233::-;44931:3;44954:24;44972:5;44954:24;:::i;:::-;44945:33;;45000:66;44993:5;44990:77;44987:103;;;45070:18;;:::i;:::-;44987:103;45117:1;45110:5;45106:13;45099:20;;44892:233;;;:::o;45131:176::-;45163:1;45180:20;45198:1;45180:20;:::i;:::-;45175:25;;45214:20;45232:1;45214:20;:::i;:::-;45209:25;;45253:1;45243:35;;45258:18;;:::i;:::-;45243:35;45299:1;45296;45292:9;45287:14;;45131:176;;;;:::o;45313:180::-;45361:77;45358:1;45351:88;45458:4;45455:1;45448:15;45482:4;45479:1;45472:15;45499:180;45547:77;45544:1;45537:88;45644:4;45641:1;45634:15;45668:4;45665:1;45658:15;45685:180;45733:77;45730:1;45723:88;45830:4;45827:1;45820:15;45854:4;45851:1;45844:15;45871:180;45919:77;45916:1;45909:88;46016:4;46013:1;46006:15;46040:4;46037:1;46030:15;46057:180;46105:77;46102:1;46095:88;46202:4;46199:1;46192:15;46226:4;46223:1;46216:15;46243:117;46352:1;46349;46342:12;46366:117;46475:1;46472;46465:12;46489:117;46598:1;46595;46588:12;46612:117;46721:1;46718;46711:12;46735:117;46844:1;46841;46834:12;46858:117;46967:1;46964;46957:12;46981:102;47022:6;47073:2;47069:7;47064:2;47057:5;47053:14;47049:28;47039:38;;46981:102;;;:::o;47089:237::-;47229:34;47225:1;47217:6;47213:14;47206:58;47298:20;47293:2;47285:6;47281:15;47274:45;47089:237;:::o;47332:163::-;47472:15;47468:1;47460:6;47456:14;47449:39;47332:163;:::o;47501:225::-;47641:34;47637:1;47629:6;47625:14;47618:58;47710:8;47705:2;47697:6;47693:15;47686:33;47501:225;:::o;47732:178::-;47872:30;47868:1;47860:6;47856:14;47849:54;47732:178;:::o;47916:226::-;48056:34;48052:1;48044:6;48040:14;48033:58;48125:9;48120:2;48112:6;48108:15;48101:34;47916:226;:::o;48148:223::-;48288:34;48284:1;48276:6;48272:14;48265:58;48357:6;48352:2;48344:6;48340:15;48333:31;48148:223;:::o;48377:175::-;48517:27;48513:1;48505:6;48501:14;48494:51;48377:175;:::o;48558:168::-;48698:20;48694:1;48686:6;48682:14;48675:44;48558:168;:::o;48732:181::-;48872:33;48868:1;48860:6;48856:14;48849:57;48732:181;:::o;48919:163::-;49059:15;49055:1;49047:6;49043:14;49036:39;48919:163;:::o;49088:231::-;49228:34;49224:1;49216:6;49212:14;49205:58;49297:14;49292:2;49284:6;49280:15;49273:39;49088:231;:::o;49325:177::-;49465:29;49461:1;49453:6;49449:14;49442:53;49325:177;:::o;49508:243::-;49648:34;49644:1;49636:6;49632:14;49625:58;49717:26;49712:2;49704:6;49700:15;49693:51;49508:243;:::o;49757:229::-;49897:34;49893:1;49885:6;49881:14;49874:58;49966:12;49961:2;49953:6;49949:15;49942:37;49757:229;:::o;49992:228::-;50132:34;50128:1;50120:6;50116:14;50109:58;50201:11;50196:2;50188:6;50184:15;50177:36;49992:228;:::o;50226:181::-;50366:33;50362:1;50354:6;50350:14;50343:57;50226:181;:::o;50413:178::-;50553:30;50549:1;50541:6;50537:14;50530:54;50413:178;:::o;50597:182::-;50737:34;50733:1;50725:6;50721:14;50714:58;50597:182;:::o;50785:231::-;50925:34;50921:1;50913:6;50909:14;50902:58;50994:14;50989:2;50981:6;50977:15;50970:39;50785:231;:::o;51022:182::-;51162:34;51158:1;51150:6;51146:14;51139:58;51022:182;:::o;51210:228::-;51350:34;51346:1;51338:6;51334:14;51327:58;51419:11;51414:2;51406:6;51402:15;51395:36;51210:228;:::o;51444:234::-;51584:34;51580:1;51572:6;51568:14;51561:58;51653:17;51648:2;51640:6;51636:15;51629:42;51444:234;:::o;51684:220::-;51824:34;51820:1;51812:6;51808:14;51801:58;51893:3;51888:2;51880:6;51876:15;51869:28;51684:220;:::o;51910:159::-;52050:11;52046:1;52038:6;52034:14;52027:35;51910:159;:::o;52075:236::-;52215:34;52211:1;52203:6;52199:14;52192:58;52284:19;52279:2;52271:6;52267:15;52260:44;52075:236;:::o;52317:181::-;52457:33;52453:1;52445:6;52441:14;52434:57;52317:181;:::o;52504:162::-;52644:14;52640:1;52632:6;52628:14;52621:38;52504:162;:::o;52672:122::-;52745:24;52763:5;52745:24;:::i;:::-;52738:5;52735:35;52725:63;;52784:1;52781;52774:12;52725:63;52672:122;:::o;52800:116::-;52870:21;52885:5;52870:21;:::i;:::-;52863:5;52860:32;52850:60;;52906:1;52903;52896:12;52850:60;52800:116;:::o;52922:120::-;52994:23;53011:5;52994:23;:::i;:::-;52987:5;52984:34;52974:62;;53032:1;53029;53022:12;52974:62;52922:120;:::o;53048:180::-;53150:53;53197:5;53150:53;:::i;:::-;53143:5;53140:64;53130:92;;53218:1;53215;53208:12;53130:92;53048:180;:::o;53234:122::-;53307:24;53325:5;53307:24;:::i;:::-;53300:5;53297:35;53287:63;;53346:1;53343;53336:12;53287:63;53234:122;:::o

Swarm Source

ipfs://d04119c0b81443dde5287d06043148cc11d90eceec5b74447bf2fd039251235f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.