ETH Price: $3,271.30 (+0.28%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Destroy84357502019-08-28 1:39:411961 days ago1566956381IN
ENS: Short Name Claims
0 ETH0.000013781
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.00019272.6
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.000110142.6
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.00029032.6
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.000623482.6
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.001353712.6
Resolve Claims84282162019-08-26 21:20:521962 days ago1566854452IN
ENS: Short Name Claims
0 ETH0.002684162.6
Resolve Claims84281902019-08-26 21:14:051962 days ago1566854045IN
ENS: Short Name Claims
0 ETH0.003279142.6
Resolve Claims84255522019-08-26 11:23:521963 days ago1566818632IN
ENS: Short Name Claims
0 ETH0.006325262.6
Resolve Claims84255042019-08-26 11:13:391963 days ago1566818019IN
ENS: Short Name Claims
0 ETH0.006581792.6
Resolve Claims84254712019-08-26 11:07:541963 days ago1566817674IN
ENS: Short Name Claims
0 ETH0.006832893
Withdraw Claim84252162019-08-26 10:12:591963 days ago1566814379IN
ENS: Short Name Claims
0 ETH0.0008292933
Withdraw Claim84251772019-08-26 10:04:141963 days ago1566813854IN
ENS: Short Name Claims
0 ETH0.0008292933
Withdraw Claim84251542019-08-26 9:59:061963 days ago1566813546IN
ENS: Short Name Claims
0 ETH0.000761733
Withdraw Claim84251362019-08-26 9:54:001963 days ago1566813240IN
ENS: Short Name Claims
0 ETH0.0008039433
Resolve Claims84239382019-08-26 5:17:061963 days ago1566796626IN
ENS: Short Name Claims
0 ETH0.006887682.6
Resolve Claim84239142019-08-26 5:12:431963 days ago1566796363IN
ENS: Short Name Claims
0 ETH0.00033853.3
Resolve Claims84239002019-08-26 5:09:011963 days ago1566796141IN
ENS: Short Name Claims
0 ETH0.006325622.6
Ratify Claims84236722019-08-26 4:18:091963 days ago1566793089IN
ENS: Short Name Claims
0 ETH0.000221718
Set Claim Status84235642019-08-26 3:54:131963 days ago1566791653IN
ENS: Short Name Claims
0 ETH0.000140776
Set Claim Status84235112019-08-26 3:41:001963 days ago1566790860IN
ENS: Short Name Claims
0 ETH0.000484749
Set Claim Status...84213342019-08-25 19:48:061963 days ago1566762486IN
ENS: Short Name Claims
0 ETH0.000988733
Withdraw Claim84174372019-08-25 5:24:571964 days ago1566710697IN
ENS: Short Name Claims
0 ETH0.000030061
Withdraw Claim84133252019-08-24 13:43:551965 days ago1566654235IN
ENS: Short Name Claims
0 ETH0.0003907813
Withdraw Claim84104302019-08-24 2:59:251965 days ago1566615565IN
ENS: Short Name Claims
0 ETH0.000030061
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
84357502019-08-28 1:39:411961 days ago1566956381
ENS: Short Name Claims
0 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02406507 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.023896 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.77006377 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.77006377 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02406507 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.023896 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02397736 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02368377 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02368377 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.75788077 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.75788077 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02390857 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
3.06029742 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02399002 ETH
84282162019-08-26 21:20:521962 days ago1566854452
ENS: Short Name Claims
0.02406449 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x9c75c0dbc450eff6e6168a9420d0b2d0da47395c616df2d63e376f57111717fb


Contract Source Code Verified (Exact Match)

Contract Name:
ShortNameClaims

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-06
*/

// File: @ensdomains/ens/contracts/ENS.sol

pragma solidity >=0.4.24;

interface ENS {

    // Logged when the owner of a node assigns a new owner to a subnode.
    event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);

    // Logged when the owner of a node transfers ownership to a new account.
    event Transfer(bytes32 indexed node, address owner);

    // Logged when the resolver for a node changes.
    event NewResolver(bytes32 indexed node, address resolver);

    // Logged when the TTL of a node changes
    event NewTTL(bytes32 indexed node, uint64 ttl);


    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external;
    function setResolver(bytes32 node, address resolver) external;
    function setOwner(bytes32 node, address owner) external;
    function setTTL(bytes32 node, uint64 ttl) external;
    function owner(bytes32 node) external view returns (address);
    function resolver(bytes32 node) external view returns (address);
    function ttl(bytes32 node) external view returns (uint64);

}

// File: @ensdomains/ens/contracts/Deed.sol

pragma solidity >=0.4.24;

interface Deed {

    function setOwner(address payable newOwner) external;
    function setRegistrar(address newRegistrar) external;
    function setBalance(uint newValue, bool throwOnFailure) external;
    function closeDeed(uint refundRatio) external;
    function destroyDeed() external;

    function owner() external view returns (address);
    function previousOwner() external view returns (address);
    function value() external view returns (uint);
    function creationDate() external view returns (uint);

}

// File: @ensdomains/ens/contracts/Registrar.sol

pragma solidity >=0.4.24;


interface Registrar {

    enum Mode { Open, Auction, Owned, Forbidden, Reveal, NotYetAvailable }

    event AuctionStarted(bytes32 indexed hash, uint registrationDate);
    event NewBid(bytes32 indexed hash, address indexed bidder, uint deposit);
    event BidRevealed(bytes32 indexed hash, address indexed owner, uint value, uint8 status);
    event HashRegistered(bytes32 indexed hash, address indexed owner, uint value, uint registrationDate);
    event HashReleased(bytes32 indexed hash, uint value);
    event HashInvalidated(bytes32 indexed hash, string indexed name, uint value, uint registrationDate);

    function state(bytes32 _hash) external view returns (Mode);
    function startAuction(bytes32 _hash) external;
    function startAuctions(bytes32[] calldata _hashes) external;
    function newBid(bytes32 sealedBid) external payable;
    function startAuctionsAndBid(bytes32[] calldata hashes, bytes32 sealedBid) external payable;
    function unsealBid(bytes32 _hash, uint _value, bytes32 _salt) external;
    function cancelBid(address bidder, bytes32 seal) external;
    function finalizeAuction(bytes32 _hash) external;
    function transfer(bytes32 _hash, address payable newOwner) external;
    function releaseDeed(bytes32 _hash) external;
    function invalidateName(string calldata unhashedName) external;
    function eraseNode(bytes32[] calldata labels) external;
    function transferRegistrars(bytes32 _hash) external;
    function acceptRegistrarTransfer(bytes32 hash, Deed deed, uint registrationDate) external;
    function entries(bytes32 _hash) external view returns (Mode, address, uint, uint, uint);
}

// File: openzeppelin-solidity/contracts/introspection/IERC165.sol

pragma solidity ^0.5.0;

/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.5.0;


/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/BaseRegistrar.sol

pragma solidity >=0.4.24;





contract BaseRegistrar is IERC721, Ownable {
    uint constant public GRACE_PERIOD = 90 days;

    event ControllerAdded(address indexed controller);
    event ControllerRemoved(address indexed controller);
    event NameMigrated(uint256 indexed id, address indexed owner, uint expires);
    event NameRegistered(uint256 indexed id, address indexed owner, uint expires);
    event NameRenewed(uint256 indexed id, uint expires);

    // Expiration timestamp for migrated domains.
    uint public transferPeriodEnds;

    // The ENS registry
    ENS public ens;

    // The namehash of the TLD this registrar owns (eg, .eth)
    bytes32 public baseNode;

    // The interim registrar
    Registrar public previousRegistrar;

    // A map of addresses that are authorised to register and renew names.
    mapping(address=>bool) public controllers;

    // Authorises a controller, who can register and renew domains.
    function addController(address controller) external;

    // Revoke controller permission for an address.
    function removeController(address controller) external;

    // Set the resolver for the TLD this registrar manages.
    function setResolver(address resolver) external;

    // Returns the expiration timestamp of the specified label hash.
    function nameExpires(uint256 id) external view returns(uint);

    // Returns true iff the specified name is available for registration.
    function available(uint256 id) public view returns(bool);

    /**
     * @dev Register a name.
     */
    function register(uint256 id, address owner, uint duration) external returns(uint);

    function renew(uint256 id, uint duration) external returns(uint);

    /**
     * @dev Reclaim ownership of a name in ENS, if you own it in the registrar.
     */
    function reclaim(uint256 id, address owner) external;

    /**
     * @dev Transfers a registration from the initial registrar.
     * This function is called by the initial registrar when a user calls `transferRegistrars`.
     */
    function acceptRegistrarTransfer(bytes32 label, Deed deed, uint) external;
}

// File: contracts/StringUtils.sol

pragma solidity >=0.4.24;

library StringUtils {
    /**
     * @dev Returns the length of a given string
     *
     * @param s The string to measure the length of
     * @return The length of the input string
     */
    function strlen(string memory s) internal pure returns (uint) {
        uint len;
        uint i = 0;
        uint bytelength = bytes(s).length;
        for(len = 0; i < bytelength; len++) {
            byte b = bytes(s)[i];
            if(b < 0x80) {
                i += 1;
            } else if (b < 0xE0) {
                i += 2;
            } else if (b < 0xF0) {
                i += 3;
            } else if (b < 0xF8) {
                i += 4;
            } else if (b < 0xFC) {
                i += 5;
            } else {
                i += 6;
            }
        }
        return len;
    }
}

// File: contracts/PriceOracle.sol

pragma solidity >=0.4.24;

interface PriceOracle {
    /**
     * @dev Returns the price to register or renew a name.
     * @param name The name being registered or renewed.
     * @param expires When the name presently expires (0 if this is a new registration).
     * @param duration How long the name is being registered or extended for, in seconds.
     * @return The price of this renewal or registration, in wei.
     */
    function price(string calldata name, uint expires, uint duration) external view returns(uint);
}

// File: @ensdomains/buffer/contracts/Buffer.sol

pragma solidity >0.4.18;

