ETH Price: $3,605.12 (+5.36%)

Token

Faces of Rekt (FoR)
 

Overview

Max Total Supply

1,197 FoR

Holders

247

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 FoR
0x59D6a6bF89Bf681e03B6df29470dAcf1328Ed1b2
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:
FACES_OF_REKT_CONTRACT

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-03
*/

// By interacting with this contract, you agree to our terms and conditions. Please check our website for the latest version.

// SPDX-License-Identifier: UNLICENSED
/*  ______    ___    ______    ______   _____          ____     ______           ____     ______    __ __  ______
   / ____/   /   |  / ____/   / ____/  / ___/         / __ \   / ____/          / __ \   / ____/   / //_/ /_  __/
  / /_      / /| | / /       / __/     \__ \         / / / /  / /_             / /_/ /  / __/     / ,<     / /
 / __/     / ___ |/ /___    / /___    ___/ /        / /_/ /  / __/            / _, _/  / /___    / /| |   / /
/_/       /_/  |_|\____/   /_____/   /____/         \____/  /_/              /_/ |_|  /_____/   /_/ |_|  /_/
                                                                                                                 */

/*
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOO,,,,,,,,,,,,O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOO,,,,,,,,,,,,OOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,°OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOIFOOOOROOOOOOOOOOELSEOOOOOOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOOOOOOOOOE###OOOOOOWHILEOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOO#####OOOOOOOOOOOOOO##OOOOOOOOOOOOOOOOO°],,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOFOROOOOOOOOOOOOOOOOOOOOOEE#OOOOO]°°]OOOOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOOOOOOOOOOOOOO]°.....°(OOOOOOOOO.°...........,O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O]°O.........°OOOOOOO].............]OOOOO°..O,,,,,,,,,,,,,°°°,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O...........OO°........°..........°.....°OO.O,,,,,,,,°°°°°°°°°°°,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..............OOO}}°..............OO°}},...O,,,,,,,,,}}°°}}]°}}],,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....E........OOOOOO}}............COODE}}]..O,,,,,,,,,}}}}]°°°°°°°°,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.............,COOODE]............,COODE}}.°O,,,,,,,,,,}}°}}°°°°°°°°,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....°,........COOODE].............COODE}}.O,,,,,,,,,,,,,}}]°°°°°°°°,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.....O........COOODE].............COODE]°.O,,,,,,,,,,,,]°]°°°°°°°°,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°,,,,O,...........COOODE].............COODE}}.O,,,,,,,,,,,}}°°°°}}],,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O,..}}].............COOODE].............COODE}}.O,,,,,,,,,,,,]°],,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..°°}}.............COOODE].............COODE}}.O,,,,,,,,,,,]°°,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O..°°°°°............COOODE].............COODE]°..O,,,,,,,,,,}}°°°°°°°°,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O....°°°...........COOOODE]............COODE}}..O,,,,,,,,,,,}}]°°°°°°°,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OO...O...........COOODE}}.°.°......O.COODE}}].°O,,,,,,,,,,,,°]°°°°°°°,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.................°°....°OOOOO°......°°°..O,,,,,,°]°°°°]°°°°°°,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.......................................°O,,,,,],,}}}}°,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O.................    OOO.  .OOOOOO°....O,,O°°°°°°°°°O,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°...........,   ,° ,°,,,°°OOOOOE}}}}COOODE#COOOOODE##O,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°.......°..OOOOE...................COOODE°°°°°°°°###O,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°.....°O°....................°O,,,,,,O#°°°°°°°###O,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°°°°°°°°°°°O,,,,,,,,,,,,,,,,,COOOODE,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,O°°°°°°°°°°°°O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OO#O]°°..°...]..°OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OE###OOOO.......°...OO#EO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOO##O####O    °OO.....OO.O###E°,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,OOO############O######O        O.    O####O######OOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,OE###############OO########O    #OO###EOO O###OOO###########EE°,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,O###################O#########OOO.  O####O  O#####O##############O,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,O#####################O#########O    O####O   O####O###############O,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,O###############################O#E.#######O OO#####################O,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,O################################O##########OO#O#####################O,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,O#################################O#####OOOO####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,O#################################O#######O#####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,O##################################O#(#####O#####O#####################O,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,O################O#################O((##,##O#####O#############O########O,,,,,,,,,,,,,,,,,,,,,,,,
 */


pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

library MerkleProof {

    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(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++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {

        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {

        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;


        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {

        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.0;
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);
    }
}

pragma solidity ^0.8.0;

library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {

        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.1;

library Address {

    function isContract(address account) internal view returns (bool) {

        return account.code.length > 0;
    }


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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

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

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error ApproveToCaller();
    error BalanceQueryForZeroAddress();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error OwnerQueryForNonexistentToken();
    error TransferCallerNotOwnerNorApproved();
    error TransferFromIncorrectOwner();
    error TransferToNonERC721ReceiverImplementer();
    error TransferToZeroAddress();
    error URIQueryForNonexistentToken();
    error MintERC2309QuantityExceedsLimit();
    error OwnershipNotInitializedForExtraData();


    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        bool burned;
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

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

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

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

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

    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {
    struct TokenApprovalRef {
        address value;
    }


    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
    0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;


    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;


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


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

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {
    unchecked {
        return _currentIndex - _burnCounter - _startTokenId();
    }
    }

    function __burn_non_minted_token(uint16 amount) internal virtual {
        _currentIndex += amount;
    }

    function _totalMinted() internal view virtual returns (uint256) {
    unchecked {
        return _currentIndex - _startTokenId();
    }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }


    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return
        interfaceId == 0x01ffc9a7 ||
        interfaceId == 0x80ac58cd ||
        interfaceId == 0x5b5e139f;
    }


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

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

    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))) : '';
    }

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


    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

    unchecked {
        if (_startTokenId() <= curr)
            if (curr < _currentIndex) {
                uint256 packed = _packedOwnerships[curr];
                if (packed & _BITMASK_BURNED == 0) {
                    while (packed == 0) {
                        packed = _packedOwnerships[--curr];
                    }
                    return packed;
                }
            }
    }
        revert OwnerQueryForNonexistentToken();
    }

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

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            owner := and(owner, _BITMASK_ADDRESS)
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        assembly {
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }


    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);

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

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

    function getApproved(uint256 tokenId) public view virtual returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
        _startTokenId() <= tokenId &&
        tokenId < _currentIndex &&
        _packedOwnerships[tokenId] & _BITMASK_BURNED == 0;
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            owner := and(owner, _BITMASK_ADDRESS)
            msgSender := and(msgSender, _BITMASK_ADDRESS)
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
    private
    view
    returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }


    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) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }

    unchecked {
        --_packedAddressData[from];
        ++_packedAddressData[to];

        _packedOwnerships[tokenId] = _packOwnershipData(
            to,
            _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
        );

        if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
            uint256 nextTokenId = tokenId + 1;
            if (_packedOwnerships[nextTokenId] == 0) {
                if (nextTokenId != _currentIndex) {
                    _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                }
            }
        }
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

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

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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


    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

    unchecked {
        _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

        _packedOwnerships[startTokenId] = _packOwnershipData(
            to,
            _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
        );

        uint256 toMasked;
        uint256 end = startTokenId + quantity;

        assembly {
            toMasked := and(to, _BITMASK_ADDRESS)
            log4(
            0,
            0,
            _TRANSFER_EVENT_SIGNATURE,
            0,
            toMasked,
            startTokenId
            )

            for {
                let tokenId := add(startTokenId, 1)
            } iszero(eq(tokenId, end)) {
                tokenId := add(tokenId, 1)
            } {
                log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
            }
        }
        if (toMasked == 0) revert MintToZeroAddress();

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

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        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);

    unchecked {
        _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 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);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _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);
            if (_currentIndex != end) revert();
        }
    }
    }

    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }


    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

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

        if (approvalCheck) {
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

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

        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }

    unchecked {
        _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

        _packedOwnerships[tokenId] = _packOwnershipData(
            from,
            (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
        );

        if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
            uint256 nextTokenId = tokenId + 1;
            if (_packedOwnerships[nextTokenId] == 0) {
                if (nextTokenId != _currentIndex) {
                    _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                }
            }
        }
    }

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

    unchecked {
        _burnCounter++;
    }
    }


    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

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


    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {
            str := add(mload(0x40), 0x80)
            mstore(0x40, str)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)
                mstore8(str, add(48, mod(temp, 10)))
                temp := div(temp, 10)
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            str := sub(str, 0x20)
            mstore(str, length)
        }
    }
}

// ERC 721A END

pragma solidity ^0.8.14;

