ETH Price: $3,100.70 (-1.00%)

Contract

0x0C7f14EF8AE65d194711f18e02054385242505D9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040128140762021-07-12 18:28:411226 days ago1626114521IN
 Contract Creation
0 ETH0.0415848234.41

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x8E88565A...5b0Bb0095
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TieredCrowdfundLogic

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-07-12
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.5;

/**
 * @title TieredCrowdfundStorage
 * @author MirrorXYZ
 */
contract TieredCrowdfundStorage {
    // The two states that this contract can exist in. "FUNDING" allows
    // contributors to add funds.
    enum Status {FUNDING, TRADING}

    // ============ Constants ============

    // The factor by which ETH contributions will multiply into crowdfund tokens.
    uint16 internal constant TOKEN_SCALE = 1000;
    uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant REENTRANCY_ENTERED = 2;
    uint8 public constant decimals = 18;

    // ============ Immutable Storage ============

    // The operator has a special role to change contract status.
    address payable public operator;
    address payable public fundingRecipient;
    // We add a hard cap to prevent raising more funds than deemed reasonable.
    uint256 public fundingCap;
    // The operator takes some equity in the tokens, represented by this percent.
    uint256 public operatorPercent;
    string public symbol;
    string public name;

    // ============ Mutable Storage ============

    // Represents the current state of the campaign.
    Status public status;
    uint256 internal reentrancy_status;

    // ============ Mutable ERC20 Attributes ============

    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    mapping(address => uint256) public nonces;

    // ============ Delegation logic ============
    address public logic;

    // ============ Tiered Campaigns ============
    // Address of the editions contract to purchase from.
    address public editions;
}


// File contracts/interface/ICrowdfundEditions.sol


interface ICrowdfundEditions {
    struct Edition {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        // The account that will receive sales revenue.
        address payable fundingRecipient;
        // The number of tokens sold so far.
        uint256 numSold;
        bytes32 contentHash;
    }

    struct EditionTier {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        bytes32 contentHash;
    }

    function buyEdition(uint256 editionId, address recipient)
        external
        payable
        returns (uint256 tokenId);

    function editionPrice(uint256 editionId) external view returns (uint256);

    function createEditions(
        EditionTier[] memory tier,
        // The account that should receive the revenue.
        address payable fundingRecipient,
        address minter
    ) external;

    function contractURI() external view returns (string memory);
}


// File contracts/TieredCrowdfundLogic.sol



/**
 * @title TieredCrowdfundLogic
 * @author MirrorXYZ
 *
 * Crowdfund the creation of NFTs by issuing ERC20 tokens that
 * can be redeemed for the underlying value of the NFT once sold.
 */