/**
* @dev A library for working with mutable byte buffers in Solidity.
*
* Byte buffers are mutable and expandable, and provide a variety of primitives
* for writing to them. At any time you can fetch a bytes object containing the
* current contents of the buffer. The bytes object should not be stored between
* operations, as it may change due to resizing of the buffer.
*/
library Buffer {
    /**
    * @dev Represents a mutable buffer. Buffers have a current value (buf) and
    *      a capacity. The capacity may be longer than the current value, in
    *      which case it can be extended without the need to allocate more memory.
    */
    struct buffer {
        bytes buf;
        uint capacity;
    }

    /**
    * @dev Initializes a buffer with an initial capacity.
    * @param buf The buffer to initialize.
    * @param capacity The number of bytes of space to allocate the buffer.
    * @return The buffer, for chaining.
    */
    function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) {
        if (capacity % 32 != 0) {
            capacity += 32 - (capacity % 32);
        }
        // Allocate space for the buffer data
        buf.capacity = capacity;
        assembly {
            let ptr := mload(0x40)
            mstore(buf, ptr)
            mstore(ptr, 0)
            mstore(0x40, add(32, add(ptr, capacity)))
        }
        return buf;
    }

    /**
    * @dev Initializes a new buffer from an existing bytes object.
    *      Changes to the buffer may mutate the original value.
    * @param b The bytes object to initialize the buffer with.
    * @return A new buffer.
    */
    function fromBytes(bytes memory b) internal pure returns(buffer memory) {
        buffer memory buf;
        buf.buf = b;
        buf.capacity = b.length;
        return buf;
    }

    function resize(buffer memory buf, uint capacity) private pure {
        bytes memory oldbuf = buf.buf;
        init(buf, capacity);
        append(buf, oldbuf);
    }

    function max(uint a, uint b) private pure returns(uint) {
        if (a > b) {
            return a;
        }
        return b;
    }

    /**
    * @dev Sets buffer length to 0.
    * @param buf The buffer to truncate.
    * @return The original buffer, for chaining..
    */
    function truncate(buffer memory buf) internal pure returns (buffer memory) {
        assembly {
            let bufptr := mload(buf)
            mstore(bufptr, 0)
        }
        return buf;
    }

    /**
    * @dev Writes a byte string to a buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param off The start offset to write to.
    * @param data The data to append.
    * @param len The number of bytes to copy.
    * @return The original buffer, for chaining.
    */
    function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) {
        require(len <= data.length);

        if (off + len > buf.capacity) {
            resize(buf, max(buf.capacity, len + off) * 2);
        }

        uint dest;
        uint src;
        assembly {
            // Memory address of the buffer data
            let bufptr := mload(buf)
            // Length of existing buffer data
            let buflen := mload(bufptr)
            // Start address = buffer address + offset + sizeof(buffer length)
            dest := add(add(bufptr, 32), off)
            // Update buffer length if we're extending it
            if gt(add(len, off), buflen) {
                mstore(bufptr, add(len, off))
            }
            src := add(data, 32)
        }

        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }

        return buf;
    }

    /**
    * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param data The data to append.
    * @param len The number of bytes to copy.
    * @return The original buffer, for chaining.
    */
    function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) {
        return write(buf, buf.buf.length, data, len);
    }

    /**
    * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param data The data to append.
    * @return The original buffer, for chaining.
    */
    function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {
        return write(buf, buf.buf.length, data, data.length);
    }

    /**
    * @dev Writes a byte to the buffer. Resizes if doing so would exceed the
    *      capacity of the buffer.
    * @param buf The buffer to append to.
    * @param off The offset to write the byte at.
    * @param data The data to append.
    * @return The original buffer, for chaining.
    */
    function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) {
        if (off >= buf.capacity) {
            resize(buf, buf.capacity * 2);
        }

        assembly {
            // Memory address of the buffer data
            let bufptr := mload(buf)
            // Length of existing buffer data
            let buflen := mload(bufptr)
            // Address = buffer address + sizeof(buffer length) + off
            let dest := add(add(bufptr, off), 32)
            mstore8(dest, data)
            // Update buffer length if we extended it
            if eq(off, buflen) {
                mstore(bufptr, add(buflen, 1))
            }
        }
        return buf;
    }

    /**
    * @dev Appends a byte to the buffer. Resizes if doing so would exceed the
    *      capacity of the buffer.
    * @param buf The buffer to append to.
    * @param data The data to append.
    * @return The original buffer, for chaining.
    */
    function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) {
        return writeUint8(buf, buf.buf.length, data);
    }

    /**
    * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would
    *      exceed the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param off The offset to write at.
    * @param data The data to append.
    * @param len The number of bytes to write (left-aligned).
    * @return The original buffer, for chaining.
    */
    function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) {
        if (len + off > buf.capacity) {
            resize(buf, (len + off) * 2);
        }

        uint mask = 256 ** len - 1;
        // Right-align data
        data = data >> (8 * (32 - len));
        assembly {
            // Memory address of the buffer data
            let bufptr := mload(buf)
            // Address = buffer address + sizeof(buffer length) + off + len
            let dest := add(add(bufptr, off), len)
            mstore(dest, or(and(mload(dest), not(mask)), data))
            // Update buffer length if we extended it
            if gt(add(off, len), mload(bufptr)) {
                mstore(bufptr, add(off, len))
            }
        }
        return buf;
    }

    /**
    * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the
    *      capacity of the buffer.
    * @param buf The buffer to append to.
    * @param off The offset to write at.
    * @param data The data to append.
    * @return The original buffer, for chaining.
    */
    function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) {
        return write(buf, off, bytes32(data), 20);
    }

    /**
    * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param data The data to append.
    * @return The original buffer, for chhaining.
    */
    function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {
        return write(buf, buf.buf.length, bytes32(data), 20);
    }

    /**
    * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param data The data to append.
    * @return The original buffer, for chaining.
    */
    function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {
        return write(buf, buf.buf.length, data, 32);
    }

    /**
    * @dev Writes an integer to the buffer. Resizes if doing so would exceed
    *      the capacity of the buffer.
    * @param buf The buffer to append to.
    * @param off The offset to write at.
    * @param data The data to append.
    * @param len The number of bytes to write (right-aligned).
    * @return The original buffer, for chaining.
    */
    function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) {
        if (len + off > buf.capacity) {
            resize(buf, (len + off) * 2);
        }

        uint mask = 256 ** len - 1;
        assembly {
            // Memory address of the buffer data
            let bufptr := mload(buf)
            // Address = buffer address + off + sizeof(buffer length) + len
            let dest := add(add(bufptr, off), len)
            mstore(dest, or(and(mload(dest), not(mask)), data))
            // Update buffer length if we extended it
            if gt(add(off, len), mload(bufptr)) {
                mstore(bufptr, add(off, len))
            }
        }
        return buf;
    }

    /**
     * @dev Appends a byte to the end of the buffer. Resizes if doing so would
     * exceed the capacity of the buffer.
     * @param buf The buffer to append to.
     * @param data The data to append.
     * @return The original buffer.
     */
    function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) {
        return writeInt(buf, buf.buf.length, data, len);
    }
}

// File: @ensdomains/dnssec-oracle/contracts/BytesUtils.sol

pragma solidity >0.4.23;