contract FACES_OF_REKT_CONTRACT is ERC721A, Ownable, ReentrancyGuard {

    using ECDSA for bytes32;

    string public _baseURIextended = "ipfs://QmPNh2m595pWnxRbSUSXxnTL91KHLQv1TQEgG8H4HUdDfR/";

    bool public mint_paused = true;

    bool public whitelist_mint = true;

    struct token  {
        uint256 experience;
        bool is_staked;
        uint256 stake_date;
    }

    struct airdrop {
        uint8 amount;
        address to;
    }

    mapping(uint256 => token) public face_of_rekt;

    mapping(uint8 => bytes32) public whiteListMapping;

    uint256 public experience_bonus_multiplier = 1;

    address public interactor_address;

    uint public wl_mint_price = 0.01 ether;

    uint public public_mint_price = 0.02 ether;

    mapping(address => uint8) private free_mint_already_minted ;

    uint8 public mint_limit_per_wallet = 5;

    constructor() ERC721A("Faces of Rekt", "FoR") {
        whiteListMapping[0] = 0x75eb3524d993cf03d8d1bed0ac85793a0ebd090cd08d497838619018af7bc72f;
        whiteListMapping[1] = 0x4e86997fc1292744c02df775932a2de5653a1c9616e57a06198b19c72810a193;
    }

    function set_Base_URI(string memory baseURI_) external onlyOwner() {
        _baseURIextended = baseURI_;
    }

    function switch_Mint_State() external onlyOwner() {

        mint_paused = !mint_paused;

    }

    function switch_Whitelist_Mint_State() external onlyOwner() {

        whitelist_mint = !whitelist_mint;

    }

    function set_mint_price(uint256 wl, uint256 pb) external onlyOwner {
        wl_mint_price = wl;
        public_mint_price = pb;
    }

    function set_limit_mint(uint8 limit) external onlyOwner {
        mint_limit_per_wallet = limit;
    }

    function burn(uint16 amount) external onlyOwner() {

        __burn_non_minted_token(amount);

    }

    function _baseURI() internal view virtual override returns (string memory) {

        return _baseURIextended;

    }

    function set_Whitelist_MerkleRoot(bytes32 newMerkleRoot_, uint8 _id) external onlyOwner {
        whiteListMapping[_id] = newMerkleRoot_;
    }

    function bulk_give_Exp (uint256 xp_amount, uint16[]memory id_array) external {

        require(msg.sender == interactor_address || msg.sender == owner(), "Not an interactor");

        for (uint index = 0; index < id_array.length; index++) {

            face_of_rekt[id_array[index]].experience += xp_amount;

        }

    }

    function set_experience_bonus_multiplier (bytes32[] memory proof, uint256 _experience_bonus_multiplier) external {

        require(MerkleProof.verify(
            proof,
            whiteListMapping[2],
            keccak256(abi.encodePacked(msg.sender))) || msg.sender == owner(), "Not whitelisted");

        experience_bonus_multiplier = _experience_bonus_multiplier;
    }

    function M_I_N_T(bytes32[] memory proof, uint16 quantity) external payable {

        require(_numberMinted(msg.sender) + quantity <=  mint_limit_per_wallet, "Can't mint more than limit");

        require((totalSupply() + quantity) < 5555, "Sold out");

        if (whitelist_mint) {

            require(msg.value  >= (wl_mint_price * quantity));

            require(MerkleProof.verify(
                    proof,
                    whiteListMapping[0],
                    keccak256(abi.encodePacked(msg.sender))), "Not whitelisted");

        } else {
            require(msg.value >= (public_mint_price * quantity));
        }

        require(!mint_paused, ">MINT PAUSED< The mint is paused >MINT PAUSED<");

        _safeMint(msg.sender, quantity);

    }

    function get_experience_bonus(uint16 tokenId) external {

        require(ownerOf(tokenId) == msg.sender, "You're not the owner of this token");

        face_of_rekt[tokenId].experience += (block.timestamp - face_of_rekt[tokenId].stake_date) * experience_bonus_multiplier;
        face_of_rekt[tokenId].stake_date = block.timestamp;

    }

    function batch_switch_stake(uint16[] memory face_array) external {

        for(uint16 i = 0; i < face_array.length; i++ ) {
            require(ownerOf(face_array[i]) == msg.sender, "You're not the owner of this token");

            face_of_rekt[face_array[i]].is_staked ?

            face_of_rekt[face_array[i]].experience += (block.timestamp - face_of_rekt[face_array[i]].stake_date) :

            face_of_rekt[face_array[i]].stake_date = block.timestamp;

            face_of_rekt[face_array[i]].is_staked = !face_of_rekt[face_array[i]].is_staked;
        }

    }

    function expell_from_stake(uint16[] memory face_array) external onlyOwner {

        for(uint16 i = 0; i < face_array.length; i++ ) {
            face_of_rekt[face_array[i]].experience += (block.timestamp - face_of_rekt[face_array[i]].stake_date);
            face_of_rekt[face_array[i]].is_staked = false;
        }

    }

    function check_experience_owned(uint16 tokenId)public view returns (uint256) {

        return face_of_rekt[tokenId].is_staked ?

        (block.timestamp - face_of_rekt[tokenId].stake_date + face_of_rekt[tokenId].experience) *  experience_bonus_multiplier:

        face_of_rekt[tokenId].experience;

    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual override {

        face_of_rekt[startTokenId].is_staked = false;
        face_of_rekt[startTokenId].experience = 0;
        face_of_rekt[startTokenId].stake_date = 0;

    }

    function withdrawMoney() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed");
    }

    function dev_mint_to(address to, uint16 quantity) external onlyOwner {
        require((totalSupply() + quantity) < 5555, "Sold out");
        _safeMint(to, quantity);
    }

    function free_M_I_N_T(bytes32[] memory proof) external {

        require(totalSupply() + 1 < 5555, "Sold out");
        require(MerkleProof.verify(
                proof,
                whiteListMapping[1],
                keccak256(abi.encodePacked(msg.sender))), "Not whitelisted");
        require(free_mint_already_minted[msg.sender] < 1, "Only one free mint please");
        require(!mint_paused, ">MINT PAUSED< The mint is paused >MINT PAUSED<");

        _safeMint(msg.sender, 1);
        free_mint_already_minted[msg.sender] += 1;

    }

    function bulk_air_drop(airdrop[] memory airdropArray) external onlyOwner {
        for(uint16 i = 0; i < airdropArray.length; i++ ) {
            require(totalSupply() + airdropArray[i].amount < 5555, "Sold out");
            _safeMint(airdropArray[i].to, airdropArray[i].amount);
        }
    }

}
/*////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////@#(@/////////////////////////////////////////////////////////////////////////////
////////////////////@##@////////////////////////////////////////////////////////////////////////////
///////////////////@@@#@/@////@@@///////////////////////////////////////////////////////////////////
////////////////////////@@#////@@@/////////@%###%@%%###########%(///////////////////////////////////
////////////////////////////(     @////#%########################%%@@///////////////////////////////
///////////////////////@##@*****    @@%################################&////////////////////////////
////////////////////////////(.....*   @&########################%%@@////////////////////////////////
////////////////////////////@##@....@@%###############################@/////////////////////////////
//////////////////////////@#####%@%###########%#########%@@@@%#########%@///////////////////////////
/////////////////////////@%%&@@%####%@@&###%@@@@//%#####%*......,/@@.@%%@///////////////////////////
////////////////////////////&############@.@@@@@@@@,  .,..,..@@@@@@@...#////////////////////////////
///////////////////////////@%##########%/. ..,.....,.......,............@///////////////////////////
////////////////////////////&#######%@@,.,..@@@@@/...........@@@@//,...#////////////////////////////
///////////////////////////@##########@......@@@@@/..........@@@@@//(@//////////////////////////////
////////////////////////////&#########%,.,...@@@@@/..........@@@@@//...#////////////////////////////
/////////////////////////////@%######@.......@@@@@/....,* ..,@@@@@//@///////////////////////////////
////////////////////////////(,.....@#%@.///..@@@@@/..,  ...,.@@@@@//@///////////////////////////////
//////////////////////@@(@//(..///,....,  ..,@@@@@/..........@@@@@//@///////////////////////////////
//////////////////////@@#@//( .,/,/.....**...@@@@@/..........@@@@@//.@//////////////////////////////
////////////////////////////(..,..,.........@@@@@@/........,.@@@@@//.@//////////////////////////////
////////////////////////////////@@@..........@@@//.,,,,...,@.@@@(//.,@//////////////////////////////
//////////////////////////////////@..., ................,,...........@//////////////////////////////
/////////////////////////////////@...,. ..*............,,///,......*..@/////////////////////////////
///////////////////////////////////@...*........./@@@@%((#@@@%%%,*.....#////////////////////////////
////////////////////////////////////@/.,..*............,/@%((%@%#@@/////////////////////////////////
///////////////////////////////////////,..................,@((%%(@//////////////////////////////////
////////////////////////////////////////@@@///#,@@@@..@@@@//@((((@///@@/////////////////////////////
////////////////////////////////////////////@&%,,,,,../,,%%&@((%%%@/%(@/////////////////////////////
///////////////////////////////////////%@@@###%...........@###@%((((%@//////////////////////////////
////////////////////////@#%@@@@@&%#######@&###%/,..........@###%%#########%/////////////////////////
/////////////////////////%###############%@@%%@  .@@/,..,%@,@%@@%###########@///////////////////////
////////////////////////@,,(@@&&#########&%&&&&  ,((,    /( @##&###########@////////////////////////
//////////////////////@( ,@%#################&%             &############&&#%@%/////////////////////
/////////////////////#,      (@@@&%##########&%             &#############%. (%/////////////////////
//////////////////////        @&#############&%%&#          &#########@*,@@@  ,/////////////////////
////////////////////@.           @###########&%             &########@(        #@///////////////////
//////////////////,   ,(@@@,     @###########&#&        ,%&%#########@     ,(@@,,@//////////////////
//////////////////((,         ,(&@############%&           %#########@           ,#/////////////////*/

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":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"M_I_N_T","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_baseURIextended","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint16[]","name":"face_array","type":"uint16[]"}],"name":"batch_switch_stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"address","name":"to","type":"address"}],"internalType":"struct FACES_OF_REKT_CONTRACT.airdrop[]","name":"airdropArray","type":"tuple[]"}],"name":"bulk_air_drop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"xp_amount","type":"uint256"},{"internalType":"uint16[]","name":"id_array","type":"uint16[]"}],"name":"bulk_give_Exp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"check_experience_owned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"dev_mint_to","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"face_array","type":"uint16[]"}],"name":"expell_from_stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"experience_bonus_multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"face_of_rekt","outputs":[{"internalType":"uint256","name":"experience","type":"uint256"},{"internalType":"bool","name":"is_staked","type":"bool"},{"internalType":"uint256","name":"stake_date","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"free_M_I_N_T","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":"uint16","name":"tokenId","type":"uint16"}],"name":"get_experience_bonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interactor_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint_limit_per_wallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_mint_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"set_Base_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot_","type":"bytes32"},{"internalType":"uint8","name":"_id","type":"uint8"}],"name":"set_Whitelist_MerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"_experience_bonus_multiplier","type":"uint256"}],"name":"set_experience_bonus_multiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"limit","type":"uint8"}],"name":"set_limit_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wl","type":"uint256"},{"internalType":"uint256","name":"pb","type":"uint256"}],"name":"set_mint_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switch_Mint_State","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switch_Whitelist_Mint_State","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"whiteListMapping","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wl_mint_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60e0604052603660808181529062002dfe60a03980516200002991600a91602090910190620001d6565b50600b805461010161ffff199091161790556001600e55662386f26fc1000060105566470de4df8200006011556013805460ff191660051790553480156200007057600080fd5b50604080518082018252600d81526c119858d95cc81bd98814995add609a1b6020808301918252835180850190945260038452622337a960e91b908401528151919291620000c191600291620001d6565b508051620000d7906003906020840190620001d6565b50506000805550620000e93362000184565b60016009819055600d6020527f75eb3524d993cf03d8d1bed0ac85793a0ebd090cd08d497838619018af7bc72f7f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee556000527f4e86997fc1292744c02df775932a2de5653a1c9616e57a06198b19c72810a1937ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c555620002b8565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001e4906200027c565b90600052602060002090601f01602090048101928262000208576000855562000253565b82601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b5b8082111562000261576000815560010162000266565b600181811c908216806200029157607f821691505b602082108103620002b257634e487b7160e01b600052602260045260246000fd5b50919050565b612b3680620002c86000396000f3fe6080604052600436106102715760003560e01c8063715018a61161014f578063c52e7121116100c1578063dd9acb491161007a578063dd9acb491461077c578063e16c090414610792578063e985e9c5146107be578063edd8f96914610807578063eee9a0951461081d578063f2fde38b1461083057600080fd5b8063c52e7121146106c2578063c7d27228146106e2578063c87b56dd146106fc578063ca5059301461071c578063cae45c851461073c578063cb3d535f1461075c57600080fd5b8063a22cb46511610113578063a22cb465146105de578063a30e206c146105fe578063aa59a2b21461061e578063ac44600214610633578063b88d4fde14610648578063c1dd1f291461066857600080fd5b8063715018a614610561578063777142571461057657806381ca52ad146105965780638da5cb5b146105ab57806395d89b41146105c957600080fd5b8063251a95c3116101e85780634b89e004116101ac5780634b89e0041461049557806356ab561c146104c25780635af79923146104e15780636352211e146105015780636a10adf01461052157806370a082311461054157600080fd5b8063251a95c3146103f557806331bf3cfd146104155780633b8b8a0b1461043557806342842e0e146104555780634abd07211461047557600080fd5b8063095ea7b31161023a578063095ea7b31461033c5780630a1867661461035c57806318160ddd1461037c57806319ac6f691461039f5780631c4df70e146103bf57806323b872dd146103d557600080fd5b80625ae1131461027657806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef5780630928fc2214610327575b600080fd5b34801561028257600080fd5b50610296610291366004612271565b610850565b005b3480156102a457600080fd5b506102b86102b33660046122bb565b610a82565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610ad4565b6040516102c49190612330565b3480156102fb57600080fd5b5061030f61030a366004612343565b610b66565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610baa565b34801561034857600080fd5b50610296610357366004612373565b610c38565b34801561036857600080fd5b506102966103773660046123ae565b610cd8565b34801561038857600080fd5b50600154600054035b6040519081526020016102c4565b3480156103ab57600080fd5b506102966103ba3660046123c9565b610d18565b3480156103cb57600080fd5b5061039160105481565b3480156103e157600080fd5b506102966103f03660046123e4565b610d4e565b34801561040157600080fd5b50610296610410366004612420565b610ef3565b34801561042157600080fd5b50610296610430366004612466565b610fc2565b34801561044157600080fd5b50610296610450366004612581565b6110b9565b34801561046157600080fd5b506102966104703660046123e4565b6110f6565b34801561048157600080fd5b50610296610490366004612271565b611111565b3480156104a157600080fd5b506103916104b03660046123ae565b600d6020526000908152604090205481565b3480156104ce57600080fd5b50600b546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc3660046125c9565b61123e565b34801561050d57600080fd5b5061030f61051c366004612343565b611273565b34801561052d57600080fd5b5061029661053c3660046125eb565b61127e565b34801561054d57600080fd5b5061039161055c36600461261e565b6112f2565b34801561056d57600080fd5b50610296611340565b34801561058257600080fd5b50610296610591366004612694565b611376565b3480156105a257600080fd5b50610296611506565b3480156105b757600080fd5b506008546001600160a01b031661030f565b3480156105d557600080fd5b506102e2611544565b3480156105ea57600080fd5b506102966105f93660046126c8565b611553565b34801561060a57600080fd5b50600f5461030f906001600160a01b031681565b34801561062a57600080fd5b506102966115e8565b34801561063f57600080fd5b5061029661162f565b34801561065457600080fd5b50610296610663366004612704565b611742565b34801561067457600080fd5b506106a7610683366004612343565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016102c4565b3480156106ce57600080fd5b506102966106dd36600461277f565b61178c565b3480156106ee57600080fd5b50600b546102b89060ff1681565b34801561070857600080fd5b506102e2610717366004612343565b6117ca565b34801561072857600080fd5b506102966107373660046123c9565b61184e565b34801561074857600080fd5b506102966107573660046127a2565b6118f3565b34801561076857600080fd5b506103916107773660046123c9565b61197f565b34801561078857600080fd5b5061039160115481565b34801561079e57600080fd5b506013546107ac9060ff1681565b60405160ff90911681526020016102c4565b3480156107ca57600080fd5b506102b86107d93660046127e6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561081357600080fd5b50610391600e5481565b61029661082b366004612810565b6119f2565b34801561083c57600080fd5b5061029661084b36600461261e565b611baf565b60005b81518161ffff161015610a7e57336001600160a01b0316610894838361ffff168151811061088357610883612854565b602002602001015161ffff16611273565b6001600160a01b0316146108c35760405162461bcd60e51b81526004016108ba9061286a565b60405180910390fd5b600c6000838361ffff16815181106108dd576108dd612854565b60209081029190910181015161ffff1682528101919091526040016000206001015460ff166109465742600c6000848461ffff168151811061092157610921612854565b602002602001015161ffff1681526020019081526020016000206002018190556109d6565b600c6000838361ffff168151811061096057610960612854565b602002602001015161ffff168152602001908152602001600020600201544261098991906128c2565b600c6000848461ffff16815181106109a3576109a3612854565b602002602001015161ffff16815260200190815260200160002060000160008282546109cf91906128d9565b9250508190555b50600c6000838361ffff16815181106109f1576109f1612854565b602002602001015161ffff16815260200190815260200160002060010160009054906101000a900460ff1615600c6000848461ffff1681518110610a3757610a37612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080610a76906128f1565b915050610853565b5050565b60006301ffc9a760e01b6001600160e01b031983161480610ab357506380ac58cd60e01b6001600160e01b03198316145b80610ace5750635b5e139f60e01b6001600160e01b03198316145b92915050565b606060028054610ae390612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90612912565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182611c47565b610b8e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610bb790612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390612912565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b505050505081565b6000610c4382611273565b9050336001600160a01b03821614610c7c57610c5f81336107d9565b610c7c576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610d025760405162461bcd60e51b81526004016108ba9061294c565b6013805460ff191660ff92909216919091179055565b6008546001600160a01b03163314610d425760405162461bcd60e51b81526004016108ba9061294c565b610d4b81611c6e565b50565b6000610d5982611c8b565b9050836001600160a01b0316816001600160a01b031614610d8c5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610dd957610dbc86336107d9565b610dd957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610e0057604051633a954ecd60e21b815260040160405180910390fd5b610e0d8686866001611cf2565b8015610e1857600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610eaa57600184016000818152600460205260408120549003610ea8576000548114610ea85760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600f546001600160a01b0316331480610f1657506008546001600160a01b031633145b610f565760405162461bcd60e51b81526020600482015260116024820152702737ba1030b71034b73a32b930b1ba37b960791b60448201526064016108ba565b60005b8151811015610fbd5782600c6000848481518110610f7957610f79612854565b602002602001015161ffff1681526020019081526020016000206000016000828254610fa591906128d9565b90915550819050610fb581612981565b915050610f59565b505050565b6008546001600160a01b03163314610fec5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e576115b3828261ffff168151811061101557611015612854565b60200260200101516000015160ff166110316001546000540390565b61103b91906128d9565b106110585760405162461bcd60e51b81526004016108ba9061299a565b6110a7828261ffff168151811061107157611071612854565b602002602001015160200151838361ffff168151811061109357611093612854565b60200260200101516000015160ff16611d18565b806110b1816128f1565b915050610fef565b6008546001600160a01b031633146110e35760405162461bcd60e51b81526004016108ba9061294c565b8051610a7e90600a9060208401906120be565b610fbd83838360405180602001604052806000815250611742565b6008546001600160a01b0316331461113b5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e57600c6000838361ffff168151811061116557611165612854565b602002602001015161ffff168152602001908152602001600020600201544261118e91906128c2565b600c6000848461ffff16815181106111a8576111a8612854565b602002602001015161ffff16815260200190815260200160002060000160008282546111d491906128d9565b925050819055506000600c6000848461ffff16815181106111f7576111f7612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080611236906128f1565b91505061113e565b6008546001600160a01b031633146112685760405162461bcd60e51b81526004016108ba9061294c565b601091909155601155565b6000610ace82611c8b565b6008546001600160a01b031633146112a85760405162461bcd60e51b81526004016108ba9061294c565b6115b38161ffff166112bd6001546000540390565b6112c791906128d9565b106112e45760405162461bcd60e51b81526004016108ba9061299a565b610a7e828261ffff16611d18565b60006001600160a01b03821661131b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b0316331461136a5760405162461bcd60e51b81526004016108ba9061294c565b6113746000611d32565b565b6115b36113866001546000540390565b6113919060016128d9565b106113ae5760405162461bcd60e51b81526004016108ba9061299a565b6001600052600d60209081527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546040516001600160601b03193360601b169281019290925261141a918391906034015b60405160208183030381529060405280519060200120611d84565b6114365760405162461bcd60e51b81526004016108ba906129bc565b33600090815260126020526040902054600160ff9091161061149a5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c79206f6e652066726565206d696e7420706c656173650000000000000060448201526064016108ba565b600b5460ff16156114bd5760405162461bcd60e51b81526004016108ba906129e5565b6114c8336001611d18565b3360009081526012602052604081208054600192906114eb90849060ff16612a33565b92506101000a81548160ff021916908360ff16021790555050565b6008546001600160a01b031633146115305760405162461bcd60e51b81526004016108ba9061294c565b600b805460ff19811660ff90911615179055565b606060038054610ae390612912565b336001600160a01b0383160361157c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116125760405162461bcd60e51b81526004016108ba9061294c565b600b805461ff001981166101009182900460ff1615909102179055565b6008546001600160a01b031633146116595760405162461bcd60e51b81526004016108ba9061294c565b6002600954036116ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ba565b6002600955604051600090339047908381818185875af1925050503d80600081146116f2576040519150601f19603f3d011682016040523d82523d6000602084013e6116f7565b606091505b505090508061173a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108ba565b506001600955565b61174d848484610d4e565b6001600160a01b0383163b156117865761176984848484611d9a565b611786576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b031633146117b65760405162461bcd60e51b81526004016108ba9061294c565b60ff166000908152600d6020526040902055565b60606117d582611c47565b6117f257604051630a14c4b560e41b815260040160405180910390fd5b60006117fc611e86565b9050805160000361181c5760405180602001604052806000815250611847565b8061182684611e95565b604051602001611837929190612a58565b6040516020818303038152906040525b9392505050565b3361185c61ffff8316611273565b6001600160a01b0316146118825760405162461bcd60e51b81526004016108ba9061286a565b600e5461ffff82166000908152600c60205260409020600201546118a690426128c2565b6118b09190612a87565b61ffff82166000908152600c6020526040812080549091906118d39084906128d9565b909155505061ffff166000908152600c6020526040902042600290910155565b6002600052600d60209081527f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249546040516001600160601b03193360601b1692810192909252611948918491906034016113ff565b8061195d57506008546001600160a01b031633145b6119795760405162461bcd60e51b81526004016108ba906129bc565b600e5550565b61ffff81166000908152600c602052604081206001015460ff166119b65761ffff82166000908152600c6020526040902054610ace565b600e5461ffff83166000908152600c6020526040902080546002909101546119de90426128c2565b6119e891906128d9565b610ace9190612a87565b60135460ff1661ffff8216611a29336001600160a01b03166000908152600560205260409081902054901c6001600160401b031690565b611a3391906128d9565b1115611a815760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e74206d6f7265207468616e206c696d697400000000000060448201526064016108ba565b6115b38161ffff16611a966001546000540390565b611aa091906128d9565b10611abd5760405162461bcd60e51b81526004016108ba9061299a565b600b54610100900460ff1615611b60578061ffff16601054611adf9190612a87565b341015611aeb57600080fd5b60008052600d60209081527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee546040516001600160601b03193360601b1692810192909252611b3f918491906034016113ff565b611b5b5760405162461bcd60e51b81526004016108ba906129bc565b611b7e565b8061ffff16601154611b729190612a87565b341015611b7e57600080fd5b600b5460ff1615611ba15760405162461bcd60e51b81526004016108ba906129e5565b610a7e338261ffff16611d18565b6008546001600160a01b03163314611bd95760405162461bcd60e51b81526004016108ba9061294c565b6001600160a01b038116611c3e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ba565b610d4b81611d32565b6000805482108015610ace575050600090815260046020526040902054600160e01b161590565b8061ffff16600080828254611c8391906128d9565b909155505050565b600081600054811015611cd95760008181526004602052604081205490600160e01b82169003611cd7575b80600003611847575060001901600081815260046020526040902054611cb6565b505b604051636f96cda160e11b815260040160405180910390fd5b506000908152600c6020526040812060018101805460ff19169055818155600201555050565b610a7e828260405180602001604052806000815250611ecd565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082611d918584611f3a565b14949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dcf903390899088908890600401612aa6565b6020604051808303816000875af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612ae3565b60015b611e68573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051600003611e60576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610ae390612912565b604080516080019081905280825b600183039250600a81066030018353600a900480611ea35750819003601f19909101908152919050565b611ed78383611f87565b6001600160a01b0383163b15610fbd576000548281035b611f016000868380600101945086611d9a565b611f1e576040516368d2bf6b60e11b815260040160405180910390fd5b818110611eee578160005414611f3357600080fd5b5050505050565b600081815b8451811015611f7f57611f6b82868381518110611f5e57611f5e612854565b6020026020010151612092565b915080611f7781612981565b915050611f3f565b509392505050565b6000805490829003611fac5760405163b562e8dd60e01b815260040160405180910390fd5b611fb96000848385611cf2565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461206857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612030565b508160000361208957604051622e076360e81b815260040160405180910390fd5b60005550505050565b60008183106120ae576000828152602084905260409020611847565b5060009182526020526040902090565b8280546120ca90612912565b90600052602060002090601f0160209004810192826120ec5760008555612132565b82601f1061210557805160ff1916838001178555612132565b82800160010185558215612132579182015b82811115612132578251825591602001919060010190612117565b5061213e929150612142565b5090565b5b8082111561213e5760008155600101612143565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561218f5761218f612157565b60405290565b604051601f8201601f191681016001600160401b03811182821017156121bd576121bd612157565b604052919050565b60006001600160401b038211156121de576121de612157565b5060051b60200190565b803561ffff811681146121fa57600080fd5b919050565b600082601f83011261221057600080fd5b81356020612225612220836121c5565b612195565b82815260059290921b8401810191818101908684111561224457600080fd5b8286015b8481101561226657612259816121e8565b8352918301918301612248565b509695505050505050565b60006020828403121561228357600080fd5b81356001600160401b0381111561229957600080fd5b611e7e848285016121ff565b6001600160e01b031981168114610d4b57600080fd5b6000602082840312156122cd57600080fd5b8135611847816122a5565b60005b838110156122f35781810151838201526020016122db565b838111156117865750506000910152565b6000815180845261231c8160208601602086016122d8565b601f01601f19169290920160200192915050565b6020815260006118476020830184612304565b60006020828403121561235557600080fd5b5035919050565b80356001600160a01b03811681146121fa57600080fd5b6000806040838503121561238657600080fd5b61238f8361235c565b946020939093013593505050565b803560ff811681146121fa57600080fd5b6000602082840312156123c057600080fd5b6118478261239d565b6000602082840312156123db57600080fd5b611847826121e8565b6000806000606084860312156123f957600080fd5b6124028461235c565b92506124106020850161235c565b9150604084013590509250925092565b6000806040838503121561243357600080fd5b8235915060208301356001600160401b0381111561245057600080fd5b61245c858286016121ff565b9150509250929050565b6000602080838503121561247957600080fd5b82356001600160401b0381111561248f57600080fd5b8301601f810185136124a057600080fd5b80356124ae612220826121c5565b81815260069190911b820183019083810190878311156124cd57600080fd5b928401925b8284101561251f57604084890312156124eb5760008081fd5b6124f361216d565b6124fc8561239d565b815261250986860161235c565b81870152825260409390930192908401906124d2565b979650505050505050565b60006001600160401b0383111561254357612543612157565b612556601f8401601f1916602001612195565b905082815283838301111561256a57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259357600080fd5b81356001600160401b038111156125a957600080fd5b8201601f810184136125ba57600080fd5b611e7e8482356020840161252a565b600080604083850312156125dc57600080fd5b50508035926020909101359150565b600080604083850312156125fe57600080fd5b6126078361235c565b9150612615602084016121e8565b90509250929050565b60006020828403121561263057600080fd5b6118478261235c565b600082601f83011261264a57600080fd5b8135602061265a612220836121c5565b82815260059290921b8401810191818101908684111561267957600080fd5b8286015b84811015612266578035835291830191830161267d565b6000602082840312156126a657600080fd5b81356001600160401b038111156126bc57600080fd5b611e7e84828501612639565b600080604083850312156126db57600080fd5b6126e48361235c565b9150602083013580151581146126f957600080fd5b809150509250929050565b6000806000806080858703121561271a57600080fd5b6127238561235c565b93506127316020860161235c565b92506040850135915060608501356001600160401b0381111561275357600080fd5b8501601f8101871361276457600080fd5b6127738782356020840161252a565b91505092959194509250565b6000806040838503121561279257600080fd5b823591506126156020840161239d565b600080604083850312156127b557600080fd5b82356001600160401b038111156127cb57600080fd5b6127d785828601612639565b95602094909401359450505050565b600080604083850312156127f957600080fd5b6128028361235c565b91506126156020840161235c565b6000806040838503121561282357600080fd5b82356001600160401b0381111561283957600080fd5b61284585828601612639565b925050612615602084016121e8565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f596f75277265206e6f7420746865206f776e6572206f66207468697320746f6b60408201526132b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156128d4576128d46128ac565b500390565b600082198211156128ec576128ec6128ac565b500190565b600061ffff808316818103612908576129086128ac565b6001019392505050565b600181811c9082168061292657607f821691505b60208210810361294657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060018201612993576129936128ac565b5060010190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602e908201527f3e4d494e54205041555345443c20546865206d696e742069732070617573656460408201526d080f935253950814105554d1510f60921b606082015260800190565b600060ff821660ff84168060ff03821115612a5057612a506128ac565b019392505050565b60008351612a6a8184602088016122d8565b835190830190612a7e8183602088016122d8565b01949350505050565b6000816000190483118215151615612aa157612aa16128ac565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad990830184612304565b9695505050505050565b600060208284031215612af557600080fd5b8151611847816122a556fea2646970667358221220f2d7f433305e7f9962a427666e4fc252a42d4c2456f534898171dd2d8a6b159c64736f6c634300080e0033697066733a2f2f516d504e68326d35393570576e78526253555358786e544c39314b484c51763154514567473848344855644466522f

