ETH Price: $1,890.94 (-1.03%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
SHAPESHIFT218930522025-02-21 6:53:5925 days ago1740120839IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218930302025-02-21 6:49:3525 days ago1740120575IN
0x5bB2333E...6F5710Fd6
0 ETH0.000059070.75
SHAPESHIFT218930112025-02-21 6:45:3525 days ago1740120335IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218929962025-02-21 6:42:3525 days ago1740120155IN
0x5bB2333E...6F5710Fd6
0 ETH0.000059070.75
SHAPESHIFT218929802025-02-21 6:39:2325 days ago1740119963IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218929732025-02-21 6:37:5925 days ago1740119879IN
0x5bB2333E...6F5710Fd6
0 ETH0.000055130.7
SHAPESHIFT218929482025-02-21 6:32:5925 days ago1740119579IN
0x5bB2333E...6F5710Fd6
0 ETH0.000026760.75
SHAPESHIFT218929392025-02-21 6:31:1125 days ago1740119471IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218929302025-02-21 6:29:2325 days ago1740119363IN
0x5bB2333E...6F5710Fd6
0 ETH0.000046250.75
SHAPESHIFT218929182025-02-21 6:26:5925 days ago1740119219IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218929052025-02-21 6:24:2325 days ago1740119063IN
0x5bB2333E...6F5710Fd6
0 ETH0.000059070.75
SHAPESHIFT218928922025-02-21 6:21:4725 days ago1740118907IN
0x5bB2333E...6F5710Fd6
0 ETH0.000099280.7
SHAPESHIFT218928732025-02-21 6:17:5925 days ago1740118679IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218928572025-02-21 6:14:4725 days ago1740118487IN
0x5bB2333E...6F5710Fd6
0 ETH0.000106370.75
SHAPESHIFT218928372025-02-21 6:10:4725 days ago1740118247IN
0x5bB2333E...6F5710Fd6
0 ETH0.000046250.75
SHAPESHIFT218928322025-02-21 6:09:4725 days ago1740118187IN
0x5bB2333E...6F5710Fd6
0 ETH0.000059070.75
SHAPESHIFT218928122025-02-21 6:05:4725 days ago1740117947IN
0x5bB2333E...6F5710Fd6
0 ETH0.000059070.75
SHAPESHIFT218050632025-02-08 23:26:1137 days ago1739057171IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050522025-02-08 23:23:5937 days ago1739057039IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050392025-02-08 23:21:1137 days ago1739056871IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050322025-02-08 23:19:4737 days ago1739056787IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050232025-02-08 23:17:5937 days ago1739056679IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050092025-02-08 23:15:1137 days ago1739056511IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218050002025-02-08 23:13:2337 days ago1739056403IN
0x5bB2333E...6F5710Fd6
0 ETH0.000117720.83
SHAPESHIFT218049942025-02-08 23:12:1137 days ago1739056331IN
0x5bB2333E...6F5710Fd6
0 ETH0.000044090.86
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BLONKSuri

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : URI.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/// @title BLONKS URI Shapeshifter Contract v3.0.0
/// @author Matto AKA MonkMatto
/// @notice This contract manages BLONKS token image and metadata generation.
/// @dev This contract allows EVM renderer changes.
/// @custom:security-contact [email protected]

interface iBLONKSmain {
    function ownerOf(uint256 _tokenId) external view returns (address);

    function tokenEntropyMap(uint256 _tokenId) external view returns (uint256);
}

interface iBLONKStraits {
    function calculateTraitsArray(
        uint256 _tokenEntropy
    ) external view returns (uint8[11] memory);

    function calculateTraitsJSON(
        uint8[11] memory _traitsArray
    ) external view returns (string memory);
}

interface iBLONKSlocations {
    function calculateLocatsArray(
        uint256 _ownerEntropy,
        uint256 _tokenEntropy,
        uint8[11] memory _traitsArray
    ) external view returns (uint16[110] memory);
}

interface iBLONKSsvg {
    function assembleSVG(
        uint256 _ownerEntropy,
        uint256 _tokenEntropy,
        uint8[11] memory _traitsArray,
        uint16[110] memory _locatsArray
    ) external view returns (string memory);
}

interface iBLONKSdescriptions {
    function buildDynamicDescription(
        address _ownerAddy,
        uint256 _shapeshiftCount,
        string memory _collectionDescription,
        string memory _shifterName,
        uint256 _shifterActive,
        uint256 _shifterMax
    ) external view returns (string memory);
}

interface iDelegate {
    function checkDelegateForContract(
        address _delegate,
        address _vault,
        address _contract
    ) external view returns (bool);
}

contract BLONKSuri is Ownable {
    using Counters for Counters.Counter;
    using Strings for string;

    address private constant mainContract =
        0x7f463b874eC264dC7BD8C780f5790b4Fc371F11f;
    address private constant delegateContract =
        0x00000000000076A84feF008CDAbe6409d2FE638B;
    address private descriptionsContract;

    struct Shapeshifter {
        address traits;
        address locats;
        address svg;
        string name;
        uint16 max;
        uint16 active;
        bool openToAll;
    }

    Shapeshifter[] public Shapeshifters;
    string public artistNameOverride;
    mapping(uint256 => uint256) public shifterStateMap;
    mapping(uint256 => uint256) public idMap;
    mapping(uint256 => bool) private idSetMap;
    mapping(uint256 => bool) public tokenStateLock;
    mapping(uint256 => string) public uniqueNameMap;
    mapping(uint256 => mapping(uint256 => uint256)) public tokenShiftCounts;
    bool public shapeshiftingAllowed;

    event Shapeshift(uint256 indexed _tokenId, uint256 _state);

    event NewShapeshifter(
        address _traits,
        address _locations,
        address _svg,
        string _name,
        uint16 _max,
        bool _openToAll
    );

    function SHAPESHIFT(uint256 _tokenId, uint256 _state) external {
        address ownerAddy = iBLONKSmain(mainContract).ownerOf(_tokenId);
        require(shapeshiftingAllowed == true, "Shapeshifting is paused");
        require(
            ownerAddy == msg.sender ||
                iDelegate(delegateContract).checkDelegateForContract(
                    msg.sender,
                    ownerAddy,
                    mainContract
                ) ||
                msg.sender == owner(),
            "Not authorized"
        );
        require(_state < Shapeshifters.length, "Shapeshifter out of range");
        require(
            Shapeshifters[_state].active < Shapeshifters[_state].max,
            "Shapeshift max reached"
        );
        bool isOpenShifter = Shapeshifters[_state].openToAll;
        require(isOpenShifter || msg.sender == owner(), "Not authorized");
        require(tokenStateLock[_tokenId] == false, "Token is locked");
        if (!isOpenShifter) {
            tokenStateLock[_tokenId] = true;
        }
        if (idSetMap[_tokenId] == false) {
            idSetMap[_tokenId] = true;
            idMap[
                iBLONKSmain(mainContract).tokenEntropyMap(_tokenId)
            ] = _tokenId;
        }
        Shapeshifters[shifterStateMap[_tokenId]].active--;
        Shapeshifters[_state].active++;
        shifterStateMap[_tokenId] = _state;
        tokenShiftCounts[_tokenId][_state]++;
        emit Shapeshift(_tokenId, _state);
    }

    function addShapeshifter(
        address _traits,
        address _locations,
        address _svg,
        string memory _name,
        uint16 _max,
        bool _openToAll
    ) external onlyOwner {
        uint16 _active;
        if (Shapeshifters.length == 0) {
            _active = 4444;
        }
        Shapeshifters.push(
            Shapeshifter(
                _traits,
                _locations,
                _svg,
                _name,
                _max,
                _active,
                _openToAll
            )
        );
        emit NewShapeshifter(
            _traits,
            _locations,
            _svg,
            _name,
            _max,
            _openToAll
        );
    }

    function addUniqueName(
        uint256 _tokenId,
        string memory _name
    ) external onlyOwner {
        require(tokenStateLock[_tokenId] == true, "Token is not locked");
        uniqueNameMap[_tokenId] = _name;
    }

    function getShapeshiftAvailability()
        external
        view
        returns (uint256[] memory)
    {
        uint256[] memory available = new uint256[](Shapeshifters.length);
        for (uint256 i = 0; i < available.length; i++) {
            available[i] = (Shapeshifters[i].max - Shapeshifters[i].active);
        }
        return available;
    }

    function getTokenShapeshiftTotals(
        uint256 _tokenId
    ) public view returns (uint256) {
        uint256 totals;
        for (uint256 i = 0; i < Shapeshifters.length; i++) {
            totals += tokenShiftCounts[_tokenId][i];
        }
        return totals;
    }

    function buildMetaPart(
        uint256 _tokenId,
        string memory _collectionDescription,
        address _artistAddy,
        uint256 _royaltyBps,
        string memory _collection,
        string memory _website,
        string memory _externalURL
    ) external view virtual returns (string memory) {
        string memory _name;
        if (tokenStateLock[_tokenId] == false) {
            _name = Shapeshifters[shifterStateMap[_tokenId]].name;
        } else {
            _name = uniqueNameMap[_tokenId];
        }

        uint256 state = shifterStateMap[_tokenId];
        string memory tokenDescription = iBLONKSdescriptions(
            descriptionsContract
        ).buildDynamicDescription(
                iBLONKSmain(mainContract).ownerOf(_tokenId),
                getTokenShapeshiftTotals(_tokenId),
                _collectionDescription,
                Shapeshifters[state].name,
                Shapeshifters[state].active,
                Shapeshifters[state].max
            );

        string memory metaP = string(
            abi.encodePacked(
                '{"name":"',
                _name,
                ' #',
                Strings.toString(_tokenId),
                '","artist":"',
                artistNameOverride,
                '","description":"',
                tokenDescription,
                '","royaltyInfo":{"artistAddress":"',
                Strings.toHexString(uint160(_artistAddy), 20),
                '","royaltyFeeByID":',
                Strings.toString(_royaltyBps / 100),
                '},"collection_name":"',
                _collection,
                '","website":"',
                _website,
                '","external_url":"',
                _externalURL,
                '","script_type":"Solidity","image_type":"Generative SVG","image":"data:image/svg+xml;base64,'
            )
        );
        return metaP;
    }

    function buildContractURI(
        string memory _collectionDescription,
        string memory _externalURL,
        uint256 _royaltyBps,
        address _artistAddy,
        string memory _svg
    ) external view virtual returns (string memory) {
        string memory b64svg = Base64.encode(bytes(_svg));
        string memory contractURI = string(
            abi.encodePacked(
                '{"name":"BLONKS","description":"',
                _collectionDescription,
                '","image":"data:image/svg+xml;base64,',
                b64svg,
                '","external_link":"',
                _externalURL,
                '","royalty_basis_points":',
                Strings.toString(_royaltyBps),
                ',"royalty_recipient":"',
                Strings.toHexString(uint160(_artistAddy), 20),
                '"}'
            )
        );
        return contractURI;
    }

    function getLegibleTokenURI(
        string memory _metaP,
        uint256 _tokenEntropy,
        uint256 _ownerEntropy
    ) external view virtual returns (string memory) {
        uint256 _state = shifterStateMap[idMap[_tokenEntropy]];
        uint8[11] memory traitsArray = iBLONKStraits(
            Shapeshifters[_state].traits
        ).calculateTraitsArray(_tokenEntropy);
        _tokenEntropy /= 10 ** 18;
        string memory traitsJSON = iBLONKStraits(Shapeshifters[_state].traits)
            .calculateTraitsJSON(traitsArray);
        uint16[110] memory locatsArray = iBLONKSlocations(
            Shapeshifters[_state].locats
        ).calculateLocatsArray(_ownerEntropy, _tokenEntropy, traitsArray);
        _ownerEntropy /= 10 ** 29;
        _tokenEntropy /= 10 ** 15;
        string memory svg = iBLONKSsvg(Shapeshifters[_state].svg).assembleSVG(
            _ownerEntropy,
            _tokenEntropy,
            traitsArray,
            locatsArray
        );
        string memory legibleURI = string(
            abi.encodePacked(
                _metaP,
                Base64.encode(bytes(svg)),
                '",',
                traitsJSON,
                "}"
            )
        );
        return legibleURI;
    }

    function buildPreviewSVG(
        uint256 _tokenEntropy,
        uint256 _addressEntropy
    ) external view virtual returns (string memory) {
        return
            _renderSVG(
                _tokenEntropy,
                _addressEntropy,
                shifterStateMap[idMap[_tokenEntropy]]
            );
    }

    function _renderSVG(
        uint256 _tokenEntropy,
        uint256 _addressEntropy,
        uint256 _state
    ) internal view returns (string memory) {
        uint8[11] memory traitsArray = iBLONKStraits(
            Shapeshifters[_state].traits
        ).calculateTraitsArray(_tokenEntropy);
        _tokenEntropy /= 10 ** 18;
        uint16[110] memory locatsArray = iBLONKSlocations(
            Shapeshifters[_state].locats
        ).calculateLocatsArray(_addressEntropy, _tokenEntropy, traitsArray);
        _addressEntropy /= 10 ** 29;
        _tokenEntropy /= 10 ** 15;
        string memory svg = iBLONKSsvg(Shapeshifters[_state].svg).assembleSVG(
            _addressEntropy,
            _tokenEntropy,
            traitsArray,
            locatsArray
        );
        return svg;
    }

    function RANDOM_RENDER_SVG(
        uint256 _state
    ) public view returns (string memory) {
        uint256 _tokenEntropy = uint256(
            keccak256(
                abi.encodePacked(blockhash(block.number - 1), block.basefee)
            )
        );
        uint256 _addressEntropy = uint256(
            uint160(
                uint256(
                    keccak256(abi.encodePacked(block.coinbase, block.timestamp))
                )
            )
        );
        return _renderSVG(_tokenEntropy, _addressEntropy, _state);
    }

    function RANDOM_RENDER_B64(
        uint256 _state
    ) external view returns (string memory) {
        string memory svg = RANDOM_RENDER_SVG(_state);
        return
            string(
                abi.encodePacked(
                    "data:image/svg+xml;base64,",
                    Base64.encode(bytes(svg))
                )
            );
    }

    function PREVIEW_SHAPESHIFTER_SVG(
        uint256 _tokenId,
        address _addy,
        uint256 _state
    ) public view returns (string memory) {
        require(_state < Shapeshifters.length, "Shapeshifter out of range");
        return
            _renderSVG(
                iBLONKSmain(mainContract).tokenEntropyMap(_tokenId),
                uint256(uint160(_addy)),
                _state
            );
    }

    function PREVIEW_SHAPESHIFTER_B64(
        uint256 _tokenId,
        address _addy,
        uint256 _state
    ) external view returns (string memory) {
        string memory svg = PREVIEW_SHAPESHIFTER_SVG(_tokenId, _addy, _state);
        return
            string(
                abi.encodePacked(
                    "data:image/svg+xml;base64,",
                    Base64.encode(bytes(svg))
                )
            );
    }

    function getBase64TokenURI(
        string memory _legibleURI
    ) external view virtual returns (string memory) {
        string memory URIBase64 = string(
            abi.encodePacked(
                "data:application/json;base64,",
                Base64.encode(bytes(_legibleURI))
            )
        );
        return URIBase64;
    }

    function setArtistNameOverride(
        string memory _artistNameOverride
    ) external onlyOwner {
        artistNameOverride = _artistNameOverride;
    }

    function setDescriptionsContract(
        address _descriptionsContract
    ) external onlyOwner {
        descriptionsContract = _descriptionsContract;
    }

    function updateShapeshifter(
        uint256 _state,
        address _traits,
        address _locats,
        address _svg,
        string memory _name,
        uint16 _max,
        uint16 _active,
        bool _openToAll
    ) external onlyOwner {
        require(shapeshiftingAllowed == false, "Shapeshifter setting allowed");
        Shapeshifter storage shapeshifter = Shapeshifters[_state];
        shapeshifter.traits = _traits;
        shapeshifter.locats = _locats;
        shapeshifter.svg = _svg;
        shapeshifter.name = _name;
        shapeshifter.max = _max;
        shapeshifter.active = _active;
        shapeshifter.openToAll = _openToAll;
    }

    function toggleShapeshiftingAllowed() external onlyOwner {
        shapeshiftingAllowed = !shapeshiftingAllowed;
    }
}

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";
        uint256 encodedLen = 4 * ((len + 2) / 3);
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(
                    out,
                    and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)
                )
                out := shl(8, out)
                out := add(
                    out,
                    and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)
                )
                out := shl(8, out)
                out := add(
                    out,
                    and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)
                )
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

