ETH Price: $2,531.37 (-0.01%)

Contract

0x599124661F8E030eB58139831AD4566B36976601
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...196044262024-04-07 14:31:11144 days ago1712500271IN
0x59912466...B36976601
0 ETH0.0004178517.07417452
Safe Transfer Fr...166801442023-02-21 23:28:11554 days ago1677022091IN
0x59912466...B36976601
0 ETH0.0016757130.83242867
Set Approval For...162139552022-12-18 20:25:59620 days ago1671395159IN
0x59912466...B36976601
0 ETH0.0002947312.04315302
Set Approval For...162139012022-12-18 20:14:47620 days ago1671394487IN
0x59912466...B36976601
0 ETH0.0010715523.10136466
Set Approval For...160817362022-11-30 8:53:23638 days ago1669798403IN
0x59912466...B36976601
0 ETH0.0005273111.38881761
Safe Transfer Fr...158587942022-10-30 5:29:47669 days ago1667107787IN
0x59912466...B36976601
0 ETH0.000314497.47711709
Set Approval For...156788872022-10-05 2:19:59694 days ago1664936399IN
0x59912466...B36976601
0 ETH0.000405638.76087471
Safe Transfer Fr...156233722022-09-27 8:02:23702 days ago1664265743IN
0x59912466...B36976601
0 ETH0.000727819.65598299
Safe Transfer Fr...156229802022-09-27 6:42:59702 days ago1664260979IN
0x59912466...B36976601
0 ETH0.000560219.47218087
Set Approval For...156229562022-09-27 6:38:11702 days ago1664260691IN
0x59912466...B36976601
0 ETH0.000429239.27062716
Safe Transfer Fr...155935632022-09-23 4:09:23706 days ago1663906163IN
0x59912466...B36976601
0 ETH0.000449357.59539187
Safe Transfer Fr...155849622022-09-21 23:17:23707 days ago1663802243IN
0x59912466...B36976601
0 ETH0.000341669.17092034
Set Approval For...155848692022-09-21 22:58:23707 days ago1663801103IN
0x59912466...B36976601
0 ETH0.00045339.79029616
Set Approval For...153623232022-08-18 2:12:26742 days ago1660788746IN
0x59912466...B36976601
0 ETH0.0003624614.81088039
Set Approval For...153552552022-08-16 23:21:37743 days ago1660692097IN
0x59912466...B36976601
0 ETH0.000374258.08317593
Set Approval For...151804762022-07-20 16:04:05771 days ago1658333045IN
0x59912466...B36976601
0 ETH0.0021177645.65634091
Set Approval For...151592752022-07-17 9:05:34774 days ago1658048734IN
0x59912466...B36976601
0 ETH0.000268310.96337202
Set Approval For...149910102022-06-19 13:29:55802 days ago1655645395IN
0x59912466...B36976601
0 ETH0.0010847423.38573825
Safe Transfer Fr...147526962022-05-11 4:19:51841 days ago1652242791IN
0x59912466...B36976601
0 ETH0.00176447.79063213
Safe Transfer Fr...147524372022-05-11 3:20:34841 days ago1652239234IN
0x59912466...B36976601
0 ETH0.001875834.59931463
Safe Transfer Fr...146404562022-04-23 10:11:54859 days ago1650708714IN
0x59912466...B36976601
0 ETH0.0008437722.86725394
Safe Transfer Fr...146321712022-04-22 3:04:05860 days ago1650596645IN
0x59912466...B36976601
0 ETH0.0033178761.42968639
Set Approval For...146182782022-04-19 22:31:50862 days ago1650407510IN
0x59912466...B36976601
0 ETH0.0016778736.17283129
Set Approval For...146182782022-04-19 22:31:50862 days ago1650407510IN
0x59912466...B36976601
0 ETH0.0016778736.17283129
Set Contracts145914992022-04-15 18:14:19867 days ago1650046459IN
0x59912466...B36976601
0 ETH0.0010878245.23950265
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RAW

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 2000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 7 : Raw.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC1155.sol";
import "./interfaces/IRAW.sol";
import "./interfaces/IEON.sol";

