ETH Price: $3,487.93 (+0.76%)
Gas: 4 Gwei

Contract

0x2BA3aCeF58bBB51916EF49ecbC64074C083B2440
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...201574922024-06-23 22:53:2323 days ago1719183203IN
Fake_Phishing299464
0 ETH0.000052982.13995638
Set Approval For...200077442024-06-03 0:34:1144 days ago1717374851IN
Fake_Phishing299464
0 ETH0.000360817.73078704
Set Approval For...196806522024-04-18 6:47:4789 days ago1713422867IN
Fake_Phishing299464
0 ETH0.000463539.93425282
Set Approval For...195998872024-04-06 23:14:35101 days ago1712445275IN
Fake_Phishing299464
0 ETH0.0003282913.30426537
Set Approval For...195998842024-04-06 23:13:59101 days ago1712445239IN
Fake_Phishing299464
0 ETH0.0002930911.83742385
Set Approval For...183594052023-10-16 0:38:59275 days ago1697416739IN
Fake_Phishing299464
0 ETH0.000252215.41364474
Set Approval For...183194552023-10-10 10:27:35280 days ago1696933655IN
Fake_Phishing299464
0 ETH0.00025615.49733056
Set Approval For...183126172023-10-09 11:28:23281 days ago1696850903IN
Fake_Phishing299464
0 ETH0.000326026.98721935
Set Approval For...179412542023-08-18 11:03:59333 days ago1692356639IN
Fake_Phishing299464
0 ETH0.0010075121.62609694
Withdraw178278942023-08-02 14:25:35349 days ago1690986335IN
Fake_Phishing299464
0 ETH0.0009998132.54830781
Set Approval For...177283682023-07-19 16:18:11363 days ago1689783491IN
Fake_Phishing299464
0 ETH0.0020994744.98353959
Set Approval For...171459102023-04-28 16:47:59445 days ago1682700479IN
Fake_Phishing299464
0 ETH0.0017979738.59309535
Public Mint171445142023-04-28 12:06:11445 days ago1682683571IN
Fake_Phishing299464
0.06 ETH0.0032300837.05207375
Public Mint170732262023-04-18 11:18:35455 days ago1681816715IN
Fake_Phishing299464
0.06 ETH0.0029840534.22981965
Set Public Price170727682023-04-18 9:45:23455 days ago1681811123IN
Fake_Phishing299464
0 ETH0.0010883337.56102733
Set Approval For...170325662023-04-12 14:38:35461 days ago1681310315IN
Fake_Phishing299464
0 ETH0.0012721227.30592132
Set Approval For...170286332023-04-12 1:20:23462 days ago1681262423IN
Fake_Phishing299464
0 ETH0.0010833923.25485309
Set Approval For...170048922023-04-08 16:36:23465 days ago1680971783IN
Fake_Phishing299464
0 ETH0.0009272319.90288376
Withdraw169757172023-04-04 13:07:35469 days ago1680613655IN
Fake_Phishing299464
0 ETH0.0008923329.04932553
Set Approval For...169615562023-04-02 12:58:35471 days ago1680440315IN
Fake_Phishing299464
0 ETH0.0009786521.00653769
Change URI169465822023-03-31 10:26:23473 days ago1680258383IN
Fake_Phishing299464
0 ETH0.0008508322.53567812
Team Mint169465422023-03-31 10:18:11473 days ago1680257891IN
Fake_Phishing299464
0 ETH0.0049312624.13747625
Public Mint169423202023-03-30 20:05:47474 days ago1680206747IN
Fake_Phishing299464
0.05 ETH0.0027352131.37543272
Public Mint169401212023-03-30 12:40:23474 days ago1680180023IN
Fake_Phishing299464
0.1 ETH0.0028138629.63393029
Public Mint169400472023-03-30 12:25:35474 days ago1680179135IN
Fake_Phishing299464
0.1 ETH0.0030179226.93277767
View all transactions

Latest 5 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
178278942023-08-02 14:25:35349 days ago1690986335
Fake_Phishing299464
0.12 ETH
169757172023-04-04 13:07:35469 days ago1680613655
Fake_Phishing299464
2.15 ETH
165280022023-01-31 16:28:35532 days ago1675182515
Fake_Phishing299464
0.15 ETH
164394322023-01-19 7:41:59544 days ago1674114119
Fake_Phishing299464
2.8 ETH
163404092023-01-05 11:51:47558 days ago1672919507
Fake_Phishing299464
7.38 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Inception

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : Inception.sol
///SPDX-License-Identifier:MIT
pragma solidity 0.8.13;

import "@rari-capital/solmate/src/tokens/ERC721.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "./BoolMapWhitelist.sol";

contract Inception is ERC721, ERC2981, BoolMap {
    address public owner;
    address public signerAddress;
    uint256 public saleState;
    uint256 private tokenId;
    uint256 public saleStart;
    uint256 public insiderPrice;
    uint256 public fellowPrice;
    uint256 public publicPrice;
    uint256 public reservedPrivateNfts;
    uint256 public reservedNfts;

    struct DutchAuction {
        uint80 startPrice;
        uint80 endPrice;
        uint32 auctionDuration;
        uint32 dropDuration;
        uint80 dropAmount;
    }

    DutchAuction public dutchAuction;

    uint256 public constant MAXIMUM_NFT = 8888;

    uint256 public maximumTransactionPerMint;

    bytes32 public constant PROVENANCE_HASH = 0xc2908578a697fff44c97633f2d502ac7774cccf6224499c8b09d196cf0651781;

    string private _tokenURI;

    // from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/3d7a93876a2e5e1d7fe29b5a0e96e222afdc4cfa/contracts/access/Ownable.sol#L23
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /////////////////////////////// CONSTRUCTOR ///////////////////////////////

    constructor(address _signer, address ownerAddress) ERC721("RCM INCEPTION", "icNFT") {
        signerAddress = _signer;
        owner = ownerAddress;
    }

    /////////////////////////////// MINT FUNCTIONS ///////////////////////////////

    function insiderMint(uint16 index, bytes calldata signature) external payable notBot {
        require(saleState == 1, "insider mint is not active");
        require(msg.value == insiderPrice, "not enough ether");
        require(tokenId < MAXIMUM_NFT - reservedNfts, "maximum NFT exceeds");

        isSignatureValid(index, signature);

        unchecked {
            ++tokenId;
        }

        _mint(msg.sender, tokenId);

        --reservedPrivateNfts;
    }

    function fellowMint(uint16 index, bytes calldata signature) external payable notBot {
        require(saleState == 2, "fellow mint is not active");
        require(msg.value == fellowPrice, "not enough ether");
        require(tokenId < MAXIMUM_NFT - reservedNfts, "maximum NFT exceeds");

        isSignatureValid(index, signature);

        unchecked {
            ++tokenId;
        }

        _mint(msg.sender, tokenId);

        --reservedPrivateNfts;
    }

    function auctionMint(uint256 amount) external payable notBot {
        uint256 _tokenId = tokenId;

        uint256 price = amount * auctionPrice();

        require(saleState == 3 && block.timestamp >= saleStart, "auction sale is not active");
        require(amount + _tokenId <= MAXIMUM_NFT - reservedPrivateNfts - reservedNfts, "maximum NFT exceeds");
        require(amount <= maximumTransactionPerMint, "maximum nft per transaction exceeds");
        require(msg.value >= price, "not enough ether");

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }

        for (uint256 i = 0; i < amount; ) {
            unchecked {
                ++i;
                ++_tokenId;
            }

            _mint(msg.sender, _tokenId);
        }

        tokenId = _tokenId;
    }

    function publicMint(uint256 amount) external payable notBot {
        uint256 _tokenId = tokenId;

        require(saleState == 4 && block.timestamp >= saleStart, "public sale is not active");
        require(tokenId + amount <= MAXIMUM_NFT - reservedPrivateNfts - reservedNfts, "maximum NFT exceeds");
        require(amount <= maximumTransactionPerMint, "maximum nft per transaction exceeds");
        require(msg.value == publicPrice * amount, "not enough ether");

        for (uint256 i = 0; i < amount; ) {
            unchecked {
                ++i;
                ++_tokenId;
            }

            _mint(msg.sender, _tokenId);
        }

        tokenId = _tokenId;
    }

    function teamMint(
        address[] calldata to,
        uint256[] calldata amount,
        bool reserved
    ) external onlyOwner {
        uint256 _tokenId = tokenId;
        uint256 totalToken = 0;

        for (uint256 i = 0; i < amount.length; ) {
            for (uint256 k = 0; k < amount[i]; ) {
                unchecked {
                    ++k;
                    ++_tokenId;
                    ++totalToken;
                }

                _mint(to[i], _tokenId);
            }

            unchecked {
                ++i;
            }
        }

        if (reserved) {
            reservedNfts -= totalToken;
        }

        require(_tokenId <= MAXIMUM_NFT, "maximum NFT exceeds");

        tokenId = _tokenId;
    }

    /////////////////////////////// GOVERNANCE FUNCTIONS ///////////////////////////////

    function setFellowPrice(uint256 _fellowPrice) external onlyOwner {
        fellowPrice = _fellowPrice;
    }

    function setInsiderPrice(uint256 _insiderPrice) external onlyOwner {
        insiderPrice = _insiderPrice;
    }

    function setReserved(uint16 _reservedPrivateNfts, uint256 _reservedNfts) external onlyOwner {
        require(tokenId + _reservedPrivateNfts + _reservedNfts <= MAXIMUM_NFT, "invalid reserved nft amount");

        reservedNfts = _reservedNfts;
        reservedPrivateNfts = _reservedPrivateNfts;
    }

    function setMaximumNftLimitPerTransaction(uint256 limit) external onlyOwner {
        maximumTransactionPerMint = limit;
    }

    function setPublicPrice(uint256 _publicPrice) external onlyOwner {
        publicPrice = _publicPrice;
    }

    function setAuctionDetails(DutchAuction calldata _dutchAuction) external onlyOwner {
        dutchAuction = _dutchAuction;
    }

    function changeState(uint256 _saleState) external onlyOwner {
        saleState = _saleState;
    }

    function setSaleStart(uint256 startTime) external onlyOwner {
        saleStart = startTime;
    }

    function changeSigner(address _signer) external onlyOwner {
        signerAddress = _signer;
    }

    function changeOwner(address newOwner) external onlyOwner {
        address oldOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function changeURI(string calldata newURI) external onlyOwner {
        _tokenURI = newURI;
    }

    function setRoyalty(address royaltyAddress, uint96 royaltyRate) external onlyOwner {
        require(royaltyRate <= 1000, "royalty can not be greater than 1000");
        _setDefaultRoyalty(royaltyAddress, royaltyRate);
    }

    function withdraw() external onlyOwner {
        (bool success, ) = owner.call{value: address(this).balance}("");
        require(success, "transfer failed");
    }

    function setWhitelistSlots(uint256 whitelistedAddressAmount) external onlyOwner {
        optimizeSlots(whitelistedAddressAmount);
    }

    /////////////////////////////// VIEW FUNCTIONS ///////////////////////////////

    function auctionPrice() public view returns (uint256) {
        DutchAuction memory _dutchAuction = dutchAuction;

        uint256 _saleStart = saleStart;
        uint256 currentTime = block.timestamp;

        if (currentTime <= _saleStart) {
            return uint256(_dutchAuction.startPrice);
        }

        if (currentTime - _saleStart < uint256(_dutchAuction.auctionDuration)) {
            uint256 dropStep = (currentTime - _saleStart) / uint256(_dutchAuction.dropDuration);
            return uint256(_dutchAuction.startPrice) - (dropStep * uint256(_dutchAuction.dropAmount));
        } else {
            return uint256(_dutchAuction.endPrice);
        }
    }

    function totalSupply() external view returns (uint256) {
        return tokenId;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        ownerOf(_tokenId);

        return string(abi.encodePacked(_tokenURI, Strings.toString(_tokenId)));
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981) returns (bool) {
        return ERC721.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId);
    }

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

    function isSignatureValid(uint16 index, bytes memory signature) private {
        require(signature.length == 65, "invalid signature");
        require(canMint(index), "already minted");
        setMinted(index);

        bytes32 signatureHash = ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(msg.sender, address(this), index, saleState)));

        address _signerAddress = ECDSA.recover(signatureHash, signature);
        require(signerAddress == _signerAddress, "invalid signature");
    }

    /////////////////////////////// MODIFIERS ///////////////////////////////

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    modifier notBot() {
        require(msg.sender == tx.origin, "only human");
        _;
    }
}