Deployed Bytecode

0x6080604052600436106102715760003560e01c8063715018a61161014f578063c52e7121116100c1578063dd9acb491161007a578063dd9acb491461077c578063e16c090414610792578063e985e9c5146107be578063edd8f96914610807578063eee9a0951461081d578063f2fde38b1461083057600080fd5b8063c52e7121146106c2578063c7d27228146106e2578063c87b56dd146106fc578063ca5059301461071c578063cae45c851461073c578063cb3d535f1461075c57600080fd5b8063a22cb46511610113578063a22cb465146105de578063a30e206c146105fe578063aa59a2b21461061e578063ac44600214610633578063b88d4fde14610648578063c1dd1f291461066857600080fd5b8063715018a614610561578063777142571461057657806381ca52ad146105965780638da5cb5b146105ab57806395d89b41146105c957600080fd5b8063251a95c3116101e85780634b89e004116101ac5780634b89e0041461049557806356ab561c146104c25780635af79923146104e15780636352211e146105015780636a10adf01461052157806370a082311461054157600080fd5b8063251a95c3146103f557806331bf3cfd146104155780633b8b8a0b1461043557806342842e0e146104555780634abd07211461047557600080fd5b8063095ea7b31161023a578063095ea7b31461033c5780630a1867661461035c57806318160ddd1461037c57806319ac6f691461039f5780631c4df70e146103bf57806323b872dd146103d557600080fd5b80625ae1131461027657806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef5780630928fc2214610327575b600080fd5b34801561028257600080fd5b50610296610291366004612271565b610850565b005b3480156102a457600080fd5b506102b86102b33660046122bb565b610a82565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610ad4565b6040516102c49190612330565b3480156102fb57600080fd5b5061030f61030a366004612343565b610b66565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610baa565b34801561034857600080fd5b50610296610357366004612373565b610c38565b34801561036857600080fd5b506102966103773660046123ae565b610cd8565b34801561038857600080fd5b50600154600054035b6040519081526020016102c4565b3480156103ab57600080fd5b506102966103ba3660046123c9565b610d18565b3480156103cb57600080fd5b5061039160105481565b3480156103e157600080fd5b506102966103f03660046123e4565b610d4e565b34801561040157600080fd5b50610296610410366004612420565b610ef3565b34801561042157600080fd5b50610296610430366004612466565b610fc2565b34801561044157600080fd5b50610296610450366004612581565b6110b9565b34801561046157600080fd5b506102966104703660046123e4565b6110f6565b34801561048157600080fd5b50610296610490366004612271565b611111565b3480156104a157600080fd5b506103916104b03660046123ae565b600d6020526000908152604090205481565b3480156104ce57600080fd5b50600b546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc3660046125c9565b61123e565b34801561050d57600080fd5b5061030f61051c366004612343565b611273565b34801561052d57600080fd5b5061029661053c3660046125eb565b61127e565b34801561054d57600080fd5b5061039161055c36600461261e565b6112f2565b34801561056d57600080fd5b50610296611340565b34801561058257600080fd5b50610296610591366004612694565b611376565b3480156105a257600080fd5b50610296611506565b3480156105b757600080fd5b506008546001600160a01b031661030f565b3480156105d557600080fd5b506102e2611544565b3480156105ea57600080fd5b506102966105f93660046126c8565b611553565b34801561060a57600080fd5b50600f5461030f906001600160a01b031681565b34801561062a57600080fd5b506102966115e8565b34801561063f57600080fd5b5061029661162f565b34801561065457600080fd5b50610296610663366004612704565b611742565b34801561067457600080fd5b506106a7610683366004612343565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016102c4565b3480156106ce57600080fd5b506102966106dd36600461277f565b61178c565b3480156106ee57600080fd5b50600b546102b89060ff1681565b34801561070857600080fd5b506102e2610717366004612343565b6117ca565b34801561072857600080fd5b506102966107373660046123c9565b61184e565b34801561074857600080fd5b506102966107573660046127a2565b6118f3565b34801561076857600080fd5b506103916107773660046123c9565b61197f565b34801561078857600080fd5b5061039160115481565b34801561079e57600080fd5b506013546107ac9060ff1681565b60405160ff90911681526020016102c4565b3480156107ca57600080fd5b506102b86107d93660046127e6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561081357600080fd5b50610391600e5481565b61029661082b366004612810565b6119f2565b34801561083c57600080fd5b5061029661084b36600461261e565b611baf565b60005b81518161ffff161015610a7e57336001600160a01b0316610894838361ffff168151811061088357610883612854565b602002602001015161ffff16611273565b6001600160a01b0316146108c35760405162461bcd60e51b81526004016108ba9061286a565b60405180910390fd5b600c6000838361ffff16815181106108dd576108dd612854565b60209081029190910181015161ffff1682528101919091526040016000206001015460ff166109465742600c6000848461ffff168151811061092157610921612854565b602002602001015161ffff1681526020019081526020016000206002018190556109d6565b600c6000838361ffff168151811061096057610960612854565b602002602001015161ffff168152602001908152602001600020600201544261098991906128c2565b600c6000848461ffff16815181106109a3576109a3612854565b602002602001015161ffff16815260200190815260200160002060000160008282546109cf91906128d9565b9250508190555b50600c6000838361ffff16815181106109f1576109f1612854565b602002602001015161ffff16815260200190815260200160002060010160009054906101000a900460ff1615600c6000848461ffff1681518110610a3757610a37612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080610a76906128f1565b915050610853565b5050565b60006301ffc9a760e01b6001600160e01b031983161480610ab357506380ac58cd60e01b6001600160e01b03198316145b80610ace5750635b5e139f60e01b6001600160e01b03198316145b92915050565b606060028054610ae390612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f90612912565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182611c47565b610b8e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610bb790612912565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390612912565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b505050505081565b6000610c4382611273565b9050336001600160a01b03821614610c7c57610c5f81336107d9565b610c7c576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b03163314610d025760405162461bcd60e51b81526004016108ba9061294c565b6013805460ff191660ff92909216919091179055565b6008546001600160a01b03163314610d425760405162461bcd60e51b81526004016108ba9061294c565b610d4b81611c6e565b50565b6000610d5982611c8b565b9050836001600160a01b0316816001600160a01b031614610d8c5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610dd957610dbc86336107d9565b610dd957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610e0057604051633a954ecd60e21b815260040160405180910390fd5b610e0d8686866001611cf2565b8015610e1857600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610eaa57600184016000818152600460205260408120549003610ea8576000548114610ea85760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600f546001600160a01b0316331480610f1657506008546001600160a01b031633145b610f565760405162461bcd60e51b81526020600482015260116024820152702737ba1030b71034b73a32b930b1ba37b960791b60448201526064016108ba565b60005b8151811015610fbd5782600c6000848481518110610f7957610f79612854565b602002602001015161ffff1681526020019081526020016000206000016000828254610fa591906128d9565b90915550819050610fb581612981565b915050610f59565b505050565b6008546001600160a01b03163314610fec5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e576115b3828261ffff168151811061101557611015612854565b60200260200101516000015160ff166110316001546000540390565b61103b91906128d9565b106110585760405162461bcd60e51b81526004016108ba9061299a565b6110a7828261ffff168151811061107157611071612854565b602002602001015160200151838361ffff168151811061109357611093612854565b60200260200101516000015160ff16611d18565b806110b1816128f1565b915050610fef565b6008546001600160a01b031633146110e35760405162461bcd60e51b81526004016108ba9061294c565b8051610a7e90600a9060208401906120be565b610fbd83838360405180602001604052806000815250611742565b6008546001600160a01b0316331461113b5760405162461bcd60e51b81526004016108ba9061294c565b60005b81518161ffff161015610a7e57600c6000838361ffff168151811061116557611165612854565b602002602001015161ffff168152602001908152602001600020600201544261118e91906128c2565b600c6000848461ffff16815181106111a8576111a8612854565b602002602001015161ffff16815260200190815260200160002060000160008282546111d491906128d9565b925050819055506000600c6000848461ffff16815181106111f7576111f7612854565b602002602001015161ffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080611236906128f1565b91505061113e565b6008546001600160a01b031633146112685760405162461bcd60e51b81526004016108ba9061294c565b601091909155601155565b6000610ace82611c8b565b6008546001600160a01b031633146112a85760405162461bcd60e51b81526004016108ba9061294c565b6115b38161ffff166112bd6001546000540390565b6112c791906128d9565b106112e45760405162461bcd60e51b81526004016108ba9061299a565b610a7e828261ffff16611d18565b60006001600160a01b03821661131b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b0316331461136a5760405162461bcd60e51b81526004016108ba9061294c565b6113746000611d32565b565b6115b36113866001546000540390565b6113919060016128d9565b106113ae5760405162461bcd60e51b81526004016108ba9061299a565b6001600052600d60209081527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546040516001600160601b03193360601b169281019290925261141a918391906034015b60405160208183030381529060405280519060200120611d84565b6114365760405162461bcd60e51b81526004016108ba906129bc565b33600090815260126020526040902054600160ff9091161061149a5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c79206f6e652066726565206d696e7420706c656173650000000000000060448201526064016108ba565b600b5460ff16156114bd5760405162461bcd60e51b81526004016108ba906129e5565b6114c8336001611d18565b3360009081526012602052604081208054600192906114eb90849060ff16612a33565b92506101000a81548160ff021916908360ff16021790555050565b6008546001600160a01b031633146115305760405162461bcd60e51b81526004016108ba9061294c565b600b805460ff19811660ff90911615179055565b606060038054610ae390612912565b336001600160a01b0383160361157c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116125760405162461bcd60e51b81526004016108ba9061294c565b600b805461ff001981166101009182900460ff1615909102179055565b6008546001600160a01b031633146116595760405162461bcd60e51b81526004016108ba9061294c565b6002600954036116ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ba565b6002600955604051600090339047908381818185875af1925050503d80600081146116f2576040519150601f19603f3d011682016040523d82523d6000602084013e6116f7565b606091505b505090508061173a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108ba565b506001600955565b61174d848484610d4e565b6001600160a01b0383163b156117865761176984848484611d9a565b611786576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b031633146117b65760405162461bcd60e51b81526004016108ba9061294c565b60ff166000908152600d6020526040902055565b60606117d582611c47565b6117f257604051630a14c4b560e41b815260040160405180910390fd5b60006117fc611e86565b9050805160000361181c5760405180602001604052806000815250611847565b8061182684611e95565b604051602001611837929190612a58565b6040516020818303038152906040525b9392505050565b3361185c61ffff8316611273565b6001600160a01b0316146118825760405162461bcd60e51b81526004016108ba9061286a565b600e5461ffff82166000908152600c60205260409020600201546118a690426128c2565b6118b09190612a87565b61ffff82166000908152600c6020526040812080549091906118d39084906128d9565b909155505061ffff166000908152600c6020526040902042600290910155565b6002600052600d60209081527f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249546040516001600160601b03193360601b1692810192909252611948918491906034016113ff565b8061195d57506008546001600160a01b031633145b6119795760405162461bcd60e51b81526004016108ba906129bc565b600e5550565b61ffff81166000908152600c602052604081206001015460ff166119b65761ffff82166000908152600c6020526040902054610ace565b600e5461ffff83166000908152600c6020526040902080546002909101546119de90426128c2565b6119e891906128d9565b610ace9190612a87565b60135460ff1661ffff8216611a29336001600160a01b03166000908152600560205260409081902054901c6001600160401b031690565b611a3391906128d9565b1115611a815760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e74206d6f7265207468616e206c696d697400000000000060448201526064016108ba565b6115b38161ffff16611a966001546000540390565b611aa091906128d9565b10611abd5760405162461bcd60e51b81526004016108ba9061299a565b600b54610100900460ff1615611b60578061ffff16601054611adf9190612a87565b341015611aeb57600080fd5b60008052600d60209081527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee546040516001600160601b03193360601b1692810192909252611b3f918491906034016113ff565b611b5b5760405162461bcd60e51b81526004016108ba906129bc565b611b7e565b8061ffff16601154611b729190612a87565b341015611b7e57600080fd5b600b5460ff1615611ba15760405162461bcd60e51b81526004016108ba906129e5565b610a7e338261ffff16611d18565b6008546001600160a01b03163314611bd95760405162461bcd60e51b81526004016108ba9061294c565b6001600160a01b038116611c3e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ba565b610d4b81611d32565b6000805482108015610ace575050600090815260046020526040902054600160e01b161590565b8061ffff16600080828254611c8391906128d9565b909155505050565b600081600054811015611cd95760008181526004602052604081205490600160e01b82169003611cd7575b80600003611847575060001901600081815260046020526040902054611cb6565b505b604051636f96cda160e11b815260040160405180910390fd5b506000908152600c6020526040812060018101805460ff19169055818155600201555050565b610a7e828260405180602001604052806000815250611ecd565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082611d918584611f3a565b14949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dcf903390899088908890600401612aa6565b6020604051808303816000875af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612ae3565b60015b611e68573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051600003611e60576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610ae390612912565b604080516080019081905280825b600183039250600a81066030018353600a900480611ea35750819003601f19909101908152919050565b611ed78383611f87565b6001600160a01b0383163b15610fbd576000548281035b611f016000868380600101945086611d9a565b611f1e576040516368d2bf6b60e11b815260040160405180910390fd5b818110611eee578160005414611f3357600080fd5b5050505050565b600081815b8451811015611f7f57611f6b82868381518110611f5e57611f5e612854565b6020026020010151612092565b915080611f7781612981565b915050611f3f565b509392505050565b6000805490829003611fac5760405163b562e8dd60e01b815260040160405180910390fd5b611fb96000848385611cf2565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461206857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612030565b508160000361208957604051622e076360e81b815260040160405180910390fd5b60005550505050565b60008183106120ae576000828152602084905260409020611847565b5060009182526020526040902090565b8280546120ca90612912565b90600052602060002090601f0160209004810192826120ec5760008555612132565b82601f1061210557805160ff1916838001178555612132565b82800160010185558215612132579182015b82811115612132578251825591602001919060010190612117565b5061213e929150612142565b5090565b5b8082111561213e5760008155600101612143565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561218f5761218f612157565b60405290565b604051601f8201601f191681016001600160401b03811182821017156121bd576121bd612157565b604052919050565b60006001600160401b038211156121de576121de612157565b5060051b60200190565b803561ffff811681146121fa57600080fd5b919050565b600082601f83011261221057600080fd5b81356020612225612220836121c5565b612195565b82815260059290921b8401810191818101908684111561224457600080fd5b8286015b8481101561226657612259816121e8565b8352918301918301612248565b509695505050505050565b60006020828403121561228357600080fd5b81356001600160401b0381111561229957600080fd5b611e7e848285016121ff565b6001600160e01b031981168114610d4b57600080fd5b6000602082840312156122cd57600080fd5b8135611847816122a5565b60005b838110156122f35781810151838201526020016122db565b838111156117865750506000910152565b6000815180845261231c8160208601602086016122d8565b601f01601f19169290920160200192915050565b6020815260006118476020830184612304565b60006020828403121561235557600080fd5b5035919050565b80356001600160a01b03811681146121fa57600080fd5b6000806040838503121561238657600080fd5b61238f8361235c565b946020939093013593505050565b803560ff811681146121fa57600080fd5b6000602082840312156123c057600080fd5b6118478261239d565b6000602082840312156123db57600080fd5b611847826121e8565b6000806000606084860312156123f957600080fd5b6124028461235c565b92506124106020850161235c565b9150604084013590509250925092565b6000806040838503121561243357600080fd5b8235915060208301356001600160401b0381111561245057600080fd5b61245c858286016121ff565b9150509250929050565b6000602080838503121561247957600080fd5b82356001600160401b0381111561248f57600080fd5b8301601f810185136124a057600080fd5b80356124ae612220826121c5565b81815260069190911b820183019083810190878311156124cd57600080fd5b928401925b8284101561251f57604084890312156124eb5760008081fd5b6124f361216d565b6124fc8561239d565b815261250986860161235c565b81870152825260409390930192908401906124d2565b979650505050505050565b60006001600160401b0383111561254357612543612157565b612556601f8401601f1916602001612195565b905082815283838301111561256a57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259357600080fd5b81356001600160401b038111156125a957600080fd5b8201601f810184136125ba57600080fd5b611e7e8482356020840161252a565b600080604083850312156125dc57600080fd5b50508035926020909101359150565b600080604083850312156125fe57600080fd5b6126078361235c565b9150612615602084016121e8565b90509250929050565b60006020828403121561263057600080fd5b6118478261235c565b600082601f83011261264a57600080fd5b8135602061265a612220836121c5565b82815260059290921b8401810191818101908684111561267957600080fd5b8286015b84811015612266578035835291830191830161267d565b6000602082840312156126a657600080fd5b81356001600160401b038111156126bc57600080fd5b611e7e84828501612639565b600080604083850312156126db57600080fd5b6126e48361235c565b9150602083013580151581146126f957600080fd5b809150509250929050565b6000806000806080858703121561271a57600080fd5b6127238561235c565b93506127316020860161235c565b92506040850135915060608501356001600160401b0381111561275357600080fd5b8501601f8101871361276457600080fd5b6127738782356020840161252a565b91505092959194509250565b6000806040838503121561279257600080fd5b823591506126156020840161239d565b600080604083850312156127b557600080fd5b82356001600160401b038111156127cb57600080fd5b6127d785828601612639565b95602094909401359450505050565b600080604083850312156127f957600080fd5b6128028361235c565b91506126156020840161235c565b6000806040838503121561282357600080fd5b82356001600160401b0381111561283957600080fd5b61284585828601612639565b925050612615602084016121e8565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f596f75277265206e6f7420746865206f776e6572206f66207468697320746f6b60408201526132b760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156128d4576128d46128ac565b500390565b600082198211156128ec576128ec6128ac565b500190565b600061ffff808316818103612908576129086128ac565b6001019392505050565b600181811c9082168061292657607f821691505b60208210810361294657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060018201612993576129936128ac565b5060010190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b6020808252602e908201527f3e4d494e54205041555345443c20546865206d696e742069732070617573656460408201526d080f935253950814105554d1510f60921b606082015260800190565b600060ff821660ff84168060ff03821115612a5057612a506128ac565b019392505050565b60008351612a6a8184602088016122d8565b835190830190612a7e8183602088016122d8565b01949350505050565b6000816000190483118215151615612aa157612aa16128ac565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad990830184612304565b9695505050505050565b600060208284031215612af557600080fd5b8151611847816122a556fea2646970667358221220f2d7f433305e7f9962a427666e4fc252a42d4c2456f534898171dd2d8a6b159c64736f6c634300080e0033

