ETH Price: $3,158.07 (+6.01%)
 

Overview

ETH Balance

0.24 ETH

Eth Value

$757.94 (@ $3,158.07/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Refund Phase158778072022-11-01 21:17:231112 days ago1667337443IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0024390115.25862112
Lock Phase158776642022-11-01 20:48:231112 days ago1667335703IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0003496511.01541813
Lock Mint Contra...158776622022-11-01 20:47:591112 days ago1667335679IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000381412.19514158
Unpledge158709592022-10-31 22:15:471113 days ago1667254547IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0005838315
Refund Phase158631412022-10-30 20:03:111114 days ago1667160191IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0009711916.81322067
Unpledge158558652022-10-29 19:41:471115 days ago1667072507IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000386889.94013558
Unpledge158552022022-10-29 17:28:351116 days ago1667064515IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0007034418.07332392
Unpledge158545772022-10-29 15:22:351116 days ago1667056955IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000374239.61510563
Unpledge158494322022-10-28 22:05:231116 days ago1666994723IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0009601624.66891578
Unpledge158493442022-10-28 21:47:351116 days ago1666993655IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0010265326.37421844
Unpledge158469782022-10-28 13:52:231117 days ago1666965143IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0005821714.95735838
Unpledge158469182022-10-28 13:40:231117 days ago1666964423IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0006551316.83193211
Unpledge158469062022-10-28 13:37:591117 days ago1666964279IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0007496519.26041865
Unpledge158467502022-10-28 13:06:471117 days ago1666962407IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0005088913.07466139
Unpledge158464782022-10-28 12:12:111117 days ago1666959131IN
0x61e8Fb50...58cdB9bA5
0 ETH0.0004027210.34691774
Unpledge158462172022-10-28 11:19:471117 days ago1666955987IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000374959.63352179
Unpledge158461772022-10-28 11:11:471117 days ago1666955507IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000379569.75199246
Unpledge158459622022-10-28 10:28:471117 days ago1666952927IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000300987.73311851
Unpledge158459622022-10-28 10:28:471117 days ago1666952927IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000308297.92076498
Unpledge158459262022-10-28 10:21:351117 days ago1666952495IN
0x61e8Fb50...58cdB9bA5
0 ETH0.00031328.04691838
Unpledge158455992022-10-28 9:15:591117 days ago1666948559IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000326058.37711493
Unpledge158453232022-10-28 8:20:351117 days ago1666945235IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000338168.68823965
Unpledge158450152022-10-28 7:18:351117 days ago1666941515IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000351169.02238832
Unpledge158449952022-10-28 7:14:351117 days ago1666941275IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000323758.31813448
Unpledge158449932022-10-28 7:14:111117 days ago1666941251IN
0x61e8Fb50...58cdB9bA5
0 ETH0.000335478.61913357
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer158778072022-11-01 21:17:231112 days ago1667337443
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158709592022-10-31 22:15:471113 days ago1667254547
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158631412022-10-30 20:03:111114 days ago1667160191
0x61e8Fb50...58cdB9bA5
0.1 ETH
Transfer158558652022-10-29 19:41:471115 days ago1667072507
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158552022022-10-29 17:28:351116 days ago1667064515
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158545772022-10-29 15:22:351116 days ago1667056955
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158494322022-10-28 22:05:231116 days ago1666994723
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158493442022-10-28 21:47:351116 days ago1666993655
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158469782022-10-28 13:52:231117 days ago1666965143
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158469182022-10-28 13:40:231117 days ago1666964423
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158469062022-10-28 13:37:591117 days ago1666964279
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158467502022-10-28 13:06:471117 days ago1666962407
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158464782022-10-28 12:12:111117 days ago1666959131
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158462172022-10-28 11:19:471117 days ago1666955987
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158461772022-10-28 11:11:471117 days ago1666955507
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158459622022-10-28 10:28:471117 days ago1666952927
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158459622022-10-28 10:28:471117 days ago1666952927
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158459262022-10-28 10:21:351117 days ago1666952495
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158455992022-10-28 9:15:591117 days ago1666948559
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158453232022-10-28 8:20:351117 days ago1666945235
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158450152022-10-28 7:18:351117 days ago1666941515
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158449952022-10-28 7:14:351117 days ago1666941275
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158449932022-10-28 7:14:111117 days ago1666941251
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158449612022-10-28 7:07:471117 days ago1666940867
0x61e8Fb50...58cdB9bA5
0.08 ETH
Transfer158449492022-10-28 7:05:231117 days ago1666940723
0x61e8Fb50...58cdB9bA5
0.08 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PledgeMint

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/// @notice Pledge Mint v1.2 contract by Culture Cubs
// pledgemint.io
//
// For your ERC721 contract to be compatible, follow the following instructions:
// - declare a variable for the pledgemint contract address:
//   address public pledgeContractAddress;
// - add the following function to allow Pledge Mint to mint NFT for your pledgers:
//   function pledgeMint(address to, uint8 quantity) override
//       external
//       payable {
//       require(pledgeContractAddress == msg.sender, "The caller is not PledgeMint");
//       require(totalSupply() + quantity <= maxCollectionSize, "reached max supply");
//       _mint(to, quantity);
//   }
//
//    * Please ensure you test this method before deploying your contract.
//    * PledgeMint will send the funds collected along with the mint call, minus the fee agreed upon.

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./utils/Errors.sol";

interface IERC721Pledge {
    function pledgeMint(address to, uint8 quantity) external payable;
}

contract PledgeMint is Ownable, ReentrancyGuard {
    // Phases allow to have different cohorts of pledgers, with different contracts, prices and limits.
    struct PhaseConfig {
        address admin;
        IERC721Pledge mintContract;
        uint256 mintPrice;
        uint8 maxPerWallet;
        // When locked, the contract on which the mint happens cannot ever be changed again
        bool mintContractLocked;
        // Can only be set to true if mint contract is locked, which is irreversible.
        // Owner of the contract can still trigger refunds - but not access anyone's funds.
        bool pledgesLocked;
        uint16 fee; // int representing the percentage with 2 digits. e.g. 1.75% -> 175
        uint16 cap; // max number of NFTs to sell during this phase
        uint256 startTime;
        uint256 endTime;
    }

    // Mapping from phase Id to array of pledgers
    mapping(uint16 => address[]) public pledgers;
    // Mapping from phase Id to mapping from address to boolean allow value
    mapping(uint16 => mapping(address => bool)) public allowlists;
    // Mapping from phase Id to mapping from address to pladge number
    mapping(uint16 => mapping(address => uint8)) public pledges;

    uint256 public pledgeMintRevenue;

    PhaseConfig[] public phases;

    modifier callerIsUser() {
        if (tx.origin != msg.sender) revert Errors.CallerIsContract();
        _;
    }

    modifier onlyAdminOrOwner(uint16 phaseId) {
        if (owner() != _msgSender() && phases[phaseId].admin != _msgSender())
            revert Errors.CallerIsNotOwner();
        _;
    }

    constructor() {}

    function addPhase(
        address admin,
        IERC721Pledge mintContract,
        uint256 mintPrice,
        uint8 maxPerWallet,
        uint16 fee,
        uint16 cap,
        uint startTime,
        uint endTime
    ) external onlyOwner {
        phases.push(
            PhaseConfig(
                admin,
                mintContract,
                mintPrice,
                maxPerWallet,
                false,
                false,
                fee,
                cap,
                startTime,
                endTime
            )
        );
    }

    function allowAddresses(uint16 phaseId, address[] calldata allowlist_)
        external
        onlyAdminOrOwner(phaseId)
    {
        mapping(address => bool) storage _allowlist = allowlists[phaseId];
        for (uint256 i; i < allowlist_.length; ) {
            _allowlist[allowlist_[i]] = true;

            unchecked {
                ++i;
            }
        }
    }

    function pledge(uint16 phaseId, uint8 number)
        external
        payable
        callerIsUser
    {
        PhaseConfig memory phase = phases[phaseId];
        if (block.timestamp < phase.startTime || phase.endTime > 0 && block.timestamp > phase.endTime) revert Errors.PhaseNotActive();
        (uint256 nbPledged, ) = _nbNFTsPledge(phaseId);
        if (phase.cap > 0 && nbPledged + number > phase.cap) revert Errors.OverPhaseCap();
        if (number > phase.maxPerWallet) revert Errors.NFTAmountNotAllowed();
        if (number < 1) revert Errors.AmountNeedsToBeGreaterThanZero();
        if (msg.value != phase.mintPrice * number)
            revert Errors.AmountMismatch();
        if (pledges[phaseId][msg.sender] != 0) revert Errors.AlreadyPledged();
        pledgers[phaseId].push(msg.sender);
        pledges[phaseId][msg.sender] = number;
    }

    function unpledge(uint16 phaseId) external nonReentrant callerIsUser {
        if (phases[phaseId].pledgesLocked == true)
            revert Errors.PledgesAreLocked();

        uint256 nbPledged = pledges[phaseId][msg.sender];
        if (nbPledged < 1) revert Errors.NothingWasPledged();
        pledges[phaseId][msg.sender] = 0;

        (bool success, ) = msg.sender.call{
            value: phases[phaseId].mintPrice * nbPledged
        }("");

        if (!success) revert Errors.UnableToSendValue();
    }

    function lockPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
        if (phases[phaseId].mintContractLocked == false)
            revert Errors.CannotLockPledgeWithoutLockingMint();
        phases[phaseId].pledgesLocked = true;
    }

    function unlockPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
        phases[phaseId].pledgesLocked = false;
    }

    // mint for all participants
    function mintPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
        address[] memory _addresses = pledgers[phaseId];
        _mintPhase(phaseId, _addresses, 0, _addresses.length, false);
    }

    // mint for all participants
    function mintAllPledgesInPhase(uint16 phaseId)
        external
        onlyAdminOrOwner(phaseId)
    {
        address[] memory _addresses = pledgers[phaseId];
        _mintPhase(phaseId, _addresses, 0, _addresses.length, true);
    }

    // mint for all participants, paginated
    function mintPhase(
        uint16 phaseId,
        uint256 startIdx,
        uint256 length
    ) external onlyAdminOrOwner(phaseId) {
        address[] memory _addresses = pledgers[phaseId];
        _mintPhase(phaseId, _addresses, startIdx, length, false);
    }

    // mint for select participants
    // internal function checks eligibility and pledged number.
    function mintPhase(uint16 phaseId, address[] calldata selectPledgers)
        external
        onlyAdminOrOwner(phaseId)
    {
        _mintPhase(phaseId, selectPledgers, 0, selectPledgers.length, false);
    }

    function _mintPhase(
        uint16 phaseId,
        address[] memory addresses,
        uint256 startIdx,
        uint256 count,
        bool allowAllMints
    ) internal {
        PhaseConfig memory _phase = phases[phaseId];
        if (_phase.mintContractLocked == false)
            revert Errors.CannotLaunchMintWithoutLockingContract();
        mapping(address => uint8) storage _pledges = pledges[phaseId];
        mapping(address => bool) storage _allowlist = allowlists[phaseId];
        uint256 phaseRevenue;
        for (uint256 i = startIdx; i < count; ) {
            address addy = addresses[i];
            uint8 quantity = _pledges[addy];

            // Any address not allowed will have to withdraw their pledge manually. We skip them here.
            if ((allowAllMints || _allowlist[addy]) && quantity > 0) {
                _pledges[addy] = 0;
                uint256 totalCost = _phase.mintPrice * quantity;
                uint256 pmRevenue = (totalCost * _phase.fee) / 10000;
                phaseRevenue += pmRevenue;
                _phase.mintContract.pledgeMint{value: totalCost - pmRevenue}(
                    addy,
                    quantity
                );
            }

            unchecked {
                ++i;
            }
        }
        pledgeMintRevenue += phaseRevenue;
    }

    // These stats may decrease in case of refund or mint. They are not itended to archive states.
    function currentPhaseStats(uint16 phaseId)
        public
        view
        returns (
            uint256 nbPledges,
            uint256 nbNFTsPledged,
            uint256 amountPledged,
            uint256 nbAllowedPledges,
            uint256 nbNAllowedFTsPledged,
            uint256 allowedAmountPledged
        )
    {
        PhaseConfig memory _phase = phases[phaseId];
        mapping(address => uint8) storage _pledges = pledges[phaseId];
        mapping(address => bool) storage _allowlist = allowlists[phaseId];
        address[] storage _pledgers = pledgers[phaseId];
        for (uint256 i; i < _pledgers.length; ) {
            address addy = _pledgers[i];
            uint8 quantity = _pledges[addy];
            if (quantity > 0) {
                nbPledges += 1;
                nbNFTsPledged += quantity;
                amountPledged += quantity * _phase.mintPrice;
                if (_allowlist[addy]) {
                    nbAllowedPledges += 1;
                    nbNAllowedFTsPledged += quantity;
                    allowedAmountPledged += quantity * _phase.mintPrice;
                }
            }

            unchecked {
                ++i;
            }
        }
    }

    function refundPhase(uint16 phaseId)
        external
        onlyAdminOrOwner(phaseId)
        nonReentrant
    {
        _refundPhase(phaseId);
    }

    function refundAll() external onlyOwner nonReentrant {
        for (uint8 i; i < phases.length; ) {
            _refundPhase(i);

            unchecked {
                ++i;
            }
        }
    }

    function refundPhasePledger(uint16 phaseId, address pledger)
        external
        onlyAdminOrOwner(phaseId)
        nonReentrant
    {
        uint256 amount = pledges[phaseId][pledger] * phases[phaseId].mintPrice;
        pledges[phaseId][pledger] = 0;
        (bool success, ) = pledger.call{value: amount}("");
        if (!success) revert Errors.UnableToSendValue();
    }

    function _refundPhase(uint16 phaseId) internal {
        PhaseConfig memory _phase = phases[phaseId];
        address[] storage _addresses = pledgers[phaseId];
        for (uint8 i; i < _addresses.length; ) {
            address addy = _addresses[i];
            uint8 quantity = pledges[phaseId][addy];
            if (quantity > 0) {
                pledges[phaseId][addy] = 0;
                (bool success, ) = addy.call{
                    value: _phase.mintPrice * quantity
                }("");
                if (!success) revert Errors.UnableToSendValue();
            }

            unchecked {
                ++i;
            }
        }
    }

    function _nbNFTsPledge(uint16 phaseId)
        internal
        view
        returns (
            uint256 nbNFTsPledged,
            uint256 nbNAllowedFTsPledged
        )
    {
        mapping(address => uint8) storage _pledges = pledges[phaseId];
        mapping(address => bool) storage _allowlist = allowlists[phaseId];
        address[] storage _pledgers = pledgers[phaseId];
        for (uint256 i; i < _pledgers.length; ) {
            address addy = _pledgers[i];
            uint8 quantity = _pledges[addy];
            if (quantity > 0) {
                nbNFTsPledged += quantity;
                if (_allowlist[addy]) {
                    nbNAllowedFTsPledged += quantity;
                }
            }

            unchecked {
                ++i;
            }
        }
    }

    function emergencyRefund(
        uint16 phaseId,
        uint256 startIdx,
        uint256 count
    ) external onlyOwner {
        PhaseConfig memory _phase = phases[phaseId];
        for (uint256 i = startIdx; i < count; ) {
            address addy = pledgers[phaseId][i];
            uint8 quantity = pledges[phaseId][addy];

            (bool success, ) = addy.call{value: _phase.mintPrice * quantity}(
                ""
            );
            if (!success) revert Errors.UnableToSendValue();

            unchecked {
                ++i;
            }
        }
    }

    function setMintContract(uint16 phaseId, IERC721Pledge mintContract_)
        external
        onlyAdminOrOwner(phaseId)
    {
        if(phases[phaseId].mintContractLocked == true) revert Errors.ContractCannotBeChanged();
        phases[phaseId].mintContract = mintContract_;
    }

    function setFee(uint16 phaseId, uint16 fee)
        external
        onlyOwner
    {
        phases[phaseId].fee = fee;
    }

    function setStartTime(uint16 phaseId, uint256 startTime)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].startTime = startTime;   
    }

    function setEndTime(uint16 phaseId, uint256 endTime)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].endTime = endTime;   
    }

    function setPrice(uint16 phaseId, uint256 price)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].mintPrice = price;   
    }

    function setCap(uint16 phaseId, uint16 cap)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].cap = cap;   
    }

    function setMaxPerWallet(uint16 phaseId, uint8 maxPerWallet)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].maxPerWallet = maxPerWallet;   
    }

    // there is no unlock function. Once this is locked, funds pledged can only be used to mint on this contract, or refunded.
    function lockMintContract(uint16 phaseId)
        external
        onlyAdminOrOwner(phaseId)
    {
        phases[phaseId].mintContractLocked = true;
    }

    function withdrawRevenue() 
        external
        onlyOwner
    {
        (bool success, ) = msg.sender.call{value: pledgeMintRevenue}("");
        require(success, "Transfer failed.");
        pledgeMintRevenue = 0;
    }
}