contract RAW is IRAW, ERC1155, Pausable {
    using Strings for uint256;

    // struct to store each trait's data for metadata and rendering
    struct Image {
        string name;
        string png;
    }

    struct TypeInfo {
        uint256 mints;
        uint256 burns;
        uint256 maxSupply;
        uint256 eonExchangeAmt;
    }

    mapping(uint256 => TypeInfo) private typeInfo;
    // storage of each image data
    mapping(uint256 => Image) public traitData;

    // address => allowedToCallFunctions
    mapping(address => bool) private admins;

    event UpdateMintBurns(uint256 typeId, uint256 mintQty, uint256 burnQty);

    // reference to the $EON contract for exchange rate if accepted
    IEON public eon;

    address public auth;

    constructor() {
        auth = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == auth);
        _;
    }

    /** CRITICAL TO SETUP */

    modifier requireContractsSet() {
        require(address(eon) != address(0), "Contracts not set");
        _;
    }

    function setContracts(address _eon) external onlyOwner {
        eon = IEON(_eon);
    }

    /**
     * Mint a token - any payment / game logic should be handled in the game contract.
     */
    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external override whenNotPaused {
        require(admins[msg.sender], "Only admins");
        require((typeInfo[typeId].mints + qty) <= typeInfo[typeId].maxSupply, "MaxSupply Minted");
        typeInfo[typeId].mints += qty;
        _mint(recipient, typeId, qty, "");
    }

    /**
     * Burn a token - any payment / game logic should be handled in the game contract.
     */
    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external override whenNotPaused {
        require(admins[msg.sender], "Only admins");
        typeInfo[typeId].burns += qty;
        _burn(burnFrom, typeId, qty);
    }

    function setType(uint256 typeId, uint256 maxSupply) external onlyOwner {
        require(typeId != 0, "TypeId cannot be 0");
        require(typeInfo[typeId].mints <= maxSupply, "max supply too low");
        typeInfo[typeId].maxSupply = maxSupply;
    }

    // a function to update the mint and burn amounts
    // to save gas costs of doing both a mint and then
    // burn when cost is paid from an amount owed
    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external {
        require(admins[msg.sender], "Only Admins");
        typeInfo[typeId].mints += mintQty;
        typeInfo[typeId].burns += burnQty;
    
    emit UpdateMintBurns(typeId, mintQty, burnQty);
    }

    function setExchangeAmt(uint256 typeId, uint256 exchangeAmt)
        external
        onlyOwner
    {
        require(
            typeInfo[typeId].maxSupply > 0,
            "this type has not been set up"
        );
        typeInfo[typeId].eonExchangeAmt = exchangeAmt;
    }

    /**
     * enables an address to mint / burn
     * @param addr the address to enable
     */
    function addAdmin(address addr) external onlyOwner {
        admins[addr] = true;
    }

    /**
     * disables an address from minting / burning
     * @param addr the address to disbale
     */
    function removeAdmin(address addr) external onlyOwner {
        admins[addr] = false;
    }

    function setPaused(bool _paused) external onlyOwner requireContractsSet {
        if (_paused) _pause();
        else _unpause();
    }

    function transferOwnership(address newOwner) external onlyOwner {
        auth = newOwner;
    }

    function getInfoForType(uint256 typeId)
        external
        view
        returns (TypeInfo memory)
    {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        return typeInfo[typeId];
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        Image memory img = traitData[typeId];
        string memory metadata = string(
            abi.encodePacked(
                '{"name": "',
                img.name,
                '", "description": "Raw Pytheas resources - All the metadata and images are generated and stored 100% on-chain. No IPFS. NO API. Just the Ethereum blockchain.", "image": "data:image/svg+xml;base64,',
                base64(bytes(drawSVG(typeId))),
                '", "attributes": []',
                "}"
            )
        );
        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    base64(bytes(metadata))
                )
            );
    }

    function uploadImage(uint256 typeId, Image calldata image)
        external
        onlyOwner
    {
        traitData[typeId] = Image(image.name, image.png);
    }

    function drawImage(Image memory image)
        internal
        pure
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    '<image x="0" y="0" width="64" height="64" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,',
                    image.png,
                    '"/>'
                )
            );
    }

    function drawSVG(uint256 typeId) internal view returns (string memory) {
        string memory svgString = string(
            abi.encodePacked(drawImage(traitData[typeId]))
        );

        return
            string(
                abi.encodePacked(
                    '<svg id="alter" width="100%" height="100%" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',
                    svgString,
                    "</svg>"
                )
            );
    }

     function getBalance( 
        address account,
        uint256 id
    ) public view returns(uint256) {
         return ERC1155(address(this)).balanceOf(account, id);
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
            require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");
        }
        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }


    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
        // allow admin contracts to send without approval
            uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");
        
        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");
        }

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }
        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /** BASE 64 - Written by Brech Devos */

    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function base64(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(input, 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }

// For OpenSeas
function owner() public view virtual returns (address) {
return auth;
}
}