contract TieredCrowdfundLogic is TieredCrowdfundStorage {
    // ============ Events ============

    event ReceivedERC721(uint256 tokenId, address sender);
    event Contribution(address contributor, uint256 amount);
    event ContributionForEdition(
        address contributor,
        uint256 amount,
        uint256 editionId,
        uint256 tokenId
    );

    event FundingClosed(uint256 amountRaised, uint256 creatorAllocation);
    event BidAccepted(uint256 amount);
    event Redeemed(address contributor, uint256 amount);
    // ERC20 Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // ============ Modifiers ============

    /**
     * @dev Modifier to check whether the `msg.sender` is the operator.
     * If it is, it will run the function. Otherwise, it will revert.
     */
    modifier onlyOperator() {
        require(msg.sender == operator);
        _;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(reentrancy_status != REENTRANCY_ENTERED, "Reentrant call");

        // Any calls to nonReentrant after this point will fail
        reentrancy_status = REENTRANCY_ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        reentrancy_status = REENTRANCY_NOT_ENTERED;
    }

    // ============ Crowdfunding Methods ============

    /**
     * @notice Mints tokens for the sender propotional to the
     *  amount of ETH sent in the transaction.
     * @dev Emits the Contribution event.
     */
    function contribute(
        address payable backer,
        uint256 editionId,
        uint256 amount
    ) external payable nonReentrant {
        require(status == Status.FUNDING, "Crowdfund: Funding must be open");
        require(amount == msg.value, "Crowdfund: Amount is not value sent");
        // This first case is the happy path, so we will keep it efficient.
        // The balance, which includes the current contribution, is less than or equal to cap.
        if (address(this).balance <= fundingCap) {
            // Mint equity for the contributor.
            _mint(backer, valueToTokens(amount));

            // Editions start at 1, so a "0" edition means the user wants to contribute without
            // purchasing a token.
            if (editionId > 0) {
                emit ContributionForEdition(
                    backer,
                    amount,
                    editionId,
                    buyEdition(amount, editionId, backer)
                );
            } else {
                emit Contribution(backer, amount);
            }
        } else {
            // Compute the balance of the crowdfund before the contribution was made.
            uint256 startAmount = address(this).balance - amount;
            // If that amount was already greater than the funding cap, then we should revert immediately.
            require(
                startAmount < fundingCap,
                "Crowdfund: Funding cap already reached"
            );
            // Otherwise, the contribution helped us reach the funding cap. We should
            // take what we can until the funding cap is reached, and refund the rest.
            uint256 eligibleAmount = fundingCap - startAmount;
            // Otherwise, we process the contribution as if it were the minimal amount.
            _mint(backer, valueToTokens(eligibleAmount));

            if (editionId > 0) {
                emit ContributionForEdition(
                    backer,
                    eligibleAmount,
                    editionId,
                    // Attempt to purchase edition with eligible amount.
                    buyEdition(eligibleAmount, editionId, backer)
                );
            } else {
                emit Contribution(backer, eligibleAmount);
            }
            // Refund the sender with their contribution (e.g. 2.5 minus the diff - e.g. 1.5 = 1 ETH)
            sendValue(backer, amount - eligibleAmount);
        }
    }

    /**
     * @notice Burns the sender's tokens and redeems underlying ETH.
     * @dev Emits the Redeemed event.
     */
    function redeem(uint256 tokenAmount) external nonReentrant {
        // Prevent backers from accidently redeeming when balance is 0.
        require(
            address(this).balance > 0,
            "Crowdfund: No ETH available to redeem"
        );
        // Check
        require(
            balanceOf[msg.sender] >= tokenAmount,
            "Crowdfund: Insufficient balance"
        );
        require(status == Status.TRADING, "Crowdfund: Funding must be trading");
        // Effect
        uint256 redeemable = redeemableFromTokens(tokenAmount);
        _burn(msg.sender, tokenAmount);
        // Safe version of transfer.
        sendValue(payable(msg.sender), redeemable);
        emit Redeemed(msg.sender, redeemable);
    }

    /**
     * @notice Returns the amount of ETH that is redeemable for tokenAmount.
     */
    function redeemableFromTokens(uint256 tokenAmount)
        public
        view
        returns (uint256)
    {
        return (tokenAmount * address(this).balance) / totalSupply;
    }

    function valueToTokens(uint256 value) public pure returns (uint256 tokens) {
        tokens = value * TOKEN_SCALE;
    }

    function tokensToValue(uint256 tokenAmount)
        internal
        pure
        returns (uint256 value)
    {
        value = tokenAmount / TOKEN_SCALE;
    }

    // ============ Operator Methods ============

    /**
     * @notice Transfers all funds to operator, and mints tokens for the operator.
     *  Updates status to TRADING.
     * @dev Emits the FundingClosed event.
     */
    function closeFunding() external onlyOperator nonReentrant {
        require(status == Status.FUNDING, "Crowdfund: Funding must be open");
        // Close funding status, move to tradable.
        status = Status.TRADING;
        // Mint the operator a percent of the total supply.
        uint256 operatorTokens =
            (operatorPercent * totalSupply) / (100 - operatorPercent);
        _mint(operator, operatorTokens);
        // Announce that funding has been closed.
        emit FundingClosed(address(this).balance, operatorTokens);
        // Transfer all funds to the fundingRecipient.
        sendValue(fundingRecipient, address(this).balance);
    }

    // ============ Utility Methods ============

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    // ============ ERC20 Spec ============

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply + value;
        balanceOf[to] = balanceOf[to] + value;
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from] - value;
        totalSupply = totalSupply - value;
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        balanceOf[from] = balanceOf[from] - value;
        balanceOf[to] = balanceOf[to] + value;
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        allowance[from][msg.sender] = allowance[from][msg.sender] - value;
        _transfer(from, to, value);
        return true;
    }

    // ============ Tiered Campaigns ============

    function buyEdition(
        uint256 amount,
        uint256 editionId,
        address recipient
    ) internal returns (uint256) {
        // Check that the sender is paying the correct amount.
        require(
            amount >= ICrowdfundEditions(editions).editionPrice(editionId),
            "Unable purchase edition with available amount"
        );
        // We don't need to transfer the value to the NFT contract here,
        // since that contract trusts this one to check before minting.
        // I.E. this contract has minting privileges.
        return ICrowdfundEditions(editions).buyEdition(editionId, recipient);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Contribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ContributionForEdition","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountRaised","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorAllocation","type":"uint256"}],"name":"FundingClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"ReceivedERC721","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeFunding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"backer","type":"address"},{"internalType":"uint256","name":"editionId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"contribute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"editions","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingRecipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"redeemableFromTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"enum TieredCrowdfundStorage.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"valueToTokens","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"pure","type":"function"}]

Deployed Bytecode

0x6080604052600436106101755760003560e01c80637b4044a0116100cb578063a9059cbb1161007f578063db006a7511610059578063db006a751461040e578063dd62ed3e1461042e578063e3b2594f1461046657600080fd5b8063a9059cbb146103ae578063b8ddbcb3146103ce578063d7dfa0dd146103ee57600080fd5b806395d89b41116100b057806395d89b41146103665780639744b8dc1461037b578063a08f793c1461039b57600080fd5b80637b4044a0146103235780637ecebe001461033957600080fd5b806323b872dd1161012d57806331a3a5061161010757806331a3a506146102bf578063570ca735146102d657806370a08231146102f657600080fd5b806323b872dd146102585780632f87e4be14610278578063313ce5671461029857600080fd5b806318160ddd1161015e57806318160ddd146101d55780631bb534ba146101f9578063200d2ed21461023157600080fd5b806306fdde031461017a578063095ea7b3146101a5575b600080fd5b34801561018657600080fd5b5061018f61047c565b60405161019c919061133d565b60405180910390f35b3480156101b157600080fd5b506101c56101c03660046112b7565b61050a565b604051901515815260200161019c565b3480156101e157600080fd5b506101eb60085481565b60405190815260200161019c565b34801561020557600080fd5b50600154610219906001600160a01b031681565b6040516001600160a01b03909116815260200161019c565b34801561023d57600080fd5b5060065461024b9060ff1681565b60405161019c9190611315565b34801561026457600080fd5b506101c5610273366004611276565b610520565b34801561028457600080fd5b506101eb6102933660046112e3565b610588565b3480156102a457600080fd5b506102ad601281565b60405160ff909116815260200161019c565b3480156102cb57600080fd5b506102d46105a8565b005b3480156102e257600080fd5b50600054610219906001600160a01b031681565b34801561030257600080fd5b506101eb6103113660046111e4565b60096020526000908152604090205481565b34801561032f57600080fd5b506101eb60035481565b34801561034557600080fd5b506101eb6103543660046111e4565b600b6020526000908152604090205481565b34801561037257600080fd5b5061018f610748565b34801561038757600080fd5b506101eb6103963660046112e3565b610755565b6102d46103a9366004611208565b610763565b3480156103ba57600080fd5b506101c56103c93660046112b7565b610ac6565b3480156103da57600080fd5b50600d54610219906001600160a01b031681565b3480156103fa57600080fd5b50600c54610219906001600160a01b031681565b34801561041a57600080fd5b506102d46104293660046112e3565b610ad3565b34801561043a57600080fd5b506101eb61044936600461123d565b600a60209081526000928352604080842090915290825290205481565b34801561047257600080fd5b506101eb60025481565b600580546104899061143e565b80601f01602080910402602001604051908101604052809291908181526020018280546104b59061143e565b80156105025780601f106104d757610100808354040283529160200191610502565b820191906000526020600020905b8154815290600101906020018083116104e557829003601f168201915b505050505081565b6000610517338484610cec565b50600192915050565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205461054f908390611427565b6001600160a01b0385166000908152600a6020908152604080832033845290915290205561057e848484610d4e565b5060019392505050565b60085460009061059847846113ea565b6105a291906113c8565b92915050565b6000546001600160a01b031633146105bf57600080fd5b600260075414156106175760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c00000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600755600060065460ff1660018111156106355761063561148f565b146106825760405162461bcd60e51b815260206004820152601f60248201527f43726f776466756e643a2046756e64696e67206d757374206265206f70656e00604482015260640161060e565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556003546000906106be906064611427565b6008546003546106ce91906113ea565b6106d891906113c8565b6000549091506106f1906001600160a01b031682610df6565b60408051478152602081018390527f352ce94da8e3109dc06c05ed84e8a0aaf9ce2c4329dfd10ad1190cf620048972910160405180910390a1600154610740906001600160a01b031647610e88565b506001600755565b600480546104899061143e565b60006105a26103e8836113ea565b600260075414156107b65760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c000000000000000000000000000000000000604482015260640161060e565b6002600755600060065460ff1660018111156107d4576107d461148f565b146108215760405162461bcd60e51b815260206004820152601f60248201527f43726f776466756e643a2046756e64696e67206d757374206265206f70656e00604482015260640161060e565b3481146108965760405162461bcd60e51b815260206004820152602360248201527f43726f776466756e643a20416d6f756e74206973206e6f742076616c7565207360448201527f656e740000000000000000000000000000000000000000000000000000000000606482015260840161060e565b6002544711610958576108b1836108ac83610755565b610df6565b8115610919577ffb7955a99240dbf0dd35c467144fb9661fbf7a19839f7d8220400c0dc52e70ae8382846108e6858789610fa6565b604080516001600160a01b03909516855260208501939093529183015260608201526080015b60405180910390a1610abc565b604080516001600160a01b0385168152602081018390527f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b910161090c565b60006109648247611427565b905060025481106109dd5760405162461bcd60e51b815260206004820152602660248201527f43726f776466756e643a2046756e64696e672063617020616c7265616479207260448201527f6561636865640000000000000000000000000000000000000000000000000000606482015260840161060e565b6000816002546109ed9190611427565b90506109fc856108ac83610755565b8315610a63577ffb7955a99240dbf0dd35c467144fb9661fbf7a19839f7d8220400c0dc52e70ae858286610a3185898b610fa6565b604080516001600160a01b039095168552602085019390935291830152606082015260800160405180910390a1610aa6565b604080516001600160a01b0387168152602081018390527f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b910160405180910390a15b610ab985610ab48386611427565b610e88565b50505b5050600160075550565b6000610517338484610d4e565b60026007541415610b265760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c000000000000000000000000000000000000604482015260640161060e565b600260075547610b9e5760405162461bcd60e51b815260206004820152602560248201527f43726f776466756e643a204e6f2045544820617661696c61626c6520746f207260448201527f656465656d000000000000000000000000000000000000000000000000000000606482015260840161060e565b33600090815260096020526040902054811115610bfd5760405162461bcd60e51b815260206004820152601f60248201527f43726f776466756e643a20496e73756666696369656e742062616c616e636500604482015260640161060e565b600160065460ff166001811115610c1657610c1661148f565b14610c895760405162461bcd60e51b815260206004820152602260248201527f43726f776466756e643a2046756e64696e67206d75737420626520747261646960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015260840161060e565b6000610c9482610588565b9050610ca03383611158565b610caa3382610e88565b60408051338152602081018390527f4896181ff8f4543cc00db9fe9b6fb7e6f032b7eb772c72ab1ec1b4d2e03b9369910160405180910390a150506001600755565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260096020526040902054610d72908290611427565b6001600160a01b038085166000908152600960205260408082209390935590841681522054610da29082906113b0565b6001600160a01b0380841660008181526009602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d419085815260200190565b80600854610e0491906113b0565b6008556001600160a01b038216600090815260096020526040902054610e2b9082906113b0565b6001600160a01b0383166000818152600960205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e7c9085815260200190565b60405180910390a35050565b80471015610ed85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161060e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f25576040519150601f19603f3d011682016040523d82523d6000602084013e610f2a565b606091505b5050905080610fa15760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161060e565b505050565b600d546040517f38d37b9b000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906338d37b9b9060240160206040518083038186803b15801561100457600080fd5b505afa158015611018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103c91906112fc565b8410156110b15760405162461bcd60e51b815260206004820152602d60248201527f556e61626c652070757263686173652065646974696f6e20776974682061766160448201527f696c61626c6520616d6f756e7400000000000000000000000000000000000000606482015260840161060e565b600d546040517f121e4984000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b0384811660248301529091169063121e498490604401602060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115091906112fc565b949350505050565b6001600160a01b03821660009081526009602052604090205461117c908290611427565b6001600160a01b0383166000908152600960205260409020556008546111a3908290611427565b6008556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e7c565b6000602082840312156111f657600080fd5b8135611201816114a5565b9392505050565b60008060006060848603121561121d57600080fd5b8335611228816114a5565b95602085013595506040909401359392505050565b6000806040838503121561125057600080fd5b823561125b816114a5565b9150602083013561126b816114a5565b809150509250929050565b60008060006060848603121561128b57600080fd5b8335611296816114a5565b925060208401356112a6816114a5565b929592945050506040919091013590565b600080604083850312156112ca57600080fd5b82356112d5816114a5565b946020939093013593505050565b6000602082840312156112f557600080fd5b5035919050565b60006020828403121561130e57600080fd5b5051919050565b602081016002831061133757634e487b7160e01b600052602160045260246000fd5b91905290565b600060208083528351808285015260005b8181101561136a5785810183015185820160400152820161134e565b8181111561137c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082198211156113c3576113c3611479565b500190565b6000826113e557634e487b7160e01b600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561142257611422611479565b500290565b60008282101561143957611439611479565b500390565b600181811c9082168061145257607f821691505b6020821081141561147357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146114ba57600080fd5b5056fea2646970667358221220c4470629a07105104491c9304aee6b1745e449a577a92857a926fb504781182a64736f6c63430008050033

Deployed Bytecode Sourcemap

3299:9510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1124:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11517:150;;;;;;;;;;-1:-1:-1;11517:150:0;;;;;:::i;:::-;;:::i;:::-;;;4128:14:1;;4121:22;4103:41;;4091:2;4076:18;11517:150:0;4058:92:1;1388:26:0;;;;;;;;;;;;;;;;;;;9242:25:1;;;9230:2;9215:18;1388:26:0;9197:76:1;819:39:0;;;;;;;;;;-1:-1:-1;819:39:0;;;;-1:-1:-1;;;;;819:39:0;;;;;;-1:-1:-1;;;;;2584:55:1;;;2566:74;;2554:2;2539:18;819:39:0;2521:125:1;1257:20:0;;;;;;;;;;-1:-1:-1;1257:20:0;;;;;;;;;;;;;;;:::i;11825:264::-;;;;;;;;;;-1:-1:-1;11825:264:0;;;;;:::i;:::-;;:::i;8626:190::-;;;;;;;;;;-1:-1:-1;8626:190:0;;;;;:::i;:::-;;:::i;616:35::-;;;;;;;;;;;;649:2;616:35;;;;;10005:4:1;9993:17;;;9975:36;;9963:2;9948:18;616:35:0;9930:87:1;9363:677:0;;;;;;;;;;;;;:::i;:::-;;781:31;;;;;;;;;;-1:-1:-1;781:31:0;;;;-1:-1:-1;;;;;781:31:0;;;1421:44;;;;;;;;;;-1:-1:-1;1421:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;1060:30;;;;;;;;;;;;;;;;1543:41;;;;;;;;;;-1:-1:-1;1543:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;1097:20;;;;;;;;;;;;;:::i;8824:122::-;;;;;;;;;;-1:-1:-1;8824:122:0;;;;;:::i;:::-;;:::i;5111:2521::-;;;;;;:::i;:::-;;:::i;11675:142::-;;;;;;;;;;-1:-1:-1;11675:142:0;;;;;:::i;:::-;;:::i;1783:23::-;;;;;;;;;;-1:-1:-1;1783:23:0;;;;-1:-1:-1;;;;;1783:23:0;;;1644:20;;;;;;;;;;-1:-1:-1;1644:20:0;;;;-1:-1:-1;;;;;1644:20:0;;;7767:755;;;;;;;;;;-1:-1:-1;7767:755:0;;;;;:::i;:::-;;:::i;1472:64::-;;;;;;;;;;-1:-1:-1;1472:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;945:25;;;;;;;;;;;;;;;;1124:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11517:150::-;11584:4;11601:36;11610:10;11622:7;11631:5;11601:8;:36::i;:::-;-1:-1:-1;11655:4:0;11517:150;;;;:::o;11825:264::-;-1:-1:-1;;;;;11987:15:0;;11940:4;11987:15;;;:9;:15;;;;;;;;12003:10;11987:27;;;;;;;;:35;;12017:5;;11987:35;:::i;:::-;-1:-1:-1;;;;;11957:15:0;;;;;;:9;:15;;;;;;;;11973:10;11957:27;;;;;;;:65;12033:26;11967:4;12049:2;12053:5;12033:9;:26::i;:::-;-1:-1:-1;12077:4:0;11825:264;;;;;:::o;8626:190::-;8797:11;;8725:7;;8758:35;8772:21;8758:11;:35;:::i;:::-;8757:51;;;;:::i;:::-;8750:58;8626:190;-1:-1:-1;;8626:190:0:o;9363:677::-;4337:8;;-1:-1:-1;;;;;4337:8:0;4323:10;:22;4315:31;;;;;;608:1:::1;4489:17;;:39;;4481:66;;;::::0;-1:-1:-1;;;4481:66:0;;8549:2:1;4481:66:0::1;::::0;::::1;8531:21:1::0;8588:2;8568:18;;;8561:30;8627:16;8607:18;;;8600:44;8661:18;;4481:66:0::1;;;;;;;;;608:1;4625:17;:38:::0;9451:14:::2;9441:6;::::0;::::2;;::::0;:24;::::2;;;;;;:::i;:::-;;9433:68;;;::::0;-1:-1:-1;;;9433:68:0;;7368:2:1;9433:68:0::2;::::0;::::2;7350:21:1::0;7407:2;7387:18;;;7380:30;7446:33;7426:18;;;7419:61;7497:18;;9433:68:0::2;7340:181:1::0;9433:68:0::2;9564:6;:23:::0;;;::::2;9573:14;9564:23;::::0;;9738:15:::2;::::0;-1:-1:-1;;9732:21:0::2;::::0;:3:::2;:21;:::i;:::-;9716:11;;9698:15;;:29;;;;:::i;:::-;9697:57;;;;:::i;:::-;9771:8;::::0;9659:95;;-1:-1:-1;9765:31:0::2;::::0;-1:-1:-1;;;;;9771:8:0::2;9659:95:::0;9765:5:::2;:31::i;:::-;9863:52;::::0;;9877:21:::2;9754:25:1::0;;9810:2;9795:18;;9788:34;;;9863:52:0::2;::::0;9727:18:1;9863:52:0::2;;;;;;;9992:16;::::0;9982:50:::2;::::0;-1:-1:-1;;;;;9992:16:0::2;10010:21;9982:9;:50::i;:::-;-1:-1:-1::0;553:1:0::1;4824:17;:42:::0;9363:677::o;1097:20::-;;;;;;;:::i;8824:122::-;8883:14;8919:19;491:4;8919:5;:19;:::i;5111:2521::-;608:1;4489:17;;:39;;4481:66;;;;-1:-1:-1;;;4481:66:0;;8549:2:1;4481:66:0;;;8531:21:1;8588:2;8568:18;;;8561:30;8627:16;8607:18;;;8600:44;8661:18;;4481:66:0;8521:164:1;4481:66:0;608:1;4625:17;:38;5283:14:::1;5273:6;::::0;::::1;;::::0;:24;::::1;;;;;;:::i;:::-;;5265:68;;;::::0;-1:-1:-1;;;5265:68:0;;7368:2:1;5265:68:0::1;::::0;::::1;7350:21:1::0;7407:2;7387:18;;;7380:30;7446:33;7426:18;;;7419:61;7497:18;;5265:68:0::1;7340:181:1::0;5265:68:0::1;5362:9;5352:6;:19;5344:67;;;::::0;-1:-1:-1;;;5344:67:0;;5416:2:1;5344:67:0::1;::::0;::::1;5398:21:1::0;5455:2;5435:18;;;5428:30;5494:34;5474:18;;;5467:62;5565:5;5545:18;;;5538:33;5588:19;;5344:67:0::1;5388:225:1::0;5344:67:0::1;5624:10;;5599:21;:35;5595:2030;;5700:36;5706:6;5714:21;5728:6;5714:13;:21::i;:::-;5700:5;:36::i;:::-;5890:13:::0;;5886:324:::1;;5929:191;5974:6;6003;6032:9;6064:37;6075:6;6083:9;6094:6;6064:10;:37::i;:::-;5929:191;::::0;;-1:-1:-1;;;;;3465:55:1;;;3447:74;;3552:2;3537:18;;3530:34;;;;3580:18;;;3573:34;3638:2;3623:18;;3616:34;3434:3;3419:19;5929:191:0::1;;;;;;;;5595:2030;;5886:324;6166:28;::::0;;-1:-1:-1;;;;;3098:55:1;;3080:74;;3185:2;3170:18;;3163:34;;;6166:28:0::1;::::0;3053:18:1;6166:28:0::1;3035:168:1::0;5595:2030:0::1;6329:19;6351:30;6375:6:::0;6351:21:::1;:30;:::i;:::-;6329:52;;6544:10;;6530:11;:24;6504:124;;;::::0;-1:-1:-1;;;6504:124:0;;7728:2:1;6504:124:0::1;::::0;::::1;7710:21:1::0;7767:2;7747:18;;;7740:30;7806:34;7786:18;;;7779:62;7877:8;7857:18;;;7850:36;7903:19;;6504:124:0::1;7700:228:1::0;6504:124:0::1;6818:22;6856:11;6843:10;;:24;;;;:::i;:::-;6818:49;;6971:44;6977:6;6985:29;6999:14;6985:13;:29::i;6971:44::-;7036:13:::0;;7032:422:::1;;7075:281;7120:6;7149:14;7186:9;7292:45;7303:14;7319:9;7330:6;7292:10;:45::i;:::-;7075:281;::::0;;-1:-1:-1;;;;;3465:55:1;;;3447:74;;3552:2;3537:18;;3530:34;;;;3580:18;;;3573:34;3638:2;3623:18;;3616:34;3434:3;3419:19;7075:281:0::1;;;;;;;7032:422;;;7402:36;::::0;;-1:-1:-1;;;;;3098:55:1;;3080:74;;3185:2;3170:18;;3163:34;;;7402:36:0::1;::::0;3053:18:1;7402:36:0::1;;;;;;;7032:422;7571:42;7581:6:::0;7589:23:::1;7598:14:::0;7589:6;:23:::1;:::i;:::-;7571:9;:42::i;:::-;6227:1398;;5595:2030;-1:-1:-1::0;;553:1:0;4824:17;:42;-1:-1:-1;5111:2521:0:o;11675:142::-;11738:4;11755:32;11765:10;11777:2;11781:5;11755:9;:32::i;7767:755::-;608:1;4489:17;;:39;;4481:66;;;;-1:-1:-1;;;4481:66:0;;8549:2:1;4481:66:0;;;8531:21:1;8588:2;8568:18;;;8561:30;8627:16;8607:18;;;8600:44;8661:18;;4481:66:0;8521:164:1;4481:66:0;608:1;4625:17;:38;7932:21:::1;7910:112;;;::::0;-1:-1:-1;;;7910:112:0;;8892:2:1;7910:112:0::1;::::0;::::1;8874:21:1::0;8931:2;8911:18;;;8904:30;8970:34;8950:18;;;8943:62;9041:7;9021:18;;;9014:35;9066:19;;7910:112:0::1;8864:227:1::0;7910:112:0::1;8083:10;8073:21;::::0;;;:9:::1;:21;::::0;;;;;:36;-1:-1:-1;8073:36:0::1;8051:117;;;::::0;-1:-1:-1;;;8051:117:0;;5820:2:1;8051:117:0::1;::::0;::::1;5802:21:1::0;5859:2;5839:18;;;5832:30;5898:33;5878:18;;;5871:61;5949:18;;8051:117:0::1;5792:181:1::0;8051:117:0::1;8197:14;8187:6;::::0;::::1;;::::0;:24;::::1;;;;;;:::i;:::-;;8179:71;;;::::0;-1:-1:-1;;;8179:71:0;;6180:2:1;8179:71:0::1;::::0;::::1;6162:21:1::0;6219:2;6199:18;;;6192:30;6258:34;6238:18;;;6231:62;6329:4;6309:18;;;6302:32;6351:19;;8179:71:0::1;6152:224:1::0;8179:71:0::1;8280:18;8301:33;8322:11;8301:20;:33::i;:::-;8280:54;;8345:30;8351:10;8363:11;8345:5;:30::i;:::-;8424:42;8442:10;8455;8424:9;:42::i;:::-;8482:32;::::0;;8491:10:::1;3080:74:1::0;;3185:2;3170:18;;3163:34;;;8482:32:0::1;::::0;3053:18:1;8482:32:0::1;;;;;;;-1:-1:-1::0;;553:1:0;4824:17;:42;7767:755::o;11044:206::-;-1:-1:-1;;;;;11162:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;11211:31;;9242:25:1;;;11211:31:0;;9215:18:1;11211:31:0;;;;;;;;11044:206;;;:::o;11258:251::-;-1:-1:-1;;;;;11389:15:0;;;;;;:9;:15;;;;;;:23;;11407:5;;11389:23;:::i;:::-;-1:-1:-1;;;;;11371:15:0;;;;;;;:9;:15;;;;;;:41;;;;11439:13;;;;;;;:21;;11455:5;;11439:21;:::i;:::-;-1:-1:-1;;;;;11423:13:0;;;;;;;:9;:13;;;;;;;:37;;;;11476:25;;;;;;;;;;11495:5;9242:25:1;;9230:2;9215:18;;9197:76;10624:198:0;10714:5;10700:11;;:19;;;;:::i;:::-;10686:11;:33;-1:-1:-1;;;;;10746:13:0;;;;;;:9;:13;;;;;;:21;;10762:5;;10746:21;:::i;:::-;-1:-1:-1;;;;;10730:13:0;;;;;;:9;:13;;;;;;:37;;;;10783:31;;10730:13;;;10783:31;;;;10808:5;9242:25:1;;9230:2;9215:18;;9197:76;10783:31:0;;;;;;;;10624:198;;:::o;10100:469::-;10229:6;10204:21;:31;;10182:110;;;;-1:-1:-1;;;10182:110:0;;7010:2:1;10182:110:0;;;6992:21:1;7049:2;7029:18;;;7022:30;7088:31;7068:18;;;7061:59;7137:18;;10182:110:0;6982:179:1;10182:110:0;10384:12;10402:9;-1:-1:-1;;;;;10402:14:0;10424:6;10402:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10383:52;;;10468:7;10446:115;;;;-1:-1:-1;;;10446:115:0;;6583:2:1;10446:115:0;;;6565:21:1;6622:2;6602:18;;;6595:30;6661:34;6641:18;;;6634:62;6732:28;6712:18;;;6705:56;6778:19;;10446:115:0;6555:248:1;10446:115:0;10171:398;10100:469;;:::o;12150:656::-;12411:8;;12392:52;;;;;;;;9242:25:1;;;12276:7:0;;-1:-1:-1;;;;;12411:8:0;;12392:41;;9215:18:1;;12392:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12382:6;:62;;12360:157;;;;-1:-1:-1;;;12360:157:0;;8135:2:1;12360:157:0;;;8117:21:1;8174:2;8154:18;;;8147:30;8213:34;8193:18;;;8186:62;8284:15;8264:18;;;8257:43;8317:19;;12360:157:0;8107:235:1;12360:157:0;12756:8;;12737:61;;;;;;;;9452:25:1;;;-1:-1:-1;;;;;9513:55:1;;;9493:18;;;9486:83;12756:8:0;;;;12737:39;;9425:18:1;;12737:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12730:68;12150:656;-1:-1:-1;;;;12150:656:0:o;10830:206::-;-1:-1:-1;;;;;10912:15:0;;;;;;:9;:15;;;;;;:23;;10930:5;;10912:23;:::i;:::-;-1:-1:-1;;;;;10894:15:0;;;;;;:9;:15;;;;;:41;10960:11;;:19;;10974:5;;10960:19;:::i;:::-;10946:11;:33;10995;;9242:25:1;;;11018:1:0;;-1:-1:-1;;;;;10995:33:0;;;;;9230:2:1;9215:18;10995:33:0;9197:76:1;14:247;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;84:177;-1:-1:-1;;;84:177:1:o;266:391::-;351:6;359;367;420:2;408:9;399:7;395:23;391:32;388:2;;;436:1;433;426:12;388:2;475:9;462:23;494:31;519:5;494:31;:::i;:::-;544:5;596:2;581:18;;568:32;;-1:-1:-1;647:2:1;632:18;;;619:32;;378:279;-1:-1:-1;;;378:279:1:o;662:388::-;730:6;738;791:2;779:9;770:7;766:23;762:32;759:2;;;807:1;804;797:12;759:2;846:9;833:23;865:31;890:5;865:31;:::i;:::-;915:5;-1:-1:-1;972:2:1;957:18;;944:32;985:33;944:32;985:33;:::i;:::-;1037:7;1027:17;;;749:301;;;;;:::o;1055:456::-;1132:6;1140;1148;1201:2;1189:9;1180:7;1176:23;1172:32;1169:2;;;1217:1;1214;1207:12;1169:2;1256:9;1243:23;1275:31;1300:5;1275:31;:::i;:::-;1325:5;-1:-1:-1;1382:2:1;1367:18;;1354:32;1395:33;1354:32;1395:33;:::i;:::-;1159:352;;1447:7;;-1:-1:-1;;;1501:2:1;1486:18;;;;1473:32;;1159:352::o;1516:315::-;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:2;;;1661:1;1658;1651:12;1613:2;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1603:228:1:o;1836:180::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:2;;;1964:1;1961;1954:12;1916:2;-1:-1:-1;1987:23:1;;1906:110;-1:-1:-1;1906:110:1:o;2021:184::-;2091:6;2144:2;2132:9;2123:7;2119:23;2115:32;2112:2;;;2160:1;2157;2150:12;2112:2;-1:-1:-1;2183:16:1;;2102:103;-1:-1:-1;2102:103:1:o;4155:393::-;4295:2;4280:18;;4328:1;4317:13;;4307:2;;-1:-1:-1;;;4361:1:1;4354:88;4465:4;4462:1;4455:15;4493:4;4490:1;4483:15;4307:2;4517:25;;;4262:286;:::o;4553:656::-;4665:4;4694:2;4723;4712:9;4705:21;4755:6;4749:13;4798:6;4793:2;4782:9;4778:18;4771:34;4823:1;4833:140;4847:6;4844:1;4841:13;4833:140;;;4942:14;;;4938:23;;4932:30;4908:17;;;4927:2;4904:26;4897:66;4862:10;;4833:140;;;4991:6;4988:1;4985:13;4982:2;;;5061:1;5056:2;5047:6;5036:9;5032:22;5028:31;5021:42;4982:2;-1:-1:-1;5125:2:1;5113:15;5130:66;5109:88;5094:104;;;;5200:2;5090:113;;4674:535;-1:-1:-1;;;4674:535:1:o;10022:128::-;10062:3;10093:1;10089:6;10086:1;10083:13;10080:2;;;10099:18;;:::i;:::-;-1:-1:-1;10135:9:1;;10070:80::o;10155:274::-;10195:1;10221;10211:2;;-1:-1:-1;;;10253:1:1;10246:88;10357:4;10354:1;10347:15;10385:4;10382:1;10375:15;10211:2;-1:-1:-1;10414:9:1;;10201:228::o;10434:::-;10474:7;10600:1;10532:66;10528:74;10525:1;10522:81;10517:1;10510:9;10503:17;10499:105;10496:2;;;10607:18;;:::i;:::-;-1:-1:-1;10647:9:1;;10486:176::o;10667:125::-;10707:4;10735:1;10732;10729:8;10726:2;;;10740:18;;:::i;:::-;-1:-1:-1;10777:9:1;;10716:76::o;10797:437::-;10876:1;10872:12;;;;10919;;;10940:2;;10994:4;10986:6;10982:17;10972:27;;10940:2;11047;11039:6;11036:14;11016:18;11013:38;11010:2;;;-1:-1:-1;;;11081:1:1;11074:88;11185:4;11182:1;11175:15;11213:4;11210:1;11203:15;11010:2;;10852:382;;;:::o;11239:184::-;-1:-1:-1;;;11288:1:1;11281:88;11388:4;11385:1;11378:15;11412:4;11409:1;11402:15;11428:184;-1:-1:-1;;;11477:1:1;11470:88;11577:4;11574:1;11567:15;11601:4;11598:1;11591:15;11617:154;-1:-1:-1;;;;;11696:5:1;11692:54;11685:5;11682:65;11672:2;;11761:1;11758;11751:12;11672:2;11662:109;:::o

Swarm Source

ipfs://c4470629a07105104491c9304aee6b1745e449a577a92857a926fb504781182a

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.