Deployed Bytecode Sourcemap

42851:6906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46901:585;;;;;;;;;;-1:-1:-1;46901:585:0;;;;;:::i;:::-;;:::i;:::-;;28132:227;;;;;;;;;;-1:-1:-1;28132:227:0;;;;;:::i;:::-;;:::i;:::-;;;2611:14:1;;2604:22;2586:41;;2574:2;2559:18;28132:227:0;;;;;;;;28369:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31583:209::-;;;;;;;;;;-1:-1:-1;31583:209:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3738:32:1;;;3720:51;;3708:2;3693:18;31583:209:0;3574:203:1;42961:89:0;;;;;;;;;;;;;:::i;31175:400::-;;;;;;;;;;-1:-1:-1;31175:400:0;;;;;:::i;:::-;;:::i;44506:104::-;;;;;;;;;;-1:-1:-1;44506:104:0;;;;;:::i;:::-;;:::i;26471:166::-;;;;;;;;;;-1:-1:-1;26592:12:0;;26532:7;26576:13;:28;26471:166;;;4713:25:1;;;4701:2;4686:18;26471:166:0;4567:177:1;44618:104:0;;;;;;;;;;-1:-1:-1;44618:104:0;;;;;:::i;:::-;;:::i;43537:38::-;;;;;;;;;;;;;;;;33313:1567;;;;;;;;;;-1:-1:-1;33313:1567:0;;;;;:::i;:::-;;:::i;45012:338::-;;;;;;;;;;-1:-1:-1;45012:338:0;;;;;:::i;:::-;;:::i;49451:301::-;;;;;;;;;;-1:-1:-1;49451:301:0;;;;;:::i;:::-;;:::i;44010:113::-;;;;;;;;;;-1:-1:-1;44010:113:0;;;;;:::i;:::-;;:::i;34888:185::-;;;;;;;;;;-1:-1:-1;34888:185:0;;;;;:::i;:::-;;:::i;47494:330::-;;;;;;;;;;-1:-1:-1;47494:330:0;;;;;:::i;:::-;;:::i;43382:49::-;;;;;;;;;;-1:-1:-1;43382:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;43098:33;;;;;;;;;;-1:-1:-1;43098:33:0;;;;;;;;;;;44361:137;;;;;;;;;;-1:-1:-1;44361:137:0;;;;;:::i;:::-;;:::i;29019:152::-;;;;;;;;;;-1:-1:-1;29019:152:0;;;;;:::i;:::-;;:::i;48698:176::-;;;;;;;;;;-1:-1:-1;48698:176:0;;;;;:::i;:::-;;:::i;27025:233::-;;;;;;;;;;-1:-1:-1;27025:233:0;;;;;:::i;:::-;;:::i;18003:103::-;;;;;;;;;;;;;:::i;48882:561::-;;;;;;;;;;-1:-1:-1;48882:561:0;;;;;:::i;:::-;;:::i;44131:99::-;;;;;;;;;;;;;:::i;17780:87::-;;;;;;;;;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;17780:87;;28477:104;;;;;;;;;;;;;:::i;31800:308::-;;;;;;;;;;-1:-1:-1;31800:308:0;;;;;:::i;:::-;;:::i;43495:33::-;;;;;;;;;;-1:-1:-1;43495:33:0;;;;-1:-1:-1;;;;;43495:33:0;;;44238:115;;;;;;;;;;;;;:::i;48500:190::-;;;;;;;;;;;;;:::i;35081:399::-;;;;;;;;;;-1:-1:-1;35081:399:0;;;;;:::i;:::-;;:::i;43328:45::-;;;;;;;;;;-1:-1:-1;43328:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10893:25:1;;;10961:14;;10954:22;10949:2;10934:18;;10927:50;10993:18;;;10986:34;10881:2;10866:18;43328:45:0;10697:329:1;44859:145:0;;;;;;;;;;-1:-1:-1;44859:145:0;;;;;:::i;:::-;;:::i;43059:30::-;;;;;;;;;;-1:-1:-1;43059:30:0;;;;;;;;28589:318;;;;;;;;;;-1:-1:-1;28589:318:0;;;;;:::i;:::-;;:::i;46546:347::-;;;;;;;;;;-1:-1:-1;46546:347:0;;;;;:::i;:::-;;:::i;45358:385::-;;;;;;;;;;-1:-1:-1;45358:385:0;;;;;:::i;:::-;;:::i;47832:315::-;;;;;;;;;;-1:-1:-1;47832:315:0;;;;;:::i;:::-;;:::i;43584:42::-;;;;;;;;;;;;;;;;43703:38;;;;;;;;;;-1:-1:-1;43703:38:0;;;;;;;;;;;11879:4:1;11867:17;;;11849:36;;11837:2;11822:18;43703:38:0;11707:184:1;32116:164:0;;;;;;;;;;-1:-1:-1;32116:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32237:25:0;;;32213:4;32237:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32116:164;43440:46;;;;;;;;;;;;;;;;45751:787;;;;;;:::i;:::-;;:::i;18114:201::-;;;;;;;;;;-1:-1:-1;18114:201:0;;;;;:::i;:::-;;:::i;46901:585::-;46983:8;46979:498;47001:10;:17;46997:1;:21;;;46979:498;;;47075:10;-1:-1:-1;;;;;47049:36:0;:22;47057:10;47068:1;47057:13;;;;;;;;;;:::i;:::-;;;;;;;47049:22;;:7;:22::i;:::-;-1:-1:-1;;;;;47049:36:0;;47041:83;;;;-1:-1:-1;;;47041:83:0;;;;;;;:::i;:::-;;;;;;;;;47141:12;:27;47154:10;47165:1;47154:13;;;;;;;;;;:::i;:::-;;;;;;;;;;;;47141:27;;;;;;;;;;;;-1:-1:-1;47141:27:0;:37;;;;;:229;;47355:15;47314:12;:27;47327:10;47338:1;47327:13;;;;;;;;;;:::i;:::-;;;;;;;47314:27;;;;;;;;;;;;;:38;;:56;;;47141:229;;;47257:12;:27;47270:10;47281:1;47270:13;;;;;;;;;;:::i;:::-;;;;;;;47257:27;;;;;;;;;;;;;:38;;;47239:15;:56;;;;:::i;:::-;47196:12;:27;47209:10;47220:1;47209:13;;;;;;;;;;:::i;:::-;;;;;;;47196:27;;;;;;;;;;;;;:38;;;:100;;;;;;;:::i;:::-;;;;;;;47141:229;;47428:12;:27;47441:10;47452:1;47441:13;;;;;;;;;;:::i;:::-;;;;;;;47428:27;;;;;;;;;;;;;:37;;;;;;;;;;;;47427:38;47387:12;:27;47400:10;47411:1;47400:13;;;;;;;;;;:::i;:::-;;;;;;;47387:27;;;;;;;;;;;;;:37;;;:78;;;;;;;;;;;;;;;;;;47020:3;;;;;:::i;:::-;;;;46979:498;;;;46901:585;:::o;28132:227::-;28217:4;-1:-1:-1;;;;;;;;;28250:25:0;;;;:63;;-1:-1:-1;;;;;;;;;;28288:25:0;;;28250:63;:101;;;-1:-1:-1;;;;;;;;;;28326:25:0;;;28250:101;28234:117;28132:227;-1:-1:-1;;28132:227:0:o;28369:100::-;28423:13;28456:5;28449:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28369:100;:::o;31583:209::-;31650:7;31675:16;31683:7;31675;:16::i;:::-;31670:64;;31700:34;;-1:-1:-1;;;31700:34:0;;;;;;;;;;;31670:64;-1:-1:-1;31754:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;31754:30:0;;31583:209::o;42961:89::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31175:400::-;31256:13;31272:16;31280:7;31272;:16::i;:::-;31256:32;-1:-1:-1;42198:10:0;-1:-1:-1;;;;;31305:28:0;;;31301:175;;31353:44;31370:5;42198:10;32116:164;:::i;31353:44::-;31348:128;;31425:35;;-1:-1:-1;;;31425:35:0;;;;;;;;;;;31348:128;31488:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;31488:35:0;-1:-1:-1;;;;;31488:35:0;;;;;;;;;31539:28;;31488:24;;31539:28;;;;;;;31245:330;31175:400;;:::o;44506:104::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44573:21:::1;:29:::0;;-1:-1:-1;;44573:29:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;44506:104::o;44618:::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44681:31:::1;44705:6;44681:23;:31::i;:::-;44618:104:::0;:::o;33313:1567::-;33447:27;33477;33496:7;33477:18;:27::i;:::-;33447:57;;33562:4;-1:-1:-1;;;;;33521:45:0;33537:19;-1:-1:-1;;;;;33521:45:0;;33517:86;;33575:28;;-1:-1:-1;;;33575:28:0;;;;;;;;;;;33517:86;33617:27;33126:24;;;:15;:24;;;;;33259:26;;42198:10;32868:30;;;-1:-1:-1;;;;;32732:28:0;;32846:20;;;32843:56;33721:180;;33814:43;33831:4;42198:10;32116:164;:::i;33814:43::-;33809:92;;33866:35;;-1:-1:-1;;;33866:35:0;;;;;;;;;;;33809:92;-1:-1:-1;;;;;33918:16:0;;33914:52;;33943:23;;-1:-1:-1;;;33943:23:0;;;;;;;;;;;33914:52;33979:43;34001:4;34007:2;34011:7;34020:1;33979:21;:43::i;:::-;34062:15;34059:83;;;34125:1;34104:19;34097:30;34059:83;-1:-1:-1;;;;;34184:24:0;;;;;;;:18;:24;;;;;;34182:26;;-1:-1:-1;;34182:26:0;;;34221:22;;;;;;;;;34219:24;;-1:-1:-1;34219:24:0;;;30923:11;30898:23;30894:41;30881:63;-1:-1:-1;;;30881:63:0;34256:26;;;;:17;:26;;;;;:163;;;;-1:-1:-1;;;34436:47:0;;:52;;34432:336;;34537:1;34527:11;;34505:19;34557:30;;;:17;:30;;;;;;:35;;34553:204;;34632:13;;34617:11;:28;34613:129;;34670:30;;;;:17;:30;;;;;:52;;;34613:129;34490:278;34432:336;34811:7;34807:2;-1:-1:-1;;;;;34792:27:0;34801:4;-1:-1:-1;;;;;34792:27:0;;;;;;;;;;;33436:1444;;;33313:1567;;;:::o;45012:338::-;45124:18;;-1:-1:-1;;;;;45124:18:0;45110:10;:32;;:57;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;45146:10;:21;45110:57;45102:87;;;;-1:-1:-1;;;45102:87:0;;14666:2:1;45102:87:0;;;14648:21:1;14705:2;14685:18;;;14678:30;-1:-1:-1;;;14724:18:1;;;14717:47;14781:18;;45102:87:0;14464:341:1;45102:87:0;45207:10;45202:139;45231:8;:15;45223:5;:23;45202:139;;;45318:9;45274:12;:29;45287:8;45296:5;45287:15;;;;;;;;:::i;:::-;;;;;;;45274:29;;;;;;;;;;;;;:40;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;45248:7:0;;-1:-1:-1;45248:7:0;;;:::i;:::-;;;;45202:139;;;;45012:338;;:::o;49451:301::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;49539:8:::1;49535:210;49557:12;:19;49553:1;:23;;;49535:210;;;49648:4;49623:12;49636:1;49623:15;;;;;;;;;;:::i;:::-;;;;;;;:22;;;49607:38;;:13;26592:12:::0;;26532:7;26576:13;:28;;26471:166;49607:13:::1;:38;;;;:::i;:::-;:45;49599:66;;;;-1:-1:-1::0;;;49599:66:0::1;;;;;;;:::i;:::-;49680:53;49690:12;49703:1;49690:15;;;;;;;;;;:::i;:::-;;;;;;;:18;;;49710:12;49723:1;49710:15;;;;;;;;;;:::i;:::-;;;;;;;:22;;;49680:53;;:9;:53::i;:::-;49578:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49535:210;;44010:113:::0;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44088:27;;::::1;::::0;:16:::1;::::0;:27:::1;::::0;::::1;::::0;::::1;:::i;34888:185::-:0;35026:39;35043:4;35049:2;35053:7;35026:39;;;;;;;;;;;;:16;:39::i;47494:330::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;47585:8:::1;47581:234;47603:10;:17;47599:1;:21;;;47581:234;;;47704:12;:27;47717:10;47728:1;47717:13;;;;;;;;;;:::i;:::-;;;;;;;47704:27;;;;;;;;;;;;;:38;;;47686:15;:56;;;;:::i;:::-;47643:12;:27;47656:10;47667:1;47656:13;;;;;;;;;;:::i;:::-;;;;;;;47643:27;;;;;;;;;;;;;:38;;;:100;;;;;;;:::i;:::-;;;;;;;;47798:5;47758:12;:27;47771:10;47782:1;47771:13;;;;;;;;;;:::i;:::-;;;;;;;47758:27;;;;;;;;;;;;;:37;;;:45;;;;;;;;;;;;;;;;;;47622:3;;;;;:::i;:::-;;;;47581:234;;44361:137:::0;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44439:13:::1;:18:::0;;;;44468:17:::1;:22:::0;44361:137::o;29019:152::-;29091:7;29134:27;29153:7;29134:18;:27::i;48698:176::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;48815:4:::1;48803:8;48787:24;;:13;26592:12:::0;;26532:7;26576:13;:28;;26471:166;48787:13:::1;:24;;;;:::i;:::-;48786:33;48778:54;;;;-1:-1:-1::0;;;48778:54:0::1;;;;;;;:::i;:::-;48843:23;48853:2;48857:8;48843:23;;:9;:23::i;27025:233::-:0;27097:7;-1:-1:-1;;;;;27121:19:0;;27117:60;;27149:28;;-1:-1:-1;;;27149:28:0;;;;;;;;;;;27117:60;-1:-1:-1;;;;;;27195:25:0;;;;;:18;:25;;;;;;-1:-1:-1;;;;;27195:55:0;;27025:233::o;18003:103::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;18068:30:::1;18095:1;18068:18;:30::i;:::-;18003:103::o:0;48882:561::-;48978:4;48958:13;26592:12;;26532:7;26576:13;:28;;26471:166;48958:13;:17;;48974:1;48958:17;:::i;:::-;:24;48950:45;;;;-1:-1:-1;;;48950:45:0;;;;;;;:::i;:::-;49092:1;49075:19;;:16;:19;;;;;;;49123:28;-1:-1:-1;;;;;;49140:10:0;15435:2:1;15431:15;15427:53;49123:28:0;;;15415:66:1;;;;49014:139:0;;49051:5;;49075:19;15497:12:1;;49123:28:0;;;;;;;;;;;;;49113:39;;;;;;49014:18;:139::i;:::-;49006:167;;;;-1:-1:-1;;;49006:167:0;;;;;;;:::i;:::-;49217:10;49192:36;;;;:24;:36;;;;;;49231:1;49192:36;;;;:40;49184:78;;;;-1:-1:-1;;;49184:78:0;;16066:2:1;49184:78:0;;;16048:21:1;16105:2;16085:18;;;16078:30;16144:27;16124:18;;;16117:55;16189:18;;49184:78:0;15864:349:1;49184:78:0;49282:11;;;;49281:12;49273:71;;;;-1:-1:-1;;;49273:71:0;;;;;;;:::i;:::-;49357:24;49367:10;49379:1;49357:9;:24::i;:::-;49417:10;49392:36;;;;:24;:36;;;;;:41;;49432:1;;49392:36;:41;;49432:1;;49392:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48882:561;:::o;44131:99::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44209:11:::1;::::0;;-1:-1:-1;;44194:26:0;::::1;44209:11;::::0;;::::1;44208:12;44194:26;::::0;;44131:99::o;28477:104::-;28533:13;28566:7;28559:14;;;;;:::i;31800:308::-;42198:10;-1:-1:-1;;;;;31899:31:0;;;31895:61;;31939:17;;-1:-1:-1;;;31939:17:0;;;;;;;;;;;31895:61;42198:10;31969:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;31969:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;31969:60:0;;;;;;;;;;32045:55;;2586:41:1;;;31969:49:0;;42198:10;32045:55;;2559:18:1;32045:55:0;;;;;;;31800:308;;:::o;44238:115::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44329:14:::1;::::0;;-1:-1:-1;;44311:32:0;::::1;44329:14;::::0;;;::::1;;;44328:15;44311:32:::0;;::::1;;::::0;;44238:115::o;48500:190::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;7077:1:::1;7227:7;;:19:::0;7219:63:::1;;;::::0;-1:-1:-1;;;7219:63:0;;17044:2:1;7219:63:0::1;::::0;::::1;17026:21:1::0;17083:2;17063:18;;;17056:30;17122:33;17102:18;;;17095:61;17173:18;;7219:63:0::1;16842:355:1::0;7219:63:0::1;7077:1;7295:7;:18:::0;48587:49:::2;::::0;48569:12:::2;::::0;48587:10:::2;::::0;48610:21:::2;::::0;48569:12;48587:49;48569:12;48587:49;48610:21;48587:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48568:68;;;48655:7;48647:35;;;::::0;-1:-1:-1;;;48647:35:0;;17614:2:1;48647:35:0::2;::::0;::::2;17596:21:1::0;17653:2;17633:18;;;17626:30;-1:-1:-1;;;17672:18:1;;;17665:45;17727:18;;48647:35:0::2;17412:339:1::0;48647:35:0::2;-1:-1:-1::0;7033:1:0::1;7340:7;:22:::0;48500:190::o;35081:399::-;35248:31;35261:4;35267:2;35271:7;35248:12;:31::i;:::-;-1:-1:-1;;;;;35294:14:0;;;:19;35290:183;;35333:56;35364:4;35370:2;35374:7;35383:5;35333:30;:56::i;:::-;35328:145;;35417:40;;-1:-1:-1;;;35417:40:0;;;;;;;;;;;35328:145;35081:399;;;;:::o;44859:145::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;44958:21:::1;;;::::0;;;:16:::1;:21;::::0;;;;:38;44859:145::o;28589:318::-;28662:13;28693:16;28701:7;28693;:16::i;:::-;28688:59;;28718:29;;-1:-1:-1;;;28718:29:0;;;;;;;;;;;28688:59;28760:21;28784:10;:8;:10::i;:::-;28760:34;;28818:7;28812:21;28837:1;28812:26;:87;;;;;;;;;;;;;;;;;28865:7;28874:18;28884:7;28874:9;:18::i;:::-;28848:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28812:87;28805:94;28589:318;-1:-1:-1;;;28589:318:0:o;46546:347::-;46642:10;46622:16;;;;:7;:16::i;:::-;-1:-1:-1;;;;;46622:30:0;;46614:77;;;;-1:-1:-1;;;46614:77:0;;;;;;;:::i;:::-;46795:27;;46759:21;;;;;;;:12;:21;;;;;:32;;;46741:50;;:15;:50;:::i;:::-;46740:82;;;;:::i;:::-;46704:21;;;;;;;:12;:21;;;;;:118;;:21;;;:118;;;;;:::i;:::-;;;;-1:-1:-1;;46833:21:0;;;;;;:12;:21;;;;;46868:15;46833:32;;;;:50;46546:347::o;45358:385::-;45562:1;45545:19;;:16;:19;;;;;;;45589:28;-1:-1:-1;;;;;;45606:10:0;15435:2:1;15431:15;15427:53;45589:28:0;;;15415:66:1;;;;45492:127:0;;45525:5;;45545:19;15497:12:1;;45589:28:0;15286:229:1;45492:127:0;:152;;;-1:-1:-1;17853:6:0;;-1:-1:-1;;;;;17853:6:0;45623:10;:21;45492:152;45484:180;;;;-1:-1:-1;;;45484:180:0;;;;;;;:::i;:::-;45677:27;:58;-1:-1:-1;45358:385:0:o;47832:315::-;47929:21;;;47900:7;47929:21;;;:12;:21;;;;;:31;;;;;:208;;48105:21;;;;;;;:12;:21;;;;;:32;47929:208;;;48065:27;;48028:21;;;;;;;:12;:21;;;;;:32;;47993;;;;;47975:50;;:15;:50;:::i;:::-;:85;;;;:::i;:::-;47974:118;;;;:::i;45751:787::-;45888:21;;;;45847:36;;;:25;45861:10;-1:-1:-1;;;;;27355:25:0;27327:7;27355:25;;;:18;:25;;24813:2;27355:25;;;;;:50;;-1:-1:-1;;;;;27354:82:0;;27266:178;45847:25;:36;;;;:::i;:::-;:62;;45839:101;;;;-1:-1:-1;;;45839:101:0;;18606:2:1;45839:101:0;;;18588:21:1;18645:2;18625:18;;;18618:30;18684:28;18664:18;;;18657:56;18730:18;;45839:101:0;18404:350:1;45839:101:0;45990:4;45978:8;45962:24;;:13;26592:12;;26532:7;26576:13;:28;;26471:166;45962:13;:24;;;;:::i;:::-;45961:33;45953:54;;;;-1:-1:-1;;;45953:54:0;;;;;;;:::i;:::-;46024:14;;;;;;;46020:381;;;46096:8;46080:24;;:13;;:24;;;;:::i;:::-;46065:9;:40;;46057:49;;;;;;46200:19;;;:16;:19;;;;;;;46252:28;-1:-1:-1;;;;;;46269:10:0;15435:2:1;15431:15;15427:53;46252:28:0;;;15415:66:1;;;;46131:151:0;;46172:5;;46200:19;15497:12:1;;46252:28:0;15286:229:1;46131:151:0;46123:179;;;;-1:-1:-1;;;46123:179:0;;;;;;;:::i;:::-;46020:381;;;46379:8;46359:28;;:17;;:28;;;;:::i;:::-;46345:9;:43;;46337:52;;;;;;46422:11;;;;46421:12;46413:71;;;;-1:-1:-1;;;46413:71:0;;;;;;;:::i;:::-;46497:31;46507:10;46519:8;46497:31;;:9;:31::i;18114:201::-;17853:6;;-1:-1:-1;;;;;17853:6:0;42198:10;17915:23;17907:68;;;;-1:-1:-1;;;17907:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18203:22:0;::::1;18195:73;;;::::0;-1:-1:-1;;;18195:73:0;;18961:2:1;18195:73:0::1;::::0;::::1;18943:21:1::0;19000:2;18980:18;;;18973:30;19039:34;19019:18;;;19012:62;-1:-1:-1;;;19090:18:1;;;19083:36;19136:19;;18195:73:0::1;18759:402:1::0;18195:73:0::1;18279:28;18298:8;18279:18;:28::i;32288:230::-:0;32353:4;32435:13;;32425:7;:23;32386:124;;;;-1:-1:-1;;32461:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;32461:44:0;:49;;32288:230::o;26645:107::-;26738:6;26721:23;;:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;26645:107:0:o;29726:581::-;29793:7;29828;29918:13;;29911:4;:20;29907:337;;;29952:14;29969:23;;;:17;:23;;;;;;;-1:-1:-1;;;30015:24:0;;:29;;30011:218;;30069:105;30076:6;30086:1;30076:11;30069:105;;-1:-1:-1;;;30143:6:0;30125:25;;;;:17;:25;;;;;;30069:105;;30011:218;29933:311;29907:337;30268:31;;-1:-1:-1;;;30268:31:0;;;;;;;;;;;48155:337;-1:-1:-1;48373:5:0;48334:26;;;:12;:26;;;;;:36;;;:44;;-1:-1:-1;;48334:44:0;;;48389:41;;;48441:37;;:41;-1:-1:-1;;48155:337:0:o;39370:112::-;39447:27;39457:2;39461:8;39447:27;;;;;;;;;;;;:9;:27::i;18323:191::-;18416:6;;;-1:-1:-1;;;;;18433:17:0;;;-1:-1:-1;;;;;;18433:17:0;;;;;;;18466:40;;18416:6;;;18433:17;18416:6;;18466:40;;18397:16;;18466:40;18386:128;18323:191;:::o;7435:190::-;7560:4;7613;7584:25;7597:5;7604:4;7584:12;:25::i;:::-;:33;;7435:190;-1:-1:-1;;;;7435:190:0:o;35821:716::-;36005:88;;-1:-1:-1;;;36005:88:0;;35984:4;;-1:-1:-1;;;;;36005:45:0;;;;;:88;;42198:10;;36072:4;;36078:7;;36087:5;;36005:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36005:88:0;;;;;;;;-1:-1:-1;;36005:88:0;;;;;;;;;;;;:::i;:::-;;;36001:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36288:6;:13;36305:1;36288:18;36284:235;;36334:40;;-1:-1:-1;;;36334:40:0;;;;;;;;;;;36284:235;36477:6;36471:13;36462:6;36458:2;36454:15;36447:38;36001:529;-1:-1:-1;;;;;;36164:64:0;-1:-1:-1;;;36164:64:0;;-1:-1:-1;36001:529:0;35821:716;;;;;;:::o;44730:121::-;44790:13;44825:16;44818:23;;;;;:::i;42224:573::-;42360:4;42354:11;;42367:4;42350:22;42386:17;;;;42350:22;42467:5;42449:219;42515:1;42510:3;42506:11;42499:18;;42566:2;42560:4;42556:13;42552:2;42548:22;42543:3;42535:36;42607:2;42597:13;;42628:25;42449:219;42628:25;-1:-1:-1;42698:13:0;;;-1:-1:-1;;42732:14:0;;;42760:19;;;42732:14;42224:573;-1:-1:-1;42224:573:0:o;38764:598::-;38895:19;38901:2;38905:8;38895:5;:19::i;:::-;-1:-1:-1;;;;;38948:14:0;;;:19;38944:404;;38984:11;38998:13;39042:14;;;39071:217;39098:62;39137:1;39141:2;39145:7;;;;;;39154:5;39098:30;:62::i;:::-;39093:159;;39192:40;;-1:-1:-1;;;39192:40:0;;;;;;;;;;;39093:159;39283:3;39275:5;:11;39071:217;;39323:3;39306:13;;:20;39302:34;;39328:8;;;39302:34;38969:379;;38764:598;;;:::o;7845:296::-;7928:7;7971:4;7928:7;7986:118;8010:5;:12;8006:1;:16;7986:118;;;8059:33;8069:12;8083:5;8089:1;8083:8;;;;;;;;:::i;:::-;;;;;;;8059:9;:33::i;:::-;8044:48;-1:-1:-1;8024:3:0;;;;:::i;:::-;;;;7986:118;;;-1:-1:-1;8121:12:0;7845:296;-1:-1:-1;;;7845:296:0:o;36547:1288::-;36620:20;36643:13;;;36671;;;36667:44;;36693:18;;-1:-1:-1;;;36693:18:0;;;;;;;;;;;36667:44;36724:61;36754:1;36758:2;36762:12;36776:8;36724:21;:61::i;:::-;-1:-1:-1;;;;;36815:22:0;;;;;;:18;:22;;;;24813:2;36815:22;;;:71;;36853:32;36841:45;;36815:71;;;36899:31;;;:17;:31;;;;;-1:-1:-1;31131:15:0;;31105:24;31101:46;30923:11;30898:23;30894:41;30891:52;30881:63;;36899:161;;37114:23;;;;36899:31;;36815:22;;37276:25;36815:22;;37225:157;37454:1;37440:12;37436:20;37398:253;37491:3;37482:7;37479:16;37398:253;;37628:7;37618:8;37615:1;37588:25;37585:1;37582;37577:59;37540:1;37527:15;37398:253;;;37402:69;37676:8;37688:1;37676:13;37672:45;;37698:19;;-1:-1:-1;;;37698:19:0;;;;;;;;;;;37672:45;37730:13;:19;-1:-1:-1;45202:139:0;45012:338;;:::o;11173:149::-;11236:7;11267:1;11263;:5;:51;;11398:13;11450:15;;;11486:4;11479:15;;;11533:4;11517:21;;11263:51;;;-1:-1:-1;11398:13:0;11450:15;;;11486:4;11479:15;11533:4;11517:21;;;11173:149::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:1;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:1;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;408:275::-;479:2;473:9;544:2;525:13;;-1:-1:-1;;521:27:1;509:40;;-1:-1:-1;;;;;564:34:1;;600:22;;;561:62;558:88;;;626:18;;:::i;:::-;662:2;655:22;408:275;;-1:-1:-1;408:275:1:o;688:182::-;747:4;-1:-1:-1;;;;;772:6:1;769:30;766:56;;;802:18;;:::i;:::-;-1:-1:-1;847:1:1;843:14;859:4;839:25;;688:182::o;875:159::-;942:20;;1002:6;991:18;;981:29;;971:57;;1024:1;1021;1014:12;971:57;875:159;;;:::o;1039:665::-;1092:5;1145:3;1138:4;1130:6;1126:17;1122:27;1112:55;;1163:1;1160;1153:12;1112:55;1199:6;1186:20;1225:4;1249:59;1265:42;1304:2;1265:42;:::i;:::-;1249:59;:::i;:::-;1342:15;;;1428:1;1424:10;;;;1412:23;;1408:32;;;1373:12;;;;1452:15;;;1449:35;;;1480:1;1477;1470:12;1449:35;1516:2;1508:6;1504:15;1528:147;1544:6;1539:3;1536:15;1528:147;;;1610:22;1628:3;1610:22;:::i;:::-;1598:35;;1653:12;;;;1561;;1528:147;;;-1:-1:-1;1693:5:1;1039:665;-1:-1:-1;;;;;;1039:665:1:o;1709:346::-;1792:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:52;;;1861:1;1858;1851:12;1813:52;1901:9;1888:23;-1:-1:-1;;;;;1926:6:1;1923:30;1920:50;;;1966:1;1963;1956:12;1920:50;1989:60;2041:7;2032:6;2021:9;2017:22;1989:60;:::i;2060:131::-;-1:-1:-1;;;;;;2134:32:1;;2124:43;;2114:71;;2181:1;2178;2171:12;2196:245;2254:6;2307:2;2295:9;2286:7;2282:23;2278:32;2275:52;;;2323:1;2320;2313:12;2275:52;2362:9;2349:23;2381:30;2405:5;2381:30;:::i;2638:258::-;2710:1;2720:113;2734:6;2731:1;2728:13;2720:113;;;2810:11;;;2804:18;2791:11;;;2784:39;2756:2;2749:10;2720:113;;;2851:6;2848:1;2845:13;2842:48;;;-1:-1:-1;;2886:1:1;2868:16;;2861:27;2638:258::o;2901:::-;2943:3;2981:5;2975:12;3008:6;3003:3;2996:19;3024:63;3080:6;3073:4;3068:3;3064:14;3057:4;3050:5;3046:16;3024:63;:::i;:::-;3141:2;3120:15;-1:-1:-1;;3116:29:1;3107:39;;;;3148:4;3103:50;;2901:258;-1:-1:-1;;2901:258:1:o;3164:220::-;3313:2;3302:9;3295:21;3276:4;3333:45;3374:2;3363:9;3359:18;3351:6;3333:45;:::i;3389:180::-;3448:6;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;-1:-1:-1;3540:23:1;;3389:180;-1:-1:-1;3389:180:1:o;3782:173::-;3850:20;;-1:-1:-1;;;;;3899:31:1;;3889:42;;3879:70;;3945:1;3942;3935:12;3960:254;4028:6;4036;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4128:29;4147:9;4128:29;:::i;:::-;4118:39;4204:2;4189:18;;;;4176:32;;-1:-1:-1;;;3960:254:1:o;4219:156::-;4285:20;;4345:4;4334:16;;4324:27;;4314:55;;4365:1;4362;4355:12;4380:182;4437:6;4490:2;4478:9;4469:7;4465:23;4461:32;4458:52;;;4506:1;4503;4496:12;4458:52;4529:27;4546:9;4529:27;:::i;4749:184::-;4807:6;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4899:28;4917:9;4899:28;:::i;4938:328::-;5015:6;5023;5031;5084:2;5072:9;5063:7;5059:23;5055:32;5052:52;;;5100:1;5097;5090:12;5052:52;5123:29;5142:9;5123:29;:::i;:::-;5113:39;;5171:38;5205:2;5194:9;5190:18;5171:38;:::i;:::-;5161:48;;5256:2;5245:9;5241:18;5228:32;5218:42;;4938:328;;;;;:::o;5271:414::-;5363:6;5371;5424:2;5412:9;5403:7;5399:23;5395:32;5392:52;;;5440:1;5437;5430:12;5392:52;5476:9;5463:23;5453:33;;5537:2;5526:9;5522:18;5509:32;-1:-1:-1;;;;;5556:6:1;5553:30;5550:50;;;5596:1;5593;5586:12;5550:50;5619:60;5671:7;5662:6;5651:9;5647:22;5619:60;:::i;:::-;5609:70;;;5271:414;;;;;:::o;5690:1202::-;5799:6;5830:2;5873;5861:9;5852:7;5848:23;5844:32;5841:52;;;5889:1;5886;5879:12;5841:52;5929:9;5916:23;-1:-1:-1;;;;;5954:6:1;5951:30;5948:50;;;5994:1;5991;5984:12;5948:50;6017:22;;6070:4;6062:13;;6058:27;-1:-1:-1;6048:55:1;;6099:1;6096;6089:12;6048:55;6135:2;6122:16;6158:59;6174:42;6213:2;6174:42;:::i;6158:59::-;6251:15;;;6333:1;6329:10;;;;6321:19;;6317:28;;;6282:12;;;;6357:19;;;6354:39;;;6389:1;6386;6379:12;6354:39;6413:11;;;;6433:429;6449:6;6444:3;6441:15;6433:429;;;6531:4;6525:3;6516:7;6512:17;6508:28;6505:118;;;6577:1;6606:2;6602;6595:14;6505:118;6649:22;;:::i;:::-;6698:21;6715:3;6698:21;:::i;:::-;6691:5;6684:36;6756:32;6784:2;6779:3;6775:12;6756:32;:::i;:::-;6740:14;;;6733:56;6802:18;;6475:4;6466:14;;;;;6840:12;;;;6433:429;;;6881:5;5690:1202;-1:-1:-1;;;;;;;5690:1202:1:o;6897:407::-;6962:5;-1:-1:-1;;;;;6988:6:1;6985:30;6982:56;;;7018:18;;:::i;:::-;7056:57;7101:2;7080:15;;-1:-1:-1;;7076:29:1;7107:4;7072:40;7056:57;:::i;:::-;7047:66;;7136:6;7129:5;7122:21;7176:3;7167:6;7162:3;7158:16;7155:25;7152:45;;;7193:1;7190;7183:12;7152:45;7242:6;7237:3;7230:4;7223:5;7219:16;7206:43;7296:1;7289:4;7280:6;7273:5;7269:18;7265:29;7258:40;6897:407;;;;;:::o;7309:451::-;7378:6;7431:2;7419:9;7410:7;7406:23;7402:32;7399:52;;;7447:1;7444;7437:12;7399:52;7487:9;7474:23;-1:-1:-1;;;;;7512:6:1;7509:30;7506:50;;;7552:1;7549;7542:12;7506:50;7575:22;;7628:4;7620:13;;7616:27;-1:-1:-1;7606:55:1;;7657:1;7654;7647:12;7606:55;7680:74;7746:7;7741:2;7728:16;7723:2;7719;7715:11;7680:74;:::i;7947:248::-;8015:6;8023;8076:2;8064:9;8055:7;8051:23;8047:32;8044:52;;;8092:1;8089;8082:12;8044:52;-1:-1:-1;;8115:23:1;;;8185:2;8170:18;;;8157:32;;-1:-1:-1;7947:248:1:o;8200:258::-;8267:6;8275;8328:2;8316:9;8307:7;8303:23;8299:32;8296:52;;;8344:1;8341;8334:12;8296:52;8367:29;8386:9;8367:29;:::i;:::-;8357:39;;8415:37;8448:2;8437:9;8433:18;8415:37;:::i;:::-;8405:47;;8200:258;;;;;:::o;8463:186::-;8522:6;8575:2;8563:9;8554:7;8550:23;8546:32;8543:52;;;8591:1;8588;8581:12;8543:52;8614:29;8633:9;8614:29;:::i;8654:661::-;8708:5;8761:3;8754:4;8746:6;8742:17;8738:27;8728:55;;8779:1;8776;8769:12;8728:55;8815:6;8802:20;8841:4;8865:59;8881:42;8920:2;8881:42;:::i;8865:59::-;8958:15;;;9044:1;9040:10;;;;9028:23;;9024:32;;;8989:12;;;;9068:15;;;9065:35;;;9096:1;9093;9086:12;9065:35;9132:2;9124:6;9120:15;9144:142;9160:6;9155:3;9152:15;9144:142;;;9226:17;;9214:30;;9264:12;;;;9177;;9144:142;;9320:348;9404:6;9457:2;9445:9;9436:7;9432:23;9428:32;9425:52;;;9473:1;9470;9463:12;9425:52;9513:9;9500:23;-1:-1:-1;;;;;9538:6:1;9535:30;9532:50;;;9578:1;9575;9568:12;9532:50;9601:61;9654:7;9645:6;9634:9;9630:22;9601:61;:::i;9673:347::-;9738:6;9746;9799:2;9787:9;9778:7;9774:23;9770:32;9767:52;;;9815:1;9812;9805:12;9767:52;9838:29;9857:9;9838:29;:::i;:::-;9828:39;;9917:2;9906:9;9902:18;9889:32;9964:5;9957:13;9950:21;9943:5;9940:32;9930:60;;9986:1;9983;9976:12;9930:60;10009:5;9999:15;;;9673:347;;;;;:::o;10025:667::-;10120:6;10128;10136;10144;10197:3;10185:9;10176:7;10172:23;10168:33;10165:53;;;10214:1;10211;10204:12;10165:53;10237:29;10256:9;10237:29;:::i;:::-;10227:39;;10285:38;10319:2;10308:9;10304:18;10285:38;:::i;:::-;10275:48;;10370:2;10359:9;10355:18;10342:32;10332:42;;10425:2;10414:9;10410:18;10397:32;-1:-1:-1;;;;;10444:6:1;10441:30;10438:50;;;10484:1;10481;10474:12;10438:50;10507:22;;10560:4;10552:13;;10548:27;-1:-1:-1;10538:55:1;;10589:1;10586;10579:12;10538:55;10612:74;10678:7;10673:2;10660:16;10655:2;10651;10647:11;10612:74;:::i;:::-;10602:84;;;10025:667;;;;;;;:::o;11031:250::-;11097:6;11105;11158:2;11146:9;11137:7;11133:23;11129:32;11126:52;;;11174:1;11171;11164:12;11126:52;11210:9;11197:23;11187:33;;11239:36;11271:2;11260:9;11256:18;11239:36;:::i;11286:416::-;11379:6;11387;11440:2;11428:9;11419:7;11415:23;11411:32;11408:52;;;11456:1;11453;11446:12;11408:52;11496:9;11483:23;-1:-1:-1;;;;;11521:6:1;11518:30;11515:50;;;11561:1;11558;11551:12;11515:50;11584:61;11637:7;11628:6;11617:9;11613:22;11584:61;:::i;:::-;11574:71;11692:2;11677:18;;;;11664:32;;-1:-1:-1;;;;11286:416:1:o;11896:260::-;11964:6;11972;12025:2;12013:9;12004:7;12000:23;11996:32;11993:52;;;12041:1;12038;12031:12;11993:52;12064:29;12083:9;12064:29;:::i;:::-;12054:39;;12112:38;12146:2;12135:9;12131:18;12112:38;:::i;12161:420::-;12253:6;12261;12314:2;12302:9;12293:7;12289:23;12285:32;12282:52;;;12330:1;12327;12320:12;12282:52;12370:9;12357:23;-1:-1:-1;;;;;12395:6:1;12392:30;12389:50;;;12435:1;12432;12425:12;12389:50;12458:61;12511:7;12502:6;12491:9;12487:22;12458:61;:::i;:::-;12448:71;;;12538:37;12571:2;12560:9;12556:18;12538:37;:::i;12586:127::-;12647:10;12642:3;12638:20;12635:1;12628:31;12678:4;12675:1;12668:15;12702:4;12699:1;12692:15;12718:398;12920:2;12902:21;;;12959:2;12939:18;;;12932:30;12998:34;12993:2;12978:18;;12971:62;-1:-1:-1;;;13064:2:1;13049:18;;13042:32;13106:3;13091:19;;12718:398::o;13121:127::-;13182:10;13177:3;13173:20;13170:1;13163:31;13213:4;13210:1;13203:15;13237:4;13234:1;13227:15;13253:125;13293:4;13321:1;13318;13315:8;13312:34;;;13326:18;;:::i;:::-;-1:-1:-1;13363:9:1;;13253:125::o;13383:128::-;13423:3;13454:1;13450:6;13447:1;13444:13;13441:39;;;13460:18;;:::i;:::-;-1:-1:-1;13496:9:1;;13383:128::o;13516:197::-;13554:3;13582:6;13623:2;13616:5;13612:14;13650:2;13641:7;13638:15;13635:41;;13656:18;;:::i;:::-;13705:1;13692:15;;13516:197;-1:-1:-1;;;13516:197:1:o;13718:380::-;13797:1;13793:12;;;;13840;;;13861:61;;13915:4;13907:6;13903:17;13893:27;;13861:61;13968:2;13960:6;13957:14;13937:18;13934:38;13931:161;;14014:10;14009:3;14005:20;14002:1;13995:31;14049:4;14046:1;14039:15;14077:4;14074:1;14067:15;13931:161;;13718:380;;;:::o;14103:356::-;14305:2;14287:21;;;14324:18;;;14317:30;14383:34;14378:2;14363:18;;14356:62;14450:2;14435:18;;14103:356::o;14810:135::-;14849:3;14870:17;;;14867:43;;14890:18;;:::i;:::-;-1:-1:-1;14937:1:1;14926:13;;14810:135::o;14950:331::-;15152:2;15134:21;;;15191:1;15171:18;;;15164:29;-1:-1:-1;;;15224:2:1;15209:18;;15202:38;15272:2;15257:18;;14950:331::o;15520:339::-;15722:2;15704:21;;;15761:2;15741:18;;;15734:30;-1:-1:-1;;;15795:2:1;15780:18;;15773:45;15850:2;15835:18;;15520:339::o;16218:410::-;16420:2;16402:21;;;16459:2;16439:18;;;16432:30;16498:34;16493:2;16478:18;;16471:62;-1:-1:-1;;;16564:2:1;16549:18;;16542:44;16618:3;16603:19;;16218:410::o;16633:204::-;16671:3;16707:4;16704:1;16700:12;16739:4;16736:1;16732:12;16774:3;16768:4;16764:14;16759:3;16756:23;16753:49;;;16782:18;;:::i;:::-;16818:13;;16633:204;-1:-1:-1;;;16633:204:1:o;17756:470::-;17935:3;17973:6;17967:13;17989:53;18035:6;18030:3;18023:4;18015:6;18011:17;17989:53;:::i;:::-;18105:13;;18064:16;;;;18127:57;18105:13;18064:16;18161:4;18149:17;;18127:57;:::i;:::-;18200:20;;17756:470;-1:-1:-1;;;;17756:470:1:o;18231:168::-;18271:7;18337:1;18333;18329:6;18325:14;18322:1;18319:21;18314:1;18307:9;18300:17;18296:45;18293:71;;;18344:18;;:::i;:::-;-1:-1:-1;18384:9:1;;18231:168::o;19166:489::-;-1:-1:-1;;;;;19435:15:1;;;19417:34;;19487:15;;19482:2;19467:18;;19460:43;19534:2;19519:18;;19512:34;;;19582:3;19577:2;19562:18;;19555:31;;;19360:4;;19603:46;;19629:19;;19621:6;19603:46;:::i;:::-;19595:54;19166:489;-1:-1:-1;;;;;;19166:489:1:o;19660:249::-;19729:6;19782:2;19770:9;19761:7;19757:23;19753:32;19750:52;;;19798:1;19795;19788:12;19750:52;19830:9;19824:16;19849:30;19873:5;19849:30;:::i

Swarm Source

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