ETH Price: $3,328.39 (+0.80%)

Contract

0x2AD82A4E39Bac43A54DdfE6f94980AAf0D1409eF
Transaction Hash
Method
Block
From
To
Buy1308871632025-01-20 11:38:232 days ago1737373103IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000631577170.66000096
Sell1308270952025-01-19 2:16:073 days ago1737252967IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000958430.00018448
Buy1308133612025-01-18 18:38:193 days ago1737225499IN
0x2AD82A4E...f0D1409eF
0.000147 ETH0.0000473950930.7300003
Buy1308133542025-01-18 18:38:053 days ago1737225485IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000650686610.6600003
Create1308133512025-01-18 18:37:593 days ago1737225479IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000023356770.0001003
Sell1307986462025-01-18 10:27:494 days ago1737196069IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000002853010.00010053
Sell1307889572025-01-18 5:04:514 days ago1737176691IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000027964910.00100039
Sell1305417902025-01-12 11:45:5710 days ago1736682357IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000279990.00010073
Sell1304045912025-01-09 7:32:3913 days ago1736407959IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000586650.00027679
Sell1304045822025-01-09 7:32:2113 days ago1736407941IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000469160.00010057
Sell1304045742025-01-09 7:32:0513 days ago1736407925IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000483770.00010057
Sell1304045632025-01-09 7:31:4313 days ago1736407903IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000492550.00013392
Sell1304045502025-01-09 7:31:1713 days ago1736407877IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000001038390.00100056
Sell1304045402025-01-09 7:30:5713 days ago1736407857IN
0x2AD82A4E...f0D1409eF
0 ETH0.000000105250.00100056
Sell1304045292025-01-09 7:30:3513 days ago1736407835IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000459760.00010056
Sell1304045152025-01-09 7:30:0713 days ago1736407807IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000411260.00010055
Sell1303997552025-01-09 4:51:2713 days ago1736398287IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000025920480.00010028
Sell1301314632025-01-02 23:48:2319 days ago1735861703IN
0x2AD82A4E...f0D1409eF
0 ETH0.0000000654970.00010044
Buy1300700752025-01-01 13:42:0720 days ago1735738927IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630050720.66000038
Buy1300682472025-01-01 12:41:1120 days ago1735735271IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630577430.66000034
Buy1300680792025-01-01 12:35:3520 days ago1735734935IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630648160.66000035
Buy1300674222025-01-01 12:13:4120 days ago1735733621IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630673030.66000034
Buy1300673462025-01-01 12:11:0920 days ago1735733469IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630786420.66000034
Buy1300671102025-01-01 12:03:1720 days ago1735732997IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000630623380.66000035
Buy1300644652025-01-01 10:35:0721 days ago1735727707IN
0x2AD82A4E...f0D1409eF
0.000021 ETH0.0000696588530.73000035
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1308871632025-01-20 11:38:232 days ago1737373103
0x2AD82A4E...f0D1409eF
0.000001 ETH
1308270952025-01-19 2:16:073 days ago1737252967
0x2AD82A4E...f0D1409eF
0.000697356034171 ETH
1308270952025-01-19 2:16:073 days ago1737252967
0x2AD82A4E...f0D1409eF
0.013249764649265 ETH
1308133612025-01-18 18:38:193 days ago1737225499
0x2AD82A4E...f0D1409eF
0.000007 ETH
1308133542025-01-18 18:38:053 days ago1737225485
0x2AD82A4E...f0D1409eF
0.000001 ETH
1307986462025-01-18 10:27:494 days ago1737196069
0x2AD82A4E...f0D1409eF
0.0055689264 ETH
1307986462025-01-18 10:27:494 days ago1737196069
0x2AD82A4E...f0D1409eF
0.1058096016 ETH
1307889572025-01-18 5:04:514 days ago1737176691
0x2AD82A4E...f0D1409eF
0.001050670605164 ETH
1307889572025-01-18 5:04:514 days ago1737176691
0x2AD82A4E...f0D1409eF
0.019962741498117 ETH
1305417902025-01-12 11:45:5710 days ago1736682357
0x2AD82A4E...f0D1409eF
0.000781869287968 ETH
1305417902025-01-12 11:45:5710 days ago1736682357
0x2AD82A4E...f0D1409eF
0.014855516471406 ETH
1304045912025-01-09 7:32:3913 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000026 ETH
1304045912025-01-09 7:32:3913 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000494 ETH
1304045822025-01-09 7:32:2113 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000027 ETH
1304045822025-01-09 7:32:2113 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000513 ETH
1304045742025-01-09 7:32:0513 days ago1736407925
0x2AD82A4E...f0D1409eF
0.000037 ETH
1304045742025-01-09 7:32:0513 days ago1736407925
0x2AD82A4E...f0D1409eF
0.000703 ETH
1304045632025-01-09 7:31:4313 days ago1736407903
0x2AD82A4E...f0D1409eF
0.0000369699103 ETH
1304045632025-01-09 7:31:4313 days ago1736407903
0x2AD82A4E...f0D1409eF
0.0007024282957 ETH
1304045502025-01-09 7:31:1713 days ago1736407877
0x2AD82A4E...f0D1409eF
0.00006644901456 ETH
1304045502025-01-09 7:31:1713 days ago1736407877
0x2AD82A4E...f0D1409eF
0.00126253127664 ETH
1304045402025-01-09 7:30:5713 days ago1736407857
0x2AD82A4E...f0D1409eF
0.000107772632514 ETH
1304045402025-01-09 7:30:5713 days ago1736407857
0x2AD82A4E...f0D1409eF
0.002047680017781 ETH
1304045292025-01-09 7:30:3513 days ago1736407835
0x2AD82A4E...f0D1409eF
0.00008088517 ETH
1304045292025-01-09 7:30:3513 days ago1736407835
0x2AD82A4E...f0D1409eF
0.00153681823 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bodhi

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Bodhi.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {ERC1155} from "solmate/src/tokens/ERC1155.sol";
error Unauthorized();