File 2 of 9 : ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

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

    /*//////////////////////////////////////////////////////////////
                         METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                      ERC721 BALANCE/OWNER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256) internal _balanceOf;

    function ownerOf(uint256 id) public view virtual returns (address owner) {
        require((owner = _ownerOf[id]) != address(0), "NOT_MINTED");
    }

    function balanceOf(address owner) public view virtual returns (uint256) {
        require(owner != address(0), "ZERO_ADDRESS");

        return _balanceOf[owner];
    }

    /*//////////////////////////////////////////////////////////////
                         ERC721 APPROVAL STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*//////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = _ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == _ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _balanceOf[from]--;

            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(_ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

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

    function _burn(uint256 id) internal virtual {
        address owner = _ownerOf[id];

        require(owner != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            _balanceOf[owner]--;
        }

        delete _ownerOf[id];

        delete getApproved[id];

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

    /*//////////////////////////////////////////////////////////////
                        INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721TokenReceiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721TokenReceiver.onERC721Received.selector;
    }
}

File 3 of 9 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 4 of 9 : ERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/common/ERC2981.sol)

pragma solidity ^0.8.0;

import "../../interfaces/IERC2981.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
 * fee is specified in basis points by default.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

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

    /**
     * @inheritdoc IERC2981
     */
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `tokenId` must be already minted.
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

File 5 of 9 : ECDSA.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

import "../Strings.sol";

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
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");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            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;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    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);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        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);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    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;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 6 of 9 : BoolMapWhitelist.sol
///SPDX-License-Identifier:MIT
pragma solidity 0.8.13;

/*
This contract is modified version of openzeppelin bitmap https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/BitMaps.sol
Goal is storing 255 boolean in one slot. First bit cannot be changed by users.
*/

contract BoolMap {
    mapping(uint256 => uint256) private mintMap;
    uint256 private totalWhitelistedAddresses;

    //Makes the first bit of the slots 1. In this way, the person who mints first and the person who mint the second pays the same gas fee.
    function optimizeSlots(uint256 whitelistedAddressAmount) internal {
        uint256 _totalWhitelistedAddresses = totalWhitelistedAddresses;
        uint256 startSlot = _totalWhitelistedAddresses % 255 == 0
            ? _totalWhitelistedAddresses / 255
            : (_totalWhitelistedAddresses / 255) + 1;

        uint256 totalAddress = _totalWhitelistedAddresses + whitelistedAddressAmount;
        uint256 finalSlot = totalAddress % 255 == 0 ? totalAddress / 255 : (totalAddress / 255) + 1;

        for (uint256 i = startSlot; i < finalSlot; ) {
            mintMap[i] |= 1;

            unchecked {
                ++i;
            }
        }

        totalWhitelistedAddresses = totalAddress;
    }

    function setMinted(uint16 index) internal {
        uint256 slot = index / 255;
        mintMap[slot] |= 2 << (index % 255);
    }

    function canMint(uint16 index) internal view returns (bool) {
        uint256 slot = index / 255;
        uint256 num = mintMap[slot] & (2 << (index % 255));
        return num == 0;
    }
}

File 7 of 9 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 8 of 9 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 9 of 9 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAXIMUM_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"auctionMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"auctionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"changeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_saleState","type":"uint256"}],"name":"changeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"changeURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dutchAuction","outputs":[{"internalType":"uint80","name":"startPrice","type":"uint80"},{"internalType":"uint80","name":"endPrice","type":"uint80"},{"internalType":"uint32","name":"auctionDuration","type":"uint32"},{"internalType":"uint32","name":"dropDuration","type":"uint32"},{"internalType":"uint80","name":"dropAmount","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"index","type":"uint16"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"fellowMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"fellowPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"index","type":"uint16"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"insiderMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"insiderPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTransactionPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reservedNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reservedPrivateNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint80","name":"startPrice","type":"uint80"},{"internalType":"uint80","name":"endPrice","type":"uint80"},{"internalType":"uint32","name":"auctionDuration","type":"uint32"},{"internalType":"uint32","name":"dropDuration","type":"uint32"},{"internalType":"uint80","name":"dropAmount","type":"uint80"}],"internalType":"struct Inception.DutchAuction","name":"_dutchAuction","type":"tuple"}],"name":"setAuctionDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fellowPrice","type":"uint256"}],"name":"setFellowPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_insiderPrice","type":"uint256"}],"name":"setInsiderPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaximumNftLimitPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicPrice","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_reservedPrivateNfts","type":"uint16"},{"internalType":"uint256","name":"_reservedNfts","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"royaltyAddress","type":"address"},{"internalType":"uint96","name":"royaltyRate","type":"uint96"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"setSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"whitelistedAddressAmount","type":"uint256"}],"name":"setWhitelistSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bool","name":"reserved","type":"bool"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","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":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620063223803806200632283398181016040528101906200003791906200027b565b6040518060400160405280600d81526020017f52434d20494e43455054494f4e000000000000000000000000000000000000008152506040518060400160405280600581526020017f69634e46540000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000161565b508060019080519060200190620000d492919062000161565b50505081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000326565b8280546200016f90620002f1565b90600052602060002090601f016020900481019282620001935760008555620001df565b82601f10620001ae57805160ff1916838001178555620001df565b82800160010185558215620001df579182015b82811115620001de578251825591602001919060010190620001c1565b5b509050620001ee9190620001f2565b5090565b5b808211156200020d576000816000905550600101620001f3565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002438262000216565b9050919050565b620002558162000236565b81146200026157600080fd5b50565b60008151905062000275816200024a565b92915050565b6000806040838503121562000295576200029462000211565b5b6000620002a58582860162000264565b9250506020620002b88582860162000264565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030a57607f821691505b60208210810362000320576200031f620002c2565b5b50919050565b615fec80620003366000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063b61613d1116100c1578063ca31cd691161007a578063ca31cd69146109a7578063d3d62bf9146109d2578063e5e01c11146109fb578063e985e9c514610a24578063ec8102c414610a61578063ff1b655614610a8a57610293565b8063b61613d114610899578063b88d4fde146108c4578063bf9f8665146108ed578063c50342f314610916578063c627525514610941578063c87b56dd1461096a57610293565b8063a6f9dae111610113578063a6f9dae11461079f578063a945bf80146107c8578063aad2b723146107f3578063ab0bcc411461081c578063aff88f6a14610847578063b00741cb1461087057610293565b806370a082311461068b5780638da5cb5b146106c85780638f2fc60b146106f357806395d89b411461071c5780639da0d7d414610747578063a22cb4651461077657610293565b806336578720116101fe5780635b7633d0116101b75780635b7633d0146105885780635d3d1b31146105b3578063603f4d52146105cf5780636305a72d146105fa5780636352211e146106255780636bb6db2c1461066257610293565b806336578720146104ba578063380d1d70146104d65780633ccfd60b1461050157806342842e0e146105185780634d3554c31461054157806356742b5a1461055d57610293565b8063193823e811610250578063193823e8146103ba57806323b872dd146103e35780632a55205a1461040c5780632db115441461044a5780632f181f5414610466578063306c9f3a1461048f57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d578063134eb9861461036657806318160ddd1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613f6b565b610ab5565b6040516102cc9190613fb3565b60405180910390f35b3480156102e157600080fd5b506102ea610ad7565b6040516102f79190614067565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906140bf565b610b65565b604051610334919061412d565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614174565b610b98565b005b34801561037257600080fd5b5061038d600480360381019061038891906140bf565b610d81565b005b34801561039b57600080fd5b506103a4610e1b565b6040516103b191906141c3565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc91906140bf565b610e25565b005b3480156103ef57600080fd5b5061040a600480360381019061040591906141de565b610ebf565b005b34801561041857600080fd5b50610433600480360381019061042e9190614231565b6112be565b604051610441929190614271565b60405180910390f35b610464600480360381019061045f91906140bf565b6114a8565b005b34801561047257600080fd5b5061048d600480360381019061048891906140bf565b6116a2565b005b34801561049b57600080fd5b506104a461173c565b6040516104b191906141c3565b60405180910390f35b6104d460048036038101906104cf9190614339565b611742565b005b3480156104e257600080fd5b506104eb611911565b6040516104f891906141c3565b60405180910390f35b34801561050d57600080fd5b50610516611917565b005b34801561052457600080fd5b5061053f600480360381019061053a91906141de565b611a78565b005b61055b600480360381019061055691906140bf565b611bb0565b005b34801561056957600080fd5b50610572611e0f565b60405161057f91906141c3565b60405180910390f35b34801561059457600080fd5b5061059d611fe1565b6040516105aa919061412d565b60405180910390f35b6105cd60048036038101906105c89190614339565b612007565b005b3480156105db57600080fd5b506105e46121d6565b6040516105f191906141c3565b60405180910390f35b34801561060657600080fd5b5061060f6121dc565b60405161061c91906141c3565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906140bf565b6121e2565b604051610659919061412d565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906143bd565b61228d565b005b34801561069757600080fd5b506106b260048036038101906106ad91906143ea565b612332565b6040516106bf91906141c3565b60405180910390f35b3480156106d457600080fd5b506106dd6123e9565b6040516106ea919061412d565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061445b565b61240f565b005b34801561072857600080fd5b50610731612500565b60405161073e9190614067565b60405180910390f35b34801561075357600080fd5b5061075c61258e565b60405161076d9594939291906144df565b60405180910390f35b34801561078257600080fd5b5061079d6004803603810190610798919061455e565b612614565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906143ea565b612711565b005b3480156107d457600080fd5b506107dd612867565b6040516107ea91906141c3565b60405180910390f35b3480156107ff57600080fd5b5061081a600480360381019061081591906143ea565b61286d565b005b34801561082857600080fd5b50610831612941565b60405161083e91906141c3565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061464a565b612947565b005b34801561087c57600080fd5b50610897600480360381019061089291906140bf565b612adb565b005b3480156108a557600080fd5b506108ae612b75565b6040516108bb91906141c3565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906146df565b612b7b565b005b3480156108f957600080fd5b50610914600480360381019061090f9190614767565b612cb9565b005b34801561092257600080fd5b5061092b612dc0565b60405161093891906141c3565b60405180910390f35b34801561094d57600080fd5b50610968600480360381019061096391906140bf565b612dc6565b005b34801561097657600080fd5b50610991600480360381019061098c91906140bf565b612e60565b60405161099e9190614067565b60405180910390f35b3480156109b357600080fd5b506109bc612e9e565b6040516109c991906141c3565b60405180910390f35b3480156109de57600080fd5b506109f960048036038101906109f491906140bf565b612ea4565b005b348015610a0757600080fd5b50610a226004803603810190610a1d91906147fd565b612f40565b005b348015610a3057600080fd5b50610a4b6004803603810190610a46919061484a565b612fe6565b604051610a589190613fb3565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a8391906140bf565b613015565b005b348015610a9657600080fd5b50610a9f6130af565b604051610aac91906148a3565b60405180910390f35b6000610ac0826130d6565b80610ad05750610acf82613168565b5b9050919050565b60008054610ae4906148ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b10906148ed565b8015610b5d5780601f10610b3257610100808354040283529160200191610b5d565b820191906000526020600020905b815481529060010190602001808311610b4057829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c905750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc69061496a565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e08906149d6565b60405180910390fd5b8060108190555050565b6000600d54905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac906149d6565b60405180910390fd5b8060168190555050565b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790614a42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614aae565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061108f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806110f857506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061496a565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036114535760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b600061145d6131e2565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866114899190614afd565b6114939190614b86565b90508160000151819350935050509250929050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90614c03565b60405180910390fd5b6000600d5490506004600c541480156115315750600e544210155b611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614c6f565b60405180910390fd5b6013546012546122b86115839190614c8f565b61158d9190614c8f565b82600d5461159b9190614cc3565b11156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390614d65565b60405180910390fd5b601654821115611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614df7565b60405180910390fd5b8160115461162f9190614afd565b3414611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614e63565b60405180910390fd5b60005b828110156116965780600101905081600101915061169133836131ec565b611673565b5080600d819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611729906149d6565b60405180910390fd5b80600e8190555050565b60165481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614c03565b60405180910390fd5b6002600c54146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614ecf565b60405180910390fd5b6010543414611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614e63565b60405180910390fd5b6013546122b86118499190614c8f565b600d541061188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390614d65565b60405180910390fd5b6118da8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133fe565b600d60008154600101919050819055506118f633600d546131ec565b60126000815461190590614eef565b91905081905550505050565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e906149d6565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516119ef90614f49565b60006040518083038185875af1925050503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b5050905080611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90614faa565b60405180910390fd5b50565b611a83838383610ebf565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611b6c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b0893929190614ffe565b6020604051808303816000875af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b919061505d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba2906150d6565b60405180910390fd5b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614c03565b60405180910390fd5b6000600d5490506000611c2f611e0f565b83611c3a9190614afd565b90506003600c54148015611c505750600e544210155b611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690615142565b60405180910390fd5b6013546012546122b8611ca29190614c8f565b611cac9190614c8f565b8284611cb89190614cc3565b1115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090614d65565b60405180910390fd5b601654831115611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590614df7565b60405180910390fd5b80341015611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614e63565b60405180910390fd5b80341115611ddc573373ffffffffffffffffffffffffffffffffffffffff166108fc8234611daf9190614c8f565b9081150290604051600060405180830381858888f19350505050158015611dda573d6000803e3d6000fd5b505b60005b83811015611e0257806001019050826001019250611dfd33846131ec565b611ddf565b5081600d81905550505050565b60008060146040518060a00160405290816000820160009054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff16815260200160008201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff168152505090506000600e5490506000429050818111611f4357826000015169ffffffffffffffffffff169350505050611fde565b826040015163ffffffff168282611f5a9190614c8f565b1015611fc7576000836060015163ffffffff168383611f799190614c8f565b611f839190614b86565b9050836080015169ffffffffffffffffffff1681611fa19190614afd565b846000015169ffffffffffffffffffff16611fbc9190614c8f565b945050505050611fde565b826020015169ffffffffffffffffffff1693505050505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614c03565b60405180910390fd5b6001600c54146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b1906151ae565b60405180910390fd5b600f5434146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614e63565b60405180910390fd5b6013546122b861210e9190614c8f565b600d5410612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614d65565b60405180910390fd5b61219f8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133fe565b600d60008154600101919050819055506121bb33600d546131ec565b6012600081546121ca90614eef565b91905081905550505050565b600c5481565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1603612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f9061521a565b60405180910390fd5b919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461231d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612314906149d6565b60405180910390fd5b806014818161232c9190615539565b90505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990615593565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906149d6565b60405180910390fd5b6103e8816bffffffffffffffffffffffff1611156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615625565b60405180910390fd5b6124fc8282613572565b5050565b6001805461250d906148ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612539906148ed565b80156125865780601f1061255b57610100808354040283529160200191612586565b820191906000526020600020905b81548152906001019060200180831161256957829003601f168201915b505050505081565b60148060000160009054906101000a900469ffffffffffffffffffff169080600001600a9054906101000a900469ffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900463ffffffff16908060010160009054906101000a900469ffffffffffffffffffff16905085565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127059190613fb3565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612798906149d6565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60115481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906149d6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce906149d6565b60405180910390fd5b6000600d5490506000805b85859050811015612a655760005b868683818110612a0357612a02615645565b5b90506020020135811015612a5957806001019050836001019350826001019250612a54898984818110612a3957612a38615645565b5b9050602002016020810190612a4e91906143ea565b856131ec565b6129f0565b508060010190506129e2565b508215612a86578060136000828254612a7e9190614c8f565b925050819055505b6122b8821115612acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac290614d65565b60405180910390fd5b81600d8190555050505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b62906149d6565b60405180910390fd5b80600c8190555050565b60135481565b612b86858585610ebf565b60008473ffffffffffffffffffffffffffffffffffffffff163b1480612c73575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401612c0f9594939291906156b0565b6020604051808303816000875af1158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c52919061505d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca9906150d6565b60405180910390fd5b5050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906149d6565b60405180910390fd5b6122b8818361ffff16600d54612d5f9190614cc3565b612d699190614cc3565b1115612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061574a565b60405180910390fd5b806013819055508161ffff166012819055505050565b6122b881565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d906149d6565b60405180910390fd5b8060118190555050565b6060612e6b826121e2565b506017612e7783613707565b604051602001612e8892919061583a565b6040516020818303038152906040529050919050565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b906149d6565b60405180910390fd5b612f3d81613867565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc7906149d6565b60405180910390fd5b818160179190612fe1929190613e66565b505050565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c906149d6565b60405180910390fd5b80600f8190555050565b7fc2908578a697fff44c97633f2d502ac7774cccf6224499c8b09d196cf065178160001b81565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061313157506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131615750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131db57506131da8261394e565b5b9050919050565b6000612710905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361325b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325290614aae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f4906158aa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6041815114613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343990615916565b60405180910390fd5b61344b826139b8565b61348a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348190615982565b60405180910390fd5b61349382613a09565b60006134cc333085600c546040516020016134b19493929190615a41565b60405160208183030381529060405280519060200120613a57565b905060006134da8284613a87565b90508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356390615916565b60405180910390fd5b50505050565b61357a6131e2565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156135d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cf90615b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363e90615b6d565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b60606000820361374e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613862565b600082905060005b6000821461378057808061376990615b8d565b915050600a826137799190614b86565b9150613756565b60008167ffffffffffffffff81111561379c5761379b615bd5565b5b6040519080825280601f01601f1916602001820160405280156137ce5781602001600182028036833780820191505090505b5090505b6000851461385b576001826137e79190614c8f565b9150600a856137f69190615c04565b60306138029190614cc3565b60f81b81838151811061381857613817615645565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138549190614b86565b94506137d2565b8093505050505b919050565b6000600954905060008060ff8361387e9190615c04565b146138a157600160ff836138929190614b86565b61389c9190614cc3565b6138af565b60ff826138ae9190614b86565b5b9050600083836138bf9190614cc3565b905060008060ff836138d19190615c04565b146138f457600160ff836138e59190614b86565b6138ef9190614cc3565b613902565b60ff826139019190614b86565b5b905060008390505b8181101561393f576001600860008381526020019081526020016000206000828254179250508190555080600101905061390a565b50816009819055505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060ff836139c89190615c35565b61ffff169050600060ff846139dd9190615c66565b61ffff166002901b60086000848152602001908152602001600020541690506000811492505050919050565b600060ff82613a189190615c35565b61ffff16905060ff82613a2b9190615c66565b61ffff166002901b60086000838152602001908152602001600020600082825417925050819055505050565b600081604051602001613a6a9190615d04565b604051602081830303815290604052805190602001209050919050565b6000806000613a968585613aae565b91509150613aa381613b2f565b819250505092915050565b6000806041835103613aef5760008060006020860151925060408601519150606086015160001a9050613ae387828585613cfb565b94509450505050613b28565b6040835103613b1f576000806020850151915060408501519050613b14868383613e07565b935093505050613b28565b60006002915091505b9250929050565b60006004811115613b4357613b42615d2a565b5b816004811115613b5657613b55615d2a565b5b0315613cf85760016004811115613b7057613b6f615d2a565b5b816004811115613b8357613b82615d2a565b5b03613bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bba90615da5565b60405180910390fd5b60026004811115613bd757613bd6615d2a565b5b816004811115613bea57613be9615d2a565b5b03613c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2190615e11565b60405180910390fd5b60036004811115613c3e57613c3d615d2a565b5b816004811115613c5157613c50615d2a565b5b03613c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8890615ea3565b60405180910390fd5b600480811115613ca457613ca3615d2a565b5b816004811115613cb757613cb6615d2a565b5b03613cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cee90615f35565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613d36576000600391509150613dfe565b601b8560ff1614158015613d4e5750601c8560ff1614155b15613d60576000600491509150613dfe565b600060018787878760405160008152602001604052604051613d859493929190615f71565b6020604051602081039080840390855afa158015613da7573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613df557600060019250925050613dfe565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c613e4a9190614cc3565b9050613e5887828885613cfb565b935093505050935093915050565b828054613e72906148ed565b90600052602060002090601f016020900481019282613e945760008555613edb565b82601f10613ead57803560ff1916838001178555613edb565b82800160010185558215613edb579182015b82811115613eda578235825591602001919060010190613ebf565b5b509050613ee89190613eec565b5090565b5b80821115613f05576000816000905550600101613eed565b5090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f4881613f13565b8114613f5357600080fd5b50565b600081359050613f6581613f3f565b92915050565b600060208284031215613f8157613f80613f09565b5b6000613f8f84828501613f56565b91505092915050565b60008115159050919050565b613fad81613f98565b82525050565b6000602082019050613fc86000830184613fa4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614008578082015181840152602081019050613fed565b83811115614017576000848401525b50505050565b6000601f19601f8301169050919050565b600061403982613fce565b6140438185613fd9565b9350614053818560208601613fea565b61405c8161401d565b840191505092915050565b60006020820190508181036000830152614081818461402e565b905092915050565b6000819050919050565b61409c81614089565b81146140a757600080fd5b50565b6000813590506140b981614093565b92915050565b6000602082840312156140d5576140d4613f09565b5b60006140e3848285016140aa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614117826140ec565b9050919050565b6141278161410c565b82525050565b6000602082019050614142600083018461411e565b92915050565b6141518161410c565b811461415c57600080fd5b50565b60008135905061416e81614148565b92915050565b6000806040838503121561418b5761418a613f09565b5b60006141998582860161415f565b92505060206141aa858286016140aa565b9150509250929050565b6141bd81614089565b82525050565b60006020820190506141d860008301846141b4565b92915050565b6000806000606084860312156141f7576141f6613f09565b5b60006142058682870161415f565b93505060206142168682870161415f565b9250506040614227868287016140aa565b9150509250925092565b6000806040838503121561424857614247613f09565b5b6000614256858286016140aa565b9250506020614267858286016140aa565b9150509250929050565b6000604082019050614286600083018561411e565b61429360208301846141b4565b9392505050565b600061ffff82169050919050565b6142b18161429a565b81146142bc57600080fd5b50565b6000813590506142ce816142a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126142f9576142f86142d4565b5b8235905067ffffffffffffffff811115614316576143156142d9565b5b602083019150836001820283011115614332576143316142de565b5b9250929050565b60008060006040848603121561435257614351613f09565b5b6000614360868287016142bf565b935050602084013567ffffffffffffffff81111561438157614380613f0e565b5b61438d868287016142e3565b92509250509250925092565b600080fd5b600060a082840312156143b4576143b3614399565b5b81905092915050565b600060a082840312156143d3576143d2613f09565b5b60006143e18482850161439e565b91505092915050565b600060208284031215614400576143ff613f09565b5b600061440e8482850161415f565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b61443881614417565b811461444357600080fd5b50565b6000813590506144558161442f565b92915050565b6000806040838503121561447257614471613f09565b5b60006144808582860161415f565b925050602061449185828601614446565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b6144ba8161449b565b82525050565b600063ffffffff82169050919050565b6144d9816144c0565b82525050565b600060a0820190506144f460008301886144b1565b61450160208301876144b1565b61450e60408301866144d0565b61451b60608301856144d0565b61452860808301846144b1565b9695505050505050565b61453b81613f98565b811461454657600080fd5b50565b60008135905061455881614532565b92915050565b6000806040838503121561457557614574613f09565b5b60006145838582860161415f565b925050602061459485828601614549565b9150509250929050565b60008083601f8401126145b4576145b36142d4565b5b8235905067ffffffffffffffff8111156145d1576145d06142d9565b5b6020830191508360208202830111156145ed576145ec6142de565b5b9250929050565b60008083601f84011261460a576146096142d4565b5b8235905067ffffffffffffffff811115614627576146266142d9565b5b602083019150836020820283011115614643576146426142de565b5b9250929050565b60008060008060006060868803121561466657614665613f09565b5b600086013567ffffffffffffffff81111561468457614683613f0e565b5b6146908882890161459e565b9550955050602086013567ffffffffffffffff8111156146b3576146b2613f0e565b5b6146bf888289016145f4565b935093505060406146d288828901614549565b9150509295509295909350565b6000806000806000608086880312156146fb576146fa613f09565b5b60006147098882890161415f565b955050602061471a8882890161415f565b945050604061472b888289016140aa565b935050606086013567ffffffffffffffff81111561474c5761474b613f0e565b5b614758888289016142e3565b92509250509295509295909350565b6000806040838503121561477e5761477d613f09565b5b600061478c858286016142bf565b925050602061479d858286016140aa565b9150509250929050565b60008083601f8401126147bd576147bc6142d4565b5b8235905067ffffffffffffffff8111156147da576147d96142d9565b5b6020830191508360018202830111156147f6576147f56142de565b5b9250929050565b6000806020838503121561481457614813613f09565b5b600083013567ffffffffffffffff81111561483257614831613f0e565b5b61483e858286016147a7565b92509250509250929050565b6000806040838503121561486157614860613f09565b5b600061486f8582860161415f565b92505060206148808582860161415f565b9150509250929050565b6000819050919050565b61489d8161488a565b82525050565b60006020820190506148b86000830184614894565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061490557607f821691505b602082108103614918576149176148be565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b6000614954600e83613fd9565b915061495f8261491e565b602082019050919050565b6000602082019050818103600083015261498381614947565b9050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006149c0600a83613fd9565b91506149cb8261498a565b602082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000614a2c600a83613fd9565b9150614a37826149f6565b602082019050919050565b60006020820190508181036000830152614a5b81614a1f565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b6000614a98601183613fd9565b9150614aa382614a62565b602082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b0882614089565b9150614b1383614089565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4c57614b4b614ace565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b9182614089565b9150614b9c83614089565b925082614bac57614bab614b57565b5b828204905092915050565b7f6f6e6c792068756d616e00000000000000000000000000000000000000000000600082015250565b6000614bed600a83613fd9565b9150614bf882614bb7565b602082019050919050565b60006020820190508181036000830152614c1c81614be0565b9050919050565b7f7075626c69632073616c65206973206e6f742061637469766500000000000000600082015250565b6000614c59601983613fd9565b9150614c6482614c23565b602082019050919050565b60006020820190508181036000830152614c8881614c4c565b9050919050565b6000614c9a82614089565b9150614ca583614089565b925082821015614cb857614cb7614ace565b5b828203905092915050565b6000614cce82614089565b9150614cd983614089565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0e57614d0d614ace565b5b828201905092915050565b7f6d6178696d756d204e4654206578636565647300000000000000000000000000600082015250565b6000614d4f601383613fd9565b9150614d5a82614d19565b602082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f6d6178696d756d206e667420706572207472616e73616374696f6e206578636560008201527f6564730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de1602383613fd9565b9150614dec82614d85565b604082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b7f6e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614e4d601083613fd9565b9150614e5882614e17565b602082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f66656c6c6f77206d696e74206973206e6f742061637469766500000000000000600082015250565b6000614eb9601983613fd9565b9150614ec482614e83565b602082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b6000614efa82614089565b915060008203614f0d57614f0c614ace565b5b600182039050919050565b600081905092915050565b50565b6000614f33600083614f18565b9150614f3e82614f23565b600082019050919050565b6000614f5482614f26565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614f94600f83613fd9565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b600082825260208201905092915050565b6000614fe8600083614fca565b9150614ff382614f23565b600082019050919050565b6000608082019050615013600083018661411e565b615020602083018561411e565b61502d60408301846141b4565b818103606083015261503e81614fdb565b9050949350505050565b60008151905061505781613f3f565b92915050565b60006020828403121561507357615072613f09565b5b600061508184828501615048565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b60006150c0601083613fd9565b91506150cb8261508a565b602082019050919050565b600060208201905081810360008301526150ef816150b3565b9050919050565b7f61756374696f6e2073616c65206973206e6f7420616374697665000000000000600082015250565b600061512c601a83613fd9565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f696e7369646572206d696e74206973206e6f7420616374697665000000000000600082015250565b6000615198601a83613fd9565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4e4f545f4d494e54454400000000000000000000000000000000000000000000600082015250565b6000615204600a83613fd9565b915061520f826151ce565b602082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b6152438161449b565b811461524e57600080fd5b50565b6000813561525e8161523a565b80915050919050565b60008160001b9050919050565b600069ffffffffffffffffffff61528a84615267565b9350801983169250808416831791505092915050565b6000819050919050565b60006152c56152c06152bb8461449b565b6152a0565b61449b565b9050919050565b6000819050919050565b6152df826152aa565b6152f26152eb826152cc565b8354615274565b8255505050565b60008160501b9050919050565b600073ffffffffffffffffffff00000000000000000000615326846152f9565b9350801983169250808416831791505092915050565b615345826152aa565b615358615351826152cc565b8354615306565b8255505050565b615368816144c0565b811461537357600080fd5b50565b600081356153838161535f565b80915050919050565b60008160a01b9050919050565b600077ffffffff00000000000000000000000000000000000000006153bd8461538c565b9350801983169250808416831791505092915050565b60006153ee6153e96153e4846144c0565b6152a0565b6144c0565b9050919050565b6000819050919050565b615408826153d3565b61541b615414826153f5565b8354615399565b8255505050565b60008160c01b9050919050565b60007bffffffff00000000000000000000000000000000000000000000000061545784615422565b9350801983169250808416831791505092915050565b615476826153d3565b615489615482826153f5565b835461542f565b8255505050565b6000810160008301806154a281615251565b90506154ae81846152d6565b5050506000810160208301806154c381615251565b90506154cf818461533c565b5050506000810160408301806154e481615376565b90506154f081846153ff565b50505060008101606083018061550581615376565b9050615511818461546d565b50505060018101608083018061552681615251565b905061553281846152d6565b5050505050565b6155438282615490565b5050565b7f5a45524f5f414444524553530000000000000000000000000000000000000000600082015250565b600061557d600c83613fd9565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f726f79616c74792063616e206e6f742062652067726561746572207468616e2060008201527f3130303000000000000000000000000000000000000000000000000000000000602082015250565b600061560f602483613fd9565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b600061568f8385614fca565b935061569c838584615674565b6156a58361401d565b840190509392505050565b60006080820190506156c5600083018861411e565b6156d2602083018761411e565b6156df60408301866141b4565b81810360608301526156f2818486615683565b90509695505050505050565b7f696e76616c6964207265736572766564206e667420616d6f756e740000000000600082015250565b6000615734601b83613fd9565b915061573f826156fe565b602082019050919050565b6000602082019050818103600083015261576381615727565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154615797816148ed565b6157a1818661576a565b945060018216600081146157bc57600181146157cd57615800565b60ff19831686528186019350615800565b6157d685615775565b60005b838110156157f8578154818901526001820191506020810190506157d9565b838801955050505b50505092915050565b600061581482613fce565b61581e818561576a565b935061582e818560208601613fea565b80840191505092915050565b6000615846828561578a565b91506158528284615809565b91508190509392505050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b6000615894600e83613fd9565b915061589f8261585e565b602082019050919050565b600060208201905081810360008301526158c381615887565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000615900601183613fd9565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b600061596c600e83613fd9565b915061597782615936565b602082019050919050565b6000602082019050818103600083015261599b8161595f565b9050919050565b60008160601b9050919050565b60006159ba826159a2565b9050919050565b60006159cc826159af565b9050919050565b6159e46159df8261410c565b6159c1565b82525050565b60008160f01b9050919050565b6000615a02826159ea565b9050919050565b615a1a615a158261429a565b6159f7565b82525050565b6000819050919050565b615a3b615a3682614089565b615a20565b82525050565b6000615a4d82876159d3565b601482019150615a5d82866159d3565b601482019150615a6d8285615a09565b600282019150615a7d8284615a2a565b60208201915081905095945050505050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000615aeb602a83613fd9565b9150615af682615a8f565b604082019050919050565b60006020820190508181036000830152615b1a81615ade565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000615b57601983613fd9565b9150615b6282615b21565b602082019050919050565b60006020820190508181036000830152615b8681615b4a565b9050919050565b6000615b9882614089565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bca57615bc9614ace565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000615c0f82614089565b9150615c1a83614089565b925082615c2a57615c29614b57565b5b828206905092915050565b6000615c408261429a565b9150615c4b8361429a565b925082615c5b57615c5a614b57565b5b828204905092915050565b6000615c718261429a565b9150615c7c8361429a565b925082615c8c57615c8b614b57565b5b828206905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615ccd601c8361576a565b9150615cd882615c97565b601c82019050919050565b6000819050919050565b615cfe615cf98261488a565b615ce3565b82525050565b6000615d0f82615cc0565b9150615d1b8284615ced565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615d8f601883613fd9565b9150615d9a82615d59565b602082019050919050565b60006020820190508181036000830152615dbe81615d82565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615dfb601f83613fd9565b9150615e0682615dc5565b602082019050919050565b60006020820190508181036000830152615e2a81615dee565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e8d602283613fd9565b9150615e9882615e31565b604082019050919050565b60006020820190508181036000830152615ebc81615e80565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f1f602283613fd9565b9150615f2a82615ec3565b604082019050919050565b60006020820190508181036000830152615f4e81615f12565b9050919050565b600060ff82169050919050565b615f6b81615f55565b82525050565b6000608082019050615f866000830187614894565b615f936020830186615f62565b615fa06040830185614894565b615fad6060830184614894565b9594505050505056fea2646970667358221220217095b715c65c87ca868d7aa8e6c8b8f14c610919dfe5fa583152ef5863062164736f6c634300080d00330000000000000000000000000cf9314c9a21252ab3c8945f56b40e14c01949690000000000000000000000009d125cf05a9c9485131e932fdb41b0679cea0d3b

Deployed Bytecode

0x6080604052600436106102935760003560e01c806370a082311161015a578063b61613d1116100c1578063ca31cd691161007a578063ca31cd69146109a7578063d3d62bf9146109d2578063e5e01c11146109fb578063e985e9c514610a24578063ec8102c414610a61578063ff1b655614610a8a57610293565b8063b61613d114610899578063b88d4fde146108c4578063bf9f8665146108ed578063c50342f314610916578063c627525514610941578063c87b56dd1461096a57610293565b8063a6f9dae111610113578063a6f9dae11461079f578063a945bf80146107c8578063aad2b723146107f3578063ab0bcc411461081c578063aff88f6a14610847578063b00741cb1461087057610293565b806370a082311461068b5780638da5cb5b146106c85780638f2fc60b146106f357806395d89b411461071c5780639da0d7d414610747578063a22cb4651461077657610293565b806336578720116101fe5780635b7633d0116101b75780635b7633d0146105885780635d3d1b31146105b3578063603f4d52146105cf5780636305a72d146105fa5780636352211e146106255780636bb6db2c1461066257610293565b806336578720146104ba578063380d1d70146104d65780633ccfd60b1461050157806342842e0e146105185780634d3554c31461054157806356742b5a1461055d57610293565b8063193823e811610250578063193823e8146103ba57806323b872dd146103e35780632a55205a1461040c5780632db115441461044a5780632f181f5414610466578063306c9f3a1461048f57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d578063134eb9861461036657806318160ddd1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613f6b565b610ab5565b6040516102cc9190613fb3565b60405180910390f35b3480156102e157600080fd5b506102ea610ad7565b6040516102f79190614067565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906140bf565b610b65565b604051610334919061412d565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614174565b610b98565b005b34801561037257600080fd5b5061038d600480360381019061038891906140bf565b610d81565b005b34801561039b57600080fd5b506103a4610e1b565b6040516103b191906141c3565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc91906140bf565b610e25565b005b3480156103ef57600080fd5b5061040a600480360381019061040591906141de565b610ebf565b005b34801561041857600080fd5b50610433600480360381019061042e9190614231565b6112be565b604051610441929190614271565b60405180910390f35b610464600480360381019061045f91906140bf565b6114a8565b005b34801561047257600080fd5b5061048d600480360381019061048891906140bf565b6116a2565b005b34801561049b57600080fd5b506104a461173c565b6040516104b191906141c3565b60405180910390f35b6104d460048036038101906104cf9190614339565b611742565b005b3480156104e257600080fd5b506104eb611911565b6040516104f891906141c3565b60405180910390f35b34801561050d57600080fd5b50610516611917565b005b34801561052457600080fd5b5061053f600480360381019061053a91906141de565b611a78565b005b61055b600480360381019061055691906140bf565b611bb0565b005b34801561056957600080fd5b50610572611e0f565b60405161057f91906141c3565b60405180910390f35b34801561059457600080fd5b5061059d611fe1565b6040516105aa919061412d565b60405180910390f35b6105cd60048036038101906105c89190614339565b612007565b005b3480156105db57600080fd5b506105e46121d6565b6040516105f191906141c3565b60405180910390f35b34801561060657600080fd5b5061060f6121dc565b60405161061c91906141c3565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906140bf565b6121e2565b604051610659919061412d565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906143bd565b61228d565b005b34801561069757600080fd5b506106b260048036038101906106ad91906143ea565b612332565b6040516106bf91906141c3565b60405180910390f35b3480156106d457600080fd5b506106dd6123e9565b6040516106ea919061412d565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061445b565b61240f565b005b34801561072857600080fd5b50610731612500565b60405161073e9190614067565b60405180910390f35b34801561075357600080fd5b5061075c61258e565b60405161076d9594939291906144df565b60405180910390f35b34801561078257600080fd5b5061079d6004803603810190610798919061455e565b612614565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906143ea565b612711565b005b3480156107d457600080fd5b506107dd612867565b6040516107ea91906141c3565b60405180910390f35b3480156107ff57600080fd5b5061081a600480360381019061081591906143ea565b61286d565b005b34801561082857600080fd5b50610831612941565b60405161083e91906141c3565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061464a565b612947565b005b34801561087c57600080fd5b50610897600480360381019061089291906140bf565b612adb565b005b3480156108a557600080fd5b506108ae612b75565b6040516108bb91906141c3565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906146df565b612b7b565b005b3480156108f957600080fd5b50610914600480360381019061090f9190614767565b612cb9565b005b34801561092257600080fd5b5061092b612dc0565b60405161093891906141c3565b60405180910390f35b34801561094d57600080fd5b50610968600480360381019061096391906140bf565b612dc6565b005b34801561097657600080fd5b50610991600480360381019061098c91906140bf565b612e60565b60405161099e9190614067565b60405180910390f35b3480156109b357600080fd5b506109bc612e9e565b6040516109c991906141c3565b60405180910390f35b3480156109de57600080fd5b506109f960048036038101906109f491906140bf565b612ea4565b005b348015610a0757600080fd5b50610a226004803603810190610a1d91906147fd565b612f40565b005b348015610a3057600080fd5b50610a4b6004803603810190610a46919061484a565b612fe6565b604051610a589190613fb3565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a8391906140bf565b613015565b005b348015610a9657600080fd5b50610a9f6130af565b604051610aac91906148a3565b60405180910390f35b6000610ac0826130d6565b80610ad05750610acf82613168565b5b9050919050565b60008054610ae4906148ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b10906148ed565b8015610b5d5780601f10610b3257610100808354040283529160200191610b5d565b820191906000526020600020905b815481529060010190602001808311610b4057829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c905750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc69061496a565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e08906149d6565b60405180910390fd5b8060108190555050565b6000600d54905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac906149d6565b60405180910390fd5b8060168190555050565b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790614a42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614aae565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061108f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806110f857506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061496a565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036114535760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b600061145d6131e2565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866114899190614afd565b6114939190614b86565b90508160000151819350935050509250929050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90614c03565b60405180910390fd5b6000600d5490506004600c541480156115315750600e544210155b611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614c6f565b60405180910390fd5b6013546012546122b86115839190614c8f565b61158d9190614c8f565b82600d5461159b9190614cc3565b11156115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390614d65565b60405180910390fd5b601654821115611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614df7565b60405180910390fd5b8160115461162f9190614afd565b3414611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614e63565b60405180910390fd5b60005b828110156116965780600101905081600101915061169133836131ec565b611673565b5080600d819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611729906149d6565b60405180910390fd5b80600e8190555050565b60165481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614c03565b60405180910390fd5b6002600c54146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614ecf565b60405180910390fd5b6010543414611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614e63565b60405180910390fd5b6013546122b86118499190614c8f565b600d541061188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390614d65565b60405180910390fd5b6118da8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133fe565b600d60008154600101919050819055506118f633600d546131ec565b60126000815461190590614eef565b91905081905550505050565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e906149d6565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516119ef90614f49565b60006040518083038185875af1925050503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b5050905080611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90614faa565b60405180910390fd5b50565b611a83838383610ebf565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611b6c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b0893929190614ffe565b6020604051808303816000875af1158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b919061505d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba2906150d6565b60405180910390fd5b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614c03565b60405180910390fd5b6000600d5490506000611c2f611e0f565b83611c3a9190614afd565b90506003600c54148015611c505750600e544210155b611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690615142565b60405180910390fd5b6013546012546122b8611ca29190614c8f565b611cac9190614c8f565b8284611cb89190614cc3565b1115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090614d65565b60405180910390fd5b601654831115611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590614df7565b60405180910390fd5b80341015611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614e63565b60405180910390fd5b80341115611ddc573373ffffffffffffffffffffffffffffffffffffffff166108fc8234611daf9190614c8f565b9081150290604051600060405180830381858888f19350505050158015611dda573d6000803e3d6000fd5b505b60005b83811015611e0257806001019050826001019250611dfd33846131ec565b611ddf565b5081600d81905550505050565b60008060146040518060a00160405290816000820160009054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff16815260200160008201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff168152505090506000600e5490506000429050818111611f4357826000015169ffffffffffffffffffff169350505050611fde565b826040015163ffffffff168282611f5a9190614c8f565b1015611fc7576000836060015163ffffffff168383611f799190614c8f565b611f839190614b86565b9050836080015169ffffffffffffffffffff1681611fa19190614afd565b846000015169ffffffffffffffffffff16611fbc9190614c8f565b945050505050611fde565b826020015169ffffffffffffffffffff1693505050505b90565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614c03565b60405180910390fd5b6001600c54146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b1906151ae565b60405180910390fd5b600f5434146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614e63565b60405180910390fd5b6013546122b861210e9190614c8f565b600d5410612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614d65565b60405180910390fd5b61219f8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133fe565b600d60008154600101919050819055506121bb33600d546131ec565b6012600081546121ca90614eef565b91905081905550505050565b600c5481565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1603612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f9061521a565b60405180910390fd5b919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461231d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612314906149d6565b60405180910390fd5b806014818161232c9190615539565b90505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990615593565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906149d6565b60405180910390fd5b6103e8816bffffffffffffffffffffffff1611156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615625565b60405180910390fd5b6124fc8282613572565b5050565b6001805461250d906148ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612539906148ed565b80156125865780601f1061255b57610100808354040283529160200191612586565b820191906000526020600020905b81548152906001019060200180831161256957829003601f168201915b505050505081565b60148060000160009054906101000a900469ffffffffffffffffffff169080600001600a9054906101000a900469ffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900463ffffffff16908060010160009054906101000a900469ffffffffffffffffffff16905085565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127059190613fb3565b60405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612798906149d6565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60115481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906149d6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce906149d6565b60405180910390fd5b6000600d5490506000805b85859050811015612a655760005b868683818110612a0357612a02615645565b5b90506020020135811015612a5957806001019050836001019350826001019250612a54898984818110612a3957612a38615645565b5b9050602002016020810190612a4e91906143ea565b856131ec565b6129f0565b508060010190506129e2565b508215612a86578060136000828254612a7e9190614c8f565b925050819055505b6122b8821115612acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac290614d65565b60405180910390fd5b81600d8190555050505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b62906149d6565b60405180910390fd5b80600c8190555050565b60135481565b612b86858585610ebf565b60008473ffffffffffffffffffffffffffffffffffffffff163b1480612c73575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401612c0f9594939291906156b0565b6020604051808303816000875af1158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c52919061505d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca9906150d6565b60405180910390fd5b5050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906149d6565b60405180910390fd5b6122b8818361ffff16600d54612d5f9190614cc3565b612d699190614cc3565b1115612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061574a565b60405180910390fd5b806013819055508161ffff166012819055505050565b6122b881565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d906149d6565b60405180910390fd5b8060118190555050565b6060612e6b826121e2565b506017612e7783613707565b604051602001612e8892919061583a565b6040516020818303038152906040529050919050565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b906149d6565b60405180910390fd5b612f3d81613867565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc7906149d6565b60405180910390fd5b818160179190612fe1929190613e66565b505050565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c906149d6565b60405180910390fd5b80600f8190555050565b7fc2908578a697fff44c97633f2d502ac7774cccf6224499c8b09d196cf065178160001b81565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061313157506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131615750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131db57506131da8261394e565b5b9050919050565b6000612710905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361325b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325290614aae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f4906158aa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6041815114613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343990615916565b60405180910390fd5b61344b826139b8565b61348a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348190615982565b60405180910390fd5b61349382613a09565b60006134cc333085600c546040516020016134b19493929190615a41565b60405160208183030381529060405280519060200120613a57565b905060006134da8284613a87565b90508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356390615916565b60405180910390fd5b50505050565b61357a6131e2565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156135d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cf90615b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363e90615b6d565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b60606000820361374e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613862565b600082905060005b6000821461378057808061376990615b8d565b915050600a826137799190614b86565b9150613756565b60008167ffffffffffffffff81111561379c5761379b615bd5565b5b6040519080825280601f01601f1916602001820160405280156137ce5781602001600182028036833780820191505090505b5090505b6000851461385b576001826137e79190614c8f565b9150600a856137f69190615c04565b60306138029190614cc3565b60f81b81838151811061381857613817615645565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138549190614b86565b94506137d2565b8093505050505b919050565b6000600954905060008060ff8361387e9190615c04565b146138a157600160ff836138929190614b86565b61389c9190614cc3565b6138af565b60ff826138ae9190614b86565b5b9050600083836138bf9190614cc3565b905060008060ff836138d19190615c04565b146138f457600160ff836138e59190614b86565b6138ef9190614cc3565b613902565b60ff826139019190614b86565b5b905060008390505b8181101561393f576001600860008381526020019081526020016000206000828254179250508190555080600101905061390a565b50816009819055505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060ff836139c89190615c35565b61ffff169050600060ff846139dd9190615c66565b61ffff166002901b60086000848152602001908152602001600020541690506000811492505050919050565b600060ff82613a189190615c35565b61ffff16905060ff82613a2b9190615c66565b61ffff166002901b60086000838152602001908152602001600020600082825417925050819055505050565b600081604051602001613a6a9190615d04565b604051602081830303815290604052805190602001209050919050565b6000806000613a968585613aae565b91509150613aa381613b2f565b819250505092915050565b6000806041835103613aef5760008060006020860151925060408601519150606086015160001a9050613ae387828585613cfb565b94509450505050613b28565b6040835103613b1f576000806020850151915060408501519050613b14868383613e07565b935093505050613b28565b60006002915091505b9250929050565b60006004811115613b4357613b42615d2a565b5b816004811115613b5657613b55615d2a565b5b0315613cf85760016004811115613b7057613b6f615d2a565b5b816004811115613b8357613b82615d2a565b5b03613bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bba90615da5565b60405180910390fd5b60026004811115613bd757613bd6615d2a565b5b816004811115613bea57613be9615d2a565b5b03613c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2190615e11565b60405180910390fd5b60036004811115613c3e57613c3d615d2a565b5b816004811115613c5157613c50615d2a565b5b03613c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8890615ea3565b60405180910390fd5b600480811115613ca457613ca3615d2a565b5b816004811115613cb757613cb6615d2a565b5b03613cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cee90615f35565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613d36576000600391509150613dfe565b601b8560ff1614158015613d4e5750601c8560ff1614155b15613d60576000600491509150613dfe565b600060018787878760405160008152602001604052604051613d859493929190615f71565b6020604051602081039080840390855afa158015613da7573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613df557600060019250925050613dfe565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c613e4a9190614cc3565b9050613e5887828885613cfb565b935093505050935093915050565b828054613e72906148ed565b90600052602060002090601f016020900481019282613e945760008555613edb565b82601f10613ead57803560ff1916838001178555613edb565b82800160010185558215613edb579182015b82811115613eda578235825591602001919060010190613ebf565b5b509050613ee89190613eec565b5090565b5b80821115613f05576000816000905550600101613eed565b5090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f4881613f13565b8114613f5357600080fd5b50565b600081359050613f6581613f3f565b92915050565b600060208284031215613f8157613f80613f09565b5b6000613f8f84828501613f56565b91505092915050565b60008115159050919050565b613fad81613f98565b82525050565b6000602082019050613fc86000830184613fa4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614008578082015181840152602081019050613fed565b83811115614017576000848401525b50505050565b6000601f19601f8301169050919050565b600061403982613fce565b6140438185613fd9565b9350614053818560208601613fea565b61405c8161401d565b840191505092915050565b60006020820190508181036000830152614081818461402e565b905092915050565b6000819050919050565b61409c81614089565b81146140a757600080fd5b50565b6000813590506140b981614093565b92915050565b6000602082840312156140d5576140d4613f09565b5b60006140e3848285016140aa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614117826140ec565b9050919050565b6141278161410c565b82525050565b6000602082019050614142600083018461411e565b92915050565b6141518161410c565b811461415c57600080fd5b50565b60008135905061416e81614148565b92915050565b6000806040838503121561418b5761418a613f09565b5b60006141998582860161415f565b92505060206141aa858286016140aa565b9150509250929050565b6141bd81614089565b82525050565b60006020820190506141d860008301846141b4565b92915050565b6000806000606084860312156141f7576141f6613f09565b5b60006142058682870161415f565b93505060206142168682870161415f565b9250506040614227868287016140aa565b9150509250925092565b6000806040838503121561424857614247613f09565b5b6000614256858286016140aa565b9250506020614267858286016140aa565b9150509250929050565b6000604082019050614286600083018561411e565b61429360208301846141b4565b9392505050565b600061ffff82169050919050565b6142b18161429a565b81146142bc57600080fd5b50565b6000813590506142ce816142a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126142f9576142f86142d4565b5b8235905067ffffffffffffffff811115614316576143156142d9565b5b602083019150836001820283011115614332576143316142de565b5b9250929050565b60008060006040848603121561435257614351613f09565b5b6000614360868287016142bf565b935050602084013567ffffffffffffffff81111561438157614380613f0e565b5b61438d868287016142e3565b92509250509250925092565b600080fd5b600060a082840312156143b4576143b3614399565b5b81905092915050565b600060a082840312156143d3576143d2613f09565b5b60006143e18482850161439e565b91505092915050565b600060208284031215614400576143ff613f09565b5b600061440e8482850161415f565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b61443881614417565b811461444357600080fd5b50565b6000813590506144558161442f565b92915050565b6000806040838503121561447257614471613f09565b5b60006144808582860161415f565b925050602061449185828601614446565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b6144ba8161449b565b82525050565b600063ffffffff82169050919050565b6144d9816144c0565b82525050565b600060a0820190506144f460008301886144b1565b61450160208301876144b1565b61450e60408301866144d0565b61451b60608301856144d0565b61452860808301846144b1565b9695505050505050565b61453b81613f98565b811461454657600080fd5b50565b60008135905061455881614532565b92915050565b6000806040838503121561457557614574613f09565b5b60006145838582860161415f565b925050602061459485828601614549565b9150509250929050565b60008083601f8401126145b4576145b36142d4565b5b8235905067ffffffffffffffff8111156145d1576145d06142d9565b5b6020830191508360208202830111156145ed576145ec6142de565b5b9250929050565b60008083601f84011261460a576146096142d4565b5b8235905067ffffffffffffffff811115614627576146266142d9565b5b602083019150836020820283011115614643576146426142de565b5b9250929050565b60008060008060006060868803121561466657614665613f09565b5b600086013567ffffffffffffffff81111561468457614683613f0e565b5b6146908882890161459e565b9550955050602086013567ffffffffffffffff8111156146b3576146b2613f0e565b5b6146bf888289016145f4565b935093505060406146d288828901614549565b9150509295509295909350565b6000806000806000608086880312156146fb576146fa613f09565b5b60006147098882890161415f565b955050602061471a8882890161415f565b945050604061472b888289016140aa565b935050606086013567ffffffffffffffff81111561474c5761474b613f0e565b5b614758888289016142e3565b92509250509295509295909350565b6000806040838503121561477e5761477d613f09565b5b600061478c858286016142bf565b925050602061479d858286016140aa565b9150509250929050565b60008083601f8401126147bd576147bc6142d4565b5b8235905067ffffffffffffffff8111156147da576147d96142d9565b5b6020830191508360018202830111156147f6576147f56142de565b5b9250929050565b6000806020838503121561481457614813613f09565b5b600083013567ffffffffffffffff81111561483257614831613f0e565b5b61483e858286016147a7565b92509250509250929050565b6000806040838503121561486157614860613f09565b5b600061486f8582860161415f565b92505060206148808582860161415f565b9150509250929050565b6000819050919050565b61489d8161488a565b82525050565b60006020820190506148b86000830184614894565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061490557607f821691505b602082108103614918576149176148be565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b6000614954600e83613fd9565b915061495f8261491e565b602082019050919050565b6000602082019050818103600083015261498381614947565b9050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006149c0600a83613fd9565b91506149cb8261498a565b602082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000614a2c600a83613fd9565b9150614a37826149f6565b602082019050919050565b60006020820190508181036000830152614a5b81614a1f565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b6000614a98601183613fd9565b9150614aa382614a62565b602082019050919050565b60006020820190508181036000830152614ac781614a8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b0882614089565b9150614b1383614089565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4c57614b4b614ace565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b9182614089565b9150614b9c83614089565b925082614bac57614bab614b57565b5b828204905092915050565b7f6f6e6c792068756d616e00000000000000000000000000000000000000000000600082015250565b6000614bed600a83613fd9565b9150614bf882614bb7565b602082019050919050565b60006020820190508181036000830152614c1c81614be0565b9050919050565b7f7075626c69632073616c65206973206e6f742061637469766500000000000000600082015250565b6000614c59601983613fd9565b9150614c6482614c23565b602082019050919050565b60006020820190508181036000830152614c8881614c4c565b9050919050565b6000614c9a82614089565b9150614ca583614089565b925082821015614cb857614cb7614ace565b5b828203905092915050565b6000614cce82614089565b9150614cd983614089565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0e57614d0d614ace565b5b828201905092915050565b7f6d6178696d756d204e4654206578636565647300000000000000000000000000600082015250565b6000614d4f601383613fd9565b9150614d5a82614d19565b602082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f6d6178696d756d206e667420706572207472616e73616374696f6e206578636560008201527f6564730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de1602383613fd9565b9150614dec82614d85565b604082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b7f6e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614e4d601083613fd9565b9150614e5882614e17565b602082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f66656c6c6f77206d696e74206973206e6f742061637469766500000000000000600082015250565b6000614eb9601983613fd9565b9150614ec482614e83565b602082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b6000614efa82614089565b915060008203614f0d57614f0c614ace565b5b600182039050919050565b600081905092915050565b50565b6000614f33600083614f18565b9150614f3e82614f23565b600082019050919050565b6000614f5482614f26565b9150819050919050565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614f94600f83613fd9565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b600082825260208201905092915050565b6000614fe8600083614fca565b9150614ff382614f23565b600082019050919050565b6000608082019050615013600083018661411e565b615020602083018561411e565b61502d60408301846141b4565b818103606083015261503e81614fdb565b9050949350505050565b60008151905061505781613f3f565b92915050565b60006020828403121561507357615072613f09565b5b600061508184828501615048565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b60006150c0601083613fd9565b91506150cb8261508a565b602082019050919050565b600060208201905081810360008301526150ef816150b3565b9050919050565b7f61756374696f6e2073616c65206973206e6f7420616374697665000000000000600082015250565b600061512c601a83613fd9565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f696e7369646572206d696e74206973206e6f7420616374697665000000000000600082015250565b6000615198601a83613fd9565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4e4f545f4d494e54454400000000000000000000000000000000000000000000600082015250565b6000615204600a83613fd9565b915061520f826151ce565b602082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b6152438161449b565b811461524e57600080fd5b50565b6000813561525e8161523a565b80915050919050565b60008160001b9050919050565b600069ffffffffffffffffffff61528a84615267565b9350801983169250808416831791505092915050565b6000819050919050565b60006152c56152c06152bb8461449b565b6152a0565b61449b565b9050919050565b6000819050919050565b6152df826152aa565b6152f26152eb826152cc565b8354615274565b8255505050565b60008160501b9050919050565b600073ffffffffffffffffffff00000000000000000000615326846152f9565b9350801983169250808416831791505092915050565b615345826152aa565b615358615351826152cc565b8354615306565b8255505050565b615368816144c0565b811461537357600080fd5b50565b600081356153838161535f565b80915050919050565b60008160a01b9050919050565b600077ffffffff00000000000000000000000000000000000000006153bd8461538c565b9350801983169250808416831791505092915050565b60006153ee6153e96153e4846144c0565b6152a0565b6144c0565b9050919050565b6000819050919050565b615408826153d3565b61541b615414826153f5565b8354615399565b8255505050565b60008160c01b9050919050565b60007bffffffff00000000000000000000000000000000000000000000000061545784615422565b9350801983169250808416831791505092915050565b615476826153d3565b615489615482826153f5565b835461542f565b8255505050565b6000810160008301806154a281615251565b90506154ae81846152d6565b5050506000810160208301806154c381615251565b90506154cf818461533c565b5050506000810160408301806154e481615376565b90506154f081846153ff565b50505060008101606083018061550581615376565b9050615511818461546d565b50505060018101608083018061552681615251565b905061553281846152d6565b5050505050565b6155438282615490565b5050565b7f5a45524f5f414444524553530000000000000000000000000000000000000000600082015250565b600061557d600c83613fd9565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f726f79616c74792063616e206e6f742062652067726561746572207468616e2060008201527f3130303000000000000000000000000000000000000000000000000000000000602082015250565b600061560f602483613fd9565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b82818337600083830152505050565b600061568f8385614fca565b935061569c838584615674565b6156a58361401d565b840190509392505050565b60006080820190506156c5600083018861411e565b6156d2602083018761411e565b6156df60408301866141b4565b81810360608301526156f2818486615683565b90509695505050505050565b7f696e76616c6964207265736572766564206e667420616d6f756e740000000000600082015250565b6000615734601b83613fd9565b915061573f826156fe565b602082019050919050565b6000602082019050818103600083015261576381615727565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154615797816148ed565b6157a1818661576a565b945060018216600081146157bc57600181146157cd57615800565b60ff19831686528186019350615800565b6157d685615775565b60005b838110156157f8578154818901526001820191506020810190506157d9565b838801955050505b50505092915050565b600061581482613fce565b61581e818561576a565b935061582e818560208601613fea565b80840191505092915050565b6000615846828561578a565b91506158528284615809565b91508190509392505050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b6000615894600e83613fd9565b915061589f8261585e565b602082019050919050565b600060208201905081810360008301526158c381615887565b9050919050565b7f696e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000615900601183613fd9565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b600061596c600e83613fd9565b915061597782615936565b602082019050919050565b6000602082019050818103600083015261599b8161595f565b9050919050565b60008160601b9050919050565b60006159ba826159a2565b9050919050565b60006159cc826159af565b9050919050565b6159e46159df8261410c565b6159c1565b82525050565b60008160f01b9050919050565b6000615a02826159ea565b9050919050565b615a1a615a158261429a565b6159f7565b82525050565b6000819050919050565b615a3b615a3682614089565b615a20565b82525050565b6000615a4d82876159d3565b601482019150615a5d82866159d3565b601482019150615a6d8285615a09565b600282019150615a7d8284615a2a565b60208201915081905095945050505050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000615aeb602a83613fd9565b9150615af682615a8f565b604082019050919050565b60006020820190508181036000830152615b1a81615ade565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000615b57601983613fd9565b9150615b6282615b21565b602082019050919050565b60006020820190508181036000830152615b8681615b4a565b9050919050565b6000615b9882614089565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bca57615bc9614ace565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000615c0f82614089565b9150615c1a83614089565b925082615c2a57615c29614b57565b5b828206905092915050565b6000615c408261429a565b9150615c4b8361429a565b925082615c5b57615c5a614b57565b5b828204905092915050565b6000615c718261429a565b9150615c7c8361429a565b925082615c8c57615c8b614b57565b5b828206905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615ccd601c8361576a565b9150615cd882615c97565b601c82019050919050565b6000819050919050565b615cfe615cf98261488a565b615ce3565b82525050565b6000615d0f82615cc0565b9150615d1b8284615ced565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615d8f601883613fd9565b9150615d9a82615d59565b602082019050919050565b60006020820190508181036000830152615dbe81615d82565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615dfb601f83613fd9565b9150615e0682615dc5565b602082019050919050565b60006020820190508181036000830152615e2a81615dee565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e8d602283613fd9565b9150615e9882615e31565b604082019050919050565b60006020820190508181036000830152615ebc81615e80565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f1f602283613fd9565b9150615f2a82615ec3565b604082019050919050565b60006020820190508181036000830152615f4e81615f12565b9050919050565b600060ff82169050919050565b615f6b81615f55565b82525050565b6000608082019050615f866000830187614894565b615f936020830186615f62565b615fa06040830185614894565b615fad6060830184614894565b9594505050505056fea2646970667358221220217095b715c65c87ca868d7aa8e6c8b8f14c610919dfe5fa583152ef5863062164736f6c634300080d0033

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

0000000000000000000000000cf9314c9a21252ab3c8945f56b40e14c01949690000000000000000000000009d125cf05a9c9485131e932fdb41b0679cea0d3b

-----Decoded View---------------
Arg [0] : _signer (address): 0x0cf9314c9A21252Ab3C8945f56b40e14C0194969
Arg [1] : ownerAddress (address): 0x9D125cF05A9C9485131E932fDB41b0679CeA0d3B

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000cf9314c9a21252ab3c8945f56b40e14c0194969
Arg [1] : 0000000000000000000000009d125cf05a9c9485131e932fdb41b0679cea0d3b


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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