File 2 of 5 : Errors.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.4;

library Errors {
    // PledgeMint.sol
    error CallerIsContract();
    error CallerIsNotOwner();
    error NFTAmountNotAllowed();
    error PhaseNotActive();
    error OverPhaseCap();
    error AmountNeedsToBeGreaterThanZero();
    error AmountMismatch();
    error AlreadyPledged();
    error PledgesAreLocked();
    error NothingWasPledged();
    error UnableToSendValue();
    error CannotLockPledgeWithoutLockingMint();
    error CannotLaunchMintWithoutLockingContract();
    error ContractCannotBeChanged();
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 5 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyPledged","type":"error"},{"inputs":[],"name":"AmountMismatch","type":"error"},{"inputs":[],"name":"AmountNeedsToBeGreaterThanZero","type":"error"},{"inputs":[],"name":"CallerIsContract","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"CannotLaunchMintWithoutLockingContract","type":"error"},{"inputs":[],"name":"CannotLockPledgeWithoutLockingMint","type":"error"},{"inputs":[],"name":"ContractCannotBeChanged","type":"error"},{"inputs":[],"name":"NFTAmountNotAllowed","type":"error"},{"inputs":[],"name":"NothingWasPledged","type":"error"},{"inputs":[],"name":"OverPhaseCap","type":"error"},{"inputs":[],"name":"PhaseNotActive","type":"error"},{"inputs":[],"name":"PledgesAreLocked","type":"error"},{"inputs":[],"name":"UnableToSendValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"contract IERC721Pledge","name":"mintContract","type":"address"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"addPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address[]","name":"allowlist_","type":"address[]"}],"name":"allowAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"address","name":"","type":"address"}],"name":"allowlists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"currentPhaseStats","outputs":[{"internalType":"uint256","name":"nbPledges","type":"uint256"},{"internalType":"uint256","name":"nbNFTsPledged","type":"uint256"},{"internalType":"uint256","name":"amountPledged","type":"uint256"},{"internalType":"uint256","name":"nbAllowedPledges","type":"uint256"},{"internalType":"uint256","name":"nbNAllowedFTsPledged","type":"uint256"},{"internalType":"uint256","name":"allowedAmountPledged","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startIdx","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"emergencyRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"lockMintContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"lockPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"mintAllPledgesInPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startIdx","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address[]","name":"selectPledgers","type":"address[]"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phases","outputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"contract IERC721Pledge","name":"mintContract","type":"address"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"},{"internalType":"bool","name":"mintContractLocked","type":"bool"},{"internalType":"bool","name":"pledgesLocked","type":"bool"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint8","name":"number","type":"uint8"}],"name":"pledge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pledgeMintRevenue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pledgers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"address","name":"","type":"address"}],"name":"pledges","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"refundPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address","name":"pledger","type":"address"}],"name":"refundPhasePledger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"contract IERC721Pledge","name":"mintContract_","type":"address"}],"name":"setMintContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"unlockPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"unpledge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRevenue","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5062000032620000266200003f60201b60201c565b6200004760201b60201c565b600180819055506200010b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614e0d806200011b6000396000f3fe6080604052600436106101e35760003560e01c806399b64de111610102578063d4342d3811610095578063dfbf9f1d11610064578063dfbf9f1d14610697578063f2fde38b146106c0578063f746923d146106e9578063ffb9a1b514610712576101e3565b8063d4342d38146105b2578063d4c099c2146105ef578063d563e72514610631578063dcfa832c1461065a576101e3565b8063ae5220f9116100d1578063ae5220f91461050c578063bbc2986c14610535578063cb26d9421461055e578063d1a0e7a214610587576101e3565b806399b64de1146104685780639ac95dee14610491578063a6d25102146104ba578063a7bfd041146104e3576101e3565b8063531c509a1161017a57806383c56b0e1161014957806383c56b0e146103c2578063852c6413146103eb5780638da5cb5b1461041457806390911e371461043f576101e3565b8063531c509a1461033057806359b35cc514610359578063715018a6146103825780637767faed14610399576101e3565b80632e37eef6116101b65780632e37eef61461027f57806338e771ab146102c55780633cdf3d23146102dc5780634f573cb214610319576101e3565b80630165f612146101e857806310e11bb41461021157806320f9453e1461023a5780632e16225d14610256575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190614356565b61073b565b005b34801561021d57600080fd5b506102386004803603810190610233919061447e565b6108f2565b005b610254600480360381019061024f9190614534565b610b7d565b005b34801561026257600080fd5b5061027d60048036038101906102789190614574565b6110a8565b005b34801561028b57600080fd5b506102a660048036038101906102a191906145a1565b61125f565b6040516102bc9a99989796959493929190614684565b60405180910390f35b3480156102d157600080fd5b506102da611346565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190614720565b611443565b6040516103109190614760565b60405180910390f35b34801561032557600080fd5b5061032e611472565b005b34801561033c57600080fd5b50610357600480360381019061035291906147e0565b6115a7565b005b34801561036557600080fd5b50610380600480360381019061037b9190614574565b611763565b005b34801561038e57600080fd5b506103976118a7565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190614534565b61192f565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614356565b611a74565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614840565b611e21565b005b34801561042057600080fd5b50610429611f52565b6040516104369190614880565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614574565b611f7b565b005b34801561047457600080fd5b5061048f600480360381019061048a919061489b565b612133565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614574565b6121f7565b005b3480156104c657600080fd5b506104e160048036038101906104dc91906147e0565b61251a565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614840565b612671565b005b34801561051857600080fd5b50610533600480360381019061052e9190614720565b6127a2565b005b34801561054157600080fd5b5061055c60048036038101906105579190614840565b612ab1565b005b34801561056a57600080fd5b5061058560048036038101906105809190614574565b612be2565b005b34801561059357600080fd5b5061059c612d41565b6040516105a991906148db565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614840565b612d47565b6040516105e69190614880565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190614574565b612d95565b604051610628969594939291906148f6565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614574565b613129565b005b34801561066657600080fd5b50610681600480360381019061067c9190614720565b61326d565b60405161068e9190614957565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614972565b61329c565b005b3480156106cc57600080fd5b506106e760048036038101906106e291906149b2565b61347b565b005b3480156106f557600080fd5b50610710600480360381019061070b919061489b565b613572565b005b34801561071e57600080fd5b5061073960048036038101906107349190614574565b6136b9565b005b82610744613870565b73ffffffffffffffffffffffffffffffffffffffff16610762611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156108025750610789613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107b7576107b66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610839576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108d657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088c575b505050505090506108eb858286866000613878565b5050505050565b6108fa613870565b73ffffffffffffffffffffffffffffffffffffffff16610918611f52565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590614a6b565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110610bfc57610bfb6149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610d9d57506000816101200151118015610d9c575080610120015142115b5b15610dd4576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ddf84613cc5565b50905060008260e0015161ffff16118015610e0f57508160e0015161ffff168360ff1682610e0d9190614aba565b115b15610e46576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610e8a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610ec8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610edb9190614b10565b3414610f13576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610fb5576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b806110b1613870565b73ffffffffffffffffffffffffffffffffffffffff166110cf611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561116f57506110f6613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611124576111236149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156111a6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111f9575b5050505050905061125a8382600084516001613878565b505050565b6006818154811061126f57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b61134e613870565b73ffffffffffffffffffffffffffffffffffffffff1661136c611f52565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614a6b565b60405180910390fd5b600260015403611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614bb6565b60405180910390fd5b600260018190555060005b6006805490508160ff1610156114395761142e8160ff16613e5d565b806001019050611412565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61147a613870565b73ffffffffffffffffffffffffffffffffffffffff16611498611f52565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a6b565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1660055460405161151690614c07565b60006040518083038185875af1925050503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b505090508061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614c68565b60405180910390fd5b600060058190555050565b826115b0613870565b73ffffffffffffffffffffffffffffffffffffffff166115ce611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561166e57506115f5613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611623576116226149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116a5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b8484905081101561175b5760018260008787858181106116ea576116e96149df565b5b90506020020160208101906116ff91906149b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506116c7565b505050505050565b8061176c613870565b73ffffffffffffffffffffffffffffffffffffffff1661178a611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561182a57506117b1613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106117df576117de6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611861576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061187b5761187a6149df565b5b906000526020600020906006020160030160016101000a81548160ff0219169083151502179055505050565b6118af613870565b73ffffffffffffffffffffffffffffffffffffffff166118cd611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614a6b565b60405180910390fd5b61192d6000614218565b565b81611938613870565b73ffffffffffffffffffffffffffffffffffffffff16611956611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156119f6575061197d613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106119ab576119aa6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611a4657611a456149df565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611a7c613870565b73ffffffffffffffffffffffffffffffffffffffff16611a9a611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790614a6b565b60405180910390fd5b600060068461ffff1681548110611b0a57611b096149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015611e1a576000600260008761ffff1661ffff1681526020019081526020016000208281548110611cc057611cbf6149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff168660400151611d839190614b10565b604051611d8f90614c07565b60006040518083038185875af1925050503d8060008114611dcc576040519150601f19603f3d011682016040523d82523d6000602084013e611dd1565b606091505b5050905080611e0c576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001019350505050611c89565b5050505050565b81611e2a613870565b73ffffffffffffffffffffffffffffffffffffffff16611e48611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015611ee85750611e6f613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611e9d57611e9c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f1f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f3857611f376149df565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80611f84613870565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156120425750611fc9613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611ff757611ff66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612079576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff1681548110612095576120946149df565b5b906000526020600020906006020160030160019054906101000a900460ff161515036120ed576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff1681548110612107576121066149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b61213b613870565b73ffffffffffffffffffffffffffffffffffffffff16612159611f52565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a6b565b60405180910390fd5b8060068361ffff16815481106121c8576121c76149df565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b60026001540361223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614bb6565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106122c5576122c46149df565b5b906000526020600020906006020160030160029054906101000a900460ff1615150361231d576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156123c5576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff1681548110612469576124686149df565b5b9060005260206000209060060201600201546124859190614b10565b60405161249190614c07565b60006040518083038185875af1925050503d80600081146124ce576040519150601f19603f3d011682016040523d82523d6000602084013e6124d3565b606091505b505090508061250e576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612523613870565b73ffffffffffffffffffffffffffffffffffffffff16612541611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156125e15750612568613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612596576125956149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612618576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61266b84848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613878565b50505050565b8161267a613870565b73ffffffffffffffffffffffffffffffffffffffff16612698611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561273857506126bf613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106126ed576126ec6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561276f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612788576127876149df565b5b906000526020600020906006020160050181905550505050565b816127ab613870565b73ffffffffffffffffffffffffffffffffffffffff166127c9611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561286957506127f0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061281e5761281d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600154036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90614bb6565b60405180910390fd5b6002600181905550600060068461ffff1681548110612907576129066149df565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661298c9190614b10565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612a2690614c07565b60006040518083038185875af1925050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905080612aa3576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612aba613870565b73ffffffffffffffffffffffffffffffffffffffff16612ad8611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612aff613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612b2d57612b2c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612baf576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612bc857612bc76149df565b5b906000526020600020906006020160020181905550505050565b80612beb613870565b73ffffffffffffffffffffffffffffffffffffffff16612c09611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ca95750612c30613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612c5e57612c5d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612ce0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614bb6565b60405180910390fd5b6002600181905550612d3682613e5d565b600180819055505050565b60055481565b60026020528160005260406000208181548110612d6357600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff1681548110612db857612db76149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b818054905081101561311b576000828281548110612fb257612fb16149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff16111561310e5760018d6130489190614aba565b9c508060ff168c6130599190614aba565b9b5086604001518160ff1661306e9190614b10565b8b6130799190614aba565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310d5760018a6130d99190614aba565b99508060ff16896130ea9190614aba565b985086604001518160ff166130ff9190614b10565b8861310a9190614aba565b97505b5b8260010192505050612f91565b505050505091939550919395565b80613132613870565b73ffffffffffffffffffffffffffffffffffffffff16613150611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156131f05750613177613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106131a5576131a46149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613227576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110613241576132406149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816132a5613870565b73ffffffffffffffffffffffffffffffffffffffff166132c3611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561336357506132ea613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613318576133176149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561339a576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068461ffff16815481106133b6576133b56149df565b5b906000526020600020906006020160030160019054906101000a900460ff1615150361340e576040517f9166806f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613427576134266149df565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613483613870565b73ffffffffffffffffffffffffffffffffffffffff166134a1611f52565b73ffffffffffffffffffffffffffffffffffffffff16146134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee90614a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614cfa565b60405180910390fd5b61356f81614218565b50565b8161357b613870565b73ffffffffffffffffffffffffffffffffffffffff16613599611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561363957506135c0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106135ee576135ed6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613670576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613689576136886149df565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b806136c2613870565b73ffffffffffffffffffffffffffffffffffffffff166136e0611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156137805750613707613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613735576137346149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156137b7576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561385457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161380a575b5050505050905061386b8382600084516000613878565b505050565b600033905090565b600060068661ffff1681548110613892576138916149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613a4d576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015613ca0576000898281518110613aaf57613aae6149df565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613b5d57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b6c575060008160ff16115b15613c935760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff168860400151613bde9190614b10565b905060006127108960c0015161ffff1683613bf99190614b10565b613c039190614d49565b90508086613c119190614aba565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f8284613c3f9190614d7a565b86866040518463ffffffff1660e01b8152600401613c5e929190614dae565b6000604051808303818588803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050505050505b8260010192505050613a92565b508060056000828254613cb39190614aba565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b8180549050811015613e54576000828281548110613d4957613d486149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115613e47578060ff1688613de19190614aba565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e46578060ff1687613e439190614aba565b96505b5b8260010192505050613d28565b50505050915091565b600060068261ffff1681548110613e7757613e766149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff161015614212576000828260ff1681548110614039576140386149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614205576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161417a9190614b10565b60405161418690614c07565b60006040518083038185875af1925050503d80600081146141c3576040519150601f19603f3d011682016040523d82523d6000602084013e6141c8565b606091505b5050905080614203576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8260010192505050614012565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b6142fd816142e6565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b6000819050919050565b61433381614320565b811461433e57600080fd5b50565b6000813590506143508161432a565b92915050565b60008060006060848603121561436f5761436e6142dc565b5b600061437d8682870161430b565b935050602061438e86828701614341565b925050604061439f86828701614341565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b6000614412826143c9565b9050919050565b61442281614407565b811461442d57600080fd5b50565b60008135905061443f81614419565b92915050565b600060ff82169050919050565b61445b81614445565b811461446657600080fd5b50565b60008135905061447881614452565b92915050565b600080600080600080600080610100898b03121561449f5761449e6142dc565b5b60006144ad8b828c016143f2565b98505060206144be8b828c01614430565b97505060406144cf8b828c01614341565b96505060606144e08b828c01614469565b95505060806144f18b828c0161430b565b94505060a06145028b828c0161430b565b93505060c06145138b828c01614341565b92505060e06145248b828c01614341565b9150509295985092959890939650565b6000806040838503121561454b5761454a6142dc565b5b60006145598582860161430b565b925050602061456a85828601614469565b9150509250929050565b60006020828403121561458a576145896142dc565b5b60006145988482850161430b565b91505092915050565b6000602082840312156145b7576145b66142dc565b5b60006145c584828501614341565b91505092915050565b6145d7816143c9565b82525050565b6000819050919050565b60006146026145fd6145f8846143a9565b6145dd565b6143a9565b9050919050565b6000614614826145e7565b9050919050565b600061462682614609565b9050919050565b6146368161461b565b82525050565b61464581614320565b82525050565b61465481614445565b82525050565b60008115159050919050565b61466f8161465a565b82525050565b61467e816142e6565b82525050565b60006101408201905061469a600083018d6145ce565b6146a7602083018c61462d565b6146b4604083018b61463c565b6146c1606083018a61464b565b6146ce6080830189614666565b6146db60a0830188614666565b6146e860c0830187614675565b6146f560e0830186614675565b61470361010083018561463c565b61471161012083018461463c565b9b9a5050505050505050505050565b60008060408385031215614737576147366142dc565b5b60006147458582860161430b565b9250506020614756858286016143f2565b9150509250929050565b60006020820190506147756000830184614666565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a05761479f61477b565b5b8235905067ffffffffffffffff8111156147bd576147bc614780565b5b6020830191508360208202830111156147d9576147d8614785565b5b9250929050565b6000806000604084860312156147f9576147f86142dc565b5b60006148078682870161430b565b935050602084013567ffffffffffffffff811115614828576148276142e1565b5b6148348682870161478a565b92509250509250925092565b60008060408385031215614857576148566142dc565b5b60006148658582860161430b565b925050602061487685828601614341565b9150509250929050565b600060208201905061489560008301846145ce565b92915050565b600080604083850312156148b2576148b16142dc565b5b60006148c08582860161430b565b92505060206148d18582860161430b565b9150509250929050565b60006020820190506148f0600083018461463c565b92915050565b600060c08201905061490b600083018961463c565b614918602083018861463c565b614925604083018761463c565b614932606083018661463c565b61493f608083018561463c565b61494c60a083018461463c565b979650505050505050565b600060208201905061496c600083018461464b565b92915050565b60008060408385031215614989576149886142dc565b5b60006149978582860161430b565b92505060206149a885828601614430565b9150509250929050565b6000602082840312156149c8576149c76142dc565b5b60006149d6848285016143f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a55602083614a0e565b9150614a6082614a1f565b602082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac582614320565b9150614ad083614320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0557614b04614a8b565b5b828201905092915050565b6000614b1b82614320565b9150614b2683614320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5f57614b5e614a8b565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ba0601f83614a0e565b9150614bab82614b6a565b602082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b600081905092915050565b50565b6000614bf1600083614bd6565b9150614bfc82614be1565b600082019050919050565b6000614c1282614be4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614c52601083614a0e565b9150614c5d82614c1c565b602082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce4602683614a0e565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d5482614320565b9150614d5f83614320565b925082614d6f57614d6e614d1a565b5b828204905092915050565b6000614d8582614320565b9150614d9083614320565b925082821015614da357614da2614a8b565b5b828203905092915050565b6000604082019050614dc360008301856145ce565b614dd0602083018461464b565b939250505056fea2646970667358221220e505a8d96670044e05e0c5c0993741791d309372f19dbb356819e5e6dcb3d74064736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c806399b64de111610102578063d4342d3811610095578063dfbf9f1d11610064578063dfbf9f1d14610697578063f2fde38b146106c0578063f746923d146106e9578063ffb9a1b514610712576101e3565b8063d4342d38146105b2578063d4c099c2146105ef578063d563e72514610631578063dcfa832c1461065a576101e3565b8063ae5220f9116100d1578063ae5220f91461050c578063bbc2986c14610535578063cb26d9421461055e578063d1a0e7a214610587576101e3565b806399b64de1146104685780639ac95dee14610491578063a6d25102146104ba578063a7bfd041146104e3576101e3565b8063531c509a1161017a57806383c56b0e1161014957806383c56b0e146103c2578063852c6413146103eb5780638da5cb5b1461041457806390911e371461043f576101e3565b8063531c509a1461033057806359b35cc514610359578063715018a6146103825780637767faed14610399576101e3565b80632e37eef6116101b65780632e37eef61461027f57806338e771ab146102c55780633cdf3d23146102dc5780634f573cb214610319576101e3565b80630165f612146101e857806310e11bb41461021157806320f9453e1461023a5780632e16225d14610256575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190614356565b61073b565b005b34801561021d57600080fd5b506102386004803603810190610233919061447e565b6108f2565b005b610254600480360381019061024f9190614534565b610b7d565b005b34801561026257600080fd5b5061027d60048036038101906102789190614574565b6110a8565b005b34801561028b57600080fd5b506102a660048036038101906102a191906145a1565b61125f565b6040516102bc9a99989796959493929190614684565b60405180910390f35b3480156102d157600080fd5b506102da611346565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190614720565b611443565b6040516103109190614760565b60405180910390f35b34801561032557600080fd5b5061032e611472565b005b34801561033c57600080fd5b50610357600480360381019061035291906147e0565b6115a7565b005b34801561036557600080fd5b50610380600480360381019061037b9190614574565b611763565b005b34801561038e57600080fd5b506103976118a7565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190614534565b61192f565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614356565b611a74565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614840565b611e21565b005b34801561042057600080fd5b50610429611f52565b6040516104369190614880565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614574565b611f7b565b005b34801561047457600080fd5b5061048f600480360381019061048a919061489b565b612133565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614574565b6121f7565b005b3480156104c657600080fd5b506104e160048036038101906104dc91906147e0565b61251a565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614840565b612671565b005b34801561051857600080fd5b50610533600480360381019061052e9190614720565b6127a2565b005b34801561054157600080fd5b5061055c60048036038101906105579190614840565b612ab1565b005b34801561056a57600080fd5b5061058560048036038101906105809190614574565b612be2565b005b34801561059357600080fd5b5061059c612d41565b6040516105a991906148db565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614840565b612d47565b6040516105e69190614880565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190614574565b612d95565b604051610628969594939291906148f6565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614574565b613129565b005b34801561066657600080fd5b50610681600480360381019061067c9190614720565b61326d565b60405161068e9190614957565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614972565b61329c565b005b3480156106cc57600080fd5b506106e760048036038101906106e291906149b2565b61347b565b005b3480156106f557600080fd5b50610710600480360381019061070b919061489b565b613572565b005b34801561071e57600080fd5b5061073960048036038101906107349190614574565b6136b9565b005b82610744613870565b73ffffffffffffffffffffffffffffffffffffffff16610762611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156108025750610789613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107b7576107b66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610839576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108d657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088c575b505050505090506108eb858286866000613878565b5050505050565b6108fa613870565b73ffffffffffffffffffffffffffffffffffffffff16610918611f52565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590614a6b565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110610bfc57610bfb6149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610d9d57506000816101200151118015610d9c575080610120015142115b5b15610dd4576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ddf84613cc5565b50905060008260e0015161ffff16118015610e0f57508160e0015161ffff168360ff1682610e0d9190614aba565b115b15610e46576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610e8a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610ec8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610edb9190614b10565b3414610f13576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610fb5576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b806110b1613870565b73ffffffffffffffffffffffffffffffffffffffff166110cf611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561116f57506110f6613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611124576111236149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156111a6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111f9575b5050505050905061125a8382600084516001613878565b505050565b6006818154811061126f57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b61134e613870565b73ffffffffffffffffffffffffffffffffffffffff1661136c611f52565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614a6b565b60405180910390fd5b600260015403611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614bb6565b60405180910390fd5b600260018190555060005b6006805490508160ff1610156114395761142e8160ff16613e5d565b806001019050611412565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61147a613870565b73ffffffffffffffffffffffffffffffffffffffff16611498611f52565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a6b565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1660055460405161151690614c07565b60006040518083038185875af1925050503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b505090508061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614c68565b60405180910390fd5b600060058190555050565b826115b0613870565b73ffffffffffffffffffffffffffffffffffffffff166115ce611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561166e57506115f5613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611623576116226149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116a5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b8484905081101561175b5760018260008787858181106116ea576116e96149df565b5b90506020020160208101906116ff91906149b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506116c7565b505050505050565b8061176c613870565b73ffffffffffffffffffffffffffffffffffffffff1661178a611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561182a57506117b1613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106117df576117de6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611861576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061187b5761187a6149df565b5b906000526020600020906006020160030160016101000a81548160ff0219169083151502179055505050565b6118af613870565b73ffffffffffffffffffffffffffffffffffffffff166118cd611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614a6b565b60405180910390fd5b61192d6000614218565b565b81611938613870565b73ffffffffffffffffffffffffffffffffffffffff16611956611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156119f6575061197d613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106119ab576119aa6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611a4657611a456149df565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611a7c613870565b73ffffffffffffffffffffffffffffffffffffffff16611a9a611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790614a6b565b60405180910390fd5b600060068461ffff1681548110611b0a57611b096149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015611e1a576000600260008761ffff1661ffff1681526020019081526020016000208281548110611cc057611cbf6149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff168660400151611d839190614b10565b604051611d8f90614c07565b60006040518083038185875af1925050503d8060008114611dcc576040519150601f19603f3d011682016040523d82523d6000602084013e611dd1565b606091505b5050905080611e0c576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001019350505050611c89565b5050505050565b81611e2a613870565b73ffffffffffffffffffffffffffffffffffffffff16611e48611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015611ee85750611e6f613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611e9d57611e9c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f1f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f3857611f376149df565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80611f84613870565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156120425750611fc9613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611ff757611ff66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612079576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff1681548110612095576120946149df565b5b906000526020600020906006020160030160019054906101000a900460ff161515036120ed576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff1681548110612107576121066149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b61213b613870565b73ffffffffffffffffffffffffffffffffffffffff16612159611f52565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a6b565b60405180910390fd5b8060068361ffff16815481106121c8576121c76149df565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b60026001540361223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614bb6565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106122c5576122c46149df565b5b906000526020600020906006020160030160029054906101000a900460ff1615150361231d576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156123c5576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff1681548110612469576124686149df565b5b9060005260206000209060060201600201546124859190614b10565b60405161249190614c07565b60006040518083038185875af1925050503d80600081146124ce576040519150601f19603f3d011682016040523d82523d6000602084013e6124d3565b606091505b505090508061250e576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612523613870565b73ffffffffffffffffffffffffffffffffffffffff16612541611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156125e15750612568613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612596576125956149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612618576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61266b84848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613878565b50505050565b8161267a613870565b73ffffffffffffffffffffffffffffffffffffffff16612698611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561273857506126bf613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106126ed576126ec6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561276f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612788576127876149df565b5b906000526020600020906006020160050181905550505050565b816127ab613870565b73ffffffffffffffffffffffffffffffffffffffff166127c9611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561286957506127f0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061281e5761281d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600154036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90614bb6565b60405180910390fd5b6002600181905550600060068461ffff1681548110612907576129066149df565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661298c9190614b10565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612a2690614c07565b60006040518083038185875af1925050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905080612aa3576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612aba613870565b73ffffffffffffffffffffffffffffffffffffffff16612ad8611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612aff613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612b2d57612b2c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612baf576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612bc857612bc76149df565b5b906000526020600020906006020160020181905550505050565b80612beb613870565b73ffffffffffffffffffffffffffffffffffffffff16612c09611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ca95750612c30613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612c5e57612c5d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612ce0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614bb6565b60405180910390fd5b6002600181905550612d3682613e5d565b600180819055505050565b60055481565b60026020528160005260406000208181548110612d6357600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff1681548110612db857612db76149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b818054905081101561311b576000828281548110612fb257612fb16149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff16111561310e5760018d6130489190614aba565b9c508060ff168c6130599190614aba565b9b5086604001518160ff1661306e9190614b10565b8b6130799190614aba565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310d5760018a6130d99190614aba565b99508060ff16896130ea9190614aba565b985086604001518160ff166130ff9190614b10565b8861310a9190614aba565b97505b5b8260010192505050612f91565b505050505091939550919395565b80613132613870565b73ffffffffffffffffffffffffffffffffffffffff16613150611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156131f05750613177613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106131a5576131a46149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613227576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110613241576132406149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816132a5613870565b73ffffffffffffffffffffffffffffffffffffffff166132c3611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561336357506132ea613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613318576133176149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561339a576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068461ffff16815481106133b6576133b56149df565b5b906000526020600020906006020160030160019054906101000a900460ff1615150361340e576040517f9166806f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613427576134266149df565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613483613870565b73ffffffffffffffffffffffffffffffffffffffff166134a1611f52565b73ffffffffffffffffffffffffffffffffffffffff16146134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee90614a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614cfa565b60405180910390fd5b61356f81614218565b50565b8161357b613870565b73ffffffffffffffffffffffffffffffffffffffff16613599611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561363957506135c0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106135ee576135ed6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613670576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613689576136886149df565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b806136c2613870565b73ffffffffffffffffffffffffffffffffffffffff166136e0611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156137805750613707613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613735576137346149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156137b7576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561385457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161380a575b5050505050905061386b8382600084516000613878565b505050565b600033905090565b600060068661ffff1681548110613892576138916149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613a4d576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015613ca0576000898281518110613aaf57613aae6149df565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613b5d57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b6c575060008160ff16115b15613c935760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff168860400151613bde9190614b10565b905060006127108960c0015161ffff1683613bf99190614b10565b613c039190614d49565b90508086613c119190614aba565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f8284613c3f9190614d7a565b86866040518463ffffffff1660e01b8152600401613c5e929190614dae565b6000604051808303818588803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050505050505b8260010192505050613a92565b508060056000828254613cb39190614aba565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b8180549050811015613e54576000828281548110613d4957613d486149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115613e47578060ff1688613de19190614aba565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e46578060ff1687613e439190614aba565b96505b5b8260010192505050613d28565b50505050915091565b600060068261ffff1681548110613e7757613e766149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff161015614212576000828260ff1681548110614039576140386149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614205576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161417a9190614b10565b60405161418690614c07565b60006040518083038185875af1925050503d80600081146141c3576040519150601f19603f3d011682016040523d82523d6000602084013e6141c8565b606091505b5050905080614203576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8260010192505050614012565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b6142fd816142e6565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b6000819050919050565b61433381614320565b811461433e57600080fd5b50565b6000813590506143508161432a565b92915050565b60008060006060848603121561436f5761436e6142dc565b5b600061437d8682870161430b565b935050602061438e86828701614341565b925050604061439f86828701614341565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b6000614412826143c9565b9050919050565b61442281614407565b811461442d57600080fd5b50565b60008135905061443f81614419565b92915050565b600060ff82169050919050565b61445b81614445565b811461446657600080fd5b50565b60008135905061447881614452565b92915050565b600080600080600080600080610100898b03121561449f5761449e6142dc565b5b60006144ad8b828c016143f2565b98505060206144be8b828c01614430565b97505060406144cf8b828c01614341565b96505060606144e08b828c01614469565b95505060806144f18b828c0161430b565b94505060a06145028b828c0161430b565b93505060c06145138b828c01614341565b92505060e06145248b828c01614341565b9150509295985092959890939650565b6000806040838503121561454b5761454a6142dc565b5b60006145598582860161430b565b925050602061456a85828601614469565b9150509250929050565b60006020828403121561458a576145896142dc565b5b60006145988482850161430b565b91505092915050565b6000602082840312156145b7576145b66142dc565b5b60006145c584828501614341565b91505092915050565b6145d7816143c9565b82525050565b6000819050919050565b60006146026145fd6145f8846143a9565b6145dd565b6143a9565b9050919050565b6000614614826145e7565b9050919050565b600061462682614609565b9050919050565b6146368161461b565b82525050565b61464581614320565b82525050565b61465481614445565b82525050565b60008115159050919050565b61466f8161465a565b82525050565b61467e816142e6565b82525050565b60006101408201905061469a600083018d6145ce565b6146a7602083018c61462d565b6146b4604083018b61463c565b6146c1606083018a61464b565b6146ce6080830189614666565b6146db60a0830188614666565b6146e860c0830187614675565b6146f560e0830186614675565b61470361010083018561463c565b61471161012083018461463c565b9b9a5050505050505050505050565b60008060408385031215614737576147366142dc565b5b60006147458582860161430b565b9250506020614756858286016143f2565b9150509250929050565b60006020820190506147756000830184614666565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a05761479f61477b565b5b8235905067ffffffffffffffff8111156147bd576147bc614780565b5b6020830191508360208202830111156147d9576147d8614785565b5b9250929050565b6000806000604084860312156147f9576147f86142dc565b5b60006148078682870161430b565b935050602084013567ffffffffffffffff811115614828576148276142e1565b5b6148348682870161478a565b92509250509250925092565b60008060408385031215614857576148566142dc565b5b60006148658582860161430b565b925050602061487685828601614341565b9150509250929050565b600060208201905061489560008301846145ce565b92915050565b600080604083850312156148b2576148b16142dc565b5b60006148c08582860161430b565b92505060206148d18582860161430b565b9150509250929050565b60006020820190506148f0600083018461463c565b92915050565b600060c08201905061490b600083018961463c565b614918602083018861463c565b614925604083018761463c565b614932606083018661463c565b61493f608083018561463c565b61494c60a083018461463c565b979650505050505050565b600060208201905061496c600083018461464b565b92915050565b60008060408385031215614989576149886142dc565b5b60006149978582860161430b565b92505060206149a885828601614430565b9150509250929050565b6000602082840312156149c8576149c76142dc565b5b60006149d6848285016143f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a55602083614a0e565b9150614a6082614a1f565b602082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac582614320565b9150614ad083614320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0557614b04614a8b565b5b828201905092915050565b6000614b1b82614320565b9150614b2683614320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5f57614b5e614a8b565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ba0601f83614a0e565b9150614bab82614b6a565b602082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b600081905092915050565b50565b6000614bf1600083614bd6565b9150614bfc82614be1565b600082019050919050565b6000614c1282614be4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614c52601083614a0e565b9150614c5d82614c1c565b602082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce4602683614a0e565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d5482614320565b9150614d5f83614320565b925082614d6f57614d6e614d1a565b5b828204905092915050565b6000614d8582614320565b9150614d9083614320565b925082821015614da357614da2614a8b565b5b828203905092915050565b6000604082019050614dc360008301856145ce565b614dd0602083018461464b565b939250505056fea2646970667358221220e505a8d96670044e05e0c5c0993741791d309372f19dbb356819e5e6dcb3d74064736f6c634300080e0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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