library BytesUtils {
    /*
    * @dev Returns the keccak-256 hash of a byte range.
    * @param self The byte string to hash.
    * @param offset The position to start hashing at.
    * @param len The number of bytes to hash.
    * @return The hash of the byte range.
    */
    function keccak(bytes memory self, uint offset, uint len) internal pure returns (bytes32 ret) {
        require(offset + len <= self.length);
        assembly {
            ret := keccak256(add(add(self, 32), offset), len)
        }
    }


    /*
    * @dev Returns a positive number if `other` comes lexicographically after
    *      `self`, a negative number if it comes before, or zero if the
    *      contents of the two bytes are equal.
    * @param self The first bytes to compare.
    * @param other The second bytes to compare.
    * @return The result of the comparison.
    */
    function compare(bytes memory self, bytes memory other) internal pure returns (int) {
        return compare(self, 0, self.length, other, 0, other.length);
    }

    /*
    * @dev Returns a positive number if `other` comes lexicographically after
    *      `self`, a negative number if it comes before, or zero if the
    *      contents of the two bytes are equal. Comparison is done per-rune,
    *      on unicode codepoints.
    * @param self The first bytes to compare.
    * @param offset The offset of self.
    * @param len    The length of self.
    * @param other The second bytes to compare.
    * @param otheroffset The offset of the other string.
    * @param otherlen    The length of the other string.
    * @return The result of the comparison.
    */
    function compare(bytes memory self, uint offset, uint len, bytes memory other, uint otheroffset, uint otherlen) internal pure returns (int) {
        uint shortest = len;
        if (otherlen < len)
        shortest = otherlen;

        uint selfptr;
        uint otherptr;

        assembly {
            selfptr := add(self, add(offset, 32))
            otherptr := add(other, add(otheroffset, 32))
        }
        for (uint idx = 0; idx < shortest; idx += 32) {
            uint a;
            uint b;
            assembly {
                a := mload(selfptr)
                b := mload(otherptr)
            }
            if (a != b) {
                // Mask out irrelevant bytes and check again
                uint mask;
                if (shortest > 32) {
                    mask = uint256(- 1); // aka 0xffffff....
                } else {
                    mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);
                }
                uint diff = (a & mask) - (b & mask);
                if (diff != 0)
                return int(diff);
            }
            selfptr += 32;
            otherptr += 32;
        }

        return int(len) - int(otherlen);
    }

    /*
    * @dev Returns true if the two byte ranges are equal.
    * @param self The first byte range to compare.
    * @param offset The offset into the first byte range.
    * @param other The second byte range to compare.
    * @param otherOffset The offset into the second byte range.
    * @param len The number of bytes to compare
    * @return True if the byte ranges are equal, false otherwise.
    */
    function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset, uint len) internal pure returns (bool) {
        return keccak(self, offset, len) == keccak(other, otherOffset, len);
    }

    /*
    * @dev Returns true if the two byte ranges are equal with offsets.
    * @param self The first byte range to compare.
    * @param offset The offset into the first byte range.
    * @param other The second byte range to compare.
    * @param otherOffset The offset into the second byte range.
    * @return True if the byte ranges are equal, false otherwise.
    */
    function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset) internal pure returns (bool) {
        return keccak(self, offset, self.length - offset) == keccak(other, otherOffset, other.length - otherOffset);
    }

    /*
    * @dev Compares a range of 'self' to all of 'other' and returns True iff
    *      they are equal.
    * @param self The first byte range to compare.
    * @param offset The offset into the first byte range.
    * @param other The second byte range to compare.
    * @return True if the byte ranges are equal, false otherwise.
    */
    function equals(bytes memory self, uint offset, bytes memory other) internal pure returns (bool) {
        return self.length >= offset + other.length && equals(self, offset, other, 0, other.length);
    }

    /*
    * @dev Returns true if the two byte ranges are equal.
    * @param self The first byte range to compare.
    * @param other The second byte range to compare.
    * @return True if the byte ranges are equal, false otherwise.
    */
    function equals(bytes memory self, bytes memory other) internal pure returns(bool) {
        return self.length == other.length && equals(self, 0, other, 0, self.length);
    }

    /*
    * @dev Returns the 8-bit number at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes
    * @return The specified 8 bits of the string, interpreted as an integer.
    */
    function readUint8(bytes memory self, uint idx) internal pure returns (uint8 ret) {
        return uint8(self[idx]);
    }

    /*
    * @dev Returns the 16-bit number at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes
    * @return The specified 16 bits of the string, interpreted as an integer.
    */
    function readUint16(bytes memory self, uint idx) internal pure returns (uint16 ret) {
        require(idx + 2 <= self.length);
        assembly {
            ret := and(mload(add(add(self, 2), idx)), 0xFFFF)
        }
    }

    /*
    * @dev Returns the 32-bit number at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes
    * @return The specified 32 bits of the string, interpreted as an integer.
    */
    function readUint32(bytes memory self, uint idx) internal pure returns (uint32 ret) {
        require(idx + 4 <= self.length);
        assembly {
            ret := and(mload(add(add(self, 4), idx)), 0xFFFFFFFF)
        }
    }

    /*
    * @dev Returns the 32 byte value at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes
    * @return The specified 32 bytes of the string.
    */
    function readBytes32(bytes memory self, uint idx) internal pure returns (bytes32 ret) {
        require(idx + 32 <= self.length);
        assembly {
            ret := mload(add(add(self, 32), idx))
        }
    }

    /*
    * @dev Returns the 32 byte value at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes
    * @return The specified 32 bytes of the string.
    */
    function readBytes20(bytes memory self, uint idx) internal pure returns (bytes20 ret) {
        require(idx + 20 <= self.length);
        assembly {
            ret := and(mload(add(add(self, 32), idx)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000)
        }
    }

    /*
    * @dev Returns the n byte value at the specified index of self.
    * @param self The byte string.
    * @param idx The index into the bytes.
    * @param len The number of bytes.
    * @return The specified 32 bytes of the string.
    */
    function readBytesN(bytes memory self, uint idx, uint len) internal pure returns (bytes32 ret) {
        require(len <= 32);
        require(idx + len <= self.length);
        assembly {
            let mask := not(sub(exp(256, sub(32, len)), 1))
            ret := and(mload(add(add(self, 32), idx)),  mask)
        }
    }

    function memcpy(uint dest, uint src, uint len) private pure {
        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    /*
    * @dev Copies a substring into a new byte string.
    * @param self The byte string to copy from.
    * @param offset The offset to start copying at.
    * @param len The number of bytes to copy.
    */
    function substring(bytes memory self, uint offset, uint len) internal pure returns(bytes memory) {
        require(offset + len <= self.length);

        bytes memory ret = new bytes(len);
        uint dest;
        uint src;

        assembly {
            dest := add(ret, 32)
            src := add(add(self, 32), offset)
        }
        memcpy(dest, src, len);

        return ret;
    }

    // Maps characters from 0x30 to 0x7A to their base32 values.
    // 0xFF represents invalid characters in that range.
    bytes constant base32HexTable = hex'00010203040506070809FFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1FFFFFFFFFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1F';

    /**
     * @dev Decodes unpadded base32 data of up to one word in length.
     * @param self The data to decode.
     * @param off Offset into the string to start at.
     * @param len Number of characters to decode.
     * @return The decoded data, left aligned.
     */
    function base32HexDecodeWord(bytes memory self, uint off, uint len) internal pure returns(bytes32) {
        require(len <= 52);

        uint ret = 0;
        uint8 decoded;
        for(uint i = 0; i < len; i++) {
            bytes1 char = self[off + i];
            require(char >= 0x30 && char <= 0x7A);
            decoded = uint8(base32HexTable[uint(uint8(char)) - 0x30]);
            require(decoded <= 0x20);
            if(i == len - 1) {
                break;
            }
            ret = (ret << 5) | decoded;
        }

        uint bitlen = len * 5;
        if(len % 8 == 0) {
            // Multiple of 8 characters, no padding
            ret = (ret << 5) | decoded;
        } else if(len % 8 == 2) {
            // Two extra characters - 1 byte
            ret = (ret << 3) | (decoded >> 2);
            bitlen -= 2;
        } else if(len % 8 == 4) {
            // Four extra characters - 2 bytes
            ret = (ret << 1) | (decoded >> 4);
            bitlen -= 4;
        } else if(len % 8 == 5) {
            // Five extra characters - 3 bytes
            ret = (ret << 4) | (decoded >> 1);
            bitlen -= 1;
        } else if(len % 8 == 7) {
            // Seven extra characters - 4 bytes
            ret = (ret << 2) | (decoded >> 3);
            bitlen -= 3;
        } else {
            revert();
        }

        return bytes32(ret << (256 - bitlen));
    }
}

// File: openzeppelin-solidity/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

// File: contracts/ShortNameClaims.sol

pragma solidity ^0.5.0;







/**
 * @dev ShortNameClaims is a contract that permits people to register claims
 *      for short (3-6 character) ENS names ahead of the auction process.
 *
 *      Anyone with a DNS name registered before January 1, 2019, may use this
 *      name to support a claim for a matching ENS name. In the event that
 *      multiple claimants request the same name, the name will be assigned to
 *      the oldest registered DNS name.
 *
 *      Claims may be submitted by calling `submitExactClaim`,
 *      `submitCombinedClaim` or `submitPrefixClaim` as appropriate.
 *
 *      Claims require lodging a deposit equivalent to 365 days' registration of
 *      the name. If the claim is approved, this deposit is spent, and the name
 *      is registered for the claimant for 365 days. If the claim is declined,
 *      the deposit will be returned.
 */
contract ShortNameClaims {
    using Roles for Roles.Role;

    uint constant public REGISTRATION_PERIOD = 31536000;

    using Buffer for Buffer.buffer;
    using BytesUtils for bytes;
    using StringUtils for string;

    enum Phase {
        OPEN,
        REVIEW,
        FINAL
    }

    enum Status {
        PENDING,
        APPROVED,
        DECLINED,
        WITHDRAWN
    }

    struct Claim {
        bytes32 labelHash;
        address claimant;
        uint paid;
        Status status;
    }

    Roles.Role owners;
    Roles.Role ratifiers;

    PriceOracle public priceOracle;
    BaseRegistrar public registrar;
    mapping(bytes32=>Claim) public claims;
    mapping(bytes32=>bool) approvedNames;
    uint public pendingClaims;
    uint public unresolvedClaims;
    Phase public phase;

    event ClaimSubmitted(string claimed, bytes dnsname, uint paid, address claimant, string email);
    event ClaimStatusChanged(bytes32 indexed claimId, Status status);

    constructor(PriceOracle _priceOracle, BaseRegistrar _registrar, address _ratifier) public {
        priceOracle = _priceOracle;
        registrar = _registrar;
        phase = Phase.OPEN;

        owners.add(msg.sender);
        ratifiers.add(_ratifier);
    }

    modifier onlyOwner() {
        require(owners.has(msg.sender), "Caller must be an owner");
        _;
    }

    modifier onlyRatifier() {
        require(ratifiers.has(msg.sender), "Caller must be a ratifier");
        _;
    }

    modifier inPhase(Phase p) {
        require(phase == p, "Not in required phase");
        _;
    }

    function addOwner(address owner) external onlyOwner {
        owners.add(owner);
    }

    function removeOwner(address owner) external onlyOwner {
        owners.remove(owner);
    }

    function addRatifier(address ratifier) external onlyRatifier {
        ratifiers.add(ratifier);
    }

    function removeRatifier(address ratifier) external onlyRatifier {
        ratifiers.remove(ratifier);
    }

    /**
     * @dev Computes the claim ID for a submitted claim, so it can be looked up
     *      using `claims`.
     * @param claimed The name being claimed (eg, 'foo')
     * @param dnsname The DNS-encoded name supporting the claim (eg, 'foo.test')
     * @param claimant The address making the claim.
     * @return The claim ID.
     */
    function computeClaimId(string memory claimed, bytes memory dnsname, address claimant, string memory email) public pure returns(bytes32) {
        return keccak256(abi.encodePacked(keccak256(bytes(claimed)), keccak256(dnsname), claimant, keccak256(bytes(email))));
    }

    /**
     * @dev Returns the cost associated with placing a claim.
     * @param claimed The name being claimed.
     * @return The cost in wei for this claim.
     */
    function getClaimCost(string memory claimed) public view returns(uint) {
        return priceOracle.price(claimed, 0, REGISTRATION_PERIOD);
    }

    /**
     * @dev Submits a claim for an exact match (eg, foo.test -> foo.eth).
     *      Claimants must provide an amount of ether equal to 365 days'
     *      registration cost; call `getClaimCost` to determine this amount.
     *      Claimants should supply a little extra in case of variation in price;
     *      any excess will be returned to the sender.
     * @param name The DNS-encoded name of the domain being used to support the
     *             claim.
     * @param claimant The address of the claimant.
     * @param email An email address for correspondence regarding the claim.
     */
    function submitExactClaim(bytes memory name, address claimant, string memory email) public payable {
        string memory claimed = getLabel(name, 0);
        handleClaim(claimed, name, claimant, email);
    }

    /**
     * @dev Submits a claim for match on name+tld (eg, foo.tv -> footv).
     *      Claimants must provide an amount of ether equal to 365 days'
     *      registration cost; call `getClaimCost` to determine this amount.
     *      Claimants should supply a little extra in case of variation in price;
     *      any excess will be returned to the sender.
     * @param name The DNS-encoded name of the domain being used to support the
     *             claim.
     * @param claimant The address of the claimant.
     * @param email An email address for correspondence regarding the claim.
     */
    function submitCombinedClaim(bytes memory name, address claimant, string memory email) public payable {
        bytes memory firstLabel = bytes(getLabel(name, 0));
        bytes memory secondLabel = bytes(getLabel(name, 1));
        Buffer.buffer memory buf;
        buf.init(firstLabel.length + secondLabel.length);
        buf.append(firstLabel);
        buf.append(secondLabel);

        handleClaim(string(buf.buf), name, claimant, email);
    }

    /**
     * @dev Submits a claim for prefix match (eg, fooeth.test -> foo.eth).
     *      Claimants must provide an amount of ether equal to 365 days'
     *      registration cost; call `getClaimCost` to determine this amount.
     *      Claimants should supply a little extra in case of variation in price;
     *      any excess will be returned to the sender.
     * @param name The DNS-encoded name of the domain being used to support the
     *             claim.
     * @param claimant The address of the claimant.
     * @param email An email address for correspondence regarding the claim.
     */
    function submitPrefixClaim(bytes memory name, address claimant, string memory email) public payable {
        bytes memory firstLabel = bytes(getLabel(name, 0));
        require(firstLabel.equals(firstLabel.length - 3, bytes("eth")));
        handleClaim(string(firstLabel.substring(0, firstLabel.length - 3)), name, claimant, email);
    }

    /**
     * @dev Closes the claim submission period.
     *      Callable only by the owner.
     */
    function closeClaims() external onlyOwner inPhase(Phase.OPEN) {
        phase = Phase.REVIEW;
    }

    /**
     * @dev Ratifies the current set of claims.
     *      Ratification freezes the claims and their resolutions, and permits
     *      them to be acted on.
     */
    function ratifyClaims() external onlyRatifier inPhase(Phase.REVIEW) {
        // Can't ratify until all claims have a resolution.
        require(pendingClaims == 0);
        phase = Phase.FINAL;
    }

    /**
     * @dev Cleans up the contract, after all claims are resolved.
     *      Callable only by the owner, and only in final state.
     */
    function destroy() external onlyOwner inPhase(Phase.FINAL) {
        require(unresolvedClaims == 0);
        selfdestruct(toPayable(msg.sender));
    }

    /**
     * @dev Sets the status of a claim to either APPROVED or DECLINED.
     *      Callable only during the review phase, and only by the owner or
     *      ratifier.
     * @param claimId The claim to set the status of.
     * @param approved True if the claim is approved, false if it is declined.
     */
    function setClaimStatus(bytes32 claimId, bool approved) public inPhase(Phase.REVIEW) {
        // Only callable by owner or ratifier
        require(owners.has(msg.sender) || ratifiers.has(msg.sender));

        Claim memory claim = claims[claimId];
        require(claim.paid > 0, "Claim not found");

        if(claim.status == Status.PENDING) {
          // Claim went from pending -> approved/declined; update counters
          pendingClaims--;
          unresolvedClaims++;
        } else if(claim.status == Status.APPROVED) {
          // Claim was previously approved; remove from approved map
          approvedNames[claim.labelHash] = false;
        }

        // Claim was just approved; check the name was not already used, and add
        // to approved map
        if(approved) {
          require(!approvedNames[claim.labelHash]);
          approvedNames[claim.labelHash] = true;
        }

        Status status = approved?Status.APPROVED:Status.DECLINED;
        claims[claimId].status = status;
        emit ClaimStatusChanged(claimId, status);
    }

    /**
     * @dev Sets the status of multiple claims. Callable only during the review
     *      phase, and only by the owner or ratifier.
     * @param approved A list of approved claim IDs.
     * @param declined A list of declined claim IDs.
     */
    function setClaimStatuses(bytes32[] calldata approved, bytes32[] calldata declined) external {
        for(uint i = 0; i < approved.length; i++) {
            setClaimStatus(approved[i], true);
        }
        for(uint i = 0; i < declined.length; i++) {
            setClaimStatus(declined[i], false);
        }
    }

    /**
     * @dev Resolves a claim. Callable by anyone, only in the final phase.
     *      Resolving a claim either registers the name or refunds the claimant.
     * @param claimId The claim ID to resolve.
     */
    function resolveClaim(bytes32 claimId) public inPhase(Phase.FINAL) {
        Claim memory claim = claims[claimId];
        require(claim.paid > 0, "Claim not found");

        if(claim.status == Status.APPROVED) {
            registrar.register(uint256(claim.labelHash), claim.claimant, REGISTRATION_PERIOD);
            toPayable(registrar.owner()).transfer(claim.paid);
        } else if(claim.status == Status.DECLINED) {
            toPayable(claim.claimant).transfer(claim.paid);
        } else {
            // It should not be possible to get to FINAL with claim IDs that are
            // not either APPROVED or DECLINED.
            assert(false);
        }

        unresolvedClaims--;
        delete claims[claimId];
    }

    /**
     * @dev Resolves multiple claims. Callable by anyone, only in the final phase.
     * @param claimIds A list of claim IDs to resolve.
     */
    function resolveClaims(bytes32[] calldata claimIds) external {
        for(uint i = 0; i < claimIds.length; i++) {
            resolveClaim(claimIds[i]);
        }
    }

    /**
     * @dev Withdraws a claim and refunds the claimant.
     *      Callable only by the claimant, at any time.
     * @param claimId The ID of the claim to withdraw.
     */
    function withdrawClaim(bytes32 claimId) external {
        Claim memory claim = claims[claimId];

        // Only callable by claimant
        require(msg.sender == claim.claimant);

        if(claim.status == Status.PENDING) {
            pendingClaims--;
        } else {
            unresolvedClaims--;
        }

        toPayable(claim.claimant).transfer(claim.paid);
        emit ClaimStatusChanged(claimId, Status.WITHDRAWN);
        delete claims[claimId];
    }

    function handleClaim(string memory claimed, bytes memory name, address claimant, string memory email) internal inPhase(Phase.OPEN) {
        uint len = claimed.strlen();
        require(len >= 3 && len <= 6);

        bytes32 claimId = computeClaimId(claimed, name, claimant, email);
        require(claims[claimId].paid == 0, "Claim already submitted");

        // Require that there are at most two labels (name.tld)
        require(bytes(getLabel(name, 2)).length == 0, "Name must be a 2LD");

        uint price = getClaimCost(claimed);
        require(msg.value >= price, "Insufficient funds for reservation");
        if(msg.value > price) {
            msg.sender.transfer(msg.value - price);
        }

        claims[claimId] = Claim(keccak256(bytes(claimed)), claimant, price, Status.PENDING);
        pendingClaims++;
        emit ClaimSubmitted(claimed, name, price, claimant, email);
    }

    function getLabel(bytes memory name, uint idx) internal pure returns(string memory) {
        // Skip the first `idx` labels
        uint offset = 0;
        for(uint i = 0; i < idx; i++) {
            if(offset >= name.length) return "";
            offset += name.readUint8(offset) + 1;
        }

        // Read the label we care about
        if(offset >= name.length) return '';
        uint len = name.readUint8(offset);
        return string(name.substring(offset + 1, len));
    }

    function toPayable(address addr) internal pure returns(address payable) {
        return address(uint160(addr));
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"priceOracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registrar","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ratifier","type":"address"}],"name":"removeRatifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingClaims","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ratifier","type":"address"}],"name":"addRatifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"bytes"},{"name":"claimant","type":"address"},{"name":"email","type":"string"}],"name":"submitPrefixClaim","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"unresolvedClaims","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"claimed","type":"string"}],"name":"getClaimCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"claimId","type":"bytes32"}],"name":"withdrawClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"ratifyClaims","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"claimed","type":"string"},{"name":"dnsname","type":"bytes"},{"name":"claimant","type":"address"},{"name":"email","type":"string"}],"name":"computeClaimId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"claimId","type":"bytes32"},{"name":"approved","type":"bool"}],"name":"setClaimStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"bytes"},{"name":"claimant","type":"address"},{"name":"email","type":"string"}],"name":"submitExactClaim","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"phase","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"claimId","type":"bytes32"}],"name":"resolveClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"approved","type":"bytes32[]"},{"name":"declined","type":"bytes32[]"}],"name":"setClaimStatuses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"closeClaims","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"claimIds","type":"bytes32[]"}],"name":"resolveClaims","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"REGISTRATION_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"claims","outputs":[{"name":"labelHash","type":"bytes32"},{"name":"claimant","type":"address"},{"name":"paid","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"bytes"},{"name":"claimant","type":"address"},{"name":"email","type":"string"}],"name":"submitCombinedClaim","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[{"name":"_priceOracle","type":"address"},{"name":"_registrar","type":"address"},{"name":"_ratifier","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"claimed","type":"string"},{"indexed":false,"name":"dnsname","type":"bytes"},{"indexed":false,"name":"paid","type":"uint256"},{"indexed":false,"name":"claimant","type":"address"},{"indexed":false,"name":"email","type":"string"}],"name":"ClaimSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"claimId","type":"bytes32"},{"indexed":false,"name":"status","type":"uint8"}],"name":"ClaimStatusChanged","type":"event"}]