File 2 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 7 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 4 of 7 : Strings.sol
// SPDX-License-Identifier: MIT

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 5 of 7 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*///////////////////////////////////////////////////////////////
                                EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

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

    event URI(string value, uint256 indexed id);

    /*///////////////////////////////////////////////////////////////
                            ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

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

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

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

    /*///////////////////////////////////////////////////////////////
                             ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

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

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

    function isApproved(address account, address operator)
        public
        view
        virtual
        returns (bool)
    {
        return isApprovedForAll[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual {
        require(
            msg.sender == from || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(
                    msg.sender,
                    from,
                    id,
                    amount,
                    data
                ) == ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

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

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(
                    msg.sender,
                    from,
                    ids,
                    amounts,
                    data
                ) == ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] memory owners, uint256[] memory ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        uint256 ownersLength = owners.length; // Saves MLOADs.

        require(ownersLength == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < ownersLength; i++) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

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

    function supportsInterface(bytes4 interfaceId)
        public
        pure
        virtual
        returns (bool)
    {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

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

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(
                    msg.sender,
                    address(0),
                    id,
                    amount,
                    data
                ) == ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(
                    msg.sender,
                    address(0),
                    ids,
                    amounts,
                    data
                ) == ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal {
        balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
interface ERC1155TokenReceiver {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external returns (bytes4);
}

File 6 of 7 : IEON.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IEON {
    function mint(address to, uint256 amount) external;

    function burn(address from, uint256 amount) external;

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

File 7 of 7 : IRAW.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IRAW {

    function getBalance(
        address account,
        uint256 id
    ) external returns(uint256);

    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external;

    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external;

    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external;

}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "inliner": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": true,
      "yulDetails": {
        "optimizerSteps": "dhfoDgvulfnTUtnIf",
        "stackAllocation": true
      }
    },
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"typeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"UpdateMintBurns","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"burnFrom","type":"address"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eon","outputs":[{"internalType":"contract IEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"getInfoForType","outputs":[{"components":[{"internalType":"uint256","name":"mints","type":"uint256"},{"internalType":"uint256","name":"burns","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"eonExchangeAmt","type":"uint256"}],"internalType":"struct RAW.TypeInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_eon","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"exchangeAmt","type":"uint256"}],"name":"setExchangeAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"traitData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"mintQty","type":"uint256"},{"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"updateMintBurns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"internalType":"struct RAW.Image","name":"image","type":"tuple"}],"name":"uploadImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506002805460ff19169055600780546001600160a01b03191633179055612e168061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101b85760003560e01c8063749388c4116100f9578063de9375f211610097578063e985e9c511610071578063e985e9c514610408578063f242432a14610436578063f2fde38b14610449578063f6bb451f1461045c57600080fd5b8063de9375f2146103c2578063e79df0d1146103d5578063e7d3fe6b146103f557600080fd5b80639ca0f29b116100d35780639ca0f29b14610340578063a22cb46514610360578063a389783e14610373578063c4994180146103af57600080fd5b8063749388c4146103005780637d26c78c146103135780638da5cb5b1461032657600080fd5b80632eb2c2d6116101665780634ee6dc99116101405780634ee6dc99146102bc5780635a2e2f47146102cf5780635c975abb146102e257806370480275146102ed57600080fd5b80632eb2c2d6146102765780633ac70266146102895780634e1273f41461029c57600080fd5b806316c38b3c1161019757806316c38b3c1461023b5780631785f53c146102505780632b04e8401461026357600080fd5b8062fdd58e146101bd57806301ffc9a7146101fb5780630e89341c1461021b575b600080fd5b6101e56101cb366004611bb5565b600060208181529281526040808220909352908152205481565b6040516101f29190611bfa565b60405180910390f35b61020e610209366004611c23565b61047d565b6040516101f29190611c54565b61022e610229366004611c62565b61051a565b6040516101f29190611ce1565b61024e610249366004611d05565b6106fb565b005b61024e61025e366004611d26565b610753565b6101e5610271366004611bb5565b61078b565b61024e610284366004611ee3565b610812565b61024e610297366004611fac565b610ab1565b6102af6102aa366004612041565b610b28565b6040516101f29190612107565b61024e6102ca366004612118565b610c34565b61024e6102dd366004611d26565b610ced565b60025460ff1661020e565b61024e6102fb366004611d26565b610d3e565b61024e61030e366004612168565b610d79565b61024e6103213660046121c9565b610e02565b6007546001600160a01b03165b6040516101f29190612220565b61035361034e366004611c62565b610ef1565b6040516101f29190612273565b61024e61036e366004612281565b610f8c565b61020e6103813660046122b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024e6103bd366004611fac565b610ffb565b600754610333906001600160a01b031681565b6006546103e8906001600160a01b031681565b6040516101f29190612306565b61024e610403366004612168565b611057565b61020e6104163660046122b4565b600160209081526000928352604080842090915290825290205460ff1681565b61024e610444366004612314565b611127565b61024e610457366004611d26565b611334565b61046f61046a366004611c62565b611385565b6040516101f292919061236e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806104e057507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061051457507f0e89341c000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000818152600360205260409020600201546060906105545760405162461bcd60e51b815260040161054b906123c5565b60405180910390fd5b600082815260046020526040808220815180830190925280548290829061057a906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a6906123eb565b80156105f35780601f106105c8576101008083540402835291602001916105f3565b820191906000526020600020905b8154815290600101906020018083116105d657829003601f168201915b5050505050815260200160018201805461060c906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610638906123eb565b80156106855780601f1061065a57610100808354040283529160200191610685565b820191906000526020600020905b81548152906001019060200180831161066857829003601f168201915b5050505050815250509050600081600001516106a86106a3866114b1565b611648565b6040516020016106b9929190612434565b60405160208183030381529060405290506106d381611648565b6040516020016106e391906125cf565b60405160208183030381529060405292505050919050565b6007546001600160a01b0316331461071257600080fd5b6006546001600160a01b031661073a5760405162461bcd60e51b815260040161054b90612631565b801561074b57610748611805565b50565b610748611874565b6007546001600160a01b0316331461076a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152600090309062fdd58e906107ca9086908690600401612641565b602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612667565b9392505050565b8251825181146108345760405162461bcd60e51b815260040161054b906126ba565b3360009081526005602052604090205460ff166108a157336001600160a01b038716148061088557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6108a15760405162461bcd60e51b815260040161054b906126fc565b60005b818110156109765760008582815181106108c0576108c061270c565b6020026020010151905060008583815181106108de576108de61270c565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461092d9190612738565b90915550506001600160a01b0388166000908152602081815260408083208584529091528120805483929061096390849061274f565b9091555050600190920191506108a49050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109c6929190612767565b60405180910390a46001600160a01b0385163b15610a80576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610a2d9033908b908a908a908a9060040161278c565b6020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906127f7565b6001600160e01b03191614610a8d565b6001600160a01b03851615155b610aa95760405162461bcd60e51b815260040161054b9061284a565b505050505050565b6007546001600160a01b03163314610ac857600080fd5b81610ae55760405162461bcd60e51b815260040161054b9061288c565b600082815260036020526040902054811015610b135760405162461bcd60e51b815260040161054b906128ce565b60009182526003602052604090912060020155565b81518151606091908114610b4e5760405162461bcd60e51b815260040161054b906126ba565b835167ffffffffffffffff811115610b6857610b68611d47565b604051908082528060200260200182016040528015610b91578160200160208202803683370190505b50915060005b81811015610c2c57600080868381518110610bb457610bb461270c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610bf057610bf061270c565b6020026020010151815260200190815260200160002054838281518110610c1957610c1961270c565b6020908102919091010152600101610b97565b505092915050565b3360009081526005602052604090205460ff16610c635760405162461bcd60e51b815260040161054b90612910565b60008381526003602052604081208054849290610c8190849061274f565b909155505060008381526003602052604081206001018054839290610ca790849061274f565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ce090859085908590612920565b60405180910390a1505050565b6007546001600160a01b03163314610d0457600080fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610d5557600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60025460ff1615610d9c5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff16610dcb5760405162461bcd60e51b815260040161054b906129bc565b60008381526003602052604081206001018054849290610dec90849061274f565b90915550610dfd90508184846118c7565b505050565b6007546001600160a01b03163314610e1957600080fd5b6040805180820190915280610e2e83806129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602090810190610e77908401846129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505084815260046020908152604090912083518051919350610ed1928492910190611adb565b506020828101518051610eea9260018501920190611adb565b5050505050565b610f1c6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082815260036020526040902060020154610f4a5760405162461bcd60e51b815260040161054b906123c5565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fef908590611c54565b60405180910390a35050565b6007546001600160a01b0316331461101257600080fd5b6000828152600360205260409020600201546110405760405162461bcd60e51b815260040161054b90612a78565b600091825260036020819052604090922090910155565b60025460ff161561107a5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff166110a95760405162461bcd60e51b815260040161054b906129bc565b6000838152600360205260409020600281015490546110c990849061274f565b11156110e75760405162461bcd60e51b815260040161054b90612aba565b6000838152600360205260408120805484929061110590849061274f565b92505081905550610dfd8184846040518060200160405280600081525061194c565b3360009081526005602052604090205460ff1661119457336001600160a01b038616148061117857506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6111945760405162461bcd60e51b815260040161054b906126fc565b6001600160a01b038516600090815260208181526040808320868452909152812080548492906111c5908490612738565b90915550506001600160a01b038416600090815260208181526040808320868452909152812080548492906111fb90849061274f565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611251929190612aca565b60405180910390a46001600160a01b0384163b1561130b576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906112b89033908a90899089908990600401612ad8565b6020604051808303816000875af11580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb91906127f7565b6001600160e01b03191614611318565b6001600160a01b03841615155b610eea5760405162461bcd60e51b815260040161054b9061284a565b6007546001600160a01b0316331461134b57600080fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004602052600090815260409020805481906113a0906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc906123eb565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b50505050509080600101805461142e906123eb565b80601f016020809104026020016040519081016040528092919081815260200182805461145a906123eb565b80156114a75780601f1061147c576101008083540402835291602001916114a7565b820191906000526020600020905b81548152906001019060200180831161148a57829003601f168201915b5050505050905082565b606060006115ff600460008581526020019081526020016000206040518060400160405290816000820180546114e6906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611512906123eb565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b50505050508152602001600182018054611578906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546115a4906123eb565b80156115f15780601f106115c6576101008083540402835291602001916115f1565b820191906000526020600020905b8154815290600101906020018083116115d457829003601f168201915b505050505081525050611aae565b60405160200161160f9190612b1f565b6040516020818303038152906040529050806040516020016116319190612b29565b604051602081830303815290604052915050919050565b606081516000141561166857505060408051602081019091526000815290565b6000604051806060016040528060408152602001612da16040913990506000600384516002611697919061274f565b6116a19190612c35565b6116ac906004612c49565b905060006116bb82602061274f565b67ffffffffffffffff8111156116d3576116d3611d47565b6040519080825280601f01601f1916602001820160405280156116fd576020820181803683370190505b509050818152600183018586518101602084015b8183101561176b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611711565b60038951066001811461178557600281146117cf576117f7565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526117f7565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff16156118285760405162461bcd60e51b815260040161054b9061297a565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861185d3390565b60405161186a9190612220565b60405180910390a1565b60025460ff166118965760405162461bcd60e51b815260040161054b90612c9a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361185d565b6001600160a01b038316600090815260208181526040808320858452909152812080548392906118f8908490612738565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061193f9087908790612aca565b60405180910390a4505050565b6001600160a01b0384166000908152602081815260408083208684529091528120805484929061197d90849061274f565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119c49088908890612aca565b60405180910390a46001600160a01b0384163b15611a7f576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611a2c903390600090899089908990600401612ad8565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906127f7565b6001600160e01b03191614611a8c565b6001600160a01b03841615155b611aa85760405162461bcd60e51b815260040161054b9061284a565b50505050565b60608160200151604051602001611ac59190612caa565b6040516020818303038152906040529050919050565b828054611ae7906123eb565b90600052602060002090601f016020900481019282611b095760008555611b4f565b82601f10611b2257805160ff1916838001178555611b4f565b82800160010185558215611b4f579182015b82811115611b4f578251825591602001919060010190611b34565b50611b5b929150611b5f565b5090565b5b80821115611b5b5760008155600101611b60565b60006001600160a01b038216610514565b611b8e81611b74565b811461074857600080fd5b803561051481611b85565b80611b8e565b803561051481611ba4565b60008060408385031215611bcb57611bcb600080fd5b6000611bd78585611b99565b9250506020611be885828601611baa565b9150509250929050565b805b82525050565b602081016105148284611bf2565b6001600160e01b03198116611b8e565b803561051481611c08565b600060208284031215611c3857611c38600080fd5b6000611c448484611c18565b949350505050565b801515611bf4565b602081016105148284611c4c565b600060208284031215611c7757611c77600080fd5b6000611c448484611baa565b60005b83811015611c9e578181015183820152602001611c86565b83811115611aa85750506000910152565b6000611cb9825190565b808452602084019350611cd0818560208601611c83565b601f01601f19169290920192915050565b6020808252810161080b8184611caf565b801515611b8e565b803561051481611cf2565b600060208284031215611d1a57611d1a600080fd5b6000611c448484611cfa565b600060208284031215611d3b57611d3b600080fd5b6000611c448484611b99565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611d8357611d83611d47565b6040525050565b6000611d9560405190565b9050611da18282611d5d565b919050565b600067ffffffffffffffff821115611dc057611dc0611d47565b5060209081020190565b6000611ddd611dd884611da6565b611d8a565b83815290506020808201908402830185811115611dfc57611dfc600080fd5b835b81811015611e1e57611e108782611baa565b835260209283019201611dfe565b5050509392505050565b600082601f830112611e3c57611e3c600080fd5b8135611c44848260208601611dca565b600067ffffffffffffffff821115611e6657611e66611d47565b601f19601f83011660200192915050565b82818337506000910152565b6000611e91611dd884611e4c565b905082815260208101848484011115611eac57611eac600080fd5b611eb7848285611e77565b509392505050565b600082601f830112611ed357611ed3600080fd5b8135611c44848260208601611e83565b600080600080600060a08688031215611efe57611efe600080fd5b6000611f0a8888611b99565b9550506020611f1b88828901611b99565b945050604086013567ffffffffffffffff811115611f3b57611f3b600080fd5b611f4788828901611e28565b935050606086013567ffffffffffffffff811115611f6757611f67600080fd5b611f7388828901611e28565b925050608086013567ffffffffffffffff811115611f9357611f93600080fd5b611f9f88828901611ebf565b9150509295509295909350565b60008060408385031215611fc257611fc2600080fd5b6000611bd78585611baa565b6000611fdc611dd884611da6565b83815290506020808201908402830185811115611ffb57611ffb600080fd5b835b81811015611e1e5761200f8782611b99565b835260209283019201611ffd565b600082601f83011261203157612031600080fd5b8135611c44848260208601611fce565b6000806040838503121561205757612057600080fd5b823567ffffffffffffffff81111561207157612071600080fd5b61207d8582860161201d565b925050602083013567ffffffffffffffff81111561209d5761209d600080fd5b611be885828601611e28565b6120b38282611bf2565b5060200190565b60200190565b60006120ca825190565b808452602093840193830160005b828110156120fd5781516120ec87826120a9565b9650506020820191506001016120d8565b5093949350505050565b6020808252810161080b81846120c0565b60008060006060848603121561213057612130600080fd5b600061213c8686611baa565b935050602061214d86828701611baa565b925050604061215e86828701611baa565b9150509250925092565b60008060006060848603121561218057612180600080fd5b600061218c8686611baa565b935050602061219d86828701611baa565b925050604061215e86828701611b99565b6000604082840312156121c3576121c3600080fd5b50919050565b600080604083850312156121df576121df600080fd5b60006121eb8585611baa565b925050602083013567ffffffffffffffff81111561220b5761220b600080fd5b611be8858286016121ae565b611bf481611b74565b602081016105148284612217565b805161223a8382611bf2565b50602081015161224d6020840182611bf2565b5060408101516122606040840182611bf2565b506060810151610dfd6060840182611bf2565b60808101610514828461222e565b6000806040838503121561229757612297600080fd5b60006122a38585611b99565b9250506020611be885828601611cfa565b600080604083850312156122ca576122ca600080fd5b60006122d68585611b99565b9250506020611be885828601611b99565b600061051482611b74565b6000610514826122e7565b611bf4816122f2565b6020810161051482846122fd565b600080600080600060a0868803121561232f5761232f600080fd5b600061233b8888611b99565b955050602061234c88828901611b99565b945050604061235d88828901611baa565b9350506060611f7388828901611baa565b6040808252810161237f8185611caf565b90508181036020830152611c448184611caf565b600c8152602081017f696e76616c696420747970650000000000000000000000000000000000000000815290506120ba565b6020808252810161051481612393565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806123ff57607f821691505b602082108114156121c3576121c36123d5565b600061241c825190565b61242a818560208601611c83565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a016124648184612412565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c401905061257a8183612412565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d0000000000000000000000000000000000000000000000000000000000000060138201908152915060140161080b565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105148183612412565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290506120ba565b60208082528101610514816125ff565b6040810161264f8285612217565b61080b6020830184611bf2565b805161051481611ba4565b60006020828403121561267c5761267c600080fd5b6000611c44848461265c565b600f8152602081017f4c454e4754485f4d49534d415443480000000000000000000000000000000000815290506120ba565b6020808252810161051481612688565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290506120ba565b60208082528101610514816126ca565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561274a5761274a612722565b500390565b6000821982111561276257612762612722565b500190565b6040808252810161277881856120c0565b90508181036020830152611c4481846120c0565b60a0810161279a8288612217565b6127a76020830187612217565b81810360408301526127b981866120c0565b905081810360608301526127cd81856120c0565b905081810360808301526127e18184611caf565b979650505050505050565b805161051481611c08565b60006020828403121561280c5761280c600080fd5b6000611c4484846127ec565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506120ba565b6020808252810161051481612818565b60128152602081017f5479706549642063616e6e6f7420626520300000000000000000000000000000815290506120ba565b602080825281016105148161285a565b60128152602081017f6d617820737570706c7920746f6f206c6f770000000000000000000000000000815290506120ba565b602080825281016105148161289c565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506120ba565b60208082528101610514816128de565b6060810161292e8286611bf2565b61293b6020830185611bf2565b611c446040830184611bf2565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506120ba565b6020808252810161051481612948565b600b8152602081017f4f6e6c792061646d696e73000000000000000000000000000000000000000000815290506120ba565b602080825281016105148161298a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612a0557612a05600080fd5b8301915050803567ffffffffffffffff811115612a2457612a24600080fd5b602082019150600181023603821315612a3f57612a3f600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e20736574207570000000815290506120ba565b6020808252810161051481612a46565b60108152602081017f4d6178537570706c79204d696e74656400000000000000000000000000000000815290506120ba565b6020808252810161051481612a88565b6040810161264f8285611bf2565b60a08101612ae68288612217565b612af36020830187612217565b612b006040830186611bf2565b612b0d6060830185611bf2565b81810360808301526127e18184611caf565b6105148183612412565b7f3c7376672069643d22616c746572222077696474683d2231303025222068656981527f6768743d2231303025222076657273696f6e3d22312e31222076696577426f7860208201527f3d223020302036342036342220786d6c6e733d22687474703a2f2f7777772e7760408201527f332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d2268747460608201527f703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000006080820152609b01612bf18183612412565b7f3c2f7376673e00000000000000000000000000000000000000000000000000008152905060068101610514565b634e487b7160e01b600052601260045260246000fd5b600082612c4457612c44612c1f565b500490565b6000816000190483118215151615612c6357612c63612722565b500290565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506120ba565b6020808252810161051481612c68565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c000000000000000000000000000000000000000000000000006080820152608701612d728183612412565b7f222f3e0000000000000000000000000000000000000000000000000000000000815290506003810161051456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122019f459051ebde7b2b9a66737a65c0230a6a2cb43ff550a507ebd545b063e7f3664736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b85760003560e01c8063749388c4116100f9578063de9375f211610097578063e985e9c511610071578063e985e9c514610408578063f242432a14610436578063f2fde38b14610449578063f6bb451f1461045c57600080fd5b8063de9375f2146103c2578063e79df0d1146103d5578063e7d3fe6b146103f557600080fd5b80639ca0f29b116100d35780639ca0f29b14610340578063a22cb46514610360578063a389783e14610373578063c4994180146103af57600080fd5b8063749388c4146103005780637d26c78c146103135780638da5cb5b1461032657600080fd5b80632eb2c2d6116101665780634ee6dc99116101405780634ee6dc99146102bc5780635a2e2f47146102cf5780635c975abb146102e257806370480275146102ed57600080fd5b80632eb2c2d6146102765780633ac70266146102895780634e1273f41461029c57600080fd5b806316c38b3c1161019757806316c38b3c1461023b5780631785f53c146102505780632b04e8401461026357600080fd5b8062fdd58e146101bd57806301ffc9a7146101fb5780630e89341c1461021b575b600080fd5b6101e56101cb366004611bb5565b600060208181529281526040808220909352908152205481565b6040516101f29190611bfa565b60405180910390f35b61020e610209366004611c23565b61047d565b6040516101f29190611c54565b61022e610229366004611c62565b61051a565b6040516101f29190611ce1565b61024e610249366004611d05565b6106fb565b005b61024e61025e366004611d26565b610753565b6101e5610271366004611bb5565b61078b565b61024e610284366004611ee3565b610812565b61024e610297366004611fac565b610ab1565b6102af6102aa366004612041565b610b28565b6040516101f29190612107565b61024e6102ca366004612118565b610c34565b61024e6102dd366004611d26565b610ced565b60025460ff1661020e565b61024e6102fb366004611d26565b610d3e565b61024e61030e366004612168565b610d79565b61024e6103213660046121c9565b610e02565b6007546001600160a01b03165b6040516101f29190612220565b61035361034e366004611c62565b610ef1565b6040516101f29190612273565b61024e61036e366004612281565b610f8c565b61020e6103813660046122b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024e6103bd366004611fac565b610ffb565b600754610333906001600160a01b031681565b6006546103e8906001600160a01b031681565b6040516101f29190612306565b61024e610403366004612168565b611057565b61020e6104163660046122b4565b600160209081526000928352604080842090915290825290205460ff1681565b61024e610444366004612314565b611127565b61024e610457366004611d26565b611334565b61046f61046a366004611c62565b611385565b6040516101f292919061236e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806104e057507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061051457507f0e89341c000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000818152600360205260409020600201546060906105545760405162461bcd60e51b815260040161054b906123c5565b60405180910390fd5b600082815260046020526040808220815180830190925280548290829061057a906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a6906123eb565b80156105f35780601f106105c8576101008083540402835291602001916105f3565b820191906000526020600020905b8154815290600101906020018083116105d657829003601f168201915b5050505050815260200160018201805461060c906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610638906123eb565b80156106855780601f1061065a57610100808354040283529160200191610685565b820191906000526020600020905b81548152906001019060200180831161066857829003601f168201915b5050505050815250509050600081600001516106a86106a3866114b1565b611648565b6040516020016106b9929190612434565b60405160208183030381529060405290506106d381611648565b6040516020016106e391906125cf565b60405160208183030381529060405292505050919050565b6007546001600160a01b0316331461071257600080fd5b6006546001600160a01b031661073a5760405162461bcd60e51b815260040161054b90612631565b801561074b57610748611805565b50565b610748611874565b6007546001600160a01b0316331461076a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152600090309062fdd58e906107ca9086908690600401612641565b602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612667565b9392505050565b8251825181146108345760405162461bcd60e51b815260040161054b906126ba565b3360009081526005602052604090205460ff166108a157336001600160a01b038716148061088557506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6108a15760405162461bcd60e51b815260040161054b906126fc565b60005b818110156109765760008582815181106108c0576108c061270c565b6020026020010151905060008583815181106108de576108de61270c565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461092d9190612738565b90915550506001600160a01b0388166000908152602081815260408083208584529091528120805483929061096390849061274f565b9091555050600190920191506108a49050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109c6929190612767565b60405180910390a46001600160a01b0385163b15610a80576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610a2d9033908b908a908a908a9060040161278c565b6020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906127f7565b6001600160e01b03191614610a8d565b6001600160a01b03851615155b610aa95760405162461bcd60e51b815260040161054b9061284a565b505050505050565b6007546001600160a01b03163314610ac857600080fd5b81610ae55760405162461bcd60e51b815260040161054b9061288c565b600082815260036020526040902054811015610b135760405162461bcd60e51b815260040161054b906128ce565b60009182526003602052604090912060020155565b81518151606091908114610b4e5760405162461bcd60e51b815260040161054b906126ba565b835167ffffffffffffffff811115610b6857610b68611d47565b604051908082528060200260200182016040528015610b91578160200160208202803683370190505b50915060005b81811015610c2c57600080868381518110610bb457610bb461270c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610bf057610bf061270c565b6020026020010151815260200190815260200160002054838281518110610c1957610c1961270c565b6020908102919091010152600101610b97565b505092915050565b3360009081526005602052604090205460ff16610c635760405162461bcd60e51b815260040161054b90612910565b60008381526003602052604081208054849290610c8190849061274f565b909155505060008381526003602052604081206001018054839290610ca790849061274f565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ce090859085908590612920565b60405180910390a1505050565b6007546001600160a01b03163314610d0457600080fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610d5557600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60025460ff1615610d9c5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff16610dcb5760405162461bcd60e51b815260040161054b906129bc565b60008381526003602052604081206001018054849290610dec90849061274f565b90915550610dfd90508184846118c7565b505050565b6007546001600160a01b03163314610e1957600080fd5b6040805180820190915280610e2e83806129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602090810190610e77908401846129cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505084815260046020908152604090912083518051919350610ed1928492910190611adb565b506020828101518051610eea9260018501920190611adb565b5050505050565b610f1c6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082815260036020526040902060020154610f4a5760405162461bcd60e51b815260040161054b906123c5565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fef908590611c54565b60405180910390a35050565b6007546001600160a01b0316331461101257600080fd5b6000828152600360205260409020600201546110405760405162461bcd60e51b815260040161054b90612a78565b600091825260036020819052604090922090910155565b60025460ff161561107a5760405162461bcd60e51b815260040161054b9061297a565b3360009081526005602052604090205460ff166110a95760405162461bcd60e51b815260040161054b906129bc565b6000838152600360205260409020600281015490546110c990849061274f565b11156110e75760405162461bcd60e51b815260040161054b90612aba565b6000838152600360205260408120805484929061110590849061274f565b92505081905550610dfd8184846040518060200160405280600081525061194c565b3360009081526005602052604090205460ff1661119457336001600160a01b038616148061117857506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6111945760405162461bcd60e51b815260040161054b906126fc565b6001600160a01b038516600090815260208181526040808320868452909152812080548492906111c5908490612738565b90915550506001600160a01b038416600090815260208181526040808320868452909152812080548492906111fb90849061274f565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611251929190612aca565b60405180910390a46001600160a01b0384163b1561130b576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906112b89033908a90899089908990600401612ad8565b6020604051808303816000875af11580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb91906127f7565b6001600160e01b03191614611318565b6001600160a01b03841615155b610eea5760405162461bcd60e51b815260040161054b9061284a565b6007546001600160a01b0316331461134b57600080fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004602052600090815260409020805481906113a0906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc906123eb565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b50505050509080600101805461142e906123eb565b80601f016020809104026020016040519081016040528092919081815260200182805461145a906123eb565b80156114a75780601f1061147c576101008083540402835291602001916114a7565b820191906000526020600020905b81548152906001019060200180831161148a57829003601f168201915b5050505050905082565b606060006115ff600460008581526020019081526020016000206040518060400160405290816000820180546114e6906123eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611512906123eb565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b50505050508152602001600182018054611578906123eb565b80601f01602080910402602001604051908101604052809291908181526020018280546115a4906123eb565b80156115f15780601f106115c6576101008083540402835291602001916115f1565b820191906000526020600020905b8154815290600101906020018083116115d457829003601f168201915b505050505081525050611aae565b60405160200161160f9190612b1f565b6040516020818303038152906040529050806040516020016116319190612b29565b604051602081830303815290604052915050919050565b606081516000141561166857505060408051602081019091526000815290565b6000604051806060016040528060408152602001612da16040913990506000600384516002611697919061274f565b6116a19190612c35565b6116ac906004612c49565b905060006116bb82602061274f565b67ffffffffffffffff8111156116d3576116d3611d47565b6040519080825280601f01601f1916602001820160405280156116fd576020820181803683370190505b509050818152600183018586518101602084015b8183101561176b5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611711565b60038951066001811461178557600281146117cf576117f7565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526117f7565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff16156118285760405162461bcd60e51b815260040161054b9061297a565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861185d3390565b60405161186a9190612220565b60405180910390a1565b60025460ff166118965760405162461bcd60e51b815260040161054b90612c9a565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361185d565b6001600160a01b038316600090815260208181526040808320858452909152812080548392906118f8908490612738565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061193f9087908790612aca565b60405180910390a4505050565b6001600160a01b0384166000908152602081815260408083208684529091528120805484929061197d90849061274f565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119c49088908890612aca565b60405180910390a46001600160a01b0384163b15611a7f576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611a2c903390600090899089908990600401612ad8565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906127f7565b6001600160e01b03191614611a8c565b6001600160a01b03841615155b611aa85760405162461bcd60e51b815260040161054b9061284a565b50505050565b60608160200151604051602001611ac59190612caa565b6040516020818303038152906040529050919050565b828054611ae7906123eb565b90600052602060002090601f016020900481019282611b095760008555611b4f565b82601f10611b2257805160ff1916838001178555611b4f565b82800160010185558215611b4f579182015b82811115611b4f578251825591602001919060010190611b34565b50611b5b929150611b5f565b5090565b5b80821115611b5b5760008155600101611b60565b60006001600160a01b038216610514565b611b8e81611b74565b811461074857600080fd5b803561051481611b85565b80611b8e565b803561051481611ba4565b60008060408385031215611bcb57611bcb600080fd5b6000611bd78585611b99565b9250506020611be885828601611baa565b9150509250929050565b805b82525050565b602081016105148284611bf2565b6001600160e01b03198116611b8e565b803561051481611c08565b600060208284031215611c3857611c38600080fd5b6000611c448484611c18565b949350505050565b801515611bf4565b602081016105148284611c4c565b600060208284031215611c7757611c77600080fd5b6000611c448484611baa565b60005b83811015611c9e578181015183820152602001611c86565b83811115611aa85750506000910152565b6000611cb9825190565b808452602084019350611cd0818560208601611c83565b601f01601f19169290920192915050565b6020808252810161080b8184611caf565b801515611b8e565b803561051481611cf2565b600060208284031215611d1a57611d1a600080fd5b6000611c448484611cfa565b600060208284031215611d3b57611d3b600080fd5b6000611c448484611b99565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611d8357611d83611d47565b6040525050565b6000611d9560405190565b9050611da18282611d5d565b919050565b600067ffffffffffffffff821115611dc057611dc0611d47565b5060209081020190565b6000611ddd611dd884611da6565b611d8a565b83815290506020808201908402830185811115611dfc57611dfc600080fd5b835b81811015611e1e57611e108782611baa565b835260209283019201611dfe565b5050509392505050565b600082601f830112611e3c57611e3c600080fd5b8135611c44848260208601611dca565b600067ffffffffffffffff821115611e6657611e66611d47565b601f19601f83011660200192915050565b82818337506000910152565b6000611e91611dd884611e4c565b905082815260208101848484011115611eac57611eac600080fd5b611eb7848285611e77565b509392505050565b600082601f830112611ed357611ed3600080fd5b8135611c44848260208601611e83565b600080600080600060a08688031215611efe57611efe600080fd5b6000611f0a8888611b99565b9550506020611f1b88828901611b99565b945050604086013567ffffffffffffffff811115611f3b57611f3b600080fd5b611f4788828901611e28565b935050606086013567ffffffffffffffff811115611f6757611f67600080fd5b611f7388828901611e28565b925050608086013567ffffffffffffffff811115611f9357611f93600080fd5b611f9f88828901611ebf565b9150509295509295909350565b60008060408385031215611fc257611fc2600080fd5b6000611bd78585611baa565b6000611fdc611dd884611da6565b83815290506020808201908402830185811115611ffb57611ffb600080fd5b835b81811015611e1e5761200f8782611b99565b835260209283019201611ffd565b600082601f83011261203157612031600080fd5b8135611c44848260208601611fce565b6000806040838503121561205757612057600080fd5b823567ffffffffffffffff81111561207157612071600080fd5b61207d8582860161201d565b925050602083013567ffffffffffffffff81111561209d5761209d600080fd5b611be885828601611e28565b6120b38282611bf2565b5060200190565b60200190565b60006120ca825190565b808452602093840193830160005b828110156120fd5781516120ec87826120a9565b9650506020820191506001016120d8565b5093949350505050565b6020808252810161080b81846120c0565b60008060006060848603121561213057612130600080fd5b600061213c8686611baa565b935050602061214d86828701611baa565b925050604061215e86828701611baa565b9150509250925092565b60008060006060848603121561218057612180600080fd5b600061218c8686611baa565b935050602061219d86828701611baa565b925050604061215e86828701611b99565b6000604082840312156121c3576121c3600080fd5b50919050565b600080604083850312156121df576121df600080fd5b60006121eb8585611baa565b925050602083013567ffffffffffffffff81111561220b5761220b600080fd5b611be8858286016121ae565b611bf481611b74565b602081016105148284612217565b805161223a8382611bf2565b50602081015161224d6020840182611bf2565b5060408101516122606040840182611bf2565b506060810151610dfd6060840182611bf2565b60808101610514828461222e565b6000806040838503121561229757612297600080fd5b60006122a38585611b99565b9250506020611be885828601611cfa565b600080604083850312156122ca576122ca600080fd5b60006122d68585611b99565b9250506020611be885828601611b99565b600061051482611b74565b6000610514826122e7565b611bf4816122f2565b6020810161051482846122fd565b600080600080600060a0868803121561232f5761232f600080fd5b600061233b8888611b99565b955050602061234c88828901611b99565b945050604061235d88828901611baa565b9350506060611f7388828901611baa565b6040808252810161237f8185611caf565b90508181036020830152611c448184611caf565b600c8152602081017f696e76616c696420747970650000000000000000000000000000000000000000815290506120ba565b6020808252810161051481612393565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806123ff57607f821691505b602082108114156121c3576121c36123d5565b600061241c825190565b61242a818560208601611c83565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a016124648184612412565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c401905061257a8183612412565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d0000000000000000000000000000000000000000000000000000000000000060138201908152915060140161080b565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105148183612412565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290506120ba565b60208082528101610514816125ff565b6040810161264f8285612217565b61080b6020830184611bf2565b805161051481611ba4565b60006020828403121561267c5761267c600080fd5b6000611c44848461265c565b600f8152602081017f4c454e4754485f4d49534d415443480000000000000000000000000000000000815290506120ba565b6020808252810161051481612688565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290506120ba565b60208082528101610514816126ca565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561274a5761274a612722565b500390565b6000821982111561276257612762612722565b500190565b6040808252810161277881856120c0565b90508181036020830152611c4481846120c0565b60a0810161279a8288612217565b6127a76020830187612217565b81810360408301526127b981866120c0565b905081810360608301526127cd81856120c0565b905081810360808301526127e18184611caf565b979650505050505050565b805161051481611c08565b60006020828403121561280c5761280c600080fd5b6000611c4484846127ec565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506120ba565b6020808252810161051481612818565b60128152602081017f5479706549642063616e6e6f7420626520300000000000000000000000000000815290506120ba565b602080825281016105148161285a565b60128152602081017f6d617820737570706c7920746f6f206c6f770000000000000000000000000000815290506120ba565b602080825281016105148161289c565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506120ba565b60208082528101610514816128de565b6060810161292e8286611bf2565b61293b6020830185611bf2565b611c446040830184611bf2565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506120ba565b6020808252810161051481612948565b600b8152602081017f4f6e6c792061646d696e73000000000000000000000000000000000000000000815290506120ba565b602080825281016105148161298a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612a0557612a05600080fd5b8301915050803567ffffffffffffffff811115612a2457612a24600080fd5b602082019150600181023603821315612a3f57612a3f600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e20736574207570000000815290506120ba565b6020808252810161051481612a46565b60108152602081017f4d6178537570706c79204d696e74656400000000000000000000000000000000815290506120ba565b6020808252810161051481612a88565b6040810161264f8285611bf2565b60a08101612ae68288612217565b612af36020830187612217565b612b006040830186611bf2565b612b0d6060830185611bf2565b81810360808301526127e18184611caf565b6105148183612412565b7f3c7376672069643d22616c746572222077696474683d2231303025222068656981527f6768743d2231303025222076657273696f6e3d22312e31222076696577426f7860208201527f3d223020302036342036342220786d6c6e733d22687474703a2f2f7777772e7760408201527f332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d2268747460608201527f703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000006080820152609b01612bf18183612412565b7f3c2f7376673e00000000000000000000000000000000000000000000000000008152905060068101610514565b634e487b7160e01b600052601260045260246000fd5b600082612c4457612c44612c1f565b500490565b6000816000190483118215151615612c6357612c63612722565b500290565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506120ba565b6020808252810161051481612c68565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c000000000000000000000000000000000000000000000000006080820152608701612d728183612412565b7f222f3e0000000000000000000000000000000000000000000000000000000000815290506003810161051456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122019f459051ebde7b2b9a66737a65c0230a6a2cb43ff550a507ebd545b063e7f3664736f6c634300080b0033

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  ]

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.