ETH Price: $2,366.06 (-3.95%)

Token

WolfGang(TM) Official (WOOF)
 

Overview

Max Total Supply

5,555 WOOF

Holders

258

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 WOOF
0x8e3eeffb632e71a7f350b3e9dcacdc7f9bd13bb1
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:
WolfGang_official

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-07-12
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7; 
library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
   function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}
abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        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);
    }
 
    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);
    }
 
    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);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`.
        uint24 extraData;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

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

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @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);

    // ==============================
    //            IERC2309
    // ==============================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`,
     * as defined in the ERC2309 standard. See `_mintERC2309` for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The bit position of `extraData` in packed ownership.
    uint256 private constant BITPOS_EXTRA_DATA = 232;

    // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
    uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    // The mask of the lower 160 bits for addresses.
    uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;

    // The maximum `quantity` that can be minted with `_mintERC2309`.
    // This limit is to prevent overflows on the address data entries.
    // For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309`
    // is required to cause an overflow, which is unrealistic.
    uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    // - [232..255] `extraData`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * @dev Returns the starting token ID.
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    /**
     * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev Packs ownership data into a single uint256.
     */
    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, BITMASK_ADDRESS)
            // `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    /**
     * @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, it can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Returns the `nextInitialized` flag set if `quantity` equals 1.
     */
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << BITPOS_NEXT_INITIALIZED`.
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), 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-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 {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * See {_mint}.
     *
     * Emits a {Transfer} event for each mint.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event for each mint.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // `balance` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * This function is intended for efficient minting only during contract creation.
     *
     * It emits only one {ConsecutiveTransfer} as defined in
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309),
     * instead of a sequence of {Transfer} event(s).
     *
     * Calling this function outside of contract creation WILL make your contract
     * non-compliant with the ERC721 standard.
     * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309
     * {ConsecutiveTransfer} event is only permissible during contract creation.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {ConsecutiveTransfer} event.
     */
    function _mintERC2309(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Returns the storage slot and value for the approved address of `tokenId`.
     */
    function _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`.
        assembly {
            // Compute the slot.
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            // Load the slot's value from storage.
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    /**
     * @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`.
     */
    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
            from := and(from, BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, BITMASK_ADDRESS)
            // `msgSender == from || msgSender == approvedAddress`.
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

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

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        if (approvalCheck) {
            // The nested ifs save around 20+ gas over a compound boolean condition.
            if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Directly sets the extra data for the ownership data `index`.
     */
    function _setExtraDataAt(uint256 index, uint24 extraData) internal {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    /**
     * @dev Returns the next extra data for the packed ownership data.
     * The returned result is shifted into position.
     */
    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
    }

    /**
     * @dev Called during each token transfer to set the 24bit `extraData` field.
     * Intended to be overridden by the cosumer contract.
     *
     * `previousExtraData` - the value of `extraData` before transfer.
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred.
     * This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred.
     * This includes minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit),
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length,
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for {
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } {
                // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

contract WolfGang_official is Ownable, ERC721A, ReentrancyGuard  {
    using Strings for uint256;
    string public uri;
    bool public hidden = true;

    uint public status = 0; // 0-stop 1-free 2-whietlist 3-public
    uint COLLECTION_SIZE = 5555;

    uint public PRICE = 0.01 ether;

    bytes32 public merkleRootFree = 0xd0d737db2f626fd4b91c2ae5ff8f091d598c06a76628298231864b0dcb3b8ada;
    bytes32 public merkleRootWhitelist = 0x8a3b7c543930d7409e858a194e4576f810de5b10ce052dc2ce8b8220947b8eb4;
    function setMerkleRoot(bytes32 mFree, bytes32 mWhitelist) public onlyOwner{
        merkleRootFree = mFree;
        merkleRootWhitelist = mWhitelist;
    }
    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    constructor() ERC721A("WolfGang(TM) Official", "WOOF") {
        uri = "https://woof.ws/nft_collection/hidden_metadata/hidden.json";
    }
    function reveal(string memory newuri) public onlyOwner{
        uri = newuri;
        hidden = !hidden;
    }
    function freeMint(uint256 quantity, bytes32[] calldata merkleproof) public nonReentrant{
        require(status == 1, "Freesale not active!!");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify( merkleproof, merkleRootFree, leaf),"Not whitelisted");
        require(totalSupply()+quantity <= COLLECTION_SIZE, "SOLD OUT!!");
        
        _safeMint(msg.sender, quantity);
    }
    function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof) public payable nonReentrant{
        require(status == 2, "Whitelist not active!!");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify( merkleproof, merkleRootFree, leaf) || MerkleProof.verify( merkleproof, merkleRootWhitelist, leaf),"Not whitelisted");
        require(msg.value >= PRICE, "Invalid price sent");
        require(totalSupply()+quantity <= COLLECTION_SIZE, "SOLD OUT!!");
        
        _safeMint(msg.sender, quantity);
    }
    function mint(uint256 quantity) public payable nonReentrant{
        require(status == 3, "Public Sale not active!!");
        require(msg.value >= PRICE, "Invalid price sent");
        require(totalSupply()+quantity <= COLLECTION_SIZE, "SOLD OUT!!");

        _safeMint(msg.sender, quantity);
    }
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
    function giveaway(address to, uint256 quantity) public onlyOwner nonReentrant{
        require(totalSupply() <= COLLECTION_SIZE, "SOLD OUT!!");
        _safeMint(to, quantity);
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token!");
        if(hidden)
            return bytes(baseURI()).length > 0 ? string(abi.encodePacked(baseURI())) : "";
        else
            return bytes(baseURI()).length > 0 ? string(abi.encodePacked(baseURI(), tokenId.toString(), ".json")) : "";
    }
    function baseURI() public view returns (string memory) {
        return uri;
    }
    function setBaseURI(string memory u) public onlyOwner{
        uri = u;
    }
    function setStatus(uint s) public onlyOwner{
        status = s;
    }
    function setPrice(uint p) public onlyOwner{
        PRICE = p;
    }
    function _startTokenId() pure internal override returns (uint256) {
        return 1;
    }
    function withdrawMoney() external onlyOwner {
        (bool successB, ) = owner().call{value: address(this).balance}("");
        require(successB, "Transfer failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"freeMint","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":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hidden","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"merkleRootFree","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootWhitelist","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"reveal","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":"u","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"mFree","type":"bytes32"},{"internalType":"bytes32","name":"mWhitelist","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600b60006101000a81548160ff0219169083151502179055506000600c556115b3600d55662386f26fc10000600e557fd0d737db2f626fd4b91c2ae5ff8f091d598c06a76628298231864b0dcb3b8ada60001b600f557f8a3b7c543930d7409e858a194e4576f810de5b10ce052dc2ce8b8220947b8eb460001b6010553480156200009057600080fd5b506040518060400160405280601581526020017f576f6c6647616e6728544d29204f6666696369616c00000000000000000000008152506040518060400160405280600481526020017f574f4f46000000000000000000000000000000000000000000000000000000008152506200011d62000111620001a760201b60201c565b620001af60201b60201c565b8160039080519060200190620001359291906200027c565b5080600490805190602001906200014e9291906200027c565b506200015f6200027360201b60201c565b600181905550505060016009819055506040518060600160405280603a815260200162004001603a9139600a9080519060200190620001a09291906200027c565b5062000391565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200028a906200032c565b90600052602060002090601f016020900481019282620002ae5760008555620002fa565b82601f10620002c957805160ff1916838001178555620002fa565b82800160010185558215620002fa579182015b82811115620002f9578251825591602001919060010190620002dc565b5b5090506200030991906200030d565b5090565b5b80821115620003285760008160009055506001016200030e565b5090565b600060028204905060018216806200034557607f821691505b602082108114156200035c576200035b62000362565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613c6080620003a16000396000f3fe6080604052600436106102045760003560e01c806389ba959c11610118578063aef6d4b1116100a0578063dc33e6811161006f578063dc33e68114610711578063e2f36dce1461074e578063e985e9c514610777578063eac989f8146107b4578063f2fde38b146107df57610204565b8063aef6d4b114610664578063b88d4fde1461068f578063c87b56dd146106b8578063d2cab056146106f557610204565b806391b7f5ed116100e757806391b7f5ed146105b457806395d89b41146105dd578063a0712d6814610608578063a22cb46514610624578063ac4460021461064d57610204565b806389ba959c146105085780638d859f3e146105335780638da5cb5b1461055e5780638e1f9cfe1461058957610204565b806342842e0e1161019b57806369ba1a751161016a57806369ba1a75146104375780636c0360eb1461046057806370a082311461048b578063715018a6146104c857806375edcbe0146104df57610204565b806342842e0e1461037f5780634c261247146103a857806355f804b3146103d15780636352211e146103fa57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd14610300578063200d2ed21461032b57806323b872dd1461035657610204565b806301ffc9a714610209578063050225ea1461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e67565b610808565b60405161023d9190613331565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612de7565b61089a565b005b34801561027b57600080fd5b506102846109c6565b6040516102919190613367565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f0a565b610a58565b6040516102ce91906132ca565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612de7565b610ad4565b005b34801561030c57600080fd5b50610315610c15565b60405161032291906134e9565b60405180910390f35b34801561033757600080fd5b50610340610c2c565b60405161034d91906134e9565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612cd1565b610c32565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612cd1565b610f57565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612ec1565b610f77565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612ec1565b611037565b005b34801561040657600080fd5b50610421600480360381019061041c9190612f0a565b6110cd565b60405161042e91906132ca565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612f0a565b6110df565b005b34801561046c57600080fd5b50610475611165565b6040516104829190613367565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612c64565b6111f7565b6040516104bf91906134e9565b60405180910390f35b3480156104d457600080fd5b506104dd6112b0565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612e27565b611338565b005b34801561051457600080fd5b5061051d6113c6565b60405161052a919061334c565b60405180910390f35b34801561053f57600080fd5b506105486113cc565b60405161055591906134e9565b60405180910390f35b34801561056a57600080fd5b506105736113d2565b60405161058091906132ca565b60405180910390f35b34801561059557600080fd5b5061059e6113fb565b6040516105ab919061334c565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612f0a565b611401565b005b3480156105e957600080fd5b506105f2611487565b6040516105ff9190613367565b60405180910390f35b610622600480360381019061061d9190612f0a565b611519565b005b34801561063057600080fd5b5061064b60048036038101906106469190612da7565b61165d565b005b34801561065957600080fd5b506106626117d5565b005b34801561067057600080fd5b50610679611907565b6040516106869190613331565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612d24565b61191a565b005b3480156106c457600080fd5b506106df60048036038101906106da9190612f0a565b61198d565b6040516106ec9190613367565b60405180910390f35b61070f600480360381019061070a9190612f37565b611a9f565b005b34801561071d57600080fd5b5061073860048036038101906107339190612c64565b611cf3565b60405161074591906134e9565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612f37565b611d05565b005b34801561078357600080fd5b5061079e60048036038101906107999190612c91565b611ebf565b6040516107ab9190613331565b60405180910390f35b3480156107c057600080fd5b506107c9611f53565b6040516107d69190613367565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190612c64565b611fe1565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108935750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6108a26120d9565b73ffffffffffffffffffffffffffffffffffffffff166108c06113d2565b73ffffffffffffffffffffffffffffffffffffffff1614610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90613429565b60405180910390fd5b6002600954141561095c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610953906134c9565b60405180910390fd5b6002600981905550600d5461096f610c15565b11156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a7906133e9565b60405180910390fd5b6109ba82826120e1565b60016009819055505050565b6060600380546109d590613754565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190613754565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b5050505050905090565b6000610a63826120ff565b610a99576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610adf826110cd565b90508073ffffffffffffffffffffffffffffffffffffffff16610b0061215e565b73ffffffffffffffffffffffffffffffffffffffff1614610b6357610b2c81610b2761215e565b611ebf565b610b62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c1f612166565b6002546001540303905090565b600c5481565b6000610c3d8261216f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cb08461223d565b91509150610cc68187610cc161215e565b61225f565b610d1257610cdb86610cd661215e565b611ebf565b610d11576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d79576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8686868660016122a3565b8015610d9157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5f85610e3b8888876122a9565b7c0200000000000000000000000000000000000000000000000000000000176122d1565b600560008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610ee7576000600185019050600060056000838152602001908152602001600020541415610ee5576001548114610ee4578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f4f86868660016122fc565b505050505050565b610f728383836040518060200160405280600081525061191a565b505050565b610f7f6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610f9d6113d2565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613429565b60405180910390fd5b80600a9080519060200190611009929190612a0d565b50600b60009054906101000a900460ff1615600b60006101000a81548160ff02191690831515021790555050565b61103f6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661105d6113d2565b73ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90613429565b60405180910390fd5b80600a90805190602001906110c9929190612a0d565b5050565b60006110d88261216f565b9050919050565b6110e76120d9565b73ffffffffffffffffffffffffffffffffffffffff166111056113d2565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613429565b60405180910390fd5b80600c8190555050565b6060600a805461117490613754565b80601f01602080910402602001604051908101604052809291908181526020018280546111a090613754565b80156111ed5780601f106111c2576101008083540402835291602001916111ed565b820191906000526020600020905b8154815290600101906020018083116111d057829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112b86120d9565b73ffffffffffffffffffffffffffffffffffffffff166112d66113d2565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613429565b60405180910390fd5b6113366000612302565b565b6113406120d9565b73ffffffffffffffffffffffffffffffffffffffff1661135e6113d2565b73ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613429565b60405180910390fd5b81600f81905550806010819055505050565b600f5481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6114096120d9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d2565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613429565b60405180910390fd5b80600e8190555050565b60606004805461149690613754565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290613754565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b5050505050905090565b6002600954141561155f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611556906134c9565b60405180910390fd5b60026009819055506003600c54146115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a3906134a9565b60405180910390fd5b600e543410156115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890613489565b60405180910390fd5b600d54816115fd610c15565b61160791906135d9565b1115611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906133e9565b60405180910390fd5b61165233826120e1565b600160098190555050565b61166561215e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116d761215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178461215e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c99190613331565b60405180910390a35050565b6117dd6120d9565b73ffffffffffffffffffffffffffffffffffffffff166117fb6113d2565b73ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613429565b60405180910390fd5b600061185b6113d2565b73ffffffffffffffffffffffffffffffffffffffff164760405161187e906132b5565b60006040518083038185875af1925050503d80600081146118bb576040519150601f19603f3d011682016040523d82523d6000602084013e6118c0565b606091505b5050905080611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613469565b60405180910390fd5b50565b600b60009054906101000a900460ff1681565b611925848484610c32565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461198757611950848484846123c6565b611986576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611998826120ff565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906133c9565b60405180910390fd5b600b60009054906101000a900460ff1615611a405760006119f6611165565b5111611a115760405180602001604052806000815250611a39565b611a19611165565b604051602001611a29919061326f565b6040516020818303038152906040525b9050611a9a565b6000611a4a611165565b5111611a655760405180602001604052806000815250611a97565b611a6d611165565b611a7683612526565b604051602001611a87929190613286565b6040516020818303038152906040525b90505b919050565b60026009541415611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc906134c9565b60405180910390fd5b60026009819055506002600c5414611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613389565b60405180910390fd5b600033604051602001611b459190613254565b604051602081830303815290604052805190602001209050611bab838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483612687565b80611c005750611bff838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060105483612687565b5b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690613409565b60405180910390fd5b600e54341015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613489565b60405180910390fd5b600d5484611c90610c15565b611c9a91906135d9565b1115611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906133e9565b60405180910390fd5b611ce533856120e1565b506001600981905550505050565b6000611cfe8261269e565b9050919050565b60026009541415611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d42906134c9565b60405180910390fd5b60026009819055506001600c5414611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613449565b60405180910390fd5b600033604051602001611dab9190613254565b604051602081830303815290604052805190602001209050611e11838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483612687565b611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790613409565b60405180910390fd5b600d5484611e5c610c15565b611e6691906135d9565b1115611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e906133e9565b60405180910390fd5b611eb133856120e1565b506001600981905550505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611f6090613754565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8c90613754565b8015611fd95780601f10611fae57610100808354040283529160200191611fd9565b820191906000526020600020905b815481529060010190602001808311611fbc57829003601f168201915b505050505081565b611fe96120d9565b73ffffffffffffffffffffffffffffffffffffffff166120076113d2565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613429565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c4906133a9565b60405180910390fd5b6120d681612302565b50565b600033905090565b6120fb8282604051806020016040528060008152506126f5565b5050565b60008161210a612166565b11158015612119575060015482105b8015612157575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b6000808290508061217e612166565b11612206576001548110156122055760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612203575b60008114156121f95760056000836001900393508381526020019081526020016000205490506121ce565b8092505050612238565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600790508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86122c0868684612793565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123ec61215e565b8786866040518563ffffffff1660e01b815260040161240e94939291906132e5565b602060405180830381600087803b15801561242857600080fd5b505af192505050801561245957506040513d601f19601f820116820180604052508101906124569190612e94565b60015b6124d3573d8060008114612489576040519150601f19603f3d011682016040523d82523d6000602084013e61248e565b606091505b506000815114156124cb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600082141561256e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612682565b600082905060005b600082146125a0578080612589906137b7565b915050600a82612599919061362f565b9150612576565b60008167ffffffffffffffff8111156125bc576125bb613911565b5b6040519080825280601f01601f1916602001820160405280156125ee5781602001600182028036833780820191505090505b5090505b6000851461267b576001826126079190613660565b9150600a856126169190613824565b603061262291906135d9565b60f81b818381518110612638576126376138e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612674919061362f565b94506125f2565b8093505050505b919050565b600082612694858461279c565b1490509392505050565b600067ffffffffffffffff6040600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6126ff8383612811565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461278e5760006001549050600083820390505b61274060008683806001019450866123c6565b612776576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061272d57816001541461278b57600080fd5b50505b505050565b60009392505050565b60008082905060005b84518110156128065760008582815181106127c3576127c26138e2565b5b602002602001015190508083116127e5576127de83826129e6565b92506127f2565b6127ef81846129e6565b92505b5080806127fe906137b7565b9150506127a5565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156128ba576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c760008483856122a3565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061293e8361292f60008660006122a9565b612938856129fd565b176122d1565b60056000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612962578060018190555050506129e160008483856122fc565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b828054612a1990613754565b90600052602060002090601f016020900481019282612a3b5760008555612a82565b82601f10612a5457805160ff1916838001178555612a82565b82800160010185558215612a82579182015b82811115612a81578251825591602001919060010190612a66565b5b509050612a8f9190612a93565b5090565b5b80821115612aac576000816000905550600101612a94565b5090565b6000612ac3612abe84613529565b613504565b905082815260208101848484011115612adf57612ade61394f565b5b612aea848285613712565b509392505050565b6000612b05612b008461355a565b613504565b905082815260208101848484011115612b2157612b2061394f565b5b612b2c848285613712565b509392505050565b600081359050612b4381613bb7565b92915050565b60008083601f840112612b5f57612b5e613945565b5b8235905067ffffffffffffffff811115612b7c57612b7b613940565b5b602083019150836020820283011115612b9857612b9761394a565b5b9250929050565b600081359050612bae81613bce565b92915050565b600081359050612bc381613be5565b92915050565b600081359050612bd881613bfc565b92915050565b600081519050612bed81613bfc565b92915050565b600082601f830112612c0857612c07613945565b5b8135612c18848260208601612ab0565b91505092915050565b600082601f830112612c3657612c35613945565b5b8135612c46848260208601612af2565b91505092915050565b600081359050612c5e81613c13565b92915050565b600060208284031215612c7a57612c79613959565b5b6000612c8884828501612b34565b91505092915050565b60008060408385031215612ca857612ca7613959565b5b6000612cb685828601612b34565b9250506020612cc785828601612b34565b9150509250929050565b600080600060608486031215612cea57612ce9613959565b5b6000612cf886828701612b34565b9350506020612d0986828701612b34565b9250506040612d1a86828701612c4f565b9150509250925092565b60008060008060808587031215612d3e57612d3d613959565b5b6000612d4c87828801612b34565b9450506020612d5d87828801612b34565b9350506040612d6e87828801612c4f565b925050606085013567ffffffffffffffff811115612d8f57612d8e613954565b5b612d9b87828801612bf3565b91505092959194509250565b60008060408385031215612dbe57612dbd613959565b5b6000612dcc85828601612b34565b9250506020612ddd85828601612b9f565b9150509250929050565b60008060408385031215612dfe57612dfd613959565b5b6000612e0c85828601612b34565b9250506020612e1d85828601612c4f565b9150509250929050565b60008060408385031215612e3e57612e3d613959565b5b6000612e4c85828601612bb4565b9250506020612e5d85828601612bb4565b9150509250929050565b600060208284031215612e7d57612e7c613959565b5b6000612e8b84828501612bc9565b91505092915050565b600060208284031215612eaa57612ea9613959565b5b6000612eb884828501612bde565b91505092915050565b600060208284031215612ed757612ed6613959565b5b600082013567ffffffffffffffff811115612ef557612ef4613954565b5b612f0184828501612c21565b91505092915050565b600060208284031215612f2057612f1f613959565b5b6000612f2e84828501612c4f565b91505092915050565b600080600060408486031215612f5057612f4f613959565b5b6000612f5e86828701612c4f565b935050602084013567ffffffffffffffff811115612f7f57612f7e613954565b5b612f8b86828701612b49565b92509250509250925092565b612fa081613694565b82525050565b612fb7612fb282613694565b613800565b82525050565b612fc6816136a6565b82525050565b612fd5816136b2565b82525050565b6000612fe68261358b565b612ff081856135a1565b9350613000818560208601613721565b6130098161395e565b840191505092915050565b600061301f82613596565b61302981856135bd565b9350613039818560208601613721565b6130428161395e565b840191505092915050565b600061305882613596565b61306281856135ce565b9350613072818560208601613721565b80840191505092915050565b600061308b6016836135bd565b91506130968261397c565b602082019050919050565b60006130ae6026836135bd565b91506130b9826139a5565b604082019050919050565b60006130d16030836135bd565b91506130dc826139f4565b604082019050919050565b60006130f4600a836135bd565b91506130ff82613a43565b602082019050919050565b6000613117600f836135bd565b915061312282613a6c565b602082019050919050565b600061313a6005836135ce565b915061314582613a95565b600582019050919050565b600061315d6020836135bd565b915061316882613abe565b602082019050919050565b60006131806015836135bd565b915061318b82613ae7565b602082019050919050565b60006131a36000836135b2565b91506131ae82613b10565b600082019050919050565b60006131c66010836135bd565b91506131d182613b13565b602082019050919050565b60006131e96012836135bd565b91506131f482613b3c565b602082019050919050565b600061320c6018836135bd565b915061321782613b65565b602082019050919050565b600061322f601f836135bd565b915061323a82613b8e565b602082019050919050565b61324e81613708565b82525050565b60006132608284612fa6565b60148201915081905092915050565b600061327b828461304d565b915081905092915050565b6000613292828561304d565b915061329e828461304d565b91506132a98261312d565b91508190509392505050565b60006132c082613196565b9150819050919050565b60006020820190506132df6000830184612f97565b92915050565b60006080820190506132fa6000830187612f97565b6133076020830186612f97565b6133146040830185613245565b81810360608301526133268184612fdb565b905095945050505050565b60006020820190506133466000830184612fbd565b92915050565b60006020820190506133616000830184612fcc565b92915050565b600060208201905081810360008301526133818184613014565b905092915050565b600060208201905081810360008301526133a28161307e565b9050919050565b600060208201905081810360008301526133c2816130a1565b9050919050565b600060208201905081810360008301526133e2816130c4565b9050919050565b60006020820190508181036000830152613402816130e7565b9050919050565b600060208201905081810360008301526134228161310a565b9050919050565b6000602082019050818103600083015261344281613150565b9050919050565b6000602082019050818103600083015261346281613173565b9050919050565b60006020820190508181036000830152613482816131b9565b9050919050565b600060208201905081810360008301526134a2816131dc565b9050919050565b600060208201905081810360008301526134c2816131ff565b9050919050565b600060208201905081810360008301526134e281613222565b9050919050565b60006020820190506134fe6000830184613245565b92915050565b600061350e61351f565b905061351a8282613786565b919050565b6000604051905090565b600067ffffffffffffffff82111561354457613543613911565b5b61354d8261395e565b9050602081019050919050565b600067ffffffffffffffff82111561357557613574613911565b5b61357e8261395e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006135e482613708565b91506135ef83613708565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362457613623613855565b5b828201905092915050565b600061363a82613708565b915061364583613708565b92508261365557613654613884565b5b828204905092915050565b600061366b82613708565b915061367683613708565b92508282101561368957613688613855565b5b828203905092915050565b600061369f826136e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373f578082015181840152602081019050613724565b8381111561374e576000848401525b50505050565b6000600282049050600182168061376c57607f821691505b602082108114156137805761377f6138b3565b5b50919050565b61378f8261395e565b810181811067ffffffffffffffff821117156137ae576137ad613911565b5b80604052505050565b60006137c282613708565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137f5576137f4613855565b5b600182019050919050565b600061380b82613812565b9050919050565b600061381d8261396f565b9050919050565b600061382f82613708565b915061383a83613708565b92508261384a57613849613884565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206e6f7420616374697665212100000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f534f4c44204f5554212100000000000000000000000000000000000000000000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4672656573616c65206e6f742061637469766521210000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c69642070726963652073656e740000000000000000000000000000600082015250565b7f5075626c69632053616c65206e6f742061637469766521210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613bc081613694565b8114613bcb57600080fd5b50565b613bd7816136a6565b8114613be257600080fd5b50565b613bee816136b2565b8114613bf957600080fd5b50565b613c05816136bc565b8114613c1057600080fd5b50565b613c1c81613708565b8114613c2757600080fd5b5056fea2646970667358221220acc01c204a6bae93760ad4b2d35f9106206e839d22460960b746abc1737fb89264736f6c6343000807003368747470733a2f2f776f6f662e77732f6e66745f636f6c6c656374696f6e2f68696464656e5f6d657461646174612f68696464656e2e6a736f6e

Deployed Bytecode

0x6080604052600436106102045760003560e01c806389ba959c11610118578063aef6d4b1116100a0578063dc33e6811161006f578063dc33e68114610711578063e2f36dce1461074e578063e985e9c514610777578063eac989f8146107b4578063f2fde38b146107df57610204565b8063aef6d4b114610664578063b88d4fde1461068f578063c87b56dd146106b8578063d2cab056146106f557610204565b806391b7f5ed116100e757806391b7f5ed146105b457806395d89b41146105dd578063a0712d6814610608578063a22cb46514610624578063ac4460021461064d57610204565b806389ba959c146105085780638d859f3e146105335780638da5cb5b1461055e5780638e1f9cfe1461058957610204565b806342842e0e1161019b57806369ba1a751161016a57806369ba1a75146104375780636c0360eb1461046057806370a082311461048b578063715018a6146104c857806375edcbe0146104df57610204565b806342842e0e1461037f5780634c261247146103a857806355f804b3146103d15780636352211e146103fa57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd14610300578063200d2ed21461032b57806323b872dd1461035657610204565b806301ffc9a714610209578063050225ea1461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e67565b610808565b60405161023d9190613331565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612de7565b61089a565b005b34801561027b57600080fd5b506102846109c6565b6040516102919190613367565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f0a565b610a58565b6040516102ce91906132ca565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612de7565b610ad4565b005b34801561030c57600080fd5b50610315610c15565b60405161032291906134e9565b60405180910390f35b34801561033757600080fd5b50610340610c2c565b60405161034d91906134e9565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612cd1565b610c32565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612cd1565b610f57565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612ec1565b610f77565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612ec1565b611037565b005b34801561040657600080fd5b50610421600480360381019061041c9190612f0a565b6110cd565b60405161042e91906132ca565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612f0a565b6110df565b005b34801561046c57600080fd5b50610475611165565b6040516104829190613367565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612c64565b6111f7565b6040516104bf91906134e9565b60405180910390f35b3480156104d457600080fd5b506104dd6112b0565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612e27565b611338565b005b34801561051457600080fd5b5061051d6113c6565b60405161052a919061334c565b60405180910390f35b34801561053f57600080fd5b506105486113cc565b60405161055591906134e9565b60405180910390f35b34801561056a57600080fd5b506105736113d2565b60405161058091906132ca565b60405180910390f35b34801561059557600080fd5b5061059e6113fb565b6040516105ab919061334c565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612f0a565b611401565b005b3480156105e957600080fd5b506105f2611487565b6040516105ff9190613367565b60405180910390f35b610622600480360381019061061d9190612f0a565b611519565b005b34801561063057600080fd5b5061064b60048036038101906106469190612da7565b61165d565b005b34801561065957600080fd5b506106626117d5565b005b34801561067057600080fd5b50610679611907565b6040516106869190613331565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612d24565b61191a565b005b3480156106c457600080fd5b506106df60048036038101906106da9190612f0a565b61198d565b6040516106ec9190613367565b60405180910390f35b61070f600480360381019061070a9190612f37565b611a9f565b005b34801561071d57600080fd5b5061073860048036038101906107339190612c64565b611cf3565b60405161074591906134e9565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612f37565b611d05565b005b34801561078357600080fd5b5061079e60048036038101906107999190612c91565b611ebf565b6040516107ab9190613331565b60405180910390f35b3480156107c057600080fd5b506107c9611f53565b6040516107d69190613367565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190612c64565b611fe1565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108935750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6108a26120d9565b73ffffffffffffffffffffffffffffffffffffffff166108c06113d2565b73ffffffffffffffffffffffffffffffffffffffff1614610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90613429565b60405180910390fd5b6002600954141561095c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610953906134c9565b60405180910390fd5b6002600981905550600d5461096f610c15565b11156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a7906133e9565b60405180910390fd5b6109ba82826120e1565b60016009819055505050565b6060600380546109d590613754565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190613754565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b5050505050905090565b6000610a63826120ff565b610a99576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610adf826110cd565b90508073ffffffffffffffffffffffffffffffffffffffff16610b0061215e565b73ffffffffffffffffffffffffffffffffffffffff1614610b6357610b2c81610b2761215e565b611ebf565b610b62576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c1f612166565b6002546001540303905090565b600c5481565b6000610c3d8261216f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cb08461223d565b91509150610cc68187610cc161215e565b61225f565b610d1257610cdb86610cd661215e565b611ebf565b610d11576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d79576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8686868660016122a3565b8015610d9157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5f85610e3b8888876122a9565b7c0200000000000000000000000000000000000000000000000000000000176122d1565b600560008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610ee7576000600185019050600060056000838152602001908152602001600020541415610ee5576001548114610ee4578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f4f86868660016122fc565b505050505050565b610f728383836040518060200160405280600081525061191a565b505050565b610f7f6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610f9d6113d2565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613429565b60405180910390fd5b80600a9080519060200190611009929190612a0d565b50600b60009054906101000a900460ff1615600b60006101000a81548160ff02191690831515021790555050565b61103f6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661105d6113d2565b73ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90613429565b60405180910390fd5b80600a90805190602001906110c9929190612a0d565b5050565b60006110d88261216f565b9050919050565b6110e76120d9565b73ffffffffffffffffffffffffffffffffffffffff166111056113d2565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613429565b60405180910390fd5b80600c8190555050565b6060600a805461117490613754565b80601f01602080910402602001604051908101604052809291908181526020018280546111a090613754565b80156111ed5780601f106111c2576101008083540402835291602001916111ed565b820191906000526020600020905b8154815290600101906020018083116111d057829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112b86120d9565b73ffffffffffffffffffffffffffffffffffffffff166112d66113d2565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613429565b60405180910390fd5b6113366000612302565b565b6113406120d9565b73ffffffffffffffffffffffffffffffffffffffff1661135e6113d2565b73ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613429565b60405180910390fd5b81600f81905550806010819055505050565b600f5481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6114096120d9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d2565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613429565b60405180910390fd5b80600e8190555050565b60606004805461149690613754565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290613754565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b5050505050905090565b6002600954141561155f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611556906134c9565b60405180910390fd5b60026009819055506003600c54146115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a3906134a9565b60405180910390fd5b600e543410156115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890613489565b60405180910390fd5b600d54816115fd610c15565b61160791906135d9565b1115611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906133e9565b60405180910390fd5b61165233826120e1565b600160098190555050565b61166561215e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116d761215e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178461215e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c99190613331565b60405180910390a35050565b6117dd6120d9565b73ffffffffffffffffffffffffffffffffffffffff166117fb6113d2565b73ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613429565b60405180910390fd5b600061185b6113d2565b73ffffffffffffffffffffffffffffffffffffffff164760405161187e906132b5565b60006040518083038185875af1925050503d80600081146118bb576040519150601f19603f3d011682016040523d82523d6000602084013e6118c0565b606091505b5050905080611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613469565b60405180910390fd5b50565b600b60009054906101000a900460ff1681565b611925848484610c32565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461198757611950848484846123c6565b611986576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611998826120ff565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906133c9565b60405180910390fd5b600b60009054906101000a900460ff1615611a405760006119f6611165565b5111611a115760405180602001604052806000815250611a39565b611a19611165565b604051602001611a29919061326f565b6040516020818303038152906040525b9050611a9a565b6000611a4a611165565b5111611a655760405180602001604052806000815250611a97565b611a6d611165565b611a7683612526565b604051602001611a87929190613286565b6040516020818303038152906040525b90505b919050565b60026009541415611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc906134c9565b60405180910390fd5b60026009819055506002600c5414611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613389565b60405180910390fd5b600033604051602001611b459190613254565b604051602081830303815290604052805190602001209050611bab838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483612687565b80611c005750611bff838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060105483612687565b5b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690613409565b60405180910390fd5b600e54341015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613489565b60405180910390fd5b600d5484611c90610c15565b611c9a91906135d9565b1115611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906133e9565b60405180910390fd5b611ce533856120e1565b506001600981905550505050565b6000611cfe8261269e565b9050919050565b60026009541415611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d42906134c9565b60405180910390fd5b60026009819055506001600c5414611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613449565b60405180910390fd5b600033604051602001611dab9190613254565b604051602081830303815290604052805190602001209050611e11838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483612687565b611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790613409565b60405180910390fd5b600d5484611e5c610c15565b611e6691906135d9565b1115611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e906133e9565b60405180910390fd5b611eb133856120e1565b506001600981905550505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611f6090613754565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8c90613754565b8015611fd95780601f10611fae57610100808354040283529160200191611fd9565b820191906000526020600020905b815481529060010190602001808311611fbc57829003601f168201915b505050505081565b611fe96120d9565b73ffffffffffffffffffffffffffffffffffffffff166120076113d2565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613429565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c4906133a9565b60405180910390fd5b6120d681612302565b50565b600033905090565b6120fb8282604051806020016040528060008152506126f5565b5050565b60008161210a612166565b11158015612119575060015482105b8015612157575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b6000808290508061217e612166565b11612206576001548110156122055760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612203575b60008114156121f95760056000836001900393508381526020019081526020016000205490506121ce565b8092505050612238565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600790508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86122c0868684612793565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123ec61215e565b8786866040518563ffffffff1660e01b815260040161240e94939291906132e5565b602060405180830381600087803b15801561242857600080fd5b505af192505050801561245957506040513d601f19601f820116820180604052508101906124569190612e94565b60015b6124d3573d8060008114612489576040519150601f19603f3d011682016040523d82523d6000602084013e61248e565b606091505b506000815114156124cb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600082141561256e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612682565b600082905060005b600082146125a0578080612589906137b7565b915050600a82612599919061362f565b9150612576565b60008167ffffffffffffffff8111156125bc576125bb613911565b5b6040519080825280601f01601f1916602001820160405280156125ee5781602001600182028036833780820191505090505b5090505b6000851461267b576001826126079190613660565b9150600a856126169190613824565b603061262291906135d9565b60f81b818381518110612638576126376138e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612674919061362f565b94506125f2565b8093505050505b919050565b600082612694858461279c565b1490509392505050565b600067ffffffffffffffff6040600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6126ff8383612811565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461278e5760006001549050600083820390505b61274060008683806001019450866123c6565b612776576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061272d57816001541461278b57600080fd5b50505b505050565b60009392505050565b60008082905060005b84518110156128065760008582815181106127c3576127c26138e2565b5b602002602001015190508083116127e5576127de83826129e6565b92506127f2565b6127ef81846129e6565b92505b5080806127fe906137b7565b9150506127a5565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156128ba576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c760008483856122a3565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061293e8361292f60008660006122a9565b612938856129fd565b176122d1565b60056000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612962578060018190555050506129e160008483856122fc565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b828054612a1990613754565b90600052602060002090601f016020900481019282612a3b5760008555612a82565b82601f10612a5457805160ff1916838001178555612a82565b82800160010185558215612a82579182015b82811115612a81578251825591602001919060010190612a66565b5b509050612a8f9190612a93565b5090565b5b80821115612aac576000816000905550600101612a94565b5090565b6000612ac3612abe84613529565b613504565b905082815260208101848484011115612adf57612ade61394f565b5b612aea848285613712565b509392505050565b6000612b05612b008461355a565b613504565b905082815260208101848484011115612b2157612b2061394f565b5b612b2c848285613712565b509392505050565b600081359050612b4381613bb7565b92915050565b60008083601f840112612b5f57612b5e613945565b5b8235905067ffffffffffffffff811115612b7c57612b7b613940565b5b602083019150836020820283011115612b9857612b9761394a565b5b9250929050565b600081359050612bae81613bce565b92915050565b600081359050612bc381613be5565b92915050565b600081359050612bd881613bfc565b92915050565b600081519050612bed81613bfc565b92915050565b600082601f830112612c0857612c07613945565b5b8135612c18848260208601612ab0565b91505092915050565b600082601f830112612c3657612c35613945565b5b8135612c46848260208601612af2565b91505092915050565b600081359050612c5e81613c13565b92915050565b600060208284031215612c7a57612c79613959565b5b6000612c8884828501612b34565b91505092915050565b60008060408385031215612ca857612ca7613959565b5b6000612cb685828601612b34565b9250506020612cc785828601612b34565b9150509250929050565b600080600060608486031215612cea57612ce9613959565b5b6000612cf886828701612b34565b9350506020612d0986828701612b34565b9250506040612d1a86828701612c4f565b9150509250925092565b60008060008060808587031215612d3e57612d3d613959565b5b6000612d4c87828801612b34565b9450506020612d5d87828801612b34565b9350506040612d6e87828801612c4f565b925050606085013567ffffffffffffffff811115612d8f57612d8e613954565b5b612d9b87828801612bf3565b91505092959194509250565b60008060408385031215612dbe57612dbd613959565b5b6000612dcc85828601612b34565b9250506020612ddd85828601612b9f565b9150509250929050565b60008060408385031215612dfe57612dfd613959565b5b6000612e0c85828601612b34565b9250506020612e1d85828601612c4f565b9150509250929050565b60008060408385031215612e3e57612e3d613959565b5b6000612e4c85828601612bb4565b9250506020612e5d85828601612bb4565b9150509250929050565b600060208284031215612e7d57612e7c613959565b5b6000612e8b84828501612bc9565b91505092915050565b600060208284031215612eaa57612ea9613959565b5b6000612eb884828501612bde565b91505092915050565b600060208284031215612ed757612ed6613959565b5b600082013567ffffffffffffffff811115612ef557612ef4613954565b5b612f0184828501612c21565b91505092915050565b600060208284031215612f2057612f1f613959565b5b6000612f2e84828501612c4f565b91505092915050565b600080600060408486031215612f5057612f4f613959565b5b6000612f5e86828701612c4f565b935050602084013567ffffffffffffffff811115612f7f57612f7e613954565b5b612f8b86828701612b49565b92509250509250925092565b612fa081613694565b82525050565b612fb7612fb282613694565b613800565b82525050565b612fc6816136a6565b82525050565b612fd5816136b2565b82525050565b6000612fe68261358b565b612ff081856135a1565b9350613000818560208601613721565b6130098161395e565b840191505092915050565b600061301f82613596565b61302981856135bd565b9350613039818560208601613721565b6130428161395e565b840191505092915050565b600061305882613596565b61306281856135ce565b9350613072818560208601613721565b80840191505092915050565b600061308b6016836135bd565b91506130968261397c565b602082019050919050565b60006130ae6026836135bd565b91506130b9826139a5565b604082019050919050565b60006130d16030836135bd565b91506130dc826139f4565b604082019050919050565b60006130f4600a836135bd565b91506130ff82613a43565b602082019050919050565b6000613117600f836135bd565b915061312282613a6c565b602082019050919050565b600061313a6005836135ce565b915061314582613a95565b600582019050919050565b600061315d6020836135bd565b915061316882613abe565b602082019050919050565b60006131806015836135bd565b915061318b82613ae7565b602082019050919050565b60006131a36000836135b2565b91506131ae82613b10565b600082019050919050565b60006131c66010836135bd565b91506131d182613b13565b602082019050919050565b60006131e96012836135bd565b91506131f482613b3c565b602082019050919050565b600061320c6018836135bd565b915061321782613b65565b602082019050919050565b600061322f601f836135bd565b915061323a82613b8e565b602082019050919050565b61324e81613708565b82525050565b60006132608284612fa6565b60148201915081905092915050565b600061327b828461304d565b915081905092915050565b6000613292828561304d565b915061329e828461304d565b91506132a98261312d565b91508190509392505050565b60006132c082613196565b9150819050919050565b60006020820190506132df6000830184612f97565b92915050565b60006080820190506132fa6000830187612f97565b6133076020830186612f97565b6133146040830185613245565b81810360608301526133268184612fdb565b905095945050505050565b60006020820190506133466000830184612fbd565b92915050565b60006020820190506133616000830184612fcc565b92915050565b600060208201905081810360008301526133818184613014565b905092915050565b600060208201905081810360008301526133a28161307e565b9050919050565b600060208201905081810360008301526133c2816130a1565b9050919050565b600060208201905081810360008301526133e2816130c4565b9050919050565b60006020820190508181036000830152613402816130e7565b9050919050565b600060208201905081810360008301526134228161310a565b9050919050565b6000602082019050818103600083015261344281613150565b9050919050565b6000602082019050818103600083015261346281613173565b9050919050565b60006020820190508181036000830152613482816131b9565b9050919050565b600060208201905081810360008301526134a2816131dc565b9050919050565b600060208201905081810360008301526134c2816131ff565b9050919050565b600060208201905081810360008301526134e281613222565b9050919050565b60006020820190506134fe6000830184613245565b92915050565b600061350e61351f565b905061351a8282613786565b919050565b6000604051905090565b600067ffffffffffffffff82111561354457613543613911565b5b61354d8261395e565b9050602081019050919050565b600067ffffffffffffffff82111561357557613574613911565b5b61357e8261395e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006135e482613708565b91506135ef83613708565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362457613623613855565b5b828201905092915050565b600061363a82613708565b915061364583613708565b92508261365557613654613884565b5b828204905092915050565b600061366b82613708565b915061367683613708565b92508282101561368957613688613855565b5b828203905092915050565b600061369f826136e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373f578082015181840152602081019050613724565b8381111561374e576000848401525b50505050565b6000600282049050600182168061376c57607f821691505b602082108114156137805761377f6138b3565b5b50919050565b61378f8261395e565b810181811067ffffffffffffffff821117156137ae576137ad613911565b5b80604052505050565b60006137c282613708565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137f5576137f4613855565b5b600182019050919050565b600061380b82613812565b9050919050565b600061381d8261396f565b9050919050565b600061382f82613708565b915061383a83613708565b92508261384a57613849613884565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206e6f7420616374697665212100000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f534f4c44204f5554212100000000000000000000000000000000000000000000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4672656573616c65206e6f742061637469766521210000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c69642070726963652073656e740000000000000000000000000000600082015250565b7f5075626c69632053616c65206e6f742061637469766521210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613bc081613694565b8114613bcb57600080fd5b50565b613bd7816136a6565b8114613be257600080fd5b50565b613bee816136b2565b8114613bf957600080fd5b50565b613c05816136bc565b8114613c1057600080fd5b50565b613c1c81613708565b8114613c2757600080fd5b5056fea2646970667358221220acc01c204a6bae93760ad4b2d35f9106206e839d22460960b746abc1737fb89264736f6c63430008070033

Deployed Bytecode Sourcemap

47969:3760:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17837:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50494:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23484:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24978:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16891:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48131:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34695:2800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26320:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48927:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51211:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23273:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51296:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51121:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3602:103;;;;;;;;;;;;;:::i;:::-;;48488:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48273:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48234:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48378:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51374:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23653:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50064:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51549:177;;;;;;;;;;;;;:::i;:::-;;48097:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26576:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50685:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49486:572;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50375:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49045:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26085:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48073:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3714:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17837:615;17922:4;18237:10;18222:25;;:11;:25;;;;:102;;;;18314:10;18299:25;;:11;:25;;;;18222:102;:179;;;;18391:10;18376:25;;:11;:25;;;;18222:179;18202:199;;17837:615;;;:::o;50494:185::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1:::1;1307:7;;:19;;1299:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1;1368:7;:18;;;;50607:15:::2;;50590:13;:11;:13::i;:::-;:32;;50582:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50648:23;50658:2;50662:8;50648:9;:23::i;:::-;1117:1:::1;1411:7;:22;;;;50494:185:::0;;:::o;23484:100::-;23538:13;23571:5;23564:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23484:100;:::o;25430:204::-;25498:7;25523:16;25531:7;25523;:16::i;:::-;25518:64;;25548:34;;;;;;;;;;;;;;25518:64;25602:15;:24;25618:7;25602:24;;;;;;;;;;;;;;;;;;;;;25595:31;;25430:204;;;:::o;24978:386::-;25051:13;25067:16;25075:7;25067;:16::i;:::-;25051:32;;25123:5;25100:28;;:19;:17;:19::i;:::-;:28;;;25096:175;;25148:44;25165:5;25172:19;:17;:19::i;:::-;25148:16;:44::i;:::-;25143:128;;25220:35;;;;;;;;;;;;;;25143:128;25096:175;25310:2;25283:15;:24;25299:7;25283:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25348:7;25344:2;25328:28;;25337:5;25328:28;;;;;;;;;;;;25040:324;24978:386;;:::o;16891:315::-;16944:7;17172:15;:13;:15::i;:::-;17157:12;;17141:13;;:28;:46;17134:53;;16891:315;:::o;48131:22::-;;;;:::o;34695:2800::-;34829:27;34859;34878:7;34859:18;:27::i;:::-;34829:57;;34944:4;34903:45;;34919:19;34903:45;;;34899:86;;34957:28;;;;;;;;;;;;;;34899:86;34999:27;35028:23;35055:28;35075:7;35055:19;:28::i;:::-;34998:85;;;;35183:62;35202:15;35219:4;35225:19;:17;:19::i;:::-;35183:18;:62::i;:::-;35178:174;;35265:43;35282:4;35288:19;:17;:19::i;:::-;35265:16;:43::i;:::-;35260:92;;35317:35;;;;;;;;;;;;;;35260:92;35178:174;35383:1;35369:16;;:2;:16;;;35365:52;;;35394:23;;;;;;;;;;;;;;35365:52;35430:43;35452:4;35458:2;35462:7;35471:1;35430:21;:43::i;:::-;35566:15;35563:160;;;35706:1;35685:19;35678:30;35563:160;36101:18;:24;36120:4;36101:24;;;;;;;;;;;;;;;;36099:26;;;;;;;;;;;;36170:18;:22;36189:2;36170:22;;;;;;;;;;;;;;;;36168:24;;;;;;;;;;;36492:145;36529:2;36577:45;36592:4;36598:2;36602:19;36577:14;:45::i;:::-;14119:8;36550:72;36492:18;:145::i;:::-;36463:17;:26;36481:7;36463:26;;;;;;;;;;;:174;;;;36807:1;14119:8;36757:19;:46;:51;36753:626;;;36829:19;36861:1;36851:7;:11;36829:33;;37018:1;36984:17;:30;37002:11;36984:30;;;;;;;;;;;;:35;36980:384;;;37122:13;;37107:11;:28;37103:242;;37302:19;37269:17;:30;37287:11;37269:30;;;;;;;;;;;:52;;;;37103:242;36980:384;36810:569;36753:626;37426:7;37422:2;37407:27;;37416:4;37407:27;;;;;;;;;;;;37445:42;37466:4;37472:2;37476:7;37485:1;37445:20;:42::i;:::-;34818:2677;;;34695:2800;;;:::o;26320:185::-;26458:39;26475:4;26481:2;26485:7;26458:39;;;;;;;;;;;;:16;:39::i;:::-;26320:185;;;:::o;48927:112::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48998:6:::1;48992:3;:12;;;;;;;;;;;;:::i;:::-;;49025:6;;;;;;;;;;;49024:7;49015:6;;:16;;;;;;;;;;;;;;;;;;48927:112:::0;:::o;51211:79::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51281:1:::1;51275:3;:7;;;;;;;;;;;;:::i;:::-;;51211:79:::0;:::o;23273:144::-;23337:7;23380:27;23399:7;23380:18;:27::i;:::-;23357:52;;23273:144;;;:::o;51296:72::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51359:1:::1;51350:6;:10;;;;51296:72:::0;:::o;51121:84::-;51161:13;51194:3;51187:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51121:84;:::o;18516:224::-;18580:7;18621:1;18604:19;;:5;:19;;;18600:60;;;18632:28;;;;;;;;;;;;;;18600:60;13071:13;18678:18;:25;18697:5;18678:25;;;;;;;;;;;;;;;;:54;18671:61;;18516:224;;;:::o;3602:103::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3667:30:::1;3694:1;3667:18;:30::i;:::-;3602:103::o:0;48488:158::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48590:5:::1;48573:14;:22;;;;48628:10;48606:19;:32;;;;48488:158:::0;;:::o;48273:98::-;;;;:::o;48234:30::-;;;;:::o;3379:87::-;3425:7;3452:6;;;;;;;;;;;3445:13;;3379:87;:::o;48378:103::-;;;;:::o;51374:70::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51435:1:::1;51427:5;:9;;;;51374:70:::0;:::o;23653:104::-;23709:13;23742:7;23735:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23653:104;:::o;50064:305::-;1161:1;1307:7;;:19;;1299:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1;1368:7;:18;;;;50152:1:::1;50142:6;;:11;50134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50214:5;;50201:9;:18;;50193:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50287:15;;50275:8;50261:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:41;;50253:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50330:31;50340:10;50352:8;50330:9;:31::i;:::-;1117:1:::0;1411:7;:22;;;;50064:305;:::o;25706:308::-;25817:19;:17;:19::i;:::-;25805:31;;:8;:31;;;25801:61;;;25845:17;;;;;;;;;;;;;;25801:61;25927:8;25875:18;:39;25894:19;:17;:19::i;:::-;25875:39;;;;;;;;;;;;;;;:49;25915:8;25875:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25987:8;25951:55;;25966:19;:17;:19::i;:::-;25951:55;;;25997:8;25951:55;;;;;;:::i;:::-;;;;;;;;25706:308;;:::o;51549:177::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51605:13:::1;51624:7;:5;:7::i;:::-;:12;;51644:21;51624:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51604:66;;;51689:8;51681:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;51593:133;51549:177::o:0;48097:25::-;;;;;;;;;;;;;:::o;26576:399::-;26743:31;26756:4;26762:2;26766:7;26743:12;:31::i;:::-;26807:1;26789:2;:14;;;:19;26785:183;;26828:56;26859:4;26865:2;26869:7;26878:5;26828:30;:56::i;:::-;26823:145;;26912:40;;;;;;;;;;;;;;26823:145;26785:183;26576:399;;;;:::o;50685:430::-;50758:13;50792:16;50800:7;50792;:16::i;:::-;50784:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50874:6;;;;;;;;;;;50871:236;;;50928:1;50908:9;:7;:9::i;:::-;50902:23;:27;:70;;;;;;;;;;;;;;;;;50956:9;:7;:9::i;:::-;50939:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;50902:70;50895:77;;;;50871:236;51034:1;51014:9;:7;:9::i;:::-;51008:23;:27;:99;;;;;;;;;;;;;;;;;51062:9;:7;:9::i;:::-;51073:18;:7;:16;:18::i;:::-;51045:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51008:99;51001:106;;50685:430;;;;:::o;49486:572::-;1161:1;1307:7;;:19;;1299:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1;1368:7;:18;;;;49615:1:::1;49605:6;;:11;49597:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;49654:12;49696:10;49679:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49669:39;;;;;;49654:54;;49727;49747:11;;49727:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49760:14;;49776:4;49727:18;:54::i;:::-;:117;;;;49785:59;49805:11;;49785:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49818:19;;49839:4;49785:18;:59::i;:::-;49727:117;49719:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;49895:5;;49882:9;:18;;49874:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49968:15;;49956:8;49942:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:41;;49934:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50019:31;50029:10;50041:8;50019:9;:31::i;:::-;49586:472;1117:1:::0;1411:7;:22;;;;49486:572;;;:::o;50375:113::-;50433:7;50460:20;50474:5;50460:13;:20::i;:::-;50453:27;;50375:113;;;:::o;49045:435::-;1161:1;1307:7;;:19;;1299:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1;1368:7;:18;;;;49161:1:::1;49151:6;;:11;49143:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;49199:12;49241:10;49224:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49214:39;;;;;;49199:54;;49272;49292:11;;49272:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49305:14;;49321:4;49272:18;:54::i;:::-;49264:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49390:15;;49378:8;49364:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:41;;49356:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49441:31;49451:10;49463:8;49441:9;:31::i;:::-;49132:348;1117:1:::0;1411:7;:22;;;;49045:435;;;:::o;26085:164::-;26182:4;26206:18;:25;26225:5;26206:25;;;;;;;;;;;;;;;:35;26232:8;26206:35;;;;;;;;;;;;;;;;;;;;;;;;;26199:42;;26085:164;;;;:::o;48073:17::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3714:201::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3823:1:::1;3803:22;;:8;:22;;;;3795:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3879:28;3898:8;3879:18;:28::i;:::-;3714:201:::0;:::o;2922:98::-;2975:7;3002:10;2995:17;;2922:98;:::o;27587:104::-;27656:27;27666:2;27670:8;27656:27;;;;;;;;;;;;:9;:27::i;:::-;27587:104;;:::o;27230:273::-;27287:4;27343:7;27324:15;:13;:15::i;:::-;:26;;:66;;;;;27377:13;;27367:7;:23;27324:66;:152;;;;;27475:1;13841:8;27428:17;:26;27446:7;27428:26;;;;;;;;;;;;:43;:48;27324:152;27304:172;;27230:273;;;:::o;45791:105::-;45851:7;45878:10;45871:17;;45791:105;:::o;51450:93::-;51507:7;51534:1;51527:8;;51450:93;:::o;20190:1129::-;20257:7;20277:12;20292:7;20277:22;;20360:4;20341:15;:13;:15::i;:::-;:23;20337:915;;20394:13;;20387:4;:20;20383:869;;;20432:14;20449:17;:23;20467:4;20449:23;;;;;;;;;;;;20432:40;;20565:1;13841:8;20538:6;:23;:28;20534:699;;;21057:113;21074:1;21064:6;:11;21057:113;;;21117:17;:25;21135:6;;;;;;;21117:25;;;;;;;;;;;;21108:34;;21057:113;;;21203:6;21196:13;;;;;;20534:699;20409:843;20383:869;20337:915;21280:31;;;;;;;;;;;;;;20190:1129;;;;:::o;33031:652::-;33126:27;33155:23;33196:53;33252:15;33196:71;;33438:7;33432:4;33425:21;33473:22;33467:4;33460:36;33549:4;33543;33533:21;33510:44;;33645:19;33639:26;33620:45;;33376:300;33031:652;;;:::o;33796:645::-;33938:11;34100:15;34094:4;34090:26;34082:34;;34259:15;34248:9;34244:31;34231:44;;34406:15;34395:9;34392:30;34385:4;34374:9;34371:19;34368:55;34358:65;;33796:645;;;;;:::o;44624:159::-;;;;;:::o;42936:309::-;43071:7;43091:16;14242:3;43117:19;:40;;43091:67;;14242:3;43184:31;43195:4;43201:2;43205:9;43184:10;:31::i;:::-;43176:40;;:61;;43169:68;;;42936:309;;;;;:::o;22764:447::-;22844:14;23012:15;23005:5;23001:27;22992:36;;23186:5;23172:11;23148:22;23144:40;23141:51;23134:5;23131:62;23121:72;;22764:447;;;;:::o;45442:158::-;;;;;:::o;3924:191::-;3998:16;4017:6;;;;;;;;;;;3998:25;;4043:8;4034:6;;:17;;;;;;;;;;;;;;;;;;4098:8;4067:40;;4088:8;4067:40;;;;;;;;;;;;3987:128;3924:191;:::o;41446:716::-;41609:4;41655:2;41630:45;;;41676:19;:17;:19::i;:::-;41697:4;41703:7;41712:5;41630:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41626:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41930:1;41913:6;:13;:18;41909:235;;;41959:40;;;;;;;;;;;;;;41909:235;42102:6;42096:13;42087:6;42083:2;42079:15;42072:38;41626:529;41799:54;;;41789:64;;;:6;:64;;;;41782:71;;;41446:716;;;;;;:::o;1539:533::-;1595:13;1635:1;1626:5;:10;1622:53;;;1653:10;;;;;;;;;;;;;;;;;;;;;1622:53;1685:12;1700:5;1685:20;;1716:14;1741:78;1756:1;1748:4;:9;1741:78;;1774:8;;;;;:::i;:::-;;;;1805:2;1797:10;;;;;:::i;:::-;;;1741:78;;;1829:19;1861:6;1851:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:39;;1879:154;1895:1;1886:5;:10;1879:154;;1923:1;1913:11;;;;;:::i;:::-;;;1990:2;1982:5;:10;;;;:::i;:::-;1969:2;:24;;;;:::i;:::-;1956:39;;1939:6;1946;1939:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2019:2;2010:11;;;;;:::i;:::-;;;1879:154;;;2057:6;2043:21;;;;;1539:533;;;;:::o;86:190::-;211:4;264;235:25;248:5;255:4;235:12;:25::i;:::-;:33;228:40;;86:190;;;;;:::o;18822:176::-;18883:7;13071:13;13208:2;18911:18;:25;18930:5;18911:25;;;;;;;;;;;;;;;;:49;;18910:80;18903:87;;18822:176;;;:::o;28107:681::-;28230:19;28236:2;28240:8;28230:5;:19::i;:::-;28309:1;28291:2;:14;;;:19;28287:483;;28331:11;28345:13;;28331:27;;28377:13;28399:8;28393:3;:14;28377:30;;28426:233;28457:62;28496:1;28500:2;28504:7;;;;;;28513:5;28457:30;:62::i;:::-;28452:167;;28555:40;;;;;;;;;;;;;;28452:167;28654:3;28646:5;:11;28426:233;;28741:3;28724:13;;:20;28720:34;;28746:8;;;28720:34;28312:458;;28287:483;28107:681;;;:::o;43821:147::-;43958:6;43821:147;;;;;:::o;281:517::-;364:7;384:20;407:4;384:27;;427:9;422:339;446:5;:12;442:1;:16;422:339;;;480:20;503:5;509:1;503:8;;;;;;;;:::i;:::-;;;;;;;;480:31;;546:12;530;:28;526:224;;594:42;609:12;623;594:14;:42::i;:::-;579:57;;526:224;;;692:42;707:12;721;692:14;:42::i;:::-;677:57;;526:224;465:296;460:3;;;;;:::i;:::-;;;;422:339;;;;778:12;771:19;;;281:517;;;;:::o;29061:1529::-;29126:20;29149:13;;29126:36;;29191:1;29177:16;;:2;:16;;;29173:48;;;29202:19;;;;;;;;;;;;;;29173:48;29248:1;29236:8;:13;29232:44;;;29258:18;;;;;;;;;;;;;;29232:44;29289:61;29319:1;29323:2;29327:12;29341:8;29289:21;:61::i;:::-;29832:1;13208:2;29803:1;:25;;29802:31;29790:8;:44;29764:18;:22;29783:2;29764:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;30111:139;30148:2;30202:33;30225:1;30229:2;30233:1;30202:14;:33::i;:::-;30169:30;30190:8;30169:20;:30::i;:::-;:66;30111:18;:139::i;:::-;30077:17;:31;30095:12;30077:31;;;;;;;;;;;:173;;;;30267:15;30285:12;30267:30;;30312:11;30341:8;30326:12;:23;30312:37;;30364:101;30416:9;;;;;;30412:2;30391:35;;30408:1;30391:35;;;;;;;;;;;;30460:3;30450:7;:13;30364:101;;30497:3;30481:13;:19;;;;29538:974;;30522:60;30551:1;30555:2;30559:12;30573:8;30522:20;:60::i;:::-;29115:1475;29061:1529;;:::o;806:224::-;874:13;937:1;931:4;924:15;966:1;960:4;953:15;1007:4;1001;991:21;982:30;;806:224;;;;:::o;24594:322::-;24664:14;24895:1;24885:8;24882:15;24857:23;24853:45;24843:55;;24594:322;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:::-;6424:6;6432;6481:2;6469:9;6460:7;6456:23;6452:32;6449:119;;;6487:79;;:::i;:::-;6449:119;6607:1;6632:53;6677:7;6668:6;6657:9;6653:22;6632:53;:::i;:::-;6622:63;;6578:117;6734:2;6760:53;6805:7;6796:6;6785:9;6781:22;6760:53;:::i;:::-;6750:63;;6705:118;6356:474;;;;;:::o;6836:327::-;6894:6;6943:2;6931:9;6922:7;6918:23;6914:32;6911:119;;;6949:79;;:::i;:::-;6911:119;7069:1;7094:52;7138:7;7129:6;7118:9;7114:22;7094:52;:::i;:::-;7084:62;;7040:116;6836:327;;;;:::o;7169:349::-;7238:6;7287:2;7275:9;7266:7;7262:23;7258:32;7255:119;;;7293:79;;:::i;:::-;7255:119;7413:1;7438:63;7493:7;7484:6;7473:9;7469:22;7438:63;:::i;:::-;7428:73;;7384:127;7169:349;;;;:::o;7524:509::-;7593:6;7642:2;7630:9;7621:7;7617:23;7613:32;7610:119;;;7648:79;;:::i;:::-;7610:119;7796:1;7785:9;7781:17;7768:31;7826:18;7818:6;7815:30;7812:117;;;7848:79;;:::i;:::-;7812:117;7953:63;8008:7;7999:6;7988:9;7984:22;7953:63;:::i;:::-;7943:73;;7739:287;7524:509;;;;:::o;8039:329::-;8098:6;8147:2;8135:9;8126:7;8122:23;8118:32;8115:119;;;8153:79;;:::i;:::-;8115:119;8273:1;8298:53;8343:7;8334:6;8323:9;8319:22;8298:53;:::i;:::-;8288:63;;8244:117;8039:329;;;;:::o;8374:704::-;8469:6;8477;8485;8534:2;8522:9;8513:7;8509:23;8505:32;8502:119;;;8540:79;;:::i;:::-;8502:119;8660:1;8685:53;8730:7;8721:6;8710:9;8706:22;8685:53;:::i;:::-;8675:63;;8631:117;8815:2;8804:9;8800:18;8787:32;8846:18;8838:6;8835:30;8832:117;;;8868:79;;:::i;:::-;8832:117;8981:80;9053:7;9044:6;9033:9;9029:22;8981:80;:::i;:::-;8963:98;;;;8758:313;8374:704;;;;;:::o;9084:118::-;9171:24;9189:5;9171:24;:::i;:::-;9166:3;9159:37;9084:118;;:::o;9208:157::-;9313:45;9333:24;9351:5;9333:24;:::i;:::-;9313:45;:::i;:::-;9308:3;9301:58;9208:157;;:::o;9371:109::-;9452:21;9467:5;9452:21;:::i;:::-;9447:3;9440:34;9371:109;;:::o;9486:118::-;9573:24;9591:5;9573:24;:::i;:::-;9568:3;9561:37;9486:118;;:::o;9610:360::-;9696:3;9724:38;9756:5;9724:38;:::i;:::-;9778:70;9841:6;9836:3;9778:70;:::i;:::-;9771:77;;9857:52;9902:6;9897:3;9890:4;9883:5;9879:16;9857:52;:::i;:::-;9934:29;9956:6;9934:29;:::i;:::-;9929:3;9925:39;9918:46;;9700:270;9610:360;;;;:::o;9976:364::-;10064:3;10092:39;10125:5;10092:39;:::i;:::-;10147:71;10211:6;10206:3;10147:71;:::i;:::-;10140:78;;10227:52;10272:6;10267:3;10260:4;10253:5;10249:16;10227:52;:::i;:::-;10304:29;10326:6;10304:29;:::i;:::-;10299:3;10295:39;10288:46;;10068:272;9976:364;;;;:::o;10346:377::-;10452:3;10480:39;10513:5;10480:39;:::i;:::-;10535:89;10617:6;10612:3;10535:89;:::i;:::-;10528:96;;10633:52;10678:6;10673:3;10666:4;10659:5;10655:16;10633:52;:::i;:::-;10710:6;10705:3;10701:16;10694:23;;10456:267;10346:377;;;;:::o;10729:366::-;10871:3;10892:67;10956:2;10951:3;10892:67;:::i;:::-;10885:74;;10968:93;11057:3;10968:93;:::i;:::-;11086:2;11081:3;11077:12;11070:19;;10729:366;;;:::o;11101:::-;11243:3;11264:67;11328:2;11323:3;11264:67;:::i;:::-;11257:74;;11340:93;11429:3;11340:93;:::i;:::-;11458:2;11453:3;11449:12;11442:19;;11101:366;;;:::o;11473:::-;11615:3;11636:67;11700:2;11695:3;11636:67;:::i;:::-;11629:74;;11712:93;11801:3;11712:93;:::i;:::-;11830:2;11825:3;11821:12;11814:19;;11473:366;;;:::o;11845:::-;11987:3;12008:67;12072:2;12067:3;12008:67;:::i;:::-;12001:74;;12084:93;12173:3;12084:93;:::i;:::-;12202:2;12197:3;12193:12;12186:19;;11845:366;;;:::o;12217:::-;12359:3;12380:67;12444:2;12439:3;12380:67;:::i;:::-;12373:74;;12456:93;12545:3;12456:93;:::i;:::-;12574:2;12569:3;12565:12;12558:19;;12217:366;;;:::o;12589:400::-;12749:3;12770:84;12852:1;12847:3;12770:84;:::i;:::-;12763:91;;12863:93;12952:3;12863:93;:::i;:::-;12981:1;12976:3;12972:11;12965:18;;12589:400;;;:::o;12995:366::-;13137:3;13158:67;13222:2;13217:3;13158:67;:::i;:::-;13151:74;;13234:93;13323:3;13234:93;:::i;:::-;13352:2;13347:3;13343:12;13336:19;;12995:366;;;:::o;13367:::-;13509:3;13530:67;13594:2;13589:3;13530:67;:::i;:::-;13523:74;;13606:93;13695:3;13606:93;:::i;:::-;13724:2;13719:3;13715:12;13708:19;;13367:366;;;:::o;13739:398::-;13898:3;13919:83;14000:1;13995:3;13919:83;:::i;:::-;13912:90;;14011:93;14100:3;14011:93;:::i;:::-;14129:1;14124:3;14120:11;14113:18;;13739:398;;;:::o;14143:366::-;14285:3;14306:67;14370:2;14365:3;14306:67;:::i;:::-;14299:74;;14382:93;14471:3;14382:93;:::i;:::-;14500:2;14495:3;14491:12;14484:19;;14143:366;;;:::o;14515:::-;14657:3;14678:67;14742:2;14737:3;14678:67;:::i;:::-;14671:74;;14754:93;14843:3;14754:93;:::i;:::-;14872:2;14867:3;14863:12;14856:19;;14515:366;;;:::o;14887:::-;15029:3;15050:67;15114:2;15109:3;15050:67;:::i;:::-;15043:74;;15126:93;15215:3;15126:93;:::i;:::-;15244:2;15239:3;15235:12;15228:19;;14887:366;;;:::o;15259:::-;15401:3;15422:67;15486:2;15481:3;15422:67;:::i;:::-;15415:74;;15498:93;15587:3;15498:93;:::i;:::-;15616:2;15611:3;15607:12;15600:19;;15259:366;;;:::o;15631:118::-;15718:24;15736:5;15718:24;:::i;:::-;15713:3;15706:37;15631:118;;:::o;15755:256::-;15867:3;15882:75;15953:3;15944:6;15882:75;:::i;:::-;15982:2;15977:3;15973:12;15966:19;;16002:3;15995:10;;15755:256;;;;:::o;16017:275::-;16149:3;16171:95;16262:3;16253:6;16171:95;:::i;:::-;16164:102;;16283:3;16276:10;;16017:275;;;;:::o;16298:701::-;16579:3;16601:95;16692:3;16683:6;16601:95;:::i;:::-;16594:102;;16713:95;16804:3;16795:6;16713:95;:::i;:::-;16706:102;;16825:148;16969:3;16825:148;:::i;:::-;16818:155;;16990:3;16983:10;;16298:701;;;;;:::o;17005:379::-;17189:3;17211:147;17354:3;17211:147;:::i;:::-;17204:154;;17375:3;17368:10;;17005:379;;;:::o;17390:222::-;17483:4;17521:2;17510:9;17506:18;17498:26;;17534:71;17602:1;17591:9;17587:17;17578:6;17534:71;:::i;:::-;17390:222;;;;:::o;17618:640::-;17813:4;17851:3;17840:9;17836:19;17828:27;;17865:71;17933:1;17922:9;17918:17;17909:6;17865:71;:::i;:::-;17946:72;18014:2;18003:9;17999:18;17990:6;17946:72;:::i;:::-;18028;18096:2;18085:9;18081:18;18072:6;18028:72;:::i;:::-;18147:9;18141:4;18137:20;18132:2;18121:9;18117:18;18110:48;18175:76;18246:4;18237:6;18175:76;:::i;:::-;18167:84;;17618:640;;;;;;;:::o;18264:210::-;18351:4;18389:2;18378:9;18374:18;18366:26;;18402:65;18464:1;18453:9;18449:17;18440:6;18402:65;:::i;:::-;18264:210;;;;:::o;18480:222::-;18573:4;18611:2;18600:9;18596:18;18588:26;;18624:71;18692:1;18681:9;18677:17;18668:6;18624:71;:::i;:::-;18480:222;;;;:::o;18708:313::-;18821:4;18859:2;18848:9;18844:18;18836:26;;18908:9;18902:4;18898:20;18894:1;18883:9;18879:17;18872:47;18936:78;19009:4;19000:6;18936:78;:::i;:::-;18928:86;;18708:313;;;;:::o;19027:419::-;19193:4;19231:2;19220:9;19216:18;19208:26;;19280:9;19274:4;19270:20;19266:1;19255:9;19251:17;19244:47;19308:131;19434:4;19308:131;:::i;:::-;19300:139;;19027:419;;;:::o;19452:::-;19618:4;19656:2;19645:9;19641:18;19633:26;;19705:9;19699:4;19695:20;19691:1;19680:9;19676:17;19669:47;19733:131;19859:4;19733:131;:::i;:::-;19725:139;;19452:419;;;:::o;19877:::-;20043:4;20081:2;20070:9;20066:18;20058:26;;20130:9;20124:4;20120:20;20116:1;20105:9;20101:17;20094:47;20158:131;20284:4;20158:131;:::i;:::-;20150:139;;19877:419;;;:::o;20302:::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20555:9;20549:4;20545:20;20541:1;20530:9;20526:17;20519:47;20583:131;20709:4;20583:131;:::i;:::-;20575:139;;20302:419;;;:::o;20727:::-;20893:4;20931:2;20920:9;20916:18;20908:26;;20980:9;20974:4;20970:20;20966:1;20955:9;20951:17;20944:47;21008:131;21134:4;21008:131;:::i;:::-;21000:139;;20727:419;;;:::o;21152:::-;21318:4;21356:2;21345:9;21341:18;21333:26;;21405:9;21399:4;21395:20;21391:1;21380:9;21376:17;21369:47;21433:131;21559:4;21433:131;:::i;:::-;21425:139;;21152:419;;;:::o;21577:::-;21743:4;21781:2;21770:9;21766:18;21758:26;;21830:9;21824:4;21820:20;21816:1;21805:9;21801:17;21794:47;21858:131;21984:4;21858:131;:::i;:::-;21850:139;;21577:419;;;:::o;22002:::-;22168:4;22206:2;22195:9;22191:18;22183:26;;22255:9;22249:4;22245:20;22241:1;22230:9;22226:17;22219:47;22283:131;22409:4;22283:131;:::i;:::-;22275:139;;22002:419;;;:::o;22427:::-;22593:4;22631:2;22620:9;22616:18;22608:26;;22680:9;22674:4;22670:20;22666:1;22655:9;22651:17;22644:47;22708:131;22834:4;22708:131;:::i;:::-;22700:139;;22427:419;;;:::o;22852:::-;23018:4;23056:2;23045:9;23041:18;23033:26;;23105:9;23099:4;23095:20;23091:1;23080:9;23076:17;23069:47;23133:131;23259:4;23133:131;:::i;:::-;23125:139;;22852:419;;;:::o;23277:::-;23443:4;23481:2;23470:9;23466:18;23458:26;;23530:9;23524:4;23520:20;23516:1;23505:9;23501:17;23494:47;23558:131;23684:4;23558:131;:::i;:::-;23550:139;;23277:419;;;:::o;23702:222::-;23795:4;23833:2;23822:9;23818:18;23810:26;;23846:71;23914:1;23903:9;23899:17;23890:6;23846:71;:::i;:::-;23702:222;;;;:::o;23930:129::-;23964:6;23991:20;;:::i;:::-;23981:30;;24020:33;24048:4;24040:6;24020:33;:::i;:::-;23930:129;;;:::o;24065:75::-;24098:6;24131:2;24125:9;24115:19;;24065:75;:::o;24146:307::-;24207:4;24297:18;24289:6;24286:30;24283:56;;;24319:18;;:::i;:::-;24283:56;24357:29;24379:6;24357:29;:::i;:::-;24349:37;;24441:4;24435;24431:15;24423:23;;24146:307;;;:::o;24459:308::-;24521:4;24611:18;24603:6;24600:30;24597:56;;;24633:18;;:::i;:::-;24597:56;24671:29;24693:6;24671:29;:::i;:::-;24663:37;;24755:4;24749;24745:15;24737:23;;24459:308;;;:::o;24773:98::-;24824:6;24858:5;24852:12;24842:22;;24773:98;;;:::o;24877:99::-;24929:6;24963:5;24957:12;24947:22;;24877:99;;;:::o;24982:168::-;25065:11;25099:6;25094:3;25087:19;25139:4;25134:3;25130:14;25115:29;;24982:168;;;;:::o;25156:147::-;25257:11;25294:3;25279:18;;25156:147;;;;:::o;25309:169::-;25393:11;25427:6;25422:3;25415:19;25467:4;25462:3;25458:14;25443:29;;25309:169;;;;:::o;25484:148::-;25586:11;25623:3;25608:18;;25484:148;;;;:::o;25638:305::-;25678:3;25697:20;25715:1;25697:20;:::i;:::-;25692:25;;25731:20;25749:1;25731:20;:::i;:::-;25726:25;;25885:1;25817:66;25813:74;25810:1;25807:81;25804:107;;;25891:18;;:::i;:::-;25804:107;25935:1;25932;25928:9;25921:16;;25638:305;;;;:::o;25949:185::-;25989:1;26006:20;26024:1;26006:20;:::i;:::-;26001:25;;26040:20;26058:1;26040:20;:::i;:::-;26035:25;;26079:1;26069:35;;26084:18;;:::i;:::-;26069:35;26126:1;26123;26119:9;26114:14;;25949:185;;;;:::o;26140:191::-;26180:4;26200:20;26218:1;26200:20;:::i;:::-;26195:25;;26234:20;26252:1;26234:20;:::i;:::-;26229:25;;26273:1;26270;26267:8;26264:34;;;26278:18;;:::i;:::-;26264:34;26323:1;26320;26316:9;26308:17;;26140:191;;;;:::o;26337:96::-;26374:7;26403:24;26421:5;26403:24;:::i;:::-;26392:35;;26337:96;;;:::o;26439:90::-;26473:7;26516:5;26509:13;26502:21;26491:32;;26439:90;;;:::o;26535:77::-;26572:7;26601:5;26590:16;;26535:77;;;:::o;26618:149::-;26654:7;26694:66;26687:5;26683:78;26672:89;;26618:149;;;:::o;26773:126::-;26810:7;26850:42;26843:5;26839:54;26828:65;;26773:126;;;:::o;26905:77::-;26942:7;26971:5;26960:16;;26905:77;;;:::o;26988:154::-;27072:6;27067:3;27062;27049:30;27134:1;27125:6;27120:3;27116:16;27109:27;26988:154;;;:::o;27148:307::-;27216:1;27226:113;27240:6;27237:1;27234:13;27226:113;;;27325:1;27320:3;27316:11;27310:18;27306:1;27301:3;27297:11;27290:39;27262:2;27259:1;27255:10;27250:15;;27226:113;;;27357:6;27354:1;27351:13;27348:101;;;27437:1;27428:6;27423:3;27419:16;27412:27;27348:101;27197:258;27148:307;;;:::o;27461:320::-;27505:6;27542:1;27536:4;27532:12;27522:22;;27589:1;27583:4;27579:12;27610:18;27600:81;;27666:4;27658:6;27654:17;27644:27;;27600:81;27728:2;27720:6;27717:14;27697:18;27694:38;27691:84;;;27747:18;;:::i;:::-;27691:84;27512:269;27461:320;;;:::o;27787:281::-;27870:27;27892:4;27870:27;:::i;:::-;27862:6;27858:40;28000:6;27988:10;27985:22;27964:18;27952:10;27949:34;27946:62;27943:88;;;28011:18;;:::i;:::-;27943:88;28051:10;28047:2;28040:22;27830:238;27787:281;;:::o;28074:233::-;28113:3;28136:24;28154:5;28136:24;:::i;:::-;28127:33;;28182:66;28175:5;28172:77;28169:103;;;28252:18;;:::i;:::-;28169:103;28299:1;28292:5;28288:13;28281:20;;28074:233;;;:::o;28313:100::-;28352:7;28381:26;28401:5;28381:26;:::i;:::-;28370:37;;28313:100;;;:::o;28419:94::-;28458:7;28487:20;28501:5;28487:20;:::i;:::-;28476:31;;28419:94;;;:::o;28519:176::-;28551:1;28568:20;28586:1;28568:20;:::i;:::-;28563:25;;28602:20;28620:1;28602:20;:::i;:::-;28597:25;;28641:1;28631:35;;28646:18;;:::i;:::-;28631:35;28687:1;28684;28680:9;28675:14;;28519:176;;;;:::o;28701:180::-;28749:77;28746:1;28739:88;28846:4;28843:1;28836:15;28870:4;28867:1;28860:15;28887:180;28935:77;28932:1;28925:88;29032:4;29029:1;29022:15;29056:4;29053:1;29046:15;29073:180;29121:77;29118:1;29111:88;29218:4;29215:1;29208:15;29242:4;29239:1;29232:15;29259:180;29307:77;29304:1;29297:88;29404:4;29401:1;29394:15;29428:4;29425:1;29418:15;29445:180;29493:77;29490:1;29483:88;29590:4;29587:1;29580:15;29614:4;29611:1;29604:15;29631:117;29740:1;29737;29730:12;29754:117;29863:1;29860;29853:12;29877:117;29986:1;29983;29976:12;30000:117;30109:1;30106;30099:12;30123:117;30232:1;30229;30222:12;30246:117;30355:1;30352;30345:12;30369:102;30410:6;30461:2;30457:7;30452:2;30445:5;30441:14;30437:28;30427:38;;30369:102;;;:::o;30477:94::-;30510:8;30558:5;30554:2;30550:14;30529:35;;30477:94;;;:::o;30577:172::-;30717:24;30713:1;30705:6;30701:14;30694:48;30577:172;:::o;30755:225::-;30895:34;30891:1;30883:6;30879:14;30872:58;30964:8;30959:2;30951:6;30947:15;30940:33;30755:225;:::o;30986:235::-;31126:34;31122:1;31114:6;31110:14;31103:58;31195:18;31190:2;31182:6;31178:15;31171:43;30986:235;:::o;31227:160::-;31367:12;31363:1;31355:6;31351:14;31344:36;31227:160;:::o;31393:165::-;31533:17;31529:1;31521:6;31517:14;31510:41;31393:165;:::o;31564:155::-;31704:7;31700:1;31692:6;31688:14;31681:31;31564:155;:::o;31725:182::-;31865:34;31861:1;31853:6;31849:14;31842:58;31725:182;:::o;31913:171::-;32053:23;32049:1;32041:6;32037:14;32030:47;31913:171;:::o;32090:114::-;;:::o;32210:166::-;32350:18;32346:1;32338:6;32334:14;32327:42;32210:166;:::o;32382:168::-;32522:20;32518:1;32510:6;32506:14;32499:44;32382:168;:::o;32556:174::-;32696:26;32692:1;32684:6;32680:14;32673:50;32556:174;:::o;32736:181::-;32876:33;32872:1;32864:6;32860:14;32853:57;32736:181;:::o;32923:122::-;32996:24;33014:5;32996:24;:::i;:::-;32989:5;32986:35;32976:63;;33035:1;33032;33025:12;32976:63;32923:122;:::o;33051:116::-;33121:21;33136:5;33121:21;:::i;:::-;33114:5;33111:32;33101:60;;33157:1;33154;33147:12;33101:60;33051:116;:::o;33173:122::-;33246:24;33264:5;33246:24;:::i;:::-;33239:5;33236:35;33226:63;;33285:1;33282;33275:12;33226:63;33173:122;:::o;33301:120::-;33373:23;33390:5;33373:23;:::i;:::-;33366:5;33363:34;33353:62;;33411:1;33408;33401:12;33353:62;33301:120;:::o;33427:122::-;33500:24;33518:5;33500:24;:::i;:::-;33493:5;33490:35;33480:63;;33539:1;33536;33529:12;33480:63;33427:122;:::o

Swarm Source

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