File 3 of 5 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

pragma solidity ^0.8.0;

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

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

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

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_traits","type":"address"},{"indexed":false,"internalType":"address","name":"_locations","type":"address"},{"indexed":false,"internalType":"address","name":"_svg","type":"address"},{"indexed":false,"internalType":"string","name":"_name","type":"string"},{"indexed":false,"internalType":"uint16","name":"_max","type":"uint16"},{"indexed":false,"internalType":"bool","name":"_openToAll","type":"bool"}],"name":"NewShapeshifter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_state","type":"uint256"}],"name":"Shapeshift","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_addy","type":"address"},{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"PREVIEW_SHAPESHIFTER_B64","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_addy","type":"address"},{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"PREVIEW_SHAPESHIFTER_SVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"RANDOM_RENDER_B64","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"RANDOM_RENDER_SVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"SHAPESHIFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Shapeshifters","outputs":[{"internalType":"address","name":"traits","type":"address"},{"internalType":"address","name":"locats","type":"address"},{"internalType":"address","name":"svg","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint16","name":"max","type":"uint16"},{"internalType":"uint16","name":"active","type":"uint16"},{"internalType":"bool","name":"openToAll","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_locations","type":"address"},{"internalType":"address","name":"_svg","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint16","name":"_max","type":"uint16"},{"internalType":"bool","name":"_openToAll","type":"bool"}],"name":"addShapeshifter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"addUniqueName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artistNameOverride","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_collectionDescription","type":"string"},{"internalType":"string","name":"_externalURL","type":"string"},{"internalType":"uint256","name":"_royaltyBps","type":"uint256"},{"internalType":"address","name":"_artistAddy","type":"address"},{"internalType":"string","name":"_svg","type":"string"}],"name":"buildContractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_collectionDescription","type":"string"},{"internalType":"address","name":"_artistAddy","type":"address"},{"internalType":"uint256","name":"_royaltyBps","type":"uint256"},{"internalType":"string","name":"_collection","type":"string"},{"internalType":"string","name":"_website","type":"string"},{"internalType":"string","name":"_externalURL","type":"string"}],"name":"buildMetaPart","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenEntropy","type":"uint256"},{"internalType":"uint256","name":"_addressEntropy","type":"uint256"}],"name":"buildPreviewSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_legibleURI","type":"string"}],"name":"getBase64TokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_metaP","type":"string"},{"internalType":"uint256","name":"_tokenEntropy","type":"uint256"},{"internalType":"uint256","name":"_ownerEntropy","type":"uint256"}],"name":"getLegibleTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getShapeshiftAvailability","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getTokenShapeshiftTotals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_artistNameOverride","type":"string"}],"name":"setArtistNameOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_descriptionsContract","type":"address"}],"name":"setDescriptionsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shapeshiftingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shifterStateMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleShapeshiftingAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenShiftCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenStateLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniqueNameMap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"},{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_locats","type":"address"},{"internalType":"address","name":"_svg","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint16","name":"_max","type":"uint16"},{"internalType":"uint16","name":"_active","type":"uint16"},{"internalType":"bool","name":"_openToAll","type":"bool"}],"name":"updateShapeshifter","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b5062000031620000256200003760201b60201c565b6200003e60201b60201c565b620000ff565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6152c4806200010d5f395ff3fe608060405234801561000f575f80fd5b50600436106101cd575f3560e01c80638da5cb5b11610102578063d5024f06116100a0578063f2fde38b1161006f578063f2fde38b146105b5578063fd8fd066146105d1578063fd9639b3146105ef578063fddb1e801461060b576101cd565b8063d5024f0614610503578063e2fc2ae514610533578063ec805b5414610569578063f1267abd14610599576101cd565b8063a14def54116100dc578063a14def5414610443578063ac7dfb3014610473578063afa94d6c146104a3578063b4d06332146104d3576101cd565b80638da5cb5b146103c55780638ecfc5e4146103e35780639114ad5c14610413576101cd565b8063549fc8371161016f57806370735bcd1161014957806370735bcd14610351578063715018a61461035b5780637a4a3dc8146103655780637b424a6a14610395576101cd565b8063549fc837146102d35780635b265342146103035780635be38c6314610333576101cd565b8063419fa1fb116101ab578063419fa1fb146102395780634a6ad9ab146102695780634d2e12691461028557806351bf0f52146102b5576101cd565b80632be699a4146101d157806331289fb3146101ed5780633ef7c2591461021d575b5f80fd5b6101eb60048036038101906101e69190612fd9565b610627565b005b610207600480360381019061020291906130b1565b6108f4565b6040516102149190613156565b60405180910390f35b61023760048036038101906102329190613176565b610932565b005b610253600480360381019061024e9190613243565b610b60565b6040516102609190613156565b60405180910390f35b610283600480360381019061027e9190613243565b610b96565b005b61029f600480360381019061029a919061328a565b610c25565b6040516102ac91906132d7565b60405180910390f35b6102bd610c45565b6040516102ca91906132ff565b60405180910390f35b6102ed60048036038101906102e89190613318565b610c57565b6040516102fa9190613156565b60405180910390f35b61031d60048036038101906103189190613368565b610c99565b60405161032a9190613156565b60405180910390f35b61033b610d08565b6040516103489190613156565b60405180910390f35b610359610d94565b005b610363610e3a565b005b61037f600480360381019061037a91906130b1565b610ec1565b60405161038c9190613156565b60405180910390f35b6103af60048036038101906103aa9190613318565b610f5c565b6040516103bc9190613156565b60405180910390f35b6103cd61105a565b6040516103da9190613442565b60405180910390f35b6103fd60048036038101906103f8919061345b565b611081565b60405161040a9190613156565b60405180910390f35b61042d600480360381019061042891906130b1565b61145f565b60405161043a91906132d7565b60405180910390f35b61045d600480360381019061045891906130b1565b611474565b60405161046a91906132d7565b60405180910390f35b61048d600480360381019061048891906130b1565b611489565b60405161049a91906132d7565b60405180910390f35b6104bd60048036038101906104b8919061328a565b6114e5565b6040516104ca9190613156565b60405180910390f35b6104ed60048036038101906104e891906130b1565b61151c565b6040516104fa9190613156565b60405180910390f35b61051d600480360381019061051891906130b1565b6115b1565b60405161052a91906132ff565b60405180910390f35b61054d600480360381019061054891906130b1565b6115ce565b6040516105609796959493929190613577565b60405180910390f35b610583600480360381019061057e91906135eb565b611726565b6040516105909190613156565b60405180910390f35b6105b360048036038101906105ae9190613657565b611ad7565b005b6105cf60048036038101906105ca9190613657565b611b96565b005b6105d9611c8c565b6040516105e69190613739565b60405180910390f35b61060960048036038101906106049190613759565b611d95565b005b6106256004803603810190610620919061328a565b611e98565b005b61062f612546565b73ffffffffffffffffffffffffffffffffffffffff1661064d61105a565b73ffffffffffffffffffffffffffffffffffffffff16146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906137fd565b60405180910390fd5b5f80600280549050036106b65761115c90505b60026040518060e001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018561ffff1681526020018361ffff168152602001841515815250908060018154018082558091505060019003905f5260205f2090600502015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190816108429190613a15565b506080820151816004015f6101000a81548161ffff021916908361ffff16021790555060a08201518160040160026101000a81548161ffff021916908361ffff16021790555060c08201518160040160046101000a81548160ff02191690831515021790555050507fea094a222979d47956b4d87b928349a1560ebdd04d74b9641c8e279fe55e39958787878787876040516108e396959493929190613ae4565b60405180910390a150505050505050565b60605f6109008361151c565b905061090b8161254d565b60405160200161091b9190613bce565b604051602081830303815290604052915050919050565b61093a612546565b73ffffffffffffffffffffffffffffffffffffffff1661095861105a565b73ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906137fd565b60405180910390fd5b5f1515600a5f9054906101000a900460ff16151514610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990613c39565b60405180910390fd5b5f60028981548110610a1757610a16613c57565b5b905f5260205f209060050201905087815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816003019081610afb9190613a15565b5083816004015f6101000a81548161ffff021916908361ffff160217905550828160040160026101000a81548161ffff021916908361ffff160217905550818160040160046101000a81548160ff021916908315150217905550505050505050505050565b60605f610b6c8361254d565b604051602001610b7c9190613cce565b604051602081830303815290604052905080915050919050565b610b9e612546565b73ffffffffffffffffffffffffffffffffffffffff16610bbc61105a565b73ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906137fd565b60405180910390fd5b8060039081610c219190613a15565b5050565b6009602052815f5260405f20602052805f5260405f205f91509150505481565b600a5f9054906101000a900460ff1681565b60605f610c65858585610f5c565b9050610c708161254d565b604051602001610c809190613bce565b6040516020818303038152906040529150509392505050565b60605f610ca58361254d565b90505f878288610cb4896126dd565b610cd58973ffffffffffffffffffffffffffffffffffffffff166014612836565b604051602001610ce9959493929190613ed1565b6040516020818303038152906040529050809250505095945050505050565b60038054610d1590613848565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4190613848565b8015610d8c5780601f10610d6357610100808354040283529160200191610d8c565b820191905f5260205f20905b815481529060010190602001808311610d6f57829003601f168201915b505050505081565b610d9c612546565b73ffffffffffffffffffffffffffffffffffffffff16610dba61105a565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906137fd565b60405180910390fd5b600a5f9054906101000a900460ff1615600a5f6101000a81548160ff021916908315150217905550565b610e42612546565b73ffffffffffffffffffffffffffffffffffffffff16610e6061105a565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906137fd565b60405180910390fd5b610ebf5f612a6b565b565b6008602052805f5260405f205f915090508054610edd90613848565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0990613848565b8015610f545780601f10610f2b57610100808354040283529160200191610f54565b820191905f5260205f20905b815481529060010190602001808311610f3757829003601f168201915b505050505081565b60606002805490508210610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90613fa7565b60405180910390fd5b611051737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff1663dbc119d7866040518263ffffffff1660e01b8152600401610ff591906132d7565b602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613fd9565b8473ffffffffffffffffffffffffffffffffffffffff1684612b2c565b90509392505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060805f151560075f8b81526020019081526020015f205f9054906101000a900460ff1615150361116e57600260045f8b81526020019081526020015f2054815481106110d1576110d0613c57565b5b905f5260205f20906005020160030180546110eb90613848565b80601f016020809104026020016040519081016040528092919081815260200182805461111790613848565b80156111625780601f1061113957610100808354040283529160200191611162565b820191905f5260205f20905b81548152906001019060200180831161114557829003601f168201915b50505050509050611209565b60085f8a81526020019081526020015f20805461118a90613848565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613848565b80156112015780601f106111d857610100808354040283529160200191611201565b820191905f5260205f20905b8154815290600101906020018083116111e457829003601f168201915b505050505090505b5f60045f8b81526020019081526020015f205490505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a61de26737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff16636352211e8e6040518263ffffffff1660e01b81526004016112a991906132d7565b602060405180830381865afa1580156112c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e89190614018565b6112f18e611489565b8d6002878154811061130657611305613c57565b5b905f5260205f2090600502016003016002888154811061132957611328613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff166002898154811061135b5761135a613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff166040518763ffffffff1660e01b8152600401611399969594939291906140f4565b5f60405180830381865afa1580156113b3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906113db91906141cf565b90505f836113e88d6126dd565b60038461140c8e73ffffffffffffffffffffffffffffffffffffffff166014612836565b61142160648f61141c9190614270565b6126dd565b8d8d8d60405160200161143c99989796959493929190614676565b604051602081830303815290604052905080945050505050979650505050505050565b6005602052805f5260405f205f915090505481565b6004602052805f5260405f205f915090505481565b5f805f5b6002805490508110156114db5760095f8581526020019081526020015f205f8281526020019081526020015f2054826114c69190614762565b915080806114d390614795565b91505061148d565b5080915050919050565b6060611514838360045f60055f8981526020019081526020015f205481526020019081526020015f2054612b2c565b905092915050565b60605f60014361152c91906147dc565b404860405160200161153f929190614858565b604051602081830303815290604052805190602001205f1c90505f414260405160200161156d9291906148d9565b604051602081830303815290604052805190602001205f1c73ffffffffffffffffffffffffffffffffffffffff1690506115a8828286612b2c565b92505050919050565b6007602052805f5260405f205f915054906101000a900460ff1681565b600281815481106115dd575f80fd5b905f5260205f2090600502015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301805461166b90613848565b80601f016020809104026020016040519081016040528092919081815260200182805461169790613848565b80156116e25780601f106116b9576101008083540402835291602001916116e2565b820191905f5260205f20905b8154815290600101906020018083116116c557829003601f168201915b505050505090806004015f9054906101000a900461ffff16908060040160029054906101000a900461ffff16908060040160049054906101000a900460ff16905087565b60605f60045f60055f8781526020019081526020015f205481526020019081526020015f205490505f6002828154811061176357611762613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3ec0475866040518263ffffffff1660e01b81526004016117c991906132d7565b61016060405180830381865afa1580156117e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180991906149ec565b9050670de0b6b3a76400008561181f9190614270565b94505f6002838154811061183657611835613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aaebbea8836040518263ffffffff1660e01b815260040161189c9190614abd565b5f60405180830381865afa1580156118b6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118de91906141cf565b90505f600284815481106118f5576118f4613c57565b5b905f5260205f2090600502016001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663401a28d88789866040518463ffffffff1660e01b815260040161196093929190614ad7565b610dc060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a09190614bcf565b90506c01431e0fae6d7217caa0000000866119bb9190614270565b955066038d7ea4c68000876119d09190614270565b96505f600285815481106119e7576119e6613c57565b5b905f5260205f2090600502016002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663703996db888a87866040518563ffffffff1660e01b8152600401611a549493929190614ca0565b5f60405180830381865afa158015611a6e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a9691906141cf565b90505f89611aa38361254d565b85604051602001611ab693929190614d79565b60405160208183030381529060405290508096505050505050509392505050565b611adf612546565b73ffffffffffffffffffffffffffffffffffffffff16611afd61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906137fd565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b9e612546565b73ffffffffffffffffffffffffffffffffffffffff16611bbc61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906137fd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790614e2f565b60405180910390fd5b611c8981612a6b565b50565b60605f60028054905067ffffffffffffffff811115611cae57611cad612e49565b5b604051908082528060200260200182016040528015611cdc5781602001602082028036833780820191505090505b5090505f5b8151811015611d8d5760028181548110611cfe57611cfd613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff1660028281548110611d3057611d2f613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff16611d579190614e4d565b61ffff16828281518110611d6e57611d6d613c57565b5b6020026020010181815250508080611d8590614795565b915050611ce1565b508091505090565b611d9d612546565b73ffffffffffffffffffffffffffffffffffffffff16611dbb61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906137fd565b60405180910390fd5b6001151560075f8481526020019081526020015f205f9054906101000a900460ff16151514611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90614ecc565b60405180910390fd5b8060085f8481526020019081526020015f209081611e939190613a15565b505050565b5f737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611ee691906132d7565b602060405180830381865afa158015611f01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f259190614018565b905060011515600a5f9054906101000a900460ff16151514611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614f34565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061205057506d76a84fef008cdabe6409d2fe638b73ffffffffffffffffffffffffffffffffffffffff166390c9a2d03383737f463b874ec264dc7bd8c780f5790b4fc371f11f6040518463ffffffff1660e01b815260040161201093929190614f52565b602060405180830381865afa15801561202b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204f9190614f9b565b5b8061208d575061205e61105a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390615010565b60405180910390fd5b6002805490508210612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90613fa7565b60405180910390fd5b6002828154811061212757612126613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff1661ffff166002838154811061215c5761215b613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff1661ffff16106121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590615078565b60405180910390fd5b5f600283815481106121d3576121d2613c57565b5b905f5260205f20906005020160040160049054906101000a900460ff1690508080612230575061220161105a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690615010565b60405180910390fd5b5f151560075f8681526020019081526020015f205f9054906101000a900460ff161515146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c9906150e0565b60405180910390fd5b8061230157600160075f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f151560065f8681526020019081526020015f205f9054906101000a900460ff161515036123f457600160065f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508360055f737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff1663dbc119d7886040518263ffffffff1660e01b81526004016123a391906132d7565b602060405180830381865afa1580156123be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e29190613fd9565b81526020019081526020015f20819055505b600260045f8681526020019081526020015f20548154811061241957612418613c57565b5b905f5260205f209060050201600401600281819054906101000a900461ffff1680929190612446906150fe565b91906101000a81548161ffff021916908361ffff160217905550506002838154811061247557612474613c57565b5b905f5260205f209060050201600401600281819054906101000a900461ffff16809291906124a290615125565b91906101000a81548161ffff021916908361ffff160217905550508260045f8681526020019081526020015f208190555060095f8581526020019081526020015f205f8481526020019081526020015f205f81548092919061250390614795565b9190505550837ff5830b23450539a2f9b0c796013b74ddc22d97cb3f0ed1b9aee471ac875abf918460405161253891906132d7565b60405180910390a250505050565b5f33905090565b60605f825190505f81036125725760405180602001604052805f8152509150506126d8565b5f60036002836125829190614762565b61258c9190614270565b6004612598919061514e565b90505f6020826125a89190614762565b67ffffffffffffffff8111156125c1576125c0612e49565b5b6040519080825280601f01601f1916602001820160405280156125f35781602001600182028036833780820191505090505b5090505f60405180606001604052806040815260200161524f60409139905060018101602083015f5b868110156126955760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061261c565b5060038606600181146126af57600281146126bf576126ca565b613d3d60f01b60028303526126ca565b603d60f81b60018303525b508484525050819450505050505b919050565b60605f8203612723576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612831565b5f8290505f5b5f821461275257808061273b90614795565b915050600a8261274b9190614270565b9150612729565b5f8167ffffffffffffffff81111561276d5761276c612e49565b5b6040519080825280601f01601f19166020018201604052801561279f5781602001600182028036833780820191505090505b5090505b5f851461282a576001826127b791906147dc565b9150600a856127c6919061518f565b60306127d29190614762565b60f81b8183815181106127e8576127e7613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856128239190614270565b94506127a3565b8093505050505b919050565b60605f6002836002612848919061514e565b6128529190614762565b67ffffffffffffffff81111561286b5761286a612e49565b5b6040519080825280601f01601f19166020018201604052801561289d5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106128d4576128d3613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061293757612936613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002612975919061514e565b61297f9190614762565b90505b6001811115612a1e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106129c1576129c0613c57565b5b1a60f81b8282815181106129d8576129d7613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080612a17906151bf565b9050612982565b505f8414612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890615230565b60405180910390fd5b8091505092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60605f60028381548110612b4357612b42613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3ec0475866040518263ffffffff1660e01b8152600401612ba991906132d7565b61016060405180830381865afa158015612bc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612be991906149ec565b9050670de0b6b3a764000085612bff9190614270565b94505f60028481548110612c1657612c15613c57565b5b905f5260205f2090600502016001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663401a28d88688856040518463ffffffff1660e01b8152600401612c8193929190614ad7565b610dc060405180830381865afa158015612c9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc19190614bcf565b90506c01431e0fae6d7217caa000000085612cdc9190614270565b945066038d7ea4c6800086612cf19190614270565b95505f60028581548110612d0857612d07613c57565b5b905f5260205f2090600502016002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663703996db878986866040518563ffffffff1660e01b8152600401612d759493929190614ca0565b5f60405180830381865afa158015612d8f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612db791906141cf565b90508093505050509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e0082612dd7565b9050919050565b612e1081612df6565b8114612e1a575f80fd5b50565b5f81359050612e2b81612e07565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e7f82612e39565b810181811067ffffffffffffffff82111715612e9e57612e9d612e49565b5b80604052505050565b5f612eb0612dc6565b9050612ebc8282612e76565b919050565b5f67ffffffffffffffff821115612edb57612eda612e49565b5b612ee482612e39565b9050602081019050919050565b828183375f83830152505050565b5f612f11612f0c84612ec1565b612ea7565b905082815260208101848484011115612f2d57612f2c612e35565b5b612f38848285612ef1565b509392505050565b5f82601f830112612f5457612f53612e31565b5b8135612f64848260208601612eff565b91505092915050565b5f61ffff82169050919050565b612f8381612f6d565b8114612f8d575f80fd5b50565b5f81359050612f9e81612f7a565b92915050565b5f8115159050919050565b612fb881612fa4565b8114612fc2575f80fd5b50565b5f81359050612fd381612faf565b92915050565b5f805f805f8060c08789031215612ff357612ff2612dcf565b5b5f61300089828a01612e1d565b965050602061301189828a01612e1d565b955050604061302289828a01612e1d565b945050606087013567ffffffffffffffff81111561304357613042612dd3565b5b61304f89828a01612f40565b935050608061306089828a01612f90565b92505060a061307189828a01612fc5565b9150509295509295509295565b5f819050919050565b6130908161307e565b811461309a575f80fd5b50565b5f813590506130ab81613087565b92915050565b5f602082840312156130c6576130c5612dcf565b5b5f6130d38482850161309d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156131135780820151818401526020810190506130f8565b5f8484015250505050565b5f613128826130dc565b61313281856130e6565b93506131428185602086016130f6565b61314b81612e39565b840191505092915050565b5f6020820190508181035f83015261316e818461311e565b905092915050565b5f805f805f805f80610100898b03121561319357613192612dcf565b5b5f6131a08b828c0161309d565b98505060206131b18b828c01612e1d565b97505060406131c28b828c01612e1d565b96505060606131d38b828c01612e1d565b955050608089013567ffffffffffffffff8111156131f4576131f3612dd3565b5b6132008b828c01612f40565b94505060a06132118b828c01612f90565b93505060c06132228b828c01612f90565b92505060e06132338b828c01612fc5565b9150509295985092959890939650565b5f6020828403121561325857613257612dcf565b5b5f82013567ffffffffffffffff81111561327557613274612dd3565b5b61328184828501612f40565b91505092915050565b5f80604083850312156132a05761329f612dcf565b5b5f6132ad8582860161309d565b92505060206132be8582860161309d565b9150509250929050565b6132d18161307e565b82525050565b5f6020820190506132ea5f8301846132c8565b92915050565b6132f981612fa4565b82525050565b5f6020820190506133125f8301846132f0565b92915050565b5f805f6060848603121561332f5761332e612dcf565b5b5f61333c8682870161309d565b935050602061334d86828701612e1d565b925050604061335e8682870161309d565b9150509250925092565b5f805f805f60a0868803121561338157613380612dcf565b5b5f86013567ffffffffffffffff81111561339e5761339d612dd3565b5b6133aa88828901612f40565b955050602086013567ffffffffffffffff8111156133cb576133ca612dd3565b5b6133d788828901612f40565b94505060406133e88882890161309d565b93505060606133f988828901612e1d565b925050608086013567ffffffffffffffff81111561341a57613419612dd3565b5b61342688828901612f40565b9150509295509295909350565b61343c81612df6565b82525050565b5f6020820190506134555f830184613433565b92915050565b5f805f805f805f60e0888a03121561347657613475612dcf565b5b5f6134838a828b0161309d565b975050602088013567ffffffffffffffff8111156134a4576134a3612dd3565b5b6134b08a828b01612f40565b96505060406134c18a828b01612e1d565b95505060606134d28a828b0161309d565b945050608088013567ffffffffffffffff8111156134f3576134f2612dd3565b5b6134ff8a828b01612f40565b93505060a088013567ffffffffffffffff8111156135205761351f612dd3565b5b61352c8a828b01612f40565b92505060c088013567ffffffffffffffff81111561354d5761354c612dd3565b5b6135598a828b01612f40565b91505092959891949750929550565b61357181612f6d565b82525050565b5f60e08201905061358a5f83018a613433565b6135976020830189613433565b6135a46040830188613433565b81810360608301526135b6818761311e565b90506135c56080830186613568565b6135d260a0830185613568565b6135df60c08301846132f0565b98975050505050505050565b5f805f6060848603121561360257613601612dcf565b5b5f84013567ffffffffffffffff81111561361f5761361e612dd3565b5b61362b86828701612f40565b935050602061363c8682870161309d565b925050604061364d8682870161309d565b9150509250925092565b5f6020828403121561366c5761366b612dcf565b5b5f61367984828501612e1d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6136b48161307e565b82525050565b5f6136c583836136ab565b60208301905092915050565b5f602082019050919050565b5f6136e782613682565b6136f1818561368c565b93506136fc8361369c565b805f5b8381101561372c57815161371388826136ba565b975061371e836136d1565b9250506001810190506136ff565b5085935050505092915050565b5f6020820190508181035f83015261375181846136dd565b905092915050565b5f806040838503121561376f5761376e612dcf565b5b5f61377c8582860161309d565b925050602083013567ffffffffffffffff81111561379d5761379c612dd3565b5b6137a985828601612f40565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137e76020836130e6565b91506137f2826137b3565b602082019050919050565b5f6020820190508181035f830152613814816137db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061385f57607f821691505b6020821081036138725761387161381b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026138d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613899565b6138de8683613899565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61391961391461390f8461307e565b6138f6565b61307e565b9050919050565b5f819050919050565b613932836138ff565b61394661393e82613920565b8484546138a5565b825550505050565b5f90565b61395a61394e565b613965818484613929565b505050565b5b818110156139885761397d5f82613952565b60018101905061396b565b5050565b601f8211156139cd5761399e81613878565b6139a78461388a565b810160208510156139b6578190505b6139ca6139c28561388a565b83018261396a565b50505b505050565b5f82821c905092915050565b5f6139ed5f19846008026139d2565b1980831691505092915050565b5f613a0583836139de565b9150826002028217905092915050565b613a1e826130dc565b67ffffffffffffffff811115613a3757613a36612e49565b5b613a418254613848565b613a4c82828561398c565b5f60209050601f831160018114613a7d575f8415613a6b578287015190505b613a7585826139fa565b865550613adc565b601f198416613a8b86613878565b5f5b82811015613ab257848901518255600182019150602085019450602081019050613a8d565b86831015613acf5784890151613acb601f8916826139de565b8355505b6001600288020188555050505b505050505050565b5f60c082019050613af75f830189613433565b613b046020830188613433565b613b116040830187613433565b8181036060830152613b23818661311e565b9050613b326080830185613568565b613b3f60a08301846132f0565b979650505050505050565b5f81905092915050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c0000000000005f82015250565b5f613b88601a83613b4a565b9150613b9382613b54565b601a82019050919050565b5f613ba8826130dc565b613bb28185613b4a565b9350613bc28185602086016130f6565b80840191505092915050565b5f613bd882613b7c565b9150613be48284613b9e565b915081905092915050565b7f5368617065736869667465722073657474696e6720616c6c6f776564000000005f82015250565b5f613c23601c836130e6565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f613cb8601d83613b4a565b9150613cc382613c84565b601d82019050919050565b5f613cd882613cac565b9150613ce48284613b9e565b915081905092915050565b7f7b226e616d65223a22424c4f4e4b53222c226465736372697074696f6e223a225f82015250565b5f613d23602083613b4a565b9150613d2e82613cef565b602082019050919050565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b62615f8201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b5f613d93602583613b4a565b9150613d9e82613d39565b602582019050919050565b7f222c2265787465726e616c5f6c696e6b223a22000000000000000000000000005f82015250565b5f613ddd601383613b4a565b9150613de882613da9565b601382019050919050565b7f222c22726f79616c74795f62617369735f706f696e7473223a000000000000005f82015250565b5f613e27601983613b4a565b9150613e3282613df3565b601982019050919050565b7f2c22726f79616c74795f726563697069656e74223a22000000000000000000005f82015250565b5f613e71601683613b4a565b9150613e7c82613e3d565b601682019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613ebb600283613b4a565b9150613ec682613e87565b600282019050919050565b5f613edb82613d17565b9150613ee78288613b9e565b9150613ef282613d87565b9150613efe8287613b9e565b9150613f0982613dd1565b9150613f158286613b9e565b9150613f2082613e1b565b9150613f2c8285613b9e565b9150613f3782613e65565b9150613f438284613b9e565b9150613f4e82613eaf565b91508190509695505050505050565b7f536861706573686966746572206f7574206f662072616e6765000000000000005f82015250565b5f613f916019836130e6565b9150613f9c82613f5d565b602082019050919050565b5f6020820190508181035f830152613fbe81613f85565b9050919050565b5f81519050613fd381613087565b92915050565b5f60208284031215613fee57613fed612dcf565b5b5f613ffb84828501613fc5565b91505092915050565b5f8151905061401281612e07565b92915050565b5f6020828403121561402d5761402c612dcf565b5b5f61403a84828501614004565b91505092915050565b5f815461404f81613848565b61405981866130e6565b9450600182165f81146140735760018114614089576140bb565b60ff1983168652811515602002860193506140bb565b61409285613878565b5f5b838110156140b357815481890152600182019150602081019050614094565b808801955050505b50505092915050565b5f6140de6140d96140d484612f6d565b6138f6565b61307e565b9050919050565b6140ee816140c4565b82525050565b5f60c0820190506141075f830189613433565b61411460208301886132c8565b8181036040830152614126818761311e565b9050818103606083015261413a8186614043565b905061414960808301856140e5565b61415660a08301846140e5565b979650505050505050565b5f61417361416e84612ec1565b612ea7565b90508281526020810184848401111561418f5761418e612e35565b5b61419a8482856130f6565b509392505050565b5f82601f8301126141b6576141b5612e31565b5b81516141c6848260208601614161565b91505092915050565b5f602082840312156141e4576141e3612dcf565b5b5f82015167ffffffffffffffff81111561420157614200612dd3565b5b61420d848285016141a2565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61427a8261307e565b91506142858361307e565b92508261429557614294614216565b5b828204905092915050565b7f7b226e616d65223a2200000000000000000000000000000000000000000000005f82015250565b5f6142d4600983613b4a565b91506142df826142a0565b600982019050919050565b7f20230000000000000000000000000000000000000000000000000000000000005f82015250565b5f61431e600283613b4a565b9150614329826142ea565b600282019050919050565b7f222c22617274697374223a2200000000000000000000000000000000000000005f82015250565b5f614368600c83613b4a565b915061437382614334565b600c82019050919050565b5f815461438a81613848565b6143948186613b4a565b9450600182165f81146143ae57600181146143c3576143f5565b60ff19831686528115158202860193506143f5565b6143cc85613878565b5f5b838110156143ed578154818901526001820191506020810190506143ce565b838801955050505b50505092915050565b7f222c226465736372697074696f6e223a220000000000000000000000000000005f82015250565b5f614432601183613b4a565b915061443d826143fe565b601182019050919050565b7f222c22726f79616c7479496e666f223a7b2261727469737441646472657373225f8201527f3a22000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a2602283613b4a565b91506144ad82614448565b602282019050919050565b7f222c22726f79616c747946656542794944223a000000000000000000000000005f82015250565b5f6144ec601383613b4a565b91506144f7826144b8565b601382019050919050565b7f7d2c22636f6c6c656374696f6e5f6e616d65223a2200000000000000000000005f82015250565b5f614536601583613b4a565b915061454182614502565b601582019050919050565b7f222c2277656273697465223a22000000000000000000000000000000000000005f82015250565b5f614580600d83613b4a565b915061458b8261454c565b600d82019050919050565b7f222c2265787465726e616c5f75726c223a2200000000000000000000000000005f82015250565b5f6145ca601283613b4a565b91506145d582614596565b601282019050919050565b7f222c227363726970745f74797065223a22536f6c6964697479222c22696d61675f8201527f655f74797065223a2247656e6572617469766520535647222c22696d6167652260208201527f3a22646174613a696d6167652f7376672b786d6c3b6261736536342c00000000604082015250565b5f614660605c83613b4a565b915061466b826145e0565b605c82019050919050565b5f614680826142c8565b915061468c828c613b9e565b915061469782614312565b91506146a3828b613b9e565b91506146ae8261435c565b91506146ba828a61437e565b91506146c582614426565b91506146d18289613b9e565b91506146dc82614496565b91506146e88288613b9e565b91506146f3826144e0565b91506146ff8287613b9e565b915061470a8261452a565b91506147168286613b9e565b915061472182614574565b915061472d8285613b9e565b9150614738826145be565b91506147448284613b9e565b915061474f82614654565b91508190509a9950505050505050505050565b5f61476c8261307e565b91506147778361307e565b925082820190508082111561478f5761478e614243565b5b92915050565b5f61479f8261307e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147d1576147d0614243565b5b600182019050919050565b5f6147e68261307e565b91506147f18361307e565b925082820390508181111561480957614808614243565b5b92915050565b5f819050919050565b5f819050919050565b61483261482d8261480f565b614818565b82525050565b5f819050919050565b61485261484d8261307e565b614838565b82525050565b5f6148638285614821565b6020820191506148738284614841565b6020820191508190509392505050565b5f61488d82612dd7565b9050919050565b5f8160601b9050919050565b5f6148aa82614894565b9050919050565b5f6148bb826148a0565b9050919050565b6148d36148ce82614883565b6148b1565b82525050565b5f6148e482856148c2565b6014820191506148f48284614841565b6020820191508190509392505050565b5f67ffffffffffffffff82111561491e5761491d612e49565b5b602082029050919050565b5f80fd5b5f60ff82169050919050565b6149428161492d565b811461494c575f80fd5b50565b5f8151905061495d81614939565b92915050565b5f61497561497084614904565b612ea7565b9050806020840283018581111561498f5761498e614929565b5b835b818110156149b857806149a4888261494f565b845260208401935050602081019050614991565b5050509392505050565b5f82601f8301126149d6576149d5612e31565b5b600b6149e3848285614963565b91505092915050565b5f6101608284031215614a0257614a01612dcf565b5b5f614a0f848285016149c2565b91505092915050565b5f600b9050919050565b5f81905092915050565b5f819050919050565b614a3e8161492d565b82525050565b5f614a4f8383614a35565b60208301905092915050565b5f602082019050919050565b614a7081614a18565b614a7a8184614a22565b9250614a8582614a2c565b805f5b83811015614ab5578151614a9c8782614a44565b9650614aa783614a5b565b925050600181019050614a88565b505050505050565b5f61016082019050614ad15f830184614a67565b92915050565b5f6101a082019050614aeb5f8301866132c8565b614af860208301856132c8565b614b056040830184614a67565b949350505050565b5f67ffffffffffffffff821115614b2757614b26612e49565b5b602082029050919050565b5f81519050614b4081612f7a565b92915050565b5f614b58614b5384614b0d565b612ea7565b90508060208402830185811115614b7257614b71614929565b5b835b81811015614b9b5780614b878882614b32565b845260208401935050602081019050614b74565b5050509392505050565b5f82601f830112614bb957614bb8612e31565b5b606e614bc6848285614b46565b91505092915050565b5f610dc08284031215614be557614be4612dcf565b5b5f614bf284828501614ba5565b91505092915050565b5f606e9050919050565b5f81905092915050565b5f819050919050565b614c2181612f6d565b82525050565b5f614c328383614c18565b60208301905092915050565b5f602082019050919050565b614c5381614bfb565b614c5d8184614c05565b9250614c6882614c0f565b805f5b83811015614c98578151614c7f8782614c27565b9650614c8a83614c3e565b925050600181019050614c6b565b505050505050565b5f610f6082019050614cb45f8301876132c8565b614cc160208301866132c8565b614cce6040830185614a67565b614cdc6101a0830184614c4a565b95945050505050565b7f222c0000000000000000000000000000000000000000000000000000000000005f82015250565b5f614d19600283613b4a565b9150614d2482614ce5565b600282019050919050565b7f7d000000000000000000000000000000000000000000000000000000000000005f82015250565b5f614d63600183613b4a565b9150614d6e82614d2f565b600182019050919050565b5f614d848286613b9e565b9150614d908285613b9e565b9150614d9b82614d0d565b9150614da78284613b9e565b9150614db282614d57565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614e196026836130e6565b9150614e2482614dbf565b604082019050919050565b5f6020820190508181035f830152614e4681614e0d565b9050919050565b5f614e5782612f6d565b9150614e6283612f6d565b9250828203905061ffff811115614e7c57614e7b614243565b5b92915050565b7f546f6b656e206973206e6f74206c6f636b6564000000000000000000000000005f82015250565b5f614eb66013836130e6565b9150614ec182614e82565b602082019050919050565b5f6020820190508181035f830152614ee381614eaa565b9050919050565b7f53686170657368696674696e67206973207061757365640000000000000000005f82015250565b5f614f1e6017836130e6565b9150614f2982614eea565b602082019050919050565b5f6020820190508181035f830152614f4b81614f12565b9050919050565b5f606082019050614f655f830186613433565b614f726020830185613433565b614f7f6040830184613433565b949350505050565b5f81519050614f9581612faf565b92915050565b5f60208284031215614fb057614faf612dcf565b5b5f614fbd84828501614f87565b91505092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f614ffa600e836130e6565b915061500582614fc6565b602082019050919050565b5f6020820190508181035f83015261502781614fee565b9050919050565b7f53686170657368696674206d61782072656163686564000000000000000000005f82015250565b5f6150626016836130e6565b915061506d8261502e565b602082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f546f6b656e206973206c6f636b656400000000000000000000000000000000005f82015250565b5f6150ca600f836130e6565b91506150d582615096565b602082019050919050565b5f6020820190508181035f8301526150f7816150be565b9050919050565b5f61510882612f6d565b91505f820361511a57615119614243565b5b600182039050919050565b5f61512f82612f6d565b915061ffff820361514357615142614243565b5b600182019050919050565b5f6151588261307e565b91506151638361307e565b92508282026151718161307e565b9150828204841483151761518857615187614243565b5b5092915050565b5f6151998261307e565b91506151a48361307e565b9250826151b4576151b3614216565b5b828206905092915050565b5f6151c98261307e565b91505f82036151db576151da614243565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f61521a6020836130e6565b9150615225826151e6565b602082019050919050565b5f6020820190508181035f8301526152478161520e565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212202633f63b7471c47255bd40243802ec87f3311a0a725534020e792fa65021a9c864736f6c63430008150033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101cd575f3560e01c80638da5cb5b11610102578063d5024f06116100a0578063f2fde38b1161006f578063f2fde38b146105b5578063fd8fd066146105d1578063fd9639b3146105ef578063fddb1e801461060b576101cd565b8063d5024f0614610503578063e2fc2ae514610533578063ec805b5414610569578063f1267abd14610599576101cd565b8063a14def54116100dc578063a14def5414610443578063ac7dfb3014610473578063afa94d6c146104a3578063b4d06332146104d3576101cd565b80638da5cb5b146103c55780638ecfc5e4146103e35780639114ad5c14610413576101cd565b8063549fc8371161016f57806370735bcd1161014957806370735bcd14610351578063715018a61461035b5780637a4a3dc8146103655780637b424a6a14610395576101cd565b8063549fc837146102d35780635b265342146103035780635be38c6314610333576101cd565b8063419fa1fb116101ab578063419fa1fb146102395780634a6ad9ab146102695780634d2e12691461028557806351bf0f52146102b5576101cd565b80632be699a4146101d157806331289fb3146101ed5780633ef7c2591461021d575b5f80fd5b6101eb60048036038101906101e69190612fd9565b610627565b005b610207600480360381019061020291906130b1565b6108f4565b6040516102149190613156565b60405180910390f35b61023760048036038101906102329190613176565b610932565b005b610253600480360381019061024e9190613243565b610b60565b6040516102609190613156565b60405180910390f35b610283600480360381019061027e9190613243565b610b96565b005b61029f600480360381019061029a919061328a565b610c25565b6040516102ac91906132d7565b60405180910390f35b6102bd610c45565b6040516102ca91906132ff565b60405180910390f35b6102ed60048036038101906102e89190613318565b610c57565b6040516102fa9190613156565b60405180910390f35b61031d60048036038101906103189190613368565b610c99565b60405161032a9190613156565b60405180910390f35b61033b610d08565b6040516103489190613156565b60405180910390f35b610359610d94565b005b610363610e3a565b005b61037f600480360381019061037a91906130b1565b610ec1565b60405161038c9190613156565b60405180910390f35b6103af60048036038101906103aa9190613318565b610f5c565b6040516103bc9190613156565b60405180910390f35b6103cd61105a565b6040516103da9190613442565b60405180910390f35b6103fd60048036038101906103f8919061345b565b611081565b60405161040a9190613156565b60405180910390f35b61042d600480360381019061042891906130b1565b61145f565b60405161043a91906132d7565b60405180910390f35b61045d600480360381019061045891906130b1565b611474565b60405161046a91906132d7565b60405180910390f35b61048d600480360381019061048891906130b1565b611489565b60405161049a91906132d7565b60405180910390f35b6104bd60048036038101906104b8919061328a565b6114e5565b6040516104ca9190613156565b60405180910390f35b6104ed60048036038101906104e891906130b1565b61151c565b6040516104fa9190613156565b60405180910390f35b61051d600480360381019061051891906130b1565b6115b1565b60405161052a91906132ff565b60405180910390f35b61054d600480360381019061054891906130b1565b6115ce565b6040516105609796959493929190613577565b60405180910390f35b610583600480360381019061057e91906135eb565b611726565b6040516105909190613156565b60405180910390f35b6105b360048036038101906105ae9190613657565b611ad7565b005b6105cf60048036038101906105ca9190613657565b611b96565b005b6105d9611c8c565b6040516105e69190613739565b60405180910390f35b61060960048036038101906106049190613759565b611d95565b005b6106256004803603810190610620919061328a565b611e98565b005b61062f612546565b73ffffffffffffffffffffffffffffffffffffffff1661064d61105a565b73ffffffffffffffffffffffffffffffffffffffff16146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906137fd565b60405180910390fd5b5f80600280549050036106b65761115c90505b60026040518060e001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018561ffff1681526020018361ffff168152602001841515815250908060018154018082558091505060019003905f5260205f2090600502015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190816108429190613a15565b506080820151816004015f6101000a81548161ffff021916908361ffff16021790555060a08201518160040160026101000a81548161ffff021916908361ffff16021790555060c08201518160040160046101000a81548160ff02191690831515021790555050507fea094a222979d47956b4d87b928349a1560ebdd04d74b9641c8e279fe55e39958787878787876040516108e396959493929190613ae4565b60405180910390a150505050505050565b60605f6109008361151c565b905061090b8161254d565b60405160200161091b9190613bce565b604051602081830303815290604052915050919050565b61093a612546565b73ffffffffffffffffffffffffffffffffffffffff1661095861105a565b73ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906137fd565b60405180910390fd5b5f1515600a5f9054906101000a900460ff16151514610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990613c39565b60405180910390fd5b5f60028981548110610a1757610a16613c57565b5b905f5260205f209060050201905087815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816003019081610afb9190613a15565b5083816004015f6101000a81548161ffff021916908361ffff160217905550828160040160026101000a81548161ffff021916908361ffff160217905550818160040160046101000a81548160ff021916908315150217905550505050505050505050565b60605f610b6c8361254d565b604051602001610b7c9190613cce565b604051602081830303815290604052905080915050919050565b610b9e612546565b73ffffffffffffffffffffffffffffffffffffffff16610bbc61105a565b73ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906137fd565b60405180910390fd5b8060039081610c219190613a15565b5050565b6009602052815f5260405f20602052805f5260405f205f91509150505481565b600a5f9054906101000a900460ff1681565b60605f610c65858585610f5c565b9050610c708161254d565b604051602001610c809190613bce565b6040516020818303038152906040529150509392505050565b60605f610ca58361254d565b90505f878288610cb4896126dd565b610cd58973ffffffffffffffffffffffffffffffffffffffff166014612836565b604051602001610ce9959493929190613ed1565b6040516020818303038152906040529050809250505095945050505050565b60038054610d1590613848565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4190613848565b8015610d8c5780601f10610d6357610100808354040283529160200191610d8c565b820191905f5260205f20905b815481529060010190602001808311610d6f57829003601f168201915b505050505081565b610d9c612546565b73ffffffffffffffffffffffffffffffffffffffff16610dba61105a565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906137fd565b60405180910390fd5b600a5f9054906101000a900460ff1615600a5f6101000a81548160ff021916908315150217905550565b610e42612546565b73ffffffffffffffffffffffffffffffffffffffff16610e6061105a565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906137fd565b60405180910390fd5b610ebf5f612a6b565b565b6008602052805f5260405f205f915090508054610edd90613848565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0990613848565b8015610f545780601f10610f2b57610100808354040283529160200191610f54565b820191905f5260205f20905b815481529060010190602001808311610f3757829003601f168201915b505050505081565b60606002805490508210610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90613fa7565b60405180910390fd5b611051737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff1663dbc119d7866040518263ffffffff1660e01b8152600401610ff591906132d7565b602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613fd9565b8473ffffffffffffffffffffffffffffffffffffffff1684612b2c565b90509392505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060805f151560075f8b81526020019081526020015f205f9054906101000a900460ff1615150361116e57600260045f8b81526020019081526020015f2054815481106110d1576110d0613c57565b5b905f5260205f20906005020160030180546110eb90613848565b80601f016020809104026020016040519081016040528092919081815260200182805461111790613848565b80156111625780601f1061113957610100808354040283529160200191611162565b820191905f5260205f20905b81548152906001019060200180831161114557829003601f168201915b50505050509050611209565b60085f8a81526020019081526020015f20805461118a90613848565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613848565b80156112015780601f106111d857610100808354040283529160200191611201565b820191905f5260205f20905b8154815290600101906020018083116111e457829003601f168201915b505050505090505b5f60045f8b81526020019081526020015f205490505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a61de26737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff16636352211e8e6040518263ffffffff1660e01b81526004016112a991906132d7565b602060405180830381865afa1580156112c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e89190614018565b6112f18e611489565b8d6002878154811061130657611305613c57565b5b905f5260205f2090600502016003016002888154811061132957611328613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff166002898154811061135b5761135a613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff166040518763ffffffff1660e01b8152600401611399969594939291906140f4565b5f60405180830381865afa1580156113b3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906113db91906141cf565b90505f836113e88d6126dd565b60038461140c8e73ffffffffffffffffffffffffffffffffffffffff166014612836565b61142160648f61141c9190614270565b6126dd565b8d8d8d60405160200161143c99989796959493929190614676565b604051602081830303815290604052905080945050505050979650505050505050565b6005602052805f5260405f205f915090505481565b6004602052805f5260405f205f915090505481565b5f805f5b6002805490508110156114db5760095f8581526020019081526020015f205f8281526020019081526020015f2054826114c69190614762565b915080806114d390614795565b91505061148d565b5080915050919050565b6060611514838360045f60055f8981526020019081526020015f205481526020019081526020015f2054612b2c565b905092915050565b60605f60014361152c91906147dc565b404860405160200161153f929190614858565b604051602081830303815290604052805190602001205f1c90505f414260405160200161156d9291906148d9565b604051602081830303815290604052805190602001205f1c73ffffffffffffffffffffffffffffffffffffffff1690506115a8828286612b2c565b92505050919050565b6007602052805f5260405f205f915054906101000a900460ff1681565b600281815481106115dd575f80fd5b905f5260205f2090600502015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301805461166b90613848565b80601f016020809104026020016040519081016040528092919081815260200182805461169790613848565b80156116e25780601f106116b9576101008083540402835291602001916116e2565b820191905f5260205f20905b8154815290600101906020018083116116c557829003601f168201915b505050505090806004015f9054906101000a900461ffff16908060040160029054906101000a900461ffff16908060040160049054906101000a900460ff16905087565b60605f60045f60055f8781526020019081526020015f205481526020019081526020015f205490505f6002828154811061176357611762613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3ec0475866040518263ffffffff1660e01b81526004016117c991906132d7565b61016060405180830381865afa1580156117e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180991906149ec565b9050670de0b6b3a76400008561181f9190614270565b94505f6002838154811061183657611835613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aaebbea8836040518263ffffffff1660e01b815260040161189c9190614abd565b5f60405180830381865afa1580156118b6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118de91906141cf565b90505f600284815481106118f5576118f4613c57565b5b905f5260205f2090600502016001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663401a28d88789866040518463ffffffff1660e01b815260040161196093929190614ad7565b610dc060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a09190614bcf565b90506c01431e0fae6d7217caa0000000866119bb9190614270565b955066038d7ea4c68000876119d09190614270565b96505f600285815481106119e7576119e6613c57565b5b905f5260205f2090600502016002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663703996db888a87866040518563ffffffff1660e01b8152600401611a549493929190614ca0565b5f60405180830381865afa158015611a6e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a9691906141cf565b90505f89611aa38361254d565b85604051602001611ab693929190614d79565b60405160208183030381529060405290508096505050505050509392505050565b611adf612546565b73ffffffffffffffffffffffffffffffffffffffff16611afd61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906137fd565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b9e612546565b73ffffffffffffffffffffffffffffffffffffffff16611bbc61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906137fd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790614e2f565b60405180910390fd5b611c8981612a6b565b50565b60605f60028054905067ffffffffffffffff811115611cae57611cad612e49565b5b604051908082528060200260200182016040528015611cdc5781602001602082028036833780820191505090505b5090505f5b8151811015611d8d5760028181548110611cfe57611cfd613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff1660028281548110611d3057611d2f613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff16611d579190614e4d565b61ffff16828281518110611d6e57611d6d613c57565b5b6020026020010181815250508080611d8590614795565b915050611ce1565b508091505090565b611d9d612546565b73ffffffffffffffffffffffffffffffffffffffff16611dbb61105a565b73ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e08906137fd565b60405180910390fd5b6001151560075f8481526020019081526020015f205f9054906101000a900460ff16151514611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90614ecc565b60405180910390fd5b8060085f8481526020019081526020015f209081611e939190613a15565b505050565b5f737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611ee691906132d7565b602060405180830381865afa158015611f01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f259190614018565b905060011515600a5f9054906101000a900460ff16151514611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614f34565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061205057506d76a84fef008cdabe6409d2fe638b73ffffffffffffffffffffffffffffffffffffffff166390c9a2d03383737f463b874ec264dc7bd8c780f5790b4fc371f11f6040518463ffffffff1660e01b815260040161201093929190614f52565b602060405180830381865afa15801561202b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204f9190614f9b565b5b8061208d575061205e61105a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390615010565b60405180910390fd5b6002805490508210612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90613fa7565b60405180910390fd5b6002828154811061212757612126613c57565b5b905f5260205f2090600502016004015f9054906101000a900461ffff1661ffff166002838154811061215c5761215b613c57565b5b905f5260205f20906005020160040160029054906101000a900461ffff1661ffff16106121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590615078565b60405180910390fd5b5f600283815481106121d3576121d2613c57565b5b905f5260205f20906005020160040160049054906101000a900460ff1690508080612230575061220161105a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690615010565b60405180910390fd5b5f151560075f8681526020019081526020015f205f9054906101000a900460ff161515146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c9906150e0565b60405180910390fd5b8061230157600160075f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f151560065f8681526020019081526020015f205f9054906101000a900460ff161515036123f457600160065f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508360055f737f463b874ec264dc7bd8c780f5790b4fc371f11f73ffffffffffffffffffffffffffffffffffffffff1663dbc119d7886040518263ffffffff1660e01b81526004016123a391906132d7565b602060405180830381865afa1580156123be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e29190613fd9565b81526020019081526020015f20819055505b600260045f8681526020019081526020015f20548154811061241957612418613c57565b5b905f5260205f209060050201600401600281819054906101000a900461ffff1680929190612446906150fe565b91906101000a81548161ffff021916908361ffff160217905550506002838154811061247557612474613c57565b5b905f5260205f209060050201600401600281819054906101000a900461ffff16809291906124a290615125565b91906101000a81548161ffff021916908361ffff160217905550508260045f8681526020019081526020015f208190555060095f8581526020019081526020015f205f8481526020019081526020015f205f81548092919061250390614795565b9190505550837ff5830b23450539a2f9b0c796013b74ddc22d97cb3f0ed1b9aee471ac875abf918460405161253891906132d7565b60405180910390a250505050565b5f33905090565b60605f825190505f81036125725760405180602001604052805f8152509150506126d8565b5f60036002836125829190614762565b61258c9190614270565b6004612598919061514e565b90505f6020826125a89190614762565b67ffffffffffffffff8111156125c1576125c0612e49565b5b6040519080825280601f01601f1916602001820160405280156125f35781602001600182028036833780820191505090505b5090505f60405180606001604052806040815260200161524f60409139905060018101602083015f5b868110156126955760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061261c565b5060038606600181146126af57600281146126bf576126ca565b613d3d60f01b60028303526126ca565b603d60f81b60018303525b508484525050819450505050505b919050565b60605f8203612723576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612831565b5f8290505f5b5f821461275257808061273b90614795565b915050600a8261274b9190614270565b9150612729565b5f8167ffffffffffffffff81111561276d5761276c612e49565b5b6040519080825280601f01601f19166020018201604052801561279f5781602001600182028036833780820191505090505b5090505b5f851461282a576001826127b791906147dc565b9150600a856127c6919061518f565b60306127d29190614762565b60f81b8183815181106127e8576127e7613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856128239190614270565b94506127a3565b8093505050505b919050565b60605f6002836002612848919061514e565b6128529190614762565b67ffffffffffffffff81111561286b5761286a612e49565b5b6040519080825280601f01601f19166020018201604052801561289d5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106128d4576128d3613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061293757612936613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002612975919061514e565b61297f9190614762565b90505b6001811115612a1e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106129c1576129c0613c57565b5b1a60f81b8282815181106129d8576129d7613c57565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080612a17906151bf565b9050612982565b505f8414612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890615230565b60405180910390fd5b8091505092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60605f60028381548110612b4357612b42613c57565b5b905f5260205f2090600502015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3ec0475866040518263ffffffff1660e01b8152600401612ba991906132d7565b61016060405180830381865afa158015612bc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612be991906149ec565b9050670de0b6b3a764000085612bff9190614270565b94505f60028481548110612c1657612c15613c57565b5b905f5260205f2090600502016001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663401a28d88688856040518463ffffffff1660e01b8152600401612c8193929190614ad7565b610dc060405180830381865afa158015612c9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc19190614bcf565b90506c01431e0fae6d7217caa000000085612cdc9190614270565b945066038d7ea4c6800086612cf19190614270565b95505f60028581548110612d0857612d07613c57565b5b905f5260205f2090600502016002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663703996db878986866040518563ffffffff1660e01b8152600401612d759493929190614ca0565b5f60405180830381865afa158015612d8f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612db791906141cf565b90508093505050509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e0082612dd7565b9050919050565b612e1081612df6565b8114612e1a575f80fd5b50565b5f81359050612e2b81612e07565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e7f82612e39565b810181811067ffffffffffffffff82111715612e9e57612e9d612e49565b5b80604052505050565b5f612eb0612dc6565b9050612ebc8282612e76565b919050565b5f67ffffffffffffffff821115612edb57612eda612e49565b5b612ee482612e39565b9050602081019050919050565b828183375f83830152505050565b5f612f11612f0c84612ec1565b612ea7565b905082815260208101848484011115612f2d57612f2c612e35565b5b612f38848285612ef1565b509392505050565b5f82601f830112612f5457612f53612e31565b5b8135612f64848260208601612eff565b91505092915050565b5f61ffff82169050919050565b612f8381612f6d565b8114612f8d575f80fd5b50565b5f81359050612f9e81612f7a565b92915050565b5f8115159050919050565b612fb881612fa4565b8114612fc2575f80fd5b50565b5f81359050612fd381612faf565b92915050565b5f805f805f8060c08789031215612ff357612ff2612dcf565b5b5f61300089828a01612e1d565b965050602061301189828a01612e1d565b955050604061302289828a01612e1d565b945050606087013567ffffffffffffffff81111561304357613042612dd3565b5b61304f89828a01612f40565b935050608061306089828a01612f90565b92505060a061307189828a01612fc5565b9150509295509295509295565b5f819050919050565b6130908161307e565b811461309a575f80fd5b50565b5f813590506130ab81613087565b92915050565b5f602082840312156130c6576130c5612dcf565b5b5f6130d38482850161309d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156131135780820151818401526020810190506130f8565b5f8484015250505050565b5f613128826130dc565b61313281856130e6565b93506131428185602086016130f6565b61314b81612e39565b840191505092915050565b5f6020820190508181035f83015261316e818461311e565b905092915050565b5f805f805f805f80610100898b03121561319357613192612dcf565b5b5f6131a08b828c0161309d565b98505060206131b18b828c01612e1d565b97505060406131c28b828c01612e1d565b96505060606131d38b828c01612e1d565b955050608089013567ffffffffffffffff8111156131f4576131f3612dd3565b5b6132008b828c01612f40565b94505060a06132118b828c01612f90565b93505060c06132228b828c01612f90565b92505060e06132338b828c01612fc5565b9150509295985092959890939650565b5f6020828403121561325857613257612dcf565b5b5f82013567ffffffffffffffff81111561327557613274612dd3565b5b61328184828501612f40565b91505092915050565b5f80604083850312156132a05761329f612dcf565b5b5f6132ad8582860161309d565b92505060206132be8582860161309d565b9150509250929050565b6132d18161307e565b82525050565b5f6020820190506132ea5f8301846132c8565b92915050565b6132f981612fa4565b82525050565b5f6020820190506133125f8301846132f0565b92915050565b5f805f6060848603121561332f5761332e612dcf565b5b5f61333c8682870161309d565b935050602061334d86828701612e1d565b925050604061335e8682870161309d565b9150509250925092565b5f805f805f60a0868803121561338157613380612dcf565b5b5f86013567ffffffffffffffff81111561339e5761339d612dd3565b5b6133aa88828901612f40565b955050602086013567ffffffffffffffff8111156133cb576133ca612dd3565b5b6133d788828901612f40565b94505060406133e88882890161309d565b93505060606133f988828901612e1d565b925050608086013567ffffffffffffffff81111561341a57613419612dd3565b5b61342688828901612f40565b9150509295509295909350565b61343c81612df6565b82525050565b5f6020820190506134555f830184613433565b92915050565b5f805f805f805f60e0888a03121561347657613475612dcf565b5b5f6134838a828b0161309d565b975050602088013567ffffffffffffffff8111156134a4576134a3612dd3565b5b6134b08a828b01612f40565b96505060406134c18a828b01612e1d565b95505060606134d28a828b0161309d565b945050608088013567ffffffffffffffff8111156134f3576134f2612dd3565b5b6134ff8a828b01612f40565b93505060a088013567ffffffffffffffff8111156135205761351f612dd3565b5b61352c8a828b01612f40565b92505060c088013567ffffffffffffffff81111561354d5761354c612dd3565b5b6135598a828b01612f40565b91505092959891949750929550565b61357181612f6d565b82525050565b5f60e08201905061358a5f83018a613433565b6135976020830189613433565b6135a46040830188613433565b81810360608301526135b6818761311e565b90506135c56080830186613568565b6135d260a0830185613568565b6135df60c08301846132f0565b98975050505050505050565b5f805f6060848603121561360257613601612dcf565b5b5f84013567ffffffffffffffff81111561361f5761361e612dd3565b5b61362b86828701612f40565b935050602061363c8682870161309d565b925050604061364d8682870161309d565b9150509250925092565b5f6020828403121561366c5761366b612dcf565b5b5f61367984828501612e1d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6136b48161307e565b82525050565b5f6136c583836136ab565b60208301905092915050565b5f602082019050919050565b5f6136e782613682565b6136f1818561368c565b93506136fc8361369c565b805f5b8381101561372c57815161371388826136ba565b975061371e836136d1565b9250506001810190506136ff565b5085935050505092915050565b5f6020820190508181035f83015261375181846136dd565b905092915050565b5f806040838503121561376f5761376e612dcf565b5b5f61377c8582860161309d565b925050602083013567ffffffffffffffff81111561379d5761379c612dd3565b5b6137a985828601612f40565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137e76020836130e6565b91506137f2826137b3565b602082019050919050565b5f6020820190508181035f830152613814816137db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061385f57607f821691505b6020821081036138725761387161381b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026138d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613899565b6138de8683613899565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61391961391461390f8461307e565b6138f6565b61307e565b9050919050565b5f819050919050565b613932836138ff565b61394661393e82613920565b8484546138a5565b825550505050565b5f90565b61395a61394e565b613965818484613929565b505050565b5b818110156139885761397d5f82613952565b60018101905061396b565b5050565b601f8211156139cd5761399e81613878565b6139a78461388a565b810160208510156139b6578190505b6139ca6139c28561388a565b83018261396a565b50505b505050565b5f82821c905092915050565b5f6139ed5f19846008026139d2565b1980831691505092915050565b5f613a0583836139de565b9150826002028217905092915050565b613a1e826130dc565b67ffffffffffffffff811115613a3757613a36612e49565b5b613a418254613848565b613a4c82828561398c565b5f60209050601f831160018114613a7d575f8415613a6b578287015190505b613a7585826139fa565b865550613adc565b601f198416613a8b86613878565b5f5b82811015613ab257848901518255600182019150602085019450602081019050613a8d565b86831015613acf5784890151613acb601f8916826139de565b8355505b6001600288020188555050505b505050505050565b5f60c082019050613af75f830189613433565b613b046020830188613433565b613b116040830187613433565b8181036060830152613b23818661311e565b9050613b326080830185613568565b613b3f60a08301846132f0565b979650505050505050565b5f81905092915050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c0000000000005f82015250565b5f613b88601a83613b4a565b9150613b9382613b54565b601a82019050919050565b5f613ba8826130dc565b613bb28185613b4a565b9350613bc28185602086016130f6565b80840191505092915050565b5f613bd882613b7c565b9150613be48284613b9e565b915081905092915050565b7f5368617065736869667465722073657474696e6720616c6c6f776564000000005f82015250565b5f613c23601c836130e6565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f613cb8601d83613b4a565b9150613cc382613c84565b601d82019050919050565b5f613cd882613cac565b9150613ce48284613b9e565b915081905092915050565b7f7b226e616d65223a22424c4f4e4b53222c226465736372697074696f6e223a225f82015250565b5f613d23602083613b4a565b9150613d2e82613cef565b602082019050919050565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b62615f8201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b5f613d93602583613b4a565b9150613d9e82613d39565b602582019050919050565b7f222c2265787465726e616c5f6c696e6b223a22000000000000000000000000005f82015250565b5f613ddd601383613b4a565b9150613de882613da9565b601382019050919050565b7f222c22726f79616c74795f62617369735f706f696e7473223a000000000000005f82015250565b5f613e27601983613b4a565b9150613e3282613df3565b601982019050919050565b7f2c22726f79616c74795f726563697069656e74223a22000000000000000000005f82015250565b5f613e71601683613b4a565b9150613e7c82613e3d565b601682019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613ebb600283613b4a565b9150613ec682613e87565b600282019050919050565b5f613edb82613d17565b9150613ee78288613b9e565b9150613ef282613d87565b9150613efe8287613b9e565b9150613f0982613dd1565b9150613f158286613b9e565b9150613f2082613e1b565b9150613f2c8285613b9e565b9150613f3782613e65565b9150613f438284613b9e565b9150613f4e82613eaf565b91508190509695505050505050565b7f536861706573686966746572206f7574206f662072616e6765000000000000005f82015250565b5f613f916019836130e6565b9150613f9c82613f5d565b602082019050919050565b5f6020820190508181035f830152613fbe81613f85565b9050919050565b5f81519050613fd381613087565b92915050565b5f60208284031215613fee57613fed612dcf565b5b5f613ffb84828501613fc5565b91505092915050565b5f8151905061401281612e07565b92915050565b5f6020828403121561402d5761402c612dcf565b5b5f61403a84828501614004565b91505092915050565b5f815461404f81613848565b61405981866130e6565b9450600182165f81146140735760018114614089576140bb565b60ff1983168652811515602002860193506140bb565b61409285613878565b5f5b838110156140b357815481890152600182019150602081019050614094565b808801955050505b50505092915050565b5f6140de6140d96140d484612f6d565b6138f6565b61307e565b9050919050565b6140ee816140c4565b82525050565b5f60c0820190506141075f830189613433565b61411460208301886132c8565b8181036040830152614126818761311e565b9050818103606083015261413a8186614043565b905061414960808301856140e5565b61415660a08301846140e5565b979650505050505050565b5f61417361416e84612ec1565b612ea7565b90508281526020810184848401111561418f5761418e612e35565b5b61419a8482856130f6565b509392505050565b5f82601f8301126141b6576141b5612e31565b5b81516141c6848260208601614161565b91505092915050565b5f602082840312156141e4576141e3612dcf565b5b5f82015167ffffffffffffffff81111561420157614200612dd3565b5b61420d848285016141a2565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61427a8261307e565b91506142858361307e565b92508261429557614294614216565b5b828204905092915050565b7f7b226e616d65223a2200000000000000000000000000000000000000000000005f82015250565b5f6142d4600983613b4a565b91506142df826142a0565b600982019050919050565b7f20230000000000000000000000000000000000000000000000000000000000005f82015250565b5f61431e600283613b4a565b9150614329826142ea565b600282019050919050565b7f222c22617274697374223a2200000000000000000000000000000000000000005f82015250565b5f614368600c83613b4a565b915061437382614334565b600c82019050919050565b5f815461438a81613848565b6143948186613b4a565b9450600182165f81146143ae57600181146143c3576143f5565b60ff19831686528115158202860193506143f5565b6143cc85613878565b5f5b838110156143ed578154818901526001820191506020810190506143ce565b838801955050505b50505092915050565b7f222c226465736372697074696f6e223a220000000000000000000000000000005f82015250565b5f614432601183613b4a565b915061443d826143fe565b601182019050919050565b7f222c22726f79616c7479496e666f223a7b2261727469737441646472657373225f8201527f3a22000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a2602283613b4a565b91506144ad82614448565b602282019050919050565b7f222c22726f79616c747946656542794944223a000000000000000000000000005f82015250565b5f6144ec601383613b4a565b91506144f7826144b8565b601382019050919050565b7f7d2c22636f6c6c656374696f6e5f6e616d65223a2200000000000000000000005f82015250565b5f614536601583613b4a565b915061454182614502565b601582019050919050565b7f222c2277656273697465223a22000000000000000000000000000000000000005f82015250565b5f614580600d83613b4a565b915061458b8261454c565b600d82019050919050565b7f222c2265787465726e616c5f75726c223a2200000000000000000000000000005f82015250565b5f6145ca601283613b4a565b91506145d582614596565b601282019050919050565b7f222c227363726970745f74797065223a22536f6c6964697479222c22696d61675f8201527f655f74797065223a2247656e6572617469766520535647222c22696d6167652260208201527f3a22646174613a696d6167652f7376672b786d6c3b6261736536342c00000000604082015250565b5f614660605c83613b4a565b915061466b826145e0565b605c82019050919050565b5f614680826142c8565b915061468c828c613b9e565b915061469782614312565b91506146a3828b613b9e565b91506146ae8261435c565b91506146ba828a61437e565b91506146c582614426565b91506146d18289613b9e565b91506146dc82614496565b91506146e88288613b9e565b91506146f3826144e0565b91506146ff8287613b9e565b915061470a8261452a565b91506147168286613b9e565b915061472182614574565b915061472d8285613b9e565b9150614738826145be565b91506147448284613b9e565b915061474f82614654565b91508190509a9950505050505050505050565b5f61476c8261307e565b91506147778361307e565b925082820190508082111561478f5761478e614243565b5b92915050565b5f61479f8261307e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147d1576147d0614243565b5b600182019050919050565b5f6147e68261307e565b91506147f18361307e565b925082820390508181111561480957614808614243565b5b92915050565b5f819050919050565b5f819050919050565b61483261482d8261480f565b614818565b82525050565b5f819050919050565b61485261484d8261307e565b614838565b82525050565b5f6148638285614821565b6020820191506148738284614841565b6020820191508190509392505050565b5f61488d82612dd7565b9050919050565b5f8160601b9050919050565b5f6148aa82614894565b9050919050565b5f6148bb826148a0565b9050919050565b6148d36148ce82614883565b6148b1565b82525050565b5f6148e482856148c2565b6014820191506148f48284614841565b6020820191508190509392505050565b5f67ffffffffffffffff82111561491e5761491d612e49565b5b602082029050919050565b5f80fd5b5f60ff82169050919050565b6149428161492d565b811461494c575f80fd5b50565b5f8151905061495d81614939565b92915050565b5f61497561497084614904565b612ea7565b9050806020840283018581111561498f5761498e614929565b5b835b818110156149b857806149a4888261494f565b845260208401935050602081019050614991565b5050509392505050565b5f82601f8301126149d6576149d5612e31565b5b600b6149e3848285614963565b91505092915050565b5f6101608284031215614a0257614a01612dcf565b5b5f614a0f848285016149c2565b91505092915050565b5f600b9050919050565b5f81905092915050565b5f819050919050565b614a3e8161492d565b82525050565b5f614a4f8383614a35565b60208301905092915050565b5f602082019050919050565b614a7081614a18565b614a7a8184614a22565b9250614a8582614a2c565b805f5b83811015614ab5578151614a9c8782614a44565b9650614aa783614a5b565b925050600181019050614a88565b505050505050565b5f61016082019050614ad15f830184614a67565b92915050565b5f6101a082019050614aeb5f8301866132c8565b614af860208301856132c8565b614b056040830184614a67565b949350505050565b5f67ffffffffffffffff821115614b2757614b26612e49565b5b602082029050919050565b5f81519050614b4081612f7a565b92915050565b5f614b58614b5384614b0d565b612ea7565b90508060208402830185811115614b7257614b71614929565b5b835b81811015614b9b5780614b878882614b32565b845260208401935050602081019050614b74565b5050509392505050565b5f82601f830112614bb957614bb8612e31565b5b606e614bc6848285614b46565b91505092915050565b5f610dc08284031215614be557614be4612dcf565b5b5f614bf284828501614ba5565b91505092915050565b5f606e9050919050565b5f81905092915050565b5f819050919050565b614c2181612f6d565b82525050565b5f614c328383614c18565b60208301905092915050565b5f602082019050919050565b614c5381614bfb565b614c5d8184614c05565b9250614c6882614c0f565b805f5b83811015614c98578151614c7f8782614c27565b9650614c8a83614c3e565b925050600181019050614c6b565b505050505050565b5f610f6082019050614cb45f8301876132c8565b614cc160208301866132c8565b614cce6040830185614a67565b614cdc6101a0830184614c4a565b95945050505050565b7f222c0000000000000000000000000000000000000000000000000000000000005f82015250565b5f614d19600283613b4a565b9150614d2482614ce5565b600282019050919050565b7f7d000000000000000000000000000000000000000000000000000000000000005f82015250565b5f614d63600183613b4a565b9150614d6e82614d2f565b600182019050919050565b5f614d848286613b9e565b9150614d908285613b9e565b9150614d9b82614d0d565b9150614da78284613b9e565b9150614db282614d57565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614e196026836130e6565b9150614e2482614dbf565b604082019050919050565b5f6020820190508181035f830152614e4681614e0d565b9050919050565b5f614e5782612f6d565b9150614e6283612f6d565b9250828203905061ffff811115614e7c57614e7b614243565b5b92915050565b7f546f6b656e206973206e6f74206c6f636b6564000000000000000000000000005f82015250565b5f614eb66013836130e6565b9150614ec182614e82565b602082019050919050565b5f6020820190508181035f830152614ee381614eaa565b9050919050565b7f53686170657368696674696e67206973207061757365640000000000000000005f82015250565b5f614f1e6017836130e6565b9150614f2982614eea565b602082019050919050565b5f6020820190508181035f830152614f4b81614f12565b9050919050565b5f606082019050614f655f830186613433565b614f726020830185613433565b614f7f6040830184613433565b949350505050565b5f81519050614f9581612faf565b92915050565b5f60208284031215614fb057614faf612dcf565b5b5f614fbd84828501614f87565b91505092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f614ffa600e836130e6565b915061500582614fc6565b602082019050919050565b5f6020820190508181035f83015261502781614fee565b9050919050565b7f53686170657368696674206d61782072656163686564000000000000000000005f82015250565b5f6150626016836130e6565b915061506d8261502e565b602082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f546f6b656e206973206c6f636b656400000000000000000000000000000000005f82015250565b5f6150ca600f836130e6565b91506150d582615096565b602082019050919050565b5f6020820190508181035f8301526150f7816150be565b9050919050565b5f61510882612f6d565b91505f820361511a57615119614243565b5b600182039050919050565b5f61512f82612f6d565b915061ffff820361514357615142614243565b5b600182019050919050565b5f6151588261307e565b91506151638361307e565b92508282026151718161307e565b9150828204841483151761518857615187614243565b5b5092915050565b5f6151998261307e565b91506151a48361307e565b9250826151b4576151b3614216565b5b828206905092915050565b5f6151c98261307e565b91505f82036151db576151da614243565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f61521a6020836130e6565b9150615225826151e6565b602082019050919050565b5f6020820190508181035f8301526152478161520e565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212202633f63b7471c47255bd40243802ec87f3311a0a725534020e792fa65021a9c864736f6c63430008150033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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