60806040523480156200001157600080fd5b50604051620033af380380620033af833981810160405260608110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548160ff02191690836002811115620000fe57fe5b02179055506200011e3360006200014260201b620025621790919060201c565b620001398160016200014260201b620025621790919060201c565b5050506200028b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017d57600080fd5b6200018f8282620001f860201b60201c565b156200019a57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200023457600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613114806200029b6000396000f3fe60806040526004361061014b5760003560e01c806384fd49c9116100b6578063c9fa06631161006f578063c9fa066314610aa6578063cfee88db14610b81578063d4f6841d14610b98578063e0f5409714610c1e578063eff0f59214610c49578063fb2f72d014610ce75761014b565b806384fd49c9146106385780639d6017471461064f578063a1169b7714610879578063a8712e8c146108c0578063b1c9fe6e14610a32578063c1203cb814610a6b5761014b565b80634d4de844116101085780634d4de8441461031c5780635a41ef3a1461048e57806365e3f8fa146104b95780637065cb48146105955780637cb68aa2146105e657806383197ef0146106215761014b565b8063173825d9146101505780632630c12f146101a15780632b20e397146101f85780633e08e84d1461024f5780633e6be3d2146102a057806341e6af01146102cb575b600080fd5b34801561015c57600080fd5b5061019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e59565b005b3480156101ad57600080fd5b506101b6610ef6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020457600080fd5b5061020d610f1c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025b57600080fd5b5061029e6004803603602081101561027257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f42565b005b3480156102ac57600080fd5b506102b5610fdf565b6040518082815260200191505060405180910390f35b3480156102d757600080fd5b5061031a600480360360208110156102ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe5565b005b61048c6004803603606081101561033257600080fd5b810190808035906020019064010000000081111561034f57600080fd5b82018360208201111561036157600080fd5b8035906020019184600183028401116401000000008311171561038357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561040657600080fd5b82018360208201111561041857600080fd5b8035906020019184600183028401116401000000008311171561043a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611082565b005b34801561049a57600080fd5b506104a3611113565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b5061057f600480360360208110156104dc57600080fd5b81019080803590602001906401000000008111156104f957600080fd5b82018360208201111561050b57600080fd5b8035906020019184600183028401116401000000008311171561052d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611119565b6040518082815260200191505060405180910390f35b3480156105a157600080fd5b506105e4600480360360208110156105b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124a565b005b3480156105f257600080fd5b5061061f6004803603602081101561060957600080fd5b81019080803590602001909291905050506112e7565b005b34801561062d57600080fd5b50610636611534565b005b34801561064457600080fd5b5061064d611686565b005b34801561065b57600080fd5b506108636004803603608081101561067257600080fd5b810190808035906020019064010000000081111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460018302840111640100000000831117156106c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561072657600080fd5b82018360208201111561073857600080fd5b8035906020019184600183028401116401000000008311171561075a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117de565b6040518082815260200191505060405180910390f35b34801561088557600080fd5b506108be6004803603604081101561089c57600080fd5b810190808035906020019092919080351515906020019092919050505061186d565b005b610a30600480360360608110156108d657600080fd5b81019080803590602001906401000000008111156108f357600080fd5b82018360208201111561090557600080fd5b8035906020019184600183028401116401000000008311171561092757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109aa57600080fd5b8201836020820111156109bc57600080fd5b803590602001918460018302840111640100000000831117156109de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c19565b005b348015610a3e57600080fd5b50610a47611c3a565b60405180826002811115610a5757fe5b60ff16815260200191505060405180910390f35b348015610a7757600080fd5b50610aa460048036036020811015610a8e57600080fd5b8101908080359060200190929190505050611c4d565b005b348015610ab257600080fd5b50610b7f60048036036040811015610ac957600080fd5b8101908080359060200190640100000000811115610ae657600080fd5b820183602082011115610af857600080fd5b80359060200191846020830284011164010000000083111715610b1a57600080fd5b909192939192939080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b909192939192939050505061213d565b005b348015610b8d57600080fd5b50610b966121bb565b005b348015610ba457600080fd5b50610c1c60048036036020811015610bbb57600080fd5b8101908080359060200190640100000000811115610bd857600080fd5b820183602082011115610bea57600080fd5b80359060200191846020830284011164010000000083111715610c0c57600080fd5b9091929391929390505050612304565b005b348015610c2a57600080fd5b50610c33612342565b6040518082815260200191505060405180910390f35b348015610c5557600080fd5b50610c8260048036036020811015610c6c57600080fd5b810190808035906020019092919050505061234a565b604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001826003811115610cd057fe5b60ff16815260200194505050505060405180910390f35b610e5760048036036060811015610cfd57600080fd5b8101908080359060200190640100000000811115610d1a57600080fd5b820183602082011115610d2c57600080fd5b80359060200191846001830284011164010000000083111715610d4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610dd157600080fd5b820183602082011115610de357600080fd5b80359060200191846001830284011164010000000083111715610e0557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506123a7565b005b610e6d33600061242590919063ffffffff16565b610edf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b610ef38160006124b790919063ffffffff16565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f5633600161242590919063ffffffff16565b610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b610fdc8160016124b790919063ffffffff16565b50565b60065481565b610ff933600161242590919063ffffffff16565b61106b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b61107f81600161256290919063ffffffff16565b50565b606061108f84600061260e565b90506110df60038251036040518060400160405280600381526020017f6574680000000000000000000000000000000000000000000000000000000000815250836126cc9092919063ffffffff16565b6110e857600080fd5b61110d61110560006003845103846126f69092919063ffffffff16565b858585612769565b50505050565b60075481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e9a7158360006301e133806040518463ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156111bc5780820151818401526020810190506111a1565b50505050905090810190601f1680156111e95780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b15801561120857600080fd5b505afa15801561121c573d6000803e3d6000fd5b505050506040513d602081101561123257600080fd5b81019080805190602001909291905050509050919050565b61125e33600061242590919063ffffffff16565b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b6112e481600061256290919063ffffffff16565b50565b6112ef613057565b60046000838152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff16600381111561139557fe5b60038111156113a057fe5b815250509050806020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e257600080fd5b600060038111156113ef57fe5b816060015160038111156113ff57fe5b141561141d5760066000815480929190600190039190505550611431565b600760008154809291906001900391905055505b61143e8160200151612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f19350505050158015611487573d6000803e3d6000fd5b50817f698a3a7f5c0bc9915a6f167e9ce03ffc660392e807cf6fd57fd9ae52063dd27b6003604051808260038111156114bc57fe5b60ff16815260200191505060405180910390a2600460008381526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560028201600090556003820160006101000a81549060ff021916905550505050565b61154833600061242590919063ffffffff16565b6115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b60028060028111156115c857fe5b600860009054906101000a900460ff1660028111156115e357fe5b14611656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b60006007541461166557600080fd5b61166e33612cb4565b73ffffffffffffffffffffffffffffffffffffffff16ff5b61169a33600161242590919063ffffffff16565b61170c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b600180600281111561171a57fe5b600860009054906101000a900460ff16600281111561173557fe5b146117a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b6000600654146117b757600080fd5b6002600860006101000a81548160ff021916908360028111156117d657fe5b021790555050565b600084805190602001208480519060200120848480519060200120604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b600180600281111561187b57fe5b600860009054906101000a900460ff16600281111561189657fe5b14611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b61191d33600061242590919063ffffffff16565b80611938575061193733600161242590919063ffffffff16565b5b61194157600080fd5b611949613057565b60046000858152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660038111156119ef57fe5b60038111156119fa57fe5b8152505090506000816040015111611a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f436c61696d206e6f7420666f756e64000000000000000000000000000000000081525060200191505060405180910390fd5b60006003811115611a8757fe5b81606001516003811115611a9757fe5b1415611ac75760066000815480929190600190039190505550600760008154809291906001019190505550611b1c565b60016003811115611ad457fe5b81606001516003811115611ae457fe5b1415611b1b576000600560008360000151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8215611b8257600560008260000151815260200190815260200160002060009054906101000a900460ff1615611b5157600080fd5b6001600560008360000151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600083611b90576002611b93565b60015b9050806004600087815260200190815260200160002060030160006101000a81548160ff02191690836003811115611bc757fe5b0217905550847f698a3a7f5c0bc9915a6f167e9ce03ffc660392e807cf6fd57fd9ae52063dd27b8260405180826003811115611bff57fe5b60ff16815260200191505060405180910390a25050505050565b6060611c2684600061260e565b9050611c3481858585612769565b50505050565b600860009054906101000a900460ff1681565b6002806002811115611c5b57fe5b600860009054906101000a900460ff166002811115611c7657fe5b14611ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b611cf1613057565b60046000848152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff166003811115611d9757fe5b6003811115611da257fe5b8152505090506000816040015111611e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f436c61696d206e6f7420666f756e64000000000000000000000000000000000081525060200191505060405180910390fd5b60016003811115611e2f57fe5b81606001516003811115611e3f57fe5b141561203b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca247ac826000015160001c83602001516301e133806040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b505050506040513d6020811015611f2f57600080fd5b810190808051906020019092919050505050611fec600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fac57600080fd5b505afa158015611fc0573d6000803e3d6000fd5b505050506040513d6020811015611fd657600080fd5b8101908080519060200190929190505050612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f19350505050158015612035573d6000803e3d6000fd5b506120c4565b6002600381111561204857fe5b8160600151600381111561205857fe5b14156120ba5761206b8160200151612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f193505050501580156120b4573d6000803e3d6000fd5b506120c3565b60006120c257fe5b5b5b60076000815480929190600190039190505550600460008481526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560028201600090556003820160006101000a81549060ff02191690555050505050565b60008090505b848490508110156121785761216b85858381811061215d57fe5b90506020020135600161186d565b8080600101915050612143565b5060008090505b828290508110156121b4576121a783838381811061219957fe5b90506020020135600061186d565b808060010191505061217f565b5050505050565b6121cf33600061242590919063ffffffff16565b612241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b600080600281111561224f57fe5b600860009054906101000a900460ff16600281111561226a57fe5b146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b6001600860006101000a81548160ff021916908360028111156122fc57fe5b021790555050565b60008090505b8282905081101561233d5761233083838381811061232457fe5b90506020020135611c4d565b808060010191505061230a565b505050565b6301e1338081565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16905084565b60606123b484600061260e565b905060606123c385600161260e565b90506123cd6130a3565b6123e4825184510182612cbe90919063ffffffff16565b506123f88382612d1290919063ffffffff16565b5061240c8282612d1290919063ffffffff16565b5061241d8160000151878787612769565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246057600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f157600080fd5b6124fb8282612425565b61250457600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561259c57600080fd5b6125a68282612425565b156125b057600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600080905060008090505b8381101561266e57845182106126445760405180602001604052806000815250925050506126c6565b60016126598387612d3490919063ffffffff16565b0160ff1682019150808060010191505061261b565b508351811061268f57604051806020016040528060008152509150506126c6565b60006126a48286612d3490919063ffffffff16565b60ff1690506126c16001830182876126f69092919063ffffffff16565b925050505b92915050565b6000815183018451101580156126ed57506126ec84848460008651612d58565b5b90509392505050565b60608351828401111561270857600080fd5b6060826040519080825280601f01601f19166020018201604052801561273d5781602001600182028038833980820191505090505b509050600080602083019150856020880101905061275c828287612d7c565b8293505050509392505050565b600080600281111561277757fe5b600860009054906101000a900460ff16600281111561279257fe5b14612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b600061281086612dc5565b905060038110158015612824575060068111155b61282d57600080fd5b600061283b878787876117de565b905060006004600083815260200190815260200160002060020154146128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f436c61696d20616c7265616479207375626d697474656400000000000000000081525060200191505060405180910390fd5b60006128d687600261260e565b511461294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e616d65206d757374206265206120324c44000000000000000000000000000081525060200191505060405180910390fd5b600061295588611119565b9050803410156129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806130be6022913960400191505060405180910390fd5b80341115612a02573373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f19350505050158015612a00573d6000803e3d6000fd5b505b6040518060800160405280898051906020012081526020018773ffffffffffffffffffffffffffffffffffffffff16815260200182815260200160006003811115612a4957fe5b815250600460008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff02191690836003811115612ade57fe5b02179055509050506006600081548092919060010191905055507f186f55cfb37bd38b311b8d5e8a212edf83c4d92107f48dbb7a4a5c217714eab188888389896040518080602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001848103845289818151815260200191508051906020019080838360005b83811015612b9e578082015181840152602081019050612b83565b50505050905090810190601f168015612bcb5780820380516001836020036101000a031916815260200191505b50848103835288818151815260200191508051906020019080838360005b83811015612c04578082015181840152602081019050612be9565b50505050905090810190601f168015612c315780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612c6a578082015181840152602081019050612c4f565b50505050905090810190601f168015612c975780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b6000819050919050565b612cc66130a3565b600060208381612cd257fe5b0614612ceb5760208281612ce257fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b612d1a6130a3565b612d2c83846000015151848551612f3b565b905092915050565b6000828281518110612d4257fe5b602001015160f81c60f81b60f81c905092915050565b6000612d65848484612ff4565b612d70878785612ff4565b14905095945050505050565b5b60208110612da05781518352602083019250602082019150602081039050612d7d565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6000806000809050600084519050600092505b80821015612f30576000858381518110612dee57fe5b602001015160f81c60f81b9050608060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612e3457600183019250612f22565b60e060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612e6d57600283019250612f21565b60f060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612ea657600383019250612f20565b60f8801b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612ede57600483019250612f1f565b60fc60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612f1757600583019250612f1e565b6006830192505b5b5b5b5b508280600101935050612dd8565b829350505050919050565b612f436130a3565b8251821115612f5157600080fd5b84602001518285011115612f7c57612f7b856002612f758860200151888701613017565b02613033565b5b600080865180518760208301019350808887011115612f9b5787860182525b60208701925050505b60208410612fc75780518252602082019150602081019050602084039350612fa4565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008351828401111561300657600080fd5b818360208601012090509392505050565b6000818311156130295782905061302d565b8190505b92915050565b6060826000015190506130468383612cbe565b506130518382612d12565b50505050565b604051806080016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000600381111561309d57fe5b81525090565b60405180604001604052806060815260200160008152509056fe496e73756666696369656e742066756e647320666f72207265736572766174696f6ea265627a7a723058209a419cd1bb289ec131e1647267278fa7013b2d937091e25901423b4f734f0a4064736f6c634300050a0032000000000000000000000000b9d374d0fe3d8341155663fae31b7beae0ae233a000000000000000000000000fac7bea255a6990f749363002136af6556b31e04000000000000000000000000b8c2c29ee19d8307cb7255e1cd9cbde883a267d5