contract Bodhi is ERC1155 {
    event Create(uint256 indexed assetId, address indexed sender, string arTxId);
    event Remove(uint256 indexed assetId, address indexed sender);
    event Trade(
        TradeType indexed tradeType,
        uint256 indexed assetId,
        address indexed sender,
        uint256 tokenAmount,
        uint256 ethAmount,
        uint256 creatorFee
    );

    struct Asset {
        uint256 id;
        string arTxId; // arweave transaction id
        address creator;
    }

    uint256 public assetIndex;
    mapping(uint256 => Asset) public assets;
    mapping(address => uint256[]) public userAssets;
    mapping(bytes32 => uint256) public txToAssetId;
    mapping(uint256 => uint256) public totalSupply;
    mapping(uint256 => uint256) public pool;
    uint256 public constant CREATOR_PREMINT = 1 ether; // 1e18
    uint256 public constant CREATOR_FEE_PERCENT = 0.05 ether; // 5%

    enum TradeType {
        Mint,
        Buy,
        Sell
    } // = 0, 1, 2

    function create(string calldata arTxId) public {
        bytes32 txHash = keccak256(abi.encodePacked(arTxId));
        require(txToAssetId[txHash] == 0, "Asset already exists");
        uint256 newAssetId = assetIndex;
        assets[newAssetId] = Asset(newAssetId, arTxId, msg.sender);
        userAssets[msg.sender].push(newAssetId);
        txToAssetId[txHash] = newAssetId;
        totalSupply[newAssetId] += CREATOR_PREMINT;
        assetIndex = newAssetId + 1;
        _mint(msg.sender, newAssetId, CREATOR_PREMINT, "");
        emit Create(newAssetId, msg.sender, arTxId);
        emit Trade(TradeType.Mint, newAssetId, msg.sender, CREATOR_PREMINT, 0, 0);
    }

    function remove(uint256 assetId) public {
        Asset memory asset = assets[assetId];
        if (asset.creator != msg.sender) {
            revert Unauthorized();
        }
        delete txToAssetId[keccak256(abi.encodePacked(asset.arTxId))];
        delete assets[assetId];
        emit Remove(assetId, msg.sender);
    }

    function getAssetIdsByAddress(address addr) public view returns (uint256[] memory) {
        return userAssets[addr];
    }

    function _curve(uint256 x) private pure returns (uint256) {
        return x <= CREATOR_PREMINT ? 0 : ((x - CREATOR_PREMINT) * (x - CREATOR_PREMINT) * (x - CREATOR_PREMINT));
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
        return (_curve(supply + amount) - _curve(supply)) / 1 ether / 1 ether / 50_000;
    }

    function getBuyPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId], amount);
    }

    function getSellPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId] - amount, amount);
    }

    function getBuyPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price + creatorFee;
    }

    function getSellPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price - creatorFee;
    }

    function buy(uint256 assetId, uint256 amount) public payable {
        require(assetId < assetIndex, "Asset does not exist");
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        require(msg.value >= price + creatorFee, "Insufficient payment");
        totalSupply[assetId] += amount;
        pool[assetId] += price;
        _mint(msg.sender, assetId, amount, "");
        emit Trade(TradeType.Buy, assetId, msg.sender, amount, price, creatorFee);
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(creatorFeeSent, "Failed to send Ether");
    }

    function sell(uint256 assetId, uint256 amount) public {
        require(assetId < assetIndex, "Asset does not exist");
        require(balanceOf[msg.sender][assetId] >= amount, "Insufficient balance");
        uint256 supply = totalSupply[assetId];
        require(supply - amount >= CREATOR_PREMINT, "Supply not allowed below premint amount");
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        _burn(msg.sender, assetId, amount);
        totalSupply[assetId] = supply - amount;
        pool[assetId] -= price;
        emit Trade(TradeType.Sell, assetId, msg.sender, amount, price, creatorFee);
        (bool sent, ) = payable(msg.sender).call{value: price - creatorFee}("");
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(sent && creatorFeeSent, "Failed to send Ether");
    }

    function uri(uint256 id) public view override returns (string memory) {
        return assets[id].arTxId;
    }
}

File 2 of 2 : 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/transmissions11/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 safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata 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[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

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

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            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[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == 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 < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

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

    function supportsInterface(bytes4 interfaceId) public view 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 virtual {
        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 virtual {
        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 virtual {
        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 virtual {
        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/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"arTxId","type":"string"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Remove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Bodhi.TradeType","name":"tradeType","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorFee","type":"uint256"}],"name":"Trade","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"},{"inputs":[],"name":"CREATOR_FEE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CREATOR_PREMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assets","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"arTxId","type":"string"},{"internalType":"address","name":"creator","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":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"arTxId","type":"string"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAssetIdsByAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"remove","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":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"txToAssetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613c4d806100206000396000f3fe6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

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
[ 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.