Deployed Bytecode

0x60806040526004361061014b5760003560e01c806384fd49c9116100b6578063c9fa06631161006f578063c9fa066314610aa6578063cfee88db14610b81578063d4f6841d14610b98578063e0f5409714610c1e578063eff0f59214610c49578063fb2f72d014610ce75761014b565b806384fd49c9146106385780639d6017471461064f578063a1169b7714610879578063a8712e8c146108c0578063b1c9fe6e14610a32578063c1203cb814610a6b5761014b565b80634d4de844116101085780634d4de8441461031c5780635a41ef3a1461048e57806365e3f8fa146104b95780637065cb48146105955780637cb68aa2146105e657806383197ef0146106215761014b565b8063173825d9146101505780632630c12f146101a15780632b20e397146101f85780633e08e84d1461024f5780633e6be3d2146102a057806341e6af01146102cb575b600080fd5b34801561015c57600080fd5b5061019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e59565b005b3480156101ad57600080fd5b506101b6610ef6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020457600080fd5b5061020d610f1c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025b57600080fd5b5061029e6004803603602081101561027257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f42565b005b3480156102ac57600080fd5b506102b5610fdf565b6040518082815260200191505060405180910390f35b3480156102d757600080fd5b5061031a600480360360208110156102ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe5565b005b61048c6004803603606081101561033257600080fd5b810190808035906020019064010000000081111561034f57600080fd5b82018360208201111561036157600080fd5b8035906020019184600183028401116401000000008311171561038357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561040657600080fd5b82018360208201111561041857600080fd5b8035906020019184600183028401116401000000008311171561043a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611082565b005b34801561049a57600080fd5b506104a3611113565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b5061057f600480360360208110156104dc57600080fd5b81019080803590602001906401000000008111156104f957600080fd5b82018360208201111561050b57600080fd5b8035906020019184600183028401116401000000008311171561052d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611119565b6040518082815260200191505060405180910390f35b3480156105a157600080fd5b506105e4600480360360208110156105b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124a565b005b3480156105f257600080fd5b5061061f6004803603602081101561060957600080fd5b81019080803590602001909291905050506112e7565b005b34801561062d57600080fd5b50610636611534565b005b34801561064457600080fd5b5061064d611686565b005b34801561065b57600080fd5b506108636004803603608081101561067257600080fd5b810190808035906020019064010000000081111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460018302840111640100000000831117156106c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561072657600080fd5b82018360208201111561073857600080fd5b8035906020019184600183028401116401000000008311171561075a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117de565b6040518082815260200191505060405180910390f35b34801561088557600080fd5b506108be6004803603604081101561089c57600080fd5b810190808035906020019092919080351515906020019092919050505061186d565b005b610a30600480360360608110156108d657600080fd5b81019080803590602001906401000000008111156108f357600080fd5b82018360208201111561090557600080fd5b8035906020019184600183028401116401000000008311171561092757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109aa57600080fd5b8201836020820111156109bc57600080fd5b803590602001918460018302840111640100000000831117156109de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c19565b005b348015610a3e57600080fd5b50610a47611c3a565b60405180826002811115610a5757fe5b60ff16815260200191505060405180910390f35b348015610a7757600080fd5b50610aa460048036036020811015610a8e57600080fd5b8101908080359060200190929190505050611c4d565b005b348015610ab257600080fd5b50610b7f60048036036040811015610ac957600080fd5b8101908080359060200190640100000000811115610ae657600080fd5b820183602082011115610af857600080fd5b80359060200191846020830284011164010000000083111715610b1a57600080fd5b909192939192939080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b909192939192939050505061213d565b005b348015610b8d57600080fd5b50610b966121bb565b005b348015610ba457600080fd5b50610c1c60048036036020811015610bbb57600080fd5b8101908080359060200190640100000000811115610bd857600080fd5b820183602082011115610bea57600080fd5b80359060200191846020830284011164010000000083111715610c0c57600080fd5b9091929391929390505050612304565b005b348015610c2a57600080fd5b50610c33612342565b6040518082815260200191505060405180910390f35b348015610c5557600080fd5b50610c8260048036036020811015610c6c57600080fd5b810190808035906020019092919050505061234a565b604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001826003811115610cd057fe5b60ff16815260200194505050505060405180910390f35b610e5760048036036060811015610cfd57600080fd5b8101908080359060200190640100000000811115610d1a57600080fd5b820183602082011115610d2c57600080fd5b80359060200191846001830284011164010000000083111715610d4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610dd157600080fd5b820183602082011115610de357600080fd5b80359060200191846001830284011164010000000083111715610e0557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506123a7565b005b610e6d33600061242590919063ffffffff16565b610edf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b610ef38160006124b790919063ffffffff16565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f5633600161242590919063ffffffff16565b610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b610fdc8160016124b790919063ffffffff16565b50565b60065481565b610ff933600161242590919063ffffffff16565b61106b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b61107f81600161256290919063ffffffff16565b50565b606061108f84600061260e565b90506110df60038251036040518060400160405280600381526020017f6574680000000000000000000000000000000000000000000000000000000000815250836126cc9092919063ffffffff16565b6110e857600080fd5b61110d61110560006003845103846126f69092919063ffffffff16565b858585612769565b50505050565b60075481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e9a7158360006301e133806040518463ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156111bc5780820151818401526020810190506111a1565b50505050905090810190601f1680156111e95780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b15801561120857600080fd5b505afa15801561121c573d6000803e3d6000fd5b505050506040513d602081101561123257600080fd5b81019080805190602001909291905050509050919050565b61125e33600061242590919063ffffffff16565b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b6112e481600061256290919063ffffffff16565b50565b6112ef613057565b60046000838152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff16600381111561139557fe5b60038111156113a057fe5b815250509050806020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e257600080fd5b600060038111156113ef57fe5b816060015160038111156113ff57fe5b141561141d5760066000815480929190600190039190505550611431565b600760008154809291906001900391905055505b61143e8160200151612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f19350505050158015611487573d6000803e3d6000fd5b50817f698a3a7f5c0bc9915a6f167e9ce03ffc660392e807cf6fd57fd9ae52063dd27b6003604051808260038111156114bc57fe5b60ff16815260200191505060405180910390a2600460008381526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560028201600090556003820160006101000a81549060ff021916905550505050565b61154833600061242590919063ffffffff16565b6115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b60028060028111156115c857fe5b600860009054906101000a900460ff1660028111156115e357fe5b14611656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b60006007541461166557600080fd5b61166e33612cb4565b73ffffffffffffffffffffffffffffffffffffffff16ff5b61169a33600161242590919063ffffffff16565b61170c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d75737420626520612072617469666965720000000000000081525060200191505060405180910390fd5b600180600281111561171a57fe5b600860009054906101000a900460ff16600281111561173557fe5b146117a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b6000600654146117b757600080fd5b6002600860006101000a81548160ff021916908360028111156117d657fe5b021790555050565b600084805190602001208480519060200120848480519060200120604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b600180600281111561187b57fe5b600860009054906101000a900460ff16600281111561189657fe5b14611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b61191d33600061242590919063ffffffff16565b80611938575061193733600161242590919063ffffffff16565b5b61194157600080fd5b611949613057565b60046000858152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660038111156119ef57fe5b60038111156119fa57fe5b8152505090506000816040015111611a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f436c61696d206e6f7420666f756e64000000000000000000000000000000000081525060200191505060405180910390fd5b60006003811115611a8757fe5b81606001516003811115611a9757fe5b1415611ac75760066000815480929190600190039190505550600760008154809291906001019190505550611b1c565b60016003811115611ad457fe5b81606001516003811115611ae457fe5b1415611b1b576000600560008360000151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8215611b8257600560008260000151815260200190815260200160002060009054906101000a900460ff1615611b5157600080fd5b6001600560008360000151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600083611b90576002611b93565b60015b9050806004600087815260200190815260200160002060030160006101000a81548160ff02191690836003811115611bc757fe5b0217905550847f698a3a7f5c0bc9915a6f167e9ce03ffc660392e807cf6fd57fd9ae52063dd27b8260405180826003811115611bff57fe5b60ff16815260200191505060405180910390a25050505050565b6060611c2684600061260e565b9050611c3481858585612769565b50505050565b600860009054906101000a900460ff1681565b6002806002811115611c5b57fe5b600860009054906101000a900460ff166002811115611c7657fe5b14611ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b611cf1613057565b60046000848152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff166003811115611d9757fe5b6003811115611da257fe5b8152505090506000816040015111611e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f436c61696d206e6f7420666f756e64000000000000000000000000000000000081525060200191505060405180910390fd5b60016003811115611e2f57fe5b81606001516003811115611e3f57fe5b141561203b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca247ac826000015160001c83602001516301e133806040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b505050506040513d6020811015611f2f57600080fd5b810190808051906020019092919050505050611fec600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fac57600080fd5b505afa158015611fc0573d6000803e3d6000fd5b505050506040513d6020811015611fd657600080fd5b8101908080519060200190929190505050612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f19350505050158015612035573d6000803e3d6000fd5b506120c4565b6002600381111561204857fe5b8160600151600381111561205857fe5b14156120ba5761206b8160200151612cb4565b73ffffffffffffffffffffffffffffffffffffffff166108fc82604001519081150290604051600060405180830381858888f193505050501580156120b4573d6000803e3d6000fd5b506120c3565b60006120c257fe5b5b5b60076000815480929190600190039190505550600460008481526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560028201600090556003820160006101000a81549060ff02191690555050505050565b60008090505b848490508110156121785761216b85858381811061215d57fe5b90506020020135600161186d565b8080600101915050612143565b5060008090505b828290508110156121b4576121a783838381811061219957fe5b90506020020135600061186d565b808060010191505061217f565b5050505050565b6121cf33600061242590919063ffffffff16565b612241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206d75737420626520616e206f776e657200000000000000000081525060200191505060405180910390fd5b600080600281111561224f57fe5b600860009054906101000a900460ff16600281111561226a57fe5b146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b6001600860006101000a81548160ff021916908360028111156122fc57fe5b021790555050565b60008090505b8282905081101561233d5761233083838381811061232457fe5b90506020020135611c4d565b808060010191505061230a565b505050565b6301e1338081565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16905084565b60606123b484600061260e565b905060606123c385600161260e565b90506123cd6130a3565b6123e4825184510182612cbe90919063ffffffff16565b506123f88382612d1290919063ffffffff16565b5061240c8282612d1290919063ffffffff16565b5061241d8160000151878787612769565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246057600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f157600080fd5b6124fb8282612425565b61250457600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561259c57600080fd5b6125a68282612425565b156125b057600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600080905060008090505b8381101561266e57845182106126445760405180602001604052806000815250925050506126c6565b60016126598387612d3490919063ffffffff16565b0160ff1682019150808060010191505061261b565b508351811061268f57604051806020016040528060008152509150506126c6565b60006126a48286612d3490919063ffffffff16565b60ff1690506126c16001830182876126f69092919063ffffffff16565b925050505b92915050565b6000815183018451101580156126ed57506126ec84848460008651612d58565b5b90509392505050565b60608351828401111561270857600080fd5b6060826040519080825280601f01601f19166020018201604052801561273d5781602001600182028038833980820191505090505b509050600080602083019150856020880101905061275c828287612d7c565b8293505050509392505050565b600080600281111561277757fe5b600860009054906101000a900460ff16600281111561279257fe5b14612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e207265717569726564207068617365000000000000000000000081525060200191505060405180910390fd5b600061281086612dc5565b905060038110158015612824575060068111155b61282d57600080fd5b600061283b878787876117de565b905060006004600083815260200190815260200160002060020154146128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f436c61696d20616c7265616479207375626d697474656400000000000000000081525060200191505060405180910390fd5b60006128d687600261260e565b511461294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e616d65206d757374206265206120324c44000000000000000000000000000081525060200191505060405180910390fd5b600061295588611119565b9050803410156129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806130be6022913960400191505060405180910390fd5b80341115612a02573373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f19350505050158015612a00573d6000803e3d6000fd5b505b6040518060800160405280898051906020012081526020018773ffffffffffffffffffffffffffffffffffffffff16815260200182815260200160006003811115612a4957fe5b815250600460008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff02191690836003811115612ade57fe5b02179055509050506006600081548092919060010191905055507f186f55cfb37bd38b311b8d5e8a212edf83c4d92107f48dbb7a4a5c217714eab188888389896040518080602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001848103845289818151815260200191508051906020019080838360005b83811015612b9e578082015181840152602081019050612b83565b50505050905090810190601f168015612bcb5780820380516001836020036101000a031916815260200191505b50848103835288818151815260200191508051906020019080838360005b83811015612c04578082015181840152602081019050612be9565b50505050905090810190601f168015612c315780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612c6a578082015181840152602081019050612c4f565b50505050905090810190601f168015612c975780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b6000819050919050565b612cc66130a3565b600060208381612cd257fe5b0614612ceb5760208281612ce257fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b612d1a6130a3565b612d2c83846000015151848551612f3b565b905092915050565b6000828281518110612d4257fe5b602001015160f81c60f81b60f81c905092915050565b6000612d65848484612ff4565b612d70878785612ff4565b14905095945050505050565b5b60208110612da05781518352602083019250602082019150602081039050612d7d565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6000806000809050600084519050600092505b80821015612f30576000858381518110612dee57fe5b602001015160f81c60f81b9050608060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612e3457600183019250612f22565b60e060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612e6d57600283019250612f21565b60f060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612ea657600383019250612f20565b60f8801b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612ede57600483019250612f1f565b60fc60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015612f1757600583019250612f1e565b6006830192505b5b5b5b5b508280600101935050612dd8565b829350505050919050565b612f436130a3565b8251821115612f5157600080fd5b84602001518285011115612f7c57612f7b856002612f758860200151888701613017565b02613033565b5b600080865180518760208301019350808887011115612f9b5787860182525b60208701925050505b60208410612fc75780518252602082019150602081019050602084039350612fa4565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008351828401111561300657600080fd5b818360208601012090509392505050565b6000818311156130295782905061302d565b8190505b92915050565b6060826000015190506130468383612cbe565b506130518382612d12565b50505050565b604051806080016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000600381111561309d57fe5b81525090565b60405180604001604052806060815260200160008152509056fe496e73756666696369656e742066756e647320666f72207265736572766174696f6ea265627a7a723058209a419cd1bb289ec131e1647267278fa7013b2d937091e25901423b4f734f0a4064736f6c634300050a0032

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

000000000000000000000000b9d374d0fe3d8341155663fae31b7beae0ae233a000000000000000000000000fac7bea255a6990f749363002136af6556b31e04000000000000000000000000b8c2c29ee19d8307cb7255e1cd9cbde883a267d5

-----Decoded View---------------
Arg [0] : _priceOracle (address): 0xB9d374d0fE3D8341155663FaE31b7BeAe0aE233A
Arg [1] : _registrar (address): 0xFaC7BEA255a6990f749363002136aF6556b31e04
Arg [2] : _ratifier (address): 0xb8c2C29ee19D8307cb7255e1Cd9CbDE883A267d5

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b9d374d0fe3d8341155663fae31b7beae0ae233a
Arg [1] : 000000000000000000000000fac7bea255a6990f749363002136af6556b31e04
Arg [2] : 000000000000000000000000b8c2c29ee19d8307cb7255e1cd9cbde883a267d5


Deployed Bytecode Sourcemap

35604:12459:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37349:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37349:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37349:94:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36196:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36196:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36233;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36233:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37562:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37562:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37562:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36357:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36357:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37451:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37451:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37451:103:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;41198:344;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41198:344:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;41198:344:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41198:344:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41198:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;41198:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;41198:344:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41198:344:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41198:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;41198:344:0;;;;;;;;;;;;;;;:::i;:::-;;36389:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36389:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38487:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38487:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38487:147:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;38487:147:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38487:147:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38487:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;38487:147:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37253:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37253:88:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37253:88:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;46008:485;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46008:485:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46008:485:0;;;;;;;;;;;;;;;;;:::i;:::-;;42313:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42313:154:0;;;:::i;:::-;;41948:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41948:205:0;;;:::i;:::-;;38031:272;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38031:272:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;38031:272:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;38031:272:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38031:272:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38031:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;38031:272:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;38031:272:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38031:272:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38031:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;38031:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;38031:272:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38031:272:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38031:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;38031:272:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42800:1094;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42800:1094:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42800:1094:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39265:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39265:213:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;39265:213:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39265:213:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;39265:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;39265:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;39265:213:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39265:213:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;39265:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;39265:213:0;;;;;;;;;;;;;;;:::i;:::-;;36424:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36424:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44722:751;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44722:751:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44722:751:0;;;;;;;;;;;;;;;;;:::i;:::-;;44164:326;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44164:326:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44164:326:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;44164:326:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44164:326:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;44164:326:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;44164:326:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44164:326:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;44164:326:0;;;;;;;;;;;;:::i;:::-;;41658:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41658:101:0;;;:::i;:::-;;45639:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45639:173:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45639:173:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45639:173:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45639:173:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45639:173:0;;;;;;;;;;;;:::i;:::-;;35671:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35671:51:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36270:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36270:37:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36270:37:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40108:458;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40108:458:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;40108:458:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40108:458:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40108:458:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;40108:458:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;40108:458:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40108:458:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40108:458:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;40108:458:0;;;;;;;;;;;;;;;:::i;:::-;;37349:94;36940:22;36951:10;36940:6;:10;;:22;;;;:::i;:::-;36932:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37415:20;37429:5;37415:6;:13;;:20;;;;:::i;:::-;37349:94;:::o;36196:30::-;;;;;;;;;;;;;:::o;36233:::-;;;;;;;;;;;;;:::o;37562:109::-;37061:25;37075:10;37061:9;:13;;:25;;;;:::i;:::-;37053:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37637:26;37654:8;37637:9;:16;;:26;;;;:::i;:::-;37562:109;:::o;36357:25::-;;;;:::o;37451:103::-;37061:25;37075:10;37061:9;:13;;:25;;;;:::i;:::-;37053:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37523:23;37537:8;37523:9;:13;;:23;;;;:::i;:::-;37451:103;:::o;41198:344::-;41309:23;41341:17;41350:4;41356:1;41341:8;:17::i;:::-;41309:50;;41378:54;41416:1;41396:10;:17;:21;41419:12;;;;;;;;;;;;;;;;;41378:10;:17;;:54;;;;;:::i;:::-;41370:63;;;;;;41444:90;41463:46;41484:1;41507;41487:10;:17;:21;41463:10;:20;;:46;;;;;:::i;:::-;41512:4;41518:8;41528:5;41444:11;:90::i;:::-;41198:344;;;;:::o;36389:28::-;;;;:::o;38487:147::-;38552:4;38576:11;;;;;;;;;;;:17;;;38594:7;38603:1;35714:8;38576:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;38576:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38576:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38576:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38576:50:0;;;;;;;;;;;;;;;;38569:57;;38487:147;;;:::o;37253:88::-;36940:22;36951:10;36940:6;:10;;:22;;;;:::i;:::-;36932:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37316:17;37327:5;37316:6;:10;;:17;;;;:::i;:::-;37253:88;:::o;46008:485::-;46068:18;;:::i;:::-;46089:6;:15;46096:7;46089:15;;;;;;;;;;;46068:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46177:5;:14;;;46163:28;;:10;:28;;;46155:37;;;;;;46224:14;46208:30;;;;;;;;:5;:12;;;:30;;;;;;;;;46205:128;;;46255:13;;:15;;;;;;;;;;;;;;46205:128;;;46303:16;;:18;;;;;;;;;;;;;;46205:128;46345:25;46355:5;:14;;;46345:9;:25::i;:::-;:34;;:46;46380:5;:10;;;46345:46;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46345:46:0;46426:7;46407:45;46435:16;46407:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;46470:6;:15;46477:7;46470:15;;;;;;;;;;;;46463:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46008:485;;:::o;42313:154::-;36940:22;36951:10;36940:6;:10;;:22;;;;:::i;:::-;36932:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42359:11;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42411:1;42391:16;;:21;42383:30;;;;;;42437:21;42447:10;42437:9;:21::i;:::-;42424:35;;;41948:205;37061:25;37075:10;37061:9;:13;;:25;;;;:::i;:::-;37053:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42002:12;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42113:1;42096:13;;:18;42088:27;;;;;;42134:11;42126:5;;:19;;;;;;;;;;;;;;;;;;;;;;;;37127:1;41948:205::o;38031:272::-;38159:7;38229;38213:25;;;;;;38250:7;38240:18;;;;;;38260:8;38286:5;38270:23;;;;;;38196:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38196:98:0;;;38186:109;;;;;;38179:116;;38031:272;;;;;;:::o;42800:1094::-;42871:12;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42951:22;42962:10;42951:6;:10;;:22;;;;:::i;:::-;:51;;;;42977:25;42991:10;42977:9;:13;;:25;;;;:::i;:::-;42951:51;42943:60;;;;;;43016:18;;:::i;:::-;43037:6;:15;43044:7;43037:15;;;;;;;;;;;43016:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43084:1;43071:5;:10;;;:14;43063:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43137:14;43121:30;;;;;;;;:5;:12;;;:30;;;;;;;;;43118:357;;;43242:13;;:15;;;;;;;;;;;;;;43270:16;;:18;;;;;;;;;;;;;43118:357;;;43325:15;43309:31;;;;;;;;:5;:12;;;:31;;;;;;;;;43306:169;;;43458:5;43425:13;:30;43439:5;:15;;;43425:30;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;43306:169;43118:357;43600:8;43597:128;;;43632:13;:30;43646:5;:15;;;43632:30;;;;;;;;;;;;;;;;;;;;;43631:31;43623:40;;;;;;43709:4;43676:13;:30;43690:5;:15;;;43676:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;43597:128;43737:13;43753:8;:40;;43778:15;43753:40;;;43762:15;43753:40;43737:56;;43829:6;43804;:15;43811:7;43804:15;;;;;;;;;;;:22;;;:31;;;;;;;;;;;;;;;;;;;;;;;;43870:7;43851:35;43879:6;43851:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;37236:1;;42800:1094;;;:::o;39265:213::-;39375:21;39399:17;39408:4;39414:1;39399:8;:17::i;:::-;39375:41;;39427:43;39439:7;39448:4;39454:8;39464:5;39427:11;:43::i;:::-;39265:213;;;;:::o;36424:18::-;;;;;;;;;;;;;:::o;44722:751::-;44776:11;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44800:18;;:::i;:::-;44821:6;:15;44828:7;44821:15;;;;;;;;;;;44800:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44868:1;44855:5;:10;;;:14;44847:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44921:15;44905:31;;;;;;;;:5;:12;;;:31;;;;;;;;;44902:500;;;44953:9;;;;;;;;;;;:18;;;44980:5;:15;;;44972:24;;44998:5;:14;;;35714:8;44953:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44953:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44953:81:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44953:81:0;;;;;;;;;;;;;;;;;45049:28;45059:9;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45059:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45059:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45059:17:0;;;;;;;;;;;;;;;;45049:9;:28::i;:::-;:37;;:49;45087:5;:10;;;45049:49;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45049:49:0;44902:500;;;45135:15;45119:31;;;;;;;;:5;:12;;;:31;;;;;;;;;45116:286;;;45167:25;45177:5;:14;;;45167:9;:25::i;:::-;:34;;:46;45202:5;:10;;;45167:46;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45167:46:0;45116:286;;;45384:5;45377:13;;;;45116:286;44902:500;45414:16;;:18;;;;;;;;;;;;;;45450:6;:15;45457:7;45450:15;;;;;;;;;;;;45443:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37236:1;44722:751;;:::o;44164:326::-;44272:6;44281:1;44272:10;;44268:102;44288:8;;:15;;44284:1;:19;44268:102;;;44325:33;44340:8;;44349:1;44340:11;;;;;;;;;;;;;44353:4;44325:14;:33::i;:::-;44305:3;;;;;;;44268:102;;;;44384:6;44393:1;44384:10;;44380:103;44400:8;;:15;;44396:1;:19;44380:103;;;44437:34;44452:8;;44461:1;44452:11;;;;;;;;;;;;;44465:5;44437:14;:34::i;:::-;44417:3;;;;;;;44380:103;;;;44164:326;;;;:::o;41658:101::-;36940:22;36951:10;36940:6;:10;;:22;;;;:::i;:::-;36932:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41708:10;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41739:12;41731:5;;:20;;;;;;;;;;;;;;;;;;;;;;;;37001:1;41658:101::o;45639:173::-;45715:6;45724:1;45715:10;;45711:94;45731:8;;:15;;45727:1;:19;45711:94;;;45768:25;45781:8;;45790:1;45781:11;;;;;;;;;;;;;45768:12;:25::i;:::-;45748:3;;;;;;;45711:94;;;;45639:173;;:::o;35671:51::-;35714:8;35671:51;:::o;36270:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40108:458::-;40221:23;40253:17;40262:4;40268:1;40253:8;:17::i;:::-;40221:50;;40282:24;40315:17;40324:4;40330:1;40315:8;:17::i;:::-;40282:51;;40344:24;;:::i;:::-;40379:48;40408:11;:18;40388:10;:17;:38;40379:3;:8;;:48;;;;:::i;:::-;;40438:22;40449:10;40438:3;:10;;:22;;;;:::i;:::-;;40471:23;40482:11;40471:3;:10;;:23;;;;:::i;:::-;;40507:51;40526:3;:7;;;40536:4;40542:8;40552:5;40507:11;:51::i;:::-;40108:458;;;;;;:::o;34483:165::-;34555:4;34599:1;34580:21;;:7;:21;;;;34572:30;;;;;;34620:4;:11;;:20;34632:7;34620:20;;;;;;;;;;;;;;;;;;;;;;;;;34613:27;;34483:165;;;;:::o;34200:189::-;34299:1;34280:21;;:7;:21;;;;34272:30;;;;;;34321:18;34325:4;34331:7;34321:3;:18::i;:::-;34313:27;;;;;;34376:5;34353:4;:11;;:20;34365:7;34353:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34200:189;;:::o;33935:186::-;34031:1;34012:21;;:7;:21;;;;34004:30;;;;;;34054:18;34058:4;34064:7;34054:3;:18::i;:::-;34053:19;34045:28;;;;;;34109:4;34086;:11;;:20;34098:7;34086:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33935:186;;:::o;47431:501::-;47500:13;47566:11;47580:1;47566:15;;47596:6;47605:1;47596:10;;47592:143;47612:3;47608:1;:7;47592:143;;;47650:4;:11;47640:6;:21;47637:35;;47663:9;;;;;;;;;;;;;;;;;;47637:35;47722:1;47697:22;47712:6;47697:4;:14;;:22;;;;:::i;:::-;:26;47687:36;;;;;;47617:3;;;;;;;47592:143;;;;47801:4;:11;47791:6;:21;47788:35;;47814:9;;;;;;;;;;;;;;;;;47788:35;47834:8;47845:22;47860:6;47845:4;:14;;:22;;;;:::i;:::-;47834:33;;;;47892:31;47916:1;47907:6;:10;47919:3;47892:4;:14;;:31;;;;;:::i;:::-;47878:46;;;;47431:501;;;;;:::o;26805:207::-;26896:4;26944:5;:12;26935:6;:21;26920:4;:11;:36;;:84;;;;;26960:44;26967:4;26973:6;26981:5;26988:1;26991:5;:12;26960:6;:44::i;:::-;26920:84;26913:91;;26805:207;;;;;:::o;31145:407::-;31228:12;31277:4;:11;31270:3;31261:6;:12;:27;;31253:36;;;;;;31302:16;31331:3;31321:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;31321:14:0;;;;31302:33;;31346:9;31366:8;31428:2;31423:3;31419:12;31411:20;;31471:6;31466:2;31460:4;31456:13;31452:26;31445:33;;31499:22;31506:4;31512:3;31517;31499:6;:22::i;:::-;31541:3;31534:10;;;;;31145:407;;;;;:::o;46501:922::-;46620:10;37198:1;37189:10;;;;;;;;:5;;;;;;;;;;;:10;;;;;;;;;37181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46643:8;46654:16;:7;:14;:16::i;:::-;46643:27;;46696:1;46689:3;:8;;:20;;;;;46708:1;46701:3;:8;;46689:20;46681:29;;;;;;46723:15;46741:46;46756:7;46765:4;46771:8;46781:5;46741:14;:46::i;:::-;46723:64;;46830:1;46806:6;:15;46813:7;46806:15;;;;;;;;;;;:20;;;:25;46798:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46980:1;46951:17;46960:4;46966:1;46951:8;:17::i;:::-;46945:31;:36;46937:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47017:10;47030:21;47043:7;47030:12;:21::i;:::-;47017:34;;47083:5;47070:9;:18;;47062:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47153:5;47141:9;:17;47138:87;;;47175:10;:19;;:38;47207:5;47195:9;:17;47175:38;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47175:38:0;47138:87;47255:65;;;;;;;;47277:7;47261:25;;;;;;47255:65;;;;47288:8;47255:65;;;;;;47298:5;47255:65;;;;47305:14;47255:65;;;;;;;;;;;47237:6;:15;47244:7;47237:15;;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47331:13;;:15;;;;;;;;;;;;;47362:53;47377:7;47386:4;47392:5;47399:8;47409:5;47362:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;47362:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;47362:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;47362:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37236:1;;;46501:922;;;;;:::o;47940:120::-;47995:15;48046:4;48023:29;;47940:120;;;:::o;12310:468::-;12380:13;;:::i;:::-;12427:1;12421:2;12410:8;:13;;;;;;:18;12406:83;;12474:2;12463:8;:13;;;;;;12457:2;:20;12445:32;;;;12406:83;12561:8;12546:3;:12;;:23;;;;;12621:4;12615:11;12652:3;12647;12640:16;12682:1;12677:3;12670:14;12728:8;12723:3;12719:18;12715:2;12711:27;12705:4;12698:41;12589:161;12767:3;12760:10;;12310:468;;;;:::o;16403:163::-;16480:13;;:::i;:::-;16513:45;16519:3;16524;:7;;;:14;16540:4;16546;:11;16513:5;:45::i;:::-;16506:52;;16403:163;;;;:::o;27696:124::-;27767:9;27802:4;27807:3;27802:9;;;;;;;;;;;;;;;;27796:16;;27789:23;;27696:124;;;;:::o;25598:211::-;25717:4;25770:31;25777:5;25784:11;25797:3;25770:6;:31::i;:::-;25741:25;25748:4;25754:6;25762:3;25741:6;:25::i;:::-;:60;25734:67;;25598:211;;;;;;;:::o;30351:566::-;30473:171;30487:2;30480:3;:9;30473:171;;30564:3;30558:10;30552:4;30545:24;30606:2;30598:10;;;;30630:2;30623:9;;;;30498:2;30491:9;;;;30473:171;;;30689:9;30721:1;30714:3;30709:2;:8;30701:3;:17;:21;30689:33;;30792:4;30788:9;30782:3;30776:10;30772:26;30845:4;30838;30832:11;30828:22;30890:7;30880:8;30877:21;30871:4;30864:35;30742:168;;;;;;:::o;10038:627::-;10094:4;10111:8;10130:6;10139:1;10130:10;;10151:15;10175:1;10169:15;10151:33;;10205:1;10199:7;;10195:442;10212:10;10208:1;:14;10195:442;;;10246:6;10261:1;10264;10255:11;;;;;;;;;;;;;;;;10246:20;;10288:4;10284:8;;:1;:8;;;;10281:345;;;10318:1;10313:6;;;;10281:345;;;10349:4;10345:8;;:1;:8;;;;10341:285;;;10379:1;10374:6;;;;10341:285;;;10410:4;10406:8;;:1;:8;;;;10402:224;;;10440:1;10435:6;;;;10402:224;;;10471:4;10467:8;;:1;:8;;;;10463:163;;;10501:1;10496:6;;;;10463:163;;;10532:4;10528:8;;:1;:8;;;;10524:102;;;10562:1;10557:6;;;;10524:102;;;10609:1;10604:6;;;;10524:102;10463:163;10402:224;10341:285;10281:345;10195:442;10224:5;;;;;;;10195:442;;;10654:3;10647:10;;;;;10038:627;;;:::o;14270:1367::-;14365:13;;:::i;:::-;14406:4;:11;14399:3;:18;;14391:27;;;;;;14447:3;:12;;;14441:3;14435;:9;:24;14431:102;;;14476:45;14483:3;14519:1;14488:28;14492:3;:12;;;14512:3;14506;:9;14488:3;:28::i;:::-;:32;14476:6;:45::i;:::-;14431:102;14545:9;14565:8;14678:3;14672:10;14763:6;14757:13;14893:3;14888:2;14880:6;14876:15;14872:25;14864:33;;14991:6;14985:3;14980;14976:13;14973:25;14970:2;;;15042:3;15037;15033:13;15025:6;15018:29;14970:2;15093;15087:4;15083:13;15076:20;;14593:514;;15170:171;15184:2;15177:3;:9;15170:171;;15261:3;15255:10;15249:4;15242:24;15303:2;15295:10;;;;15327:2;15320:9;;;;15195:2;15188:9;;;;15170:171;;;15386:9;15418:1;15411:3;15406:2;:8;15398:3;:17;:21;15386:33;;15489:4;15485:9;15479:3;15473:10;15469:26;15542:4;15535;15529:11;15525:22;15587:7;15577:8;15574:21;15568:4;15561:35;15439:168;;15626:3;15619:10;;;;;14270:1367;;;;;;:::o;22547:243::-;22628:11;22676:4;:11;22669:3;22660:6;:12;:27;;22652:36;;;;;;22768:3;22759:6;22754:2;22748:4;22744:13;22740:26;22730:42;22723:49;;22708:75;;;;;:::o;13401:139::-;13451:4;13476:1;13472;:5;13468:46;;;13501:1;13494:8;;;;13468:46;13531:1;13524:8;;13401:139;;;;;:::o;13222:171::-;13296:19;13318:3;:7;;;13296:29;;13336:19;13341:3;13346:8;13336:4;:19::i;:::-;;13366;13373:3;13378:6;13366;:19::i;:::-;;13222:171;;;:::o;35604:12459::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://9a419cd1bb289ec131e1647267278fa7013b2d937091e25901423b4f734f0a40

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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