Sepolia Testnet

Contract

0x7Fd992696B7aEab1B9Cadce6D748971De8209e85

Overview

ETH Balance

2 wei

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Submit Feed65423622024-08-21 9:32:00170 days ago1724232720IN
0x7Fd99269...De8209e85
0 ETH0.001220441.12155495
Request Feed41897652023-08-30 7:50:24527 days ago1693381824IN
0x7Fd99269...De8209e85
0.01 ETH0.000206251.50019098
Update Portal41636132023-08-26 9:34:48531 days ago1693042488IN
0x7Fd99269...De8209e85
0.01 ETH0.000175931.51838036
Request Feed Por...41636122023-08-26 9:34:24531 days ago1693042464IN
0x7Fd99269...De8209e85
0.01 ETH0.000985091.51889479

Latest 9 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
41897652023-08-30 7:50:24527 days ago1693381824
0x7Fd99269...De8209e85
0.01 ETH
41636132023-08-26 9:34:48531 days ago1693042488
0x7Fd99269...De8209e85
0.00333333 ETH
41636132023-08-26 9:34:48531 days ago1693042488
0x7Fd99269...De8209e85
0.00333333 ETH
41636132023-08-26 9:34:48531 days ago1693042488
0x7Fd99269...De8209e85
0.00333333 ETH
41636132023-08-26 9:34:48531 days ago1693042488
0x7Fd99269...De8209e85
0x7Fd99269...De8209e85
0.01 ETH
41636122023-08-26 9:34:24531 days ago1693042464
0x7Fd99269...De8209e85
0.00333333 ETH
41636122023-08-26 9:34:24531 days ago1693042464
0x7Fd99269...De8209e85
0.00333333 ETH
41636122023-08-26 9:34:24531 days ago1693042464
0x7Fd99269...De8209e85
0.00333333 ETH
41636122023-08-26 9:34:24531 days ago1693042464
0x7Fd99269...De8209e85
0x7Fd99269...De8209e85
0.01 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MetaMorph

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : Nostradamus copy.sol
// SPDX-License-Identifier: SCRY
pragma solidity 0.8.6;

interface scryMetamorph {
    function requestCallback(
        uint _val,
        string memory _valStr,
        bytes memory _valBytes,
        uint requestID
    ) external;
}

interface Morpheus {
    function requestFeeds(
        string[] calldata APIendpoint,
        string[] calldata APIendpointPath,
        uint256[] calldata decimals,
        uint256[] calldata bounties
    ) external payable returns (uint256[] memory feeds);

    function supportFeeds(
        uint256[] calldata feedIds,
        uint256[] calldata values
    ) external payable;

    function getFeed(
        uint256 feedIDs
    ) external view returns (uint256, uint256, uint256, string memory);
}

contract MetaMorph {
    event dataCallbackRequested(uint requestID, uint bounty);

    function getFeeds(
        address[] memory morpheus,
        uint256[] memory IDs,
        uint256 threshold
    )
        external
        view
        returns (uint256 value, string memory valStr, bytes memory valBytes)
    {
        uint256 returnPrices;
        uint256 returnTimestamps;
        uint256 returnDecimals;
        string memory returnStr;
        uint256[] memory total = new uint256[](morpheus.length);
        string[] memory strVal = new string[](morpheus.length);
        for (uint256 i = 0; i < IDs.length; i++) {
            (
                returnPrices,
                returnTimestamps,
                returnDecimals,
                returnStr
            ) = Morpheus(morpheus[i]).getFeed(IDs[i]);
            if (
                block.timestamp - threshold < returnTimestamps || threshold == 0
            ) {
                total[i] = returnPrices / 10 ** returnDecimals;
                strVal[i] = returnStr;
            }
        }
        uint256[] memory sorted = new uint256[](morpheus.length);
        sorted = sort(total);
        // uneven so we can take the middle
        if (sorted.length % 2 == 1) {
            uint sizer = (sorted.length + 1) / 2;
            value = sorted[sizer - 1];
            // take average of the 2 most inner numbers
        } else {
            uint size1 = (sorted.length) / 2;
            value = (sorted[size1 - 1] + sorted[size1]) / 2;
        }
        (valStr, ) = mostUsedString(strVal);
        valBytes = bytes(valStr);
    }

    function getFeedsRaw(
        address[] memory morpheus,
        uint256[] memory IDs
    )
        external
        view
        returns (
            uint256[] memory value,
            string[] memory valStr,
            bytes[] memory valBytes,
            uint256[] memory valTimestamps
        )
    {
        uint256 returnPrices;
        uint256 returnTimestamps;
        uint256 returnDecimals;
        string memory returnStr;
        uint256[] memory total = new uint256[](morpheus.length);
        string[] memory strVal = new string[](morpheus.length);
        bytes[] memory bytesVal = new bytes[](morpheus.length);
        uint256[] memory tstamp = new uint256[](morpheus.length);
        for (uint256 i = 0; i < IDs.length; i++) {
            (
                returnPrices,
                returnTimestamps,
                returnDecimals,
                returnStr
            ) = Morpheus(morpheus[i]).getFeed(IDs[i]);
            total[i] = returnPrices / 10 ** returnDecimals;
            strVal[i] = returnStr;
            bytesVal[i] = bytes(returnStr);
            tstamp[i] = returnTimestamps;
        }
        return (total, strVal, bytesVal, tstamp);
    }

    function getFeedsQuorum(
        address[] memory morpheus,
        uint256[] memory IDs,
        uint256 threshold,
        uint256 quorum
    )
        external
        view
        returns (uint256 value, string memory valStr, bytes memory valBytes)
    {
        uint256 returnPrices;
        uint256 returnTimestamps;
        uint256 returnDecimals;
        string memory returnStr;
        uint q;
        uint256[] memory total = new uint256[](morpheus.length);
        string[] memory strVal = new string[](morpheus.length);
        for (uint256 i = 0; i < IDs.length; i++) {
            (
                returnPrices,
                returnTimestamps,
                returnDecimals,
                returnStr
            ) = Morpheus(morpheus[i]).getFeed(IDs[i]);
            if (
                block.timestamp - threshold < returnTimestamps || threshold == 0
            ) {
                total[i] = returnPrices / 10 ** returnDecimals;
                strVal[i] = returnStr;
                q++;
            }
        }
        require(quorum <= q, "Quorum not met");
        uint256[] memory sorted = new uint256[](morpheus.length);
        sorted = sort(total);
        // uneven so we can take the middle
        if (sorted.length % 2 == 1) {
            uint sizer = (sorted.length + 1) / 2;
            value = sorted[sizer - 1];
            // take average of the 2 most inner numbers
        } else {
            uint size1 = (sorted.length) / 2;
            value = (sorted[size1 - 1] + sorted[size1]) / 2;
        }
        (valStr, q) = mostUsedString(strVal);
        valBytes = bytes(valStr);
        require(quorum <= q, "Quorum not met");
    }

    function requestFeed(
        address[] memory morpheus,
        string memory APIendpoint,
        string memory APIendpointPath,
        uint256 decimals,
        uint256[] memory bounties
    ) external payable returns (uint256[] memory) {
        uint256[] memory ids = new uint256[](morpheus.length);
        uint256[] memory IDS = new uint256[](morpheus.length);
        string[] memory APIendpnt = new string[](1);
        string[] memory APIendpth = new string[](1);
        uint256[] memory dec = new uint256[](1);
        uint256[] memory bount = new uint256[](1);
        uint totals;
        for (uint256 i = 0; i < morpheus.length; i++) {
            APIendpnt[0] = APIendpoint;
            APIendpth[0] = APIendpointPath;
            dec[0] = decimals;
            bount[0] = bounties[i];
            ids = Morpheus(morpheus[i]).requestFeeds{value: bount[0]}(
                APIendpnt,
                APIendpth,
                dec,
                bount
            );
            IDS[i] = ids[0];
            totals += bounties[i];
        }
        require(totals <= msg.value, "Bounty not paid by msg.value");
        return (IDS);
    }

    function requestFeed(
        address[] memory morpheus,
        string memory APIendpoint,
        string memory APIendpointPath,
        uint256 decimals
    ) external payable returns (uint256[] memory) {
        uint256[] memory bount = new uint256[](morpheus.length);
        for (uint256 i = 0; i < morpheus.length; i++) {
            bount[i] = msg.value / morpheus.length;
        }
        uint[] memory IDs = this.requestFeed{value: msg.value}(
            morpheus,
            APIendpoint,
            APIendpointPath,
            decimals,
            bount
        );
        return (IDs);
    }

    function requestFeedPortal(
        address[] memory morpheus,
        string memory APIendpoint,
        string memory APIendpointPath,
        uint256 decimals,
        uint256 threshold,
        uint256 quorum
    ) external payable returns (uint256 requestPortalID) {
        uint256[] memory bount = new uint256[](morpheus.length);
        for (uint256 i = 0; i < morpheus.length; i++) {
            bount[i] = msg.value / morpheus.length;
        }
        uint[] memory IDs = this.requestFeed{value: msg.value}(
            morpheus,
            APIendpoint,
            APIendpointPath,
            decimals,
            bount
        );
        uint i = requests;
        requests++;
        request[i].morpheus = morpheus;
        request[i].ids = IDs;
        request[i].threshold = threshold;
        request[i].quorum = quorum;
        request[i].decimals = decimals;
        request[i].endpoint = APIendpoint;
        request[i].path = APIendpointPath;
        return (i);
    }

    function getFeedsPortal(
        uint256 ID
    )
        external
        view
        returns (uint256 value, string memory valStr, bytes memory valBytes)
    {
        (value, valStr, valBytes) = this.getFeedsQuorum(
            request[ID].morpheus,
            request[ID].ids,
            request[ID].threshold,
            request[ID].quorum
        );
    }

    function updatePortal(uint ID) external payable {
        uint[] memory bounties = new uint[](request[ID].morpheus.length);
        for (uint i; i < request[ID].morpheus.length; i++) {
            bounties[i] = msg.value / request[ID].morpheus.length;
        }
        this.updateFeeds{value: msg.value}(
            request[ID].morpheus,
            request[ID].ids,
            bounties
        );
    }

    struct requeststruct {
        uint[] ids;
        address[] morpheus;
        address target;
        uint bounty;
        uint threshold;
        uint quorum;
        string endpoint;
        string path;
        uint decimals;
    }
    mapping(uint => requeststruct) public request;
    uint public requests;

    function requestFeedCallback(
        address[] memory morpheus,
        string memory APIendpoint,
        string memory APIendpointPath,
        uint256 decimals,
        uint256[] memory bounties,
        uint threshold,
        uint quorum,
        address receiveAddrs,
        uint256 bountyGuardian
    ) external payable returns (uint256[] memory, uint requestID) {
        uint[] memory IDs = new uint256[](morpheus.length);
        uint totals;
        for (uint256 i = 0; i < morpheus.length; i++) {
            totals += bounties[i];
        }
        totals += bountyGuardian;
        require(totals <= msg.value, "Bounty not paid by msg.value");
        IDs = this.requestFeed{value: msg.value}(
            morpheus,
            APIendpoint,
            APIendpointPath,
            decimals,
            bounties
        );
        uint i = requests;
        requests++;
        request[i].morpheus = morpheus;
        request[i].ids = IDs;
        request[i].target = receiveAddrs;
        request[i].threshold = threshold;
        request[i].quorum = quorum;
        request[i].bounty = bountyGuardian;
        request[i].decimals = decimals;
        request[i].endpoint = APIendpoint;
        request[i].path = APIendpointPath;
        emit dataCallbackRequested(i, bountyGuardian);
        return (IDs, i);
    }

    function fillRequest(uint256 ID) external {
        uint val;
        string memory valStr;
        bytes memory valBytes;
        require(request[ID].bounty != 0, "Bounty not paid");
        (val, valStr, valBytes) = this.getFeedsQuorum(
            request[ID].morpheus,
            request[ID].ids,
            request[ID].threshold,
            request[ID].quorum
        );
        scryMetamorph(request[ID].target).requestCallback(
            val,
            valStr,
            valBytes,
            ID
        );
        uint reward = request[ID].bounty;
        request[ID].bounty = 0;
        payable(msg.sender).transfer(reward);
    }

    function refillRequest(uint256 ID, uint guardianBounty) external payable {
        request[ID].bounty += guardianBounty;
        uint available = (msg.value - guardianBounty) /
            request[ID].morpheus.length;
        uint[] memory bounties = new uint256[](request[ID].morpheus.length);
        for (uint i; i < request[ID].morpheus.length; i++) {
            bounties[i] = available;
        }
        this.updateFeeds{value: msg.value - guardianBounty}(
            request[ID].morpheus,
            request[ID].ids,
            bounties
        );
        emit dataCallbackRequested(ID, guardianBounty);
    }

    function updateFeeds(
        address[] memory morpheus,
        uint256[] memory IDs,
        uint256[] memory bounties
    ) external payable {
        require(
            morpheus.length == IDs.length && IDs.length == bounties.length,
            "Length mismatch"
        );
        uint totals;
        for (uint256 i = 0; i < morpheus.length; i++) {
            uint256[] memory id = new uint256[](1);
            id[0] = IDs[i];
            uint256[] memory bounty = new uint256[](1);
            bounty[0] = bounties[i];
            totals += bounties[i];
            Morpheus(morpheus[i]).supportFeeds{value: bounty[0]}(id, bounty);
        }
        require(totals <= msg.value, "Bounty not paid by msg.value");
    }

    function compareStrings(
        string memory str1,
        string memory str2
    ) public pure returns (bool) {
        if (
            keccak256(abi.encodePacked((str1))) ==
            keccak256(abi.encodePacked((str2)))
        ) return true;
        else return false;
    }

    function mostUsedString(
        string[] memory arr
    ) public pure returns (string memory, uint quorum) {
        uint maxCount = 0;
        string memory maxOccured;
        uint n = arr.length;
        for (uint i = 0; i < n; i++) {
            string memory str = arr[i];
            uint count = 1;
            for (uint j = i + 1; j < n; j++) {
                if (compareStrings(arr[i], arr[j])) {
                    count++;
                }
            }
            if (count > maxCount) {
                maxCount = count;
                maxOccured = str;
            }
        }
        return (maxOccured, maxCount);
    }

    function quickSort(uint[] memory arr, uint left, uint right) private pure {
        uint i = left;
        uint j = right;
        if (i == j) return;
        uint pivot = arr[uint(left + (right - left) / 2)];
        while (i <= j) {
            while (arr[uint(i)] < pivot) i++;
            while (j != 0 && pivot < arr[uint(j)]) j--;
            if (i <= j) {
                (arr[uint(i)], arr[uint(j)]) = (arr[uint(j)], arr[uint(i)]);
                i++;
                if (j != 0) {
                    j--;
                }
            }
        }
        if (left < j) quickSort(arr, left, j);
        if (i < right) quickSort(arr, i, right);
    }

    function sort(uint[] memory data) private pure returns (uint[] memory) {
        quickSort(data, 0, data.length - 1);
        return data;
    }
}

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

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bounty","type":"uint256"}],"name":"dataCallbackRequested","type":"event"},{"inputs":[{"internalType":"string","name":"str1","type":"string"},{"internalType":"string","name":"str2","type":"string"}],"name":"compareStrings","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"ID","type":"uint256"}],"name":"fillRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"uint256[]","name":"IDs","type":"uint256[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"getFeeds","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"valStr","type":"string"},{"internalType":"bytes","name":"valBytes","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ID","type":"uint256"}],"name":"getFeedsPortal","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"valStr","type":"string"},{"internalType":"bytes","name":"valBytes","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"uint256[]","name":"IDs","type":"uint256[]"},{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"getFeedsQuorum","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"valStr","type":"string"},{"internalType":"bytes","name":"valBytes","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"uint256[]","name":"IDs","type":"uint256[]"}],"name":"getFeedsRaw","outputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"},{"internalType":"string[]","name":"valStr","type":"string[]"},{"internalType":"bytes[]","name":"valBytes","type":"bytes[]"},{"internalType":"uint256[]","name":"valTimestamps","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"arr","type":"string[]"}],"name":"mostUsedString","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"ID","type":"uint256"},{"internalType":"uint256","name":"guardianBounty","type":"uint256"}],"name":"refillRequest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"request","outputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"quorum","type":"uint256"},{"internalType":"string","name":"endpoint","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"string","name":"APIendpoint","type":"string"},{"internalType":"string","name":"APIendpointPath","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256[]","name":"bounties","type":"uint256[]"}],"name":"requestFeed","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"string","name":"APIendpoint","type":"string"},{"internalType":"string","name":"APIendpointPath","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"name":"requestFeed","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"string","name":"APIendpoint","type":"string"},{"internalType":"string","name":"APIendpointPath","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256[]","name":"bounties","type":"uint256[]"},{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"quorum","type":"uint256"},{"internalType":"address","name":"receiveAddrs","type":"address"},{"internalType":"uint256","name":"bountyGuardian","type":"uint256"}],"name":"requestFeedCallback","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"requestID","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"string","name":"APIendpoint","type":"string"},{"internalType":"string","name":"APIendpointPath","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"requestFeedPortal","outputs":[{"internalType":"uint256","name":"requestPortalID","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"morpheus","type":"address[]"},{"internalType":"uint256[]","name":"IDs","type":"uint256[]"},{"internalType":"uint256[]","name":"bounties","type":"uint256[]"}],"name":"updateFeeds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ID","type":"uint256"}],"name":"updatePortal","outputs":[],"stateMutability":"payable","type":"function"}]

608060405234801561001057600080fd5b50614863806100206000396000f3fe6080604052600436106100f35760003560e01c80639c0750f51161008a578063bed34bba11610059578063bed34bba14610341578063d845a4b31461037e578063e000ac2b146103c1578063f366ede4146103dd576100f3565b80639c0750f514610292578063b44071e9146102bb578063b74cb2db146102d7578063bbfcd05f14610302576100f3565b8063745b11c6116100c6578063745b11c6146101b3578063872f0bc4146101f1578063909dbde6146102315780639997641814610261576100f3565b806306ed9a39146100f8578063549f3f401461013757806359964fa6146101675780636fdba82a14610197575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a919061347a565b61041c565b60405161012e93929190613e7c565b60405180910390f35b610151600480360381019061014c919061306a565b61051a565b60405161015e9190613cac565b60405180910390f35b610181600480360381019061017c9190612faf565b610942565b60405161018e9190613cac565b60405180910390f35b6101b160048036038101906101ac919061347a565b610a88565b005b3480156101bf57600080fd5b506101da60048036038101906101d59190613370565b610c03565b6040516101e8929190613db1565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190612d66565b610cf7565b6040516102289493929190613cce565b60405180910390f35b61024b6004803603810190610246919061328f565b610fea565b6040516102589190613e61565b60405180910390f35b61027b60048036038101906102769190613155565b611247565b604051610289929190613d66565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061347a565b6115a4565b005b6102d560048036038101906102d09190612dde565b61181d565b005b3480156102e357600080fd5b506102ec611abb565b6040516102f99190613e61565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612f10565b611ac1565b60405161033893929190613e7c565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613402565b611eba565b6040516103759190613d96565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061347a565b611f24565b6040516103b89796959493929190613ac0565b60405180910390f35b6103db60048036038101906103d69190613532565b612096565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612e85565b612293565b60405161041393929190613e7c565b60405180910390f35b60006060803073ffffffffffffffffffffffffffffffffffffffff1663bbfcd05f600080878152602001908152602001600020600101600080888152602001908152602001600020600001600080898152602001908152602001600020600401546000808a8152602001908152602001600020600501546040518563ffffffff1660e01b81526004016104b29493929190613bf8565b60006040518083038186803b1580156104ca57600080fd5b505afa1580156104de573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061050791906134a7565b8093508194508295505050509193909250565b60606000865167ffffffffffffffff811115610539576105386146c2565b5b6040519080825280602002602001820160405280156105675781602001602082028036833780820191505090505b5090506000875167ffffffffffffffff811115610587576105866146c2565b5b6040519080825280602002602001820160405280156105b55781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff8111156105d5576105d46146c2565b5b60405190808252806020026020018201604052801561060857816020015b60608152602001906001900390816105f35790505b5090506000600167ffffffffffffffff811115610628576106276146c2565b5b60405190808252806020026020018201604052801561065b57816020015b60608152602001906001900390816106465790505b5090506000600167ffffffffffffffff81111561067b5761067a6146c2565b5b6040519080825280602002602001820160405280156106a95781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff8111156106c9576106c86146c2565b5b6040519080825280602002602001820160405280156106f75781602001602082028036833780820191505090505b509050600080600090505b8d518110156108eb578c866000815181106107205761071f614693565b5b60200260200101819052508b856000815181106107405761073f614693565b5b60200260200101819052508a846000815181106107605761075f614693565b5b60200260200101818152505089818151811061077f5761077e614693565b5b60200260200101518360008151811061079b5761079a614693565b5b6020026020010181815250508d81815181106107ba576107b9614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663639b55ba846000815181106107f1576107f0614693565b5b6020026020010151888888886040518663ffffffff1660e01b815260040161081c9493929190613c4b565b6000604051808303818588803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061087391906133b9565b97508760008151811061088957610888614693565b5b60200260200101518782815181106108a4576108a3614693565b5b6020026020010181815250508981815181106108c3576108c2614693565b5b6020026020010151826108d691906141eb565b915080806108e39061458c565b915050610702565b503481111561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690613e41565b60405180910390fd5b8597505050505050505095945050505050565b60606000855167ffffffffffffffff811115610961576109606146c2565b5b60405190808252806020026020018201604052801561098f5781602001602082028036833780820191505090505b50905060005b86518110156109dd578651346109ab9190614241565b8282815181106109be576109bd614693565b5b60200260200101818152505080806109d59061458c565b915050610995565b5060003073ffffffffffffffffffffffffffffffffffffffff1663549f3f403489898989886040518763ffffffff1660e01b8152600401610a22959493929190613b3d565b6000604051808303818588803b158015610a3b57600080fd5b505af1158015610a4f573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190610a7991906133b9565b90508092505050949350505050565b60008060008381526020019081526020016000206001018054905067ffffffffffffffff811115610abc57610abb6146c2565b5b604051908082528060200260200182016040528015610aea5781602001602082028036833780820191505090505b50905060005b60008084815260200190815260200160002060010180549050811015610b66576000808481526020019081526020016000206001018054905034610b349190614241565b828281518110610b4757610b46614693565b5b6020026020010181815250508080610b5e9061458c565b915050610af0565b503073ffffffffffffffffffffffffffffffffffffffff1663b44071e934600080868152602001908152602001600020600101600080878152602001908152602001600020600001856040518563ffffffff1660e01b8152600401610bcd93929190613bac565b6000604051808303818588803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50505050505050565b606060008060009050606060008551905060005b81811015610ce8576000878281518110610c3457610c33614693565b5b602002602001015190506000600190506000600184610c5391906141eb565b90505b84811015610cc357610c9c8a8581518110610c7457610c73614693565b5b60200260200101518b8381518110610c8f57610c8e614693565b5b6020026020010151611eba565b15610cb0578180610cac9061458c565b9250505b8080610cbb9061458c565b915050610c56565b5085811115610cd3578095508194505b50508080610ce09061458c565b915050610c17565b50818394509450505050915091565b6060806060806000806000606060008a5167ffffffffffffffff811115610d2157610d206146c2565b5b604051908082528060200260200182016040528015610d4f5781602001602082028036833780820191505090505b50905060008b5167ffffffffffffffff811115610d6f57610d6e6146c2565b5b604051908082528060200260200182016040528015610da257816020015b6060815260200190600190039081610d8d5790505b50905060008c5167ffffffffffffffff811115610dc257610dc16146c2565b5b604051908082528060200260200182016040528015610df557816020015b6060815260200190600190039081610de05790505b50905060008d5167ffffffffffffffff811115610e1557610e146146c2565b5b604051908082528060200260200182016040528015610e435781602001602082028036833780820191505090505b50905060005b8d51811015610fcc578e8181518110610e6557610e64614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908f8381518110610e9b57610e9a614693565b5b60200260200101516040518263ffffffff1660e01b8152600401610ebf9190613e61565b60006040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610f149190613572565b809950819a50829b50839c505050505086600a610f3191906142c5565b89610f3c9190614241565b858281518110610f4f57610f4e614693565b5b60200260200101818152505085848281518110610f6f57610f6e614693565b5b602002602001018190525085838281518110610f8e57610f8d614693565b5b602002602001018190525087828281518110610fad57610fac614693565b5b6020026020010181815250508080610fc49061458c565b915050610e49565b50838383839b509b509b509b50505050505050505092959194509250565b600080875167ffffffffffffffff811115611008576110076146c2565b5b6040519080825280602002602001820160405280156110365781602001602082028036833780820191505090505b50905060005b8851811015611084578851346110529190614241565b82828151811061106557611064614693565b5b602002602001018181525050808061107c9061458c565b91505061103c565b5060003073ffffffffffffffffffffffffffffffffffffffff1663549f3f40348b8b8b8b886040518763ffffffff1660e01b81526004016110c9959493929190613b3d565b6000604051808303818588803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061112091906133b9565b9050600060015490506001600081548092919061113c9061458c565b919050555089600080838152602001908152602001600020600101908051906020019061116a9291906127c7565b50816000808381526020019081526020016000206000019080519060200190611194929190612851565b5085600080838152602001908152602001600020600401819055508460008083815260200190815260200160002060050181905550866000808381526020019081526020016000206008018190555088600080838152602001908152602001600020600601908051906020019061120c92919061289e565b5087600080838152602001908152602001600020600701908051906020019061123692919061289e565b508093505050509695505050505050565b60606000808b5167ffffffffffffffff811115611267576112666146c2565b5b6040519080825280602002602001820160405280156112955781602001602082028036833780820191505090505b509050600080600090505b8d518110156112e4578981815181106112bc576112bb614693565b5b6020026020010151826112cf91906141eb565b915080806112dc9061458c565b9150506112a0565b5084816112f191906141eb565b905034811115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d90613e41565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663549f3f40348f8f8f8f8f6040518763ffffffff1660e01b8152600401611378959493929190613b3d565b6000604051808303818588803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906113cf91906133b9565b915060006001549050600160008154809291906113eb9061458c565b91905055508d60008083815260200190815260200160002060010190805190602001906114199291906127c7565b50826000808381526020019081526020016000206000019080519060200190611443929190612851565b508660008083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860008083815260200190815260200160002060040181905550876000808381526020019081526020016000206005018190555085600080838152602001908152602001600020600301819055508a600080838152602001908152602001600020600801819055508c600080838152602001908152602001600020600601908051906020019061152992919061289e565b508b600080838152602001908152602001600020600701908051906020019061155392919061289e565b507f207b1e2592ae04dff4b2e95640f3160dcea244745ded9c216a19de8e1d4e447b8187604051611585929190613f14565b60405180910390a1828194509450505050995099975050505050505050565b60006060806000806000868152602001908152602001600020600301541415611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613de1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663bbfcd05f600080878152602001908152602001600020600101600080888152602001908152602001600020600001600080898152602001908152602001600020600401546000808a8152602001908152602001600020600501546040518563ffffffff1660e01b81526004016116939493929190613bf8565b60006040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116e891906134a7565b80935081945082955050505060008085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4605b62848484886040518563ffffffff1660e01b81526004016117689493929190613ec1565b600060405180830381600087803b15801561178257600080fd5b505af1158015611796573d6000803e3d6000fd5b5050505060008060008681526020019081526020016000206003015490506000806000878152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611815573d6000803e3d6000fd5b505050505050565b8151835114801561182f575080518251145b61186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613e01565b60405180910390fd5b600080600090505b8451811015611a71576000600167ffffffffffffffff81111561189c5761189b6146c2565b5b6040519080825280602002602001820160405280156118ca5781602001602082028036833780820191505090505b5090508482815181106118e0576118df614693565b5b6020026020010151816000815181106118fc576118fb614693565b5b6020026020010181815250506000600167ffffffffffffffff811115611925576119246146c2565b5b6040519080825280602002602001820160405280156119535781602001602082028036833780820191505090505b50905084838151811061196957611968614693565b5b60200260200101518160008151811061198557611984614693565b5b6020026020010181815250508483815181106119a4576119a3614693565b5b6020026020010151846119b791906141eb565b93508683815181106119cc576119cb614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663882fd78282600081518110611a0357611a02614693565b5b602002602001015184846040518463ffffffff1660e01b8152600401611a2a929190613d2f565b6000604051808303818588803b158015611a4357600080fd5b505af1158015611a57573d6000803e3d6000fd5b505050505050508080611a699061458c565b915050611876565b5034811115611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613e41565b60405180910390fd5b50505050565b60015481565b6000606080600080600060606000808c5167ffffffffffffffff811115611aeb57611aea6146c2565b5b604051908082528060200260200182016040528015611b195781602001602082028036833780820191505090505b50905060008d5167ffffffffffffffff811115611b3957611b386146c2565b5b604051908082528060200260200182016040528015611b6c57816020015b6060815260200190600190039081611b575790505b50905060005b8d51811015611ce3578e8181518110611b8e57611b8d614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908f8381518110611bc457611bc3614693565b5b60200260200101516040518263ffffffff1660e01b8152600401611be89190613e61565b60006040518083038186803b158015611c0057600080fd5b505afa158015611c14573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c3d9190613572565b809850819950829a50839b5050505050868d42611c5a91906143e3565b1080611c66575060008d145b15611cd05785600a611c7891906142c5565b88611c839190614241565b838281518110611c9657611c95614693565b5b60200260200101818152505084828281518110611cb657611cb5614693565b5b60200260200101819052508380611ccc9061458c565b9450505b8080611cdb9061458c565b915050611b72565b50828b1115611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90613e21565b60405180910390fd5b60008e5167ffffffffffffffff811115611d4457611d436146c2565b5b604051908082528060200260200182016040528015611d725781602001602082028036833780820191505090505b509050611d7e836125f2565b9050600160028251611d9091906145d5565b1415611de3576000600260018351611da891906141eb565b611db29190614241565b905081600182611dc291906143e3565b81518110611dd357611dd2614693565b5b60200260200101519b5050611e51565b600060028251611df39190614241565b90506002828281518110611e0a57611e09614693565b5b602002602001015183600184611e2091906143e3565b81518110611e3157611e30614693565b5b6020026020010151611e4391906141eb565b611e4d9190614241565b9b50505b611e5a82610c03565b809550819b505050899850838c1115611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613e21565b60405180910390fd5b50505050505050509450945094915050565b600081604051602001611ecd9190613aa9565b6040516020818303038152906040528051906020012083604051602001611ef49190613aa9565b604051602081830303815290604052805190602001201415611f195760019050611f1e565b600090505b92915050565b60006020528060005260406000206000915090508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006018054611f7f906144f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fab906144f5565b8015611ff85780601f10611fcd57610100808354040283529160200191611ff8565b820191906000526020600020905b815481529060010190602001808311611fdb57829003601f168201915b50505050509080600701805461200d906144f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612039906144f5565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b5050505050908060080154905087565b8060008084815260200190815260200160002060030160008282546120bb91906141eb565b9250508190555060008060008481526020019081526020016000206001018054905082346120e991906143e3565b6120f39190614241565b905060008060008581526020019081526020016000206001018054905067ffffffffffffffff811115612129576121286146c2565b5b6040519080825280602002602001820160405280156121575781602001602082028036833780820191505090505b50905060005b600080868152602001908152602001600020600101805490508110156121b0578282828151811061219157612190614693565b5b60200260200101818152505080806121a89061458c565b91505061215d565b503073ffffffffffffffffffffffffffffffffffffffff1663b44071e984346121d991906143e3565b600080888152602001908152602001600020600101600080898152602001908152602001600020600001856040518563ffffffff1660e01b815260040161222293929190613bac565b6000604051808303818588803b15801561223b57600080fd5b505af115801561224f573d6000803e3d6000fd5b50505050507f207b1e2592ae04dff4b2e95640f3160dcea244745ded9c216a19de8e1d4e447b8484604051612285929190613f14565b60405180910390a150505050565b60006060806000806000606060008a5167ffffffffffffffff8111156122bc576122bb6146c2565b5b6040519080825280602002602001820160405280156122ea5781602001602082028036833780820191505090505b50905060008b5167ffffffffffffffff81111561230a576123096146c2565b5b60405190808252806020026020018201604052801561233d57816020015b60608152602001906001900390816123285790505b50905060005b8b518110156124a6578c818151811061235f5761235e614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908d838151811061239557612394614693565b5b60200260200101516040518263ffffffff1660e01b81526004016123b99190613e61565b60006040518083038186803b1580156123d157600080fd5b505afa1580156123e5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061240e9190613572565b809750819850829950839a5050505050858b4261242b91906143e3565b1080612437575060008b145b156124935784600a61244991906142c5565b876124549190614241565b83828151811061246757612466614693565b5b6020026020010181815250508382828151811061248757612486614693565b5b60200260200101819052505b808061249e9061458c565b915050612343565b5060008c5167ffffffffffffffff8111156124c4576124c36146c2565b5b6040519080825280602002602001820160405280156124f25781602001602082028036833780820191505090505b5090506124fe836125f2565b905060016002825161251091906145d5565b141561256357600060026001835161252891906141eb565b6125329190614241565b90508160018261254291906143e3565b8151811061255357612552614693565b5b60200260200101519a50506125d1565b6000600282516125739190614241565b9050600282828151811061258a57612589614693565b5b6020026020010151836001846125a091906143e3565b815181106125b1576125b0614693565b5b60200260200101516125c391906141eb565b6125cd9190614241565b9a50505b6125da82610c03565b50809950508897505050505050505093509350939050565b606061260d8260006001855161260891906143e3565b612615565b819050919050565b600082905060008290508082141561262e5750506127c2565b6000856002868661263f91906143e3565b6126499190614241565b8661265491906141eb565b8151811061266557612664614693565b5b602002602001015190505b818311612796575b8086848151811061268c5761268b614693565b5b602002602001015110156126ad5782806126a59061458c565b935050612678565b5b600082141580156126d857508582815181106126cd576126cc614693565b5b602002602001015181105b156126f05781806126e8906144cb565b9250506126ae565b8183116127915785828151811061270a57612709614693565b5b602002602001015186848151811061272557612724614693565b5b60200260200101518785815181106127405761273f614693565b5b6020026020010188858151811061275a57612759614693565b5b602002602001018281525082815250505082806127769061458c565b9350506000821461279057818061278c906144cb565b9250505b5b612670565b818510156127aa576127a9868684612615565b5b838310156127be576127bd868486612615565b5b5050505b505050565b828054828255906000526020600020908101928215612840579160200282015b8281111561283f5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906127e7565b5b50905061284d9190612924565b5090565b82805482825590600052602060002090810192821561288d579160200282015b8281111561288c578251825591602001919060010190612871565b5b50905061289a9190612924565b5090565b8280546128aa906144f5565b90600052602060002090601f0160209004810192826128cc5760008555612913565b82601f106128e557805160ff1916838001178555612913565b82800160010185558215612913579182015b828111156129125782518255916020019190600101906128f7565b5b5090506129209190612924565b5090565b5b8082111561293d576000816000905550600101612925565b5090565b600061295461294f84613f62565b613f3d565b905080838252602082019050828560208602820111156129775761297661471c565b5b60005b858110156129a7578161298d8882612be5565b84526020840193506020830192505060018101905061297a565b5050509392505050565b60006129c46129bf84613f8e565b613f3d565b905080838252602082019050828560208602820111156129e7576129e661471c565b5b60005b85811015612a3557813567ffffffffffffffff811115612a0d57612a0c614717565b5b808601612a1a8982612ce0565b855260208501945060208401935050506001810190506129ea565b5050509392505050565b6000612a52612a4d84613fba565b613f3d565b90508083825260208201905082856020860282011115612a7557612a7461471c565b5b60005b85811015612aa55781612a8b8882612d3c565b845260208401935060208301925050600181019050612a78565b5050509392505050565b6000612ac2612abd84613fba565b613f3d565b90508083825260208201905082856020860282011115612ae557612ae461471c565b5b60005b85811015612b155781612afb8882612d51565b845260208401935060208301925050600181019050612ae8565b5050509392505050565b6000612b32612b2d84613fe6565b613f3d565b905082815260208101848484011115612b4e57612b4d614721565b5b612b59848285614498565b509392505050565b6000612b74612b6f84614017565b613f3d565b905082815260208101848484011115612b9057612b8f614721565b5b612b9b848285614489565b509392505050565b6000612bb6612bb184614017565b613f3d565b905082815260208101848484011115612bd257612bd1614721565b5b612bdd848285614498565b509392505050565b600081359050612bf4816147ff565b92915050565b600082601f830112612c0f57612c0e614717565b5b8135612c1f848260208601612941565b91505092915050565b600082601f830112612c3d57612c3c614717565b5b8135612c4d8482602086016129b1565b91505092915050565b600082601f830112612c6b57612c6a614717565b5b8135612c7b848260208601612a3f565b91505092915050565b600082601f830112612c9957612c98614717565b5b8151612ca9848260208601612aaf565b91505092915050565b600082601f830112612cc757612cc6614717565b5b8151612cd7848260208601612b1f565b91505092915050565b600082601f830112612cf557612cf4614717565b5b8135612d05848260208601612b61565b91505092915050565b600082601f830112612d2357612d22614717565b5b8151612d33848260208601612ba3565b91505092915050565b600081359050612d4b81614816565b92915050565b600081519050612d6081614816565b92915050565b60008060408385031215612d7d57612d7c61472b565b5b600083013567ffffffffffffffff811115612d9b57612d9a614726565b5b612da785828601612bfa565b925050602083013567ffffffffffffffff811115612dc857612dc7614726565b5b612dd485828601612c56565b9150509250929050565b600080600060608486031215612df757612df661472b565b5b600084013567ffffffffffffffff811115612e1557612e14614726565b5b612e2186828701612bfa565b935050602084013567ffffffffffffffff811115612e4257612e41614726565b5b612e4e86828701612c56565b925050604084013567ffffffffffffffff811115612e6f57612e6e614726565b5b612e7b86828701612c56565b9150509250925092565b600080600060608486031215612e9e57612e9d61472b565b5b600084013567ffffffffffffffff811115612ebc57612ebb614726565b5b612ec886828701612bfa565b935050602084013567ffffffffffffffff811115612ee957612ee8614726565b5b612ef586828701612c56565b9250506040612f0686828701612d3c565b9150509250925092565b60008060008060808587031215612f2a57612f2961472b565b5b600085013567ffffffffffffffff811115612f4857612f47614726565b5b612f5487828801612bfa565b945050602085013567ffffffffffffffff811115612f7557612f74614726565b5b612f8187828801612c56565b9350506040612f9287828801612d3c565b9250506060612fa387828801612d3c565b91505092959194509250565b60008060008060808587031215612fc957612fc861472b565b5b600085013567ffffffffffffffff811115612fe757612fe6614726565b5b612ff387828801612bfa565b945050602085013567ffffffffffffffff81111561301457613013614726565b5b61302087828801612ce0565b935050604085013567ffffffffffffffff81111561304157613040614726565b5b61304d87828801612ce0565b925050606061305e87828801612d3c565b91505092959194509250565b600080600080600060a086880312156130865761308561472b565b5b600086013567ffffffffffffffff8111156130a4576130a3614726565b5b6130b088828901612bfa565b955050602086013567ffffffffffffffff8111156130d1576130d0614726565b5b6130dd88828901612ce0565b945050604086013567ffffffffffffffff8111156130fe576130fd614726565b5b61310a88828901612ce0565b935050606061311b88828901612d3c565b925050608086013567ffffffffffffffff81111561313c5761313b614726565b5b61314888828901612c56565b9150509295509295909350565b60008060008060008060008060006101208a8c0312156131785761317761472b565b5b60008a013567ffffffffffffffff81111561319657613195614726565b5b6131a28c828d01612bfa565b99505060208a013567ffffffffffffffff8111156131c3576131c2614726565b5b6131cf8c828d01612ce0565b98505060408a013567ffffffffffffffff8111156131f0576131ef614726565b5b6131fc8c828d01612ce0565b975050606061320d8c828d01612d3c565b96505060808a013567ffffffffffffffff81111561322e5761322d614726565b5b61323a8c828d01612c56565b95505060a061324b8c828d01612d3c565b94505060c061325c8c828d01612d3c565b93505060e061326d8c828d01612be5565b92505061010061327f8c828d01612d3c565b9150509295985092959850929598565b60008060008060008060c087890312156132ac576132ab61472b565b5b600087013567ffffffffffffffff8111156132ca576132c9614726565b5b6132d689828a01612bfa565b965050602087013567ffffffffffffffff8111156132f7576132f6614726565b5b61330389828a01612ce0565b955050604087013567ffffffffffffffff81111561332457613323614726565b5b61333089828a01612ce0565b945050606061334189828a01612d3c565b935050608061335289828a01612d3c565b92505060a061336389828a01612d3c565b9150509295509295509295565b6000602082840312156133865761338561472b565b5b600082013567ffffffffffffffff8111156133a4576133a3614726565b5b6133b084828501612c28565b91505092915050565b6000602082840312156133cf576133ce61472b565b5b600082015167ffffffffffffffff8111156133ed576133ec614726565b5b6133f984828501612c84565b91505092915050565b600080604083850312156134195761341861472b565b5b600083013567ffffffffffffffff81111561343757613436614726565b5b61344385828601612ce0565b925050602083013567ffffffffffffffff81111561346457613463614726565b5b61347085828601612ce0565b9150509250929050565b6000602082840312156134905761348f61472b565b5b600061349e84828501612d3c565b91505092915050565b6000806000606084860312156134c0576134bf61472b565b5b60006134ce86828701612d51565b935050602084015167ffffffffffffffff8111156134ef576134ee614726565b5b6134fb86828701612d0e565b925050604084015167ffffffffffffffff81111561351c5761351b614726565b5b61352886828701612cb2565b9150509250925092565b600080604083850312156135495761354861472b565b5b600061355785828601612d3c565b925050602061356885828601612d3c565b9150509250929050565b6000806000806080858703121561358c5761358b61472b565b5b600061359a87828801612d51565b94505060206135ab87828801612d51565b93505060406135bc87828801612d51565b925050606085015167ffffffffffffffff8111156135dd576135dc614726565b5b6135e987828801612d0e565b91505092959194509250565b6000613601838361364d565b60208301905092915050565b600061361983836138ea565b905092915050565b600061362d838361395c565b905092915050565b60006136418383613a8b565b60208301905092915050565b61365681614441565b82525050565b61366581614441565b82525050565b6000613676826140b2565b6136808185614158565b935061368b83614048565b8060005b838110156136bc5781516136a388826135f5565b97506136ae8361410a565b92505060018101905061368f565b5085935050505092915050565b60006136d4826140bd565b6136de8185614158565b93506136e983614058565b8060005b83811015613721576136fe826146f1565b61370888826135f5565b975061371383614117565b9250506001810190506136ed565b5085935050505092915050565b6000613739826140c8565b6137438185614169565b9350836020820285016137558561406d565b8060005b858110156137915784840389528151613772858261360d565b945061377d83614124565b925060208a01995050600181019050613759565b50829750879550505050505092915050565b60006137ae826140d3565b6137b8818561417a565b9350836020820285016137ca8561407d565b8060005b8581101561380657848403895281516137e78582613621565b94506137f283614131565b925060208a019950506001810190506137ce565b50829750879550505050505092915050565b6000613823826140de565b61382d818561418b565b93506138388361408d565b8060005b838110156138695781516138508882613635565b975061385b8361413e565b92505060018101905061383c565b5085935050505092915050565b6000613881826140e9565b61388b818561418b565b93506138968361409d565b8060005b838110156138ce576138ab82614704565b6138b58882613635565b97506138c08361414b565b92505060018101905061389a565b5085935050505092915050565b6138e481614453565b82525050565b60006138f5826140f4565b6138ff818561419c565b935061390f818560208601614498565b61391881614730565b840191505092915050565b600061392e826140f4565b61393881856141ad565b9350613948818560208601614498565b61395181614730565b840191505092915050565b6000613967826140ff565b61397181856141be565b9350613981818560208601614498565b61398a81614730565b840191505092915050565b60006139a0826140ff565b6139aa81856141cf565b93506139ba818560208601614498565b6139c381614730565b840191505092915050565b60006139d9826140ff565b6139e381856141e0565b93506139f3818560208601614498565b80840191505092915050565b6000613a0c600f836141cf565b9150613a178261475b565b602082019050919050565b6000613a2f600f836141cf565b9150613a3a82614784565b602082019050919050565b6000613a52600e836141cf565b9150613a5d826147ad565b602082019050919050565b6000613a75601c836141cf565b9150613a80826147d6565b602082019050919050565b613a948161447f565b82525050565b613aa38161447f565b82525050565b6000613ab582846139ce565b915081905092915050565b600060e082019050613ad5600083018a61365c565b613ae26020830189613a9a565b613aef6040830188613a9a565b613afc6060830187613a9a565b8181036080830152613b0e8186613995565b905081810360a0830152613b228185613995565b9050613b3160c0830184613a9a565b98975050505050505050565b600060a0820190508181036000830152613b57818861366b565b90508181036020830152613b6b8187613995565b90508181036040830152613b7f8186613995565b9050613b8e6060830185613a9a565b8181036080830152613ba08184613818565b90509695505050505050565b60006060820190508181036000830152613bc681866136c9565b90508181036020830152613bda8185613876565b90508181036040830152613bee8184613818565b9050949350505050565b60006080820190508181036000830152613c1281876136c9565b90508181036020830152613c268186613876565b9050613c356040830185613a9a565b613c426060830184613a9a565b95945050505050565b60006080820190508181036000830152613c6581876137a3565b90508181036020830152613c7981866137a3565b90508181036040830152613c8d8185613818565b90508181036060830152613ca18184613818565b905095945050505050565b60006020820190508181036000830152613cc68184613818565b905092915050565b60006080820190508181036000830152613ce88187613818565b90508181036020830152613cfc81866137a3565b90508181036040830152613d10818561372e565b90508181036060830152613d248184613818565b905095945050505050565b60006040820190508181036000830152613d498185613818565b90508181036020830152613d5d8184613818565b90509392505050565b60006040820190508181036000830152613d808185613818565b9050613d8f6020830184613a9a565b9392505050565b6000602082019050613dab60008301846138db565b92915050565b60006040820190508181036000830152613dcb8185613995565b9050613dda6020830184613a9a565b9392505050565b60006020820190508181036000830152613dfa816139ff565b9050919050565b60006020820190508181036000830152613e1a81613a22565b9050919050565b60006020820190508181036000830152613e3a81613a45565b9050919050565b60006020820190508181036000830152613e5a81613a68565b9050919050565b6000602082019050613e766000830184613a9a565b92915050565b6000606082019050613e916000830186613a9a565b8181036020830152613ea38185613995565b90508181036040830152613eb78184613923565b9050949350505050565b6000608082019050613ed66000830187613a9a565b8181036020830152613ee88186613995565b90508181036040830152613efc8185613923565b9050613f0b6060830184613a9a565b95945050505050565b6000604082019050613f296000830185613a9a565b613f366020830184613a9a565b9392505050565b6000613f47613f58565b9050613f53828261455b565b919050565b6000604051905090565b600067ffffffffffffffff821115613f7d57613f7c6146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fa957613fa86146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fd557613fd46146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614001576140006146c2565b5b61400a82614730565b9050602081019050919050565b600067ffffffffffffffff821115614032576140316146c2565b5b61403b82614730565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f68261447f565b91506142018361447f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423657614235614606565b5b828201905092915050565b600061424c8261447f565b91506142578361447f565b92508261426757614266614635565b5b828204905092915050565b6000808291508390505b60018511156142bc5780860481111561429857614297614606565b5b60018516156142a75780820291505b80810290506142b58561474e565b945061427c565b94509492505050565b60006142d08261447f565b91506142db8361447f565b92506143087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614310565b905092915050565b60008261432057600190506143dc565b8161432e57600090506143dc565b8160018114614344576002811461434e5761437d565b60019150506143dc565b60ff8411156143605761435f614606565b5b8360020a91508482111561437757614376614606565b5b506143dc565b5060208310610133831016604e8410600b84101617156143b25782820a9050838111156143ad576143ac614606565b5b6143dc565b6143bf8484846001614272565b925090508184048111156143d6576143d5614606565b5b81810290505b9392505050565b60006143ee8261447f565b91506143f98361447f565b92508282101561440c5761440b614606565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061444c8261445f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144b657808201518184015260208101905061449b565b838111156144c5576000848401525b50505050565b60006144d68261447f565b915060008214156144ea576144e9614606565b5b600182039050919050565b6000600282049050600182168061450d57607f821691505b6020821081141561452157614520614664565b5b50919050565b600061453a61453583614741565b614417565b9050919050565b600061455461454f83614741565b614437565b9050919050565b61456482614730565b810181811067ffffffffffffffff82111715614583576145826146c2565b5b80604052505050565b60006145978261447f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145ca576145c9614606565b5b600182019050919050565b60006145e08261447f565b91506145eb8361447f565b9250826145fb576145fa614635565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006146fd8254614527565b9050919050565b60006147108254614541565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160001c9050919050565b60008160011c9050919050565b7f426f756e7479206e6f7420706169640000000000000000000000000000000000600082015250565b7f4c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b7f426f756e7479206e6f742070616964206279206d73672e76616c756500000000600082015250565b61480881614441565b811461481357600080fd5b50565b61481f8161447f565b811461482a57600080fd5b5056fea2646970667358221220563b54d064bbd32cefa1bde356eb5adc65f6f3b38bd139a9e6cafd07c1752d3f64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106100f35760003560e01c80639c0750f51161008a578063bed34bba11610059578063bed34bba14610341578063d845a4b31461037e578063e000ac2b146103c1578063f366ede4146103dd576100f3565b80639c0750f514610292578063b44071e9146102bb578063b74cb2db146102d7578063bbfcd05f14610302576100f3565b8063745b11c6116100c6578063745b11c6146101b3578063872f0bc4146101f1578063909dbde6146102315780639997641814610261576100f3565b806306ed9a39146100f8578063549f3f401461013757806359964fa6146101675780636fdba82a14610197575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a919061347a565b61041c565b60405161012e93929190613e7c565b60405180910390f35b610151600480360381019061014c919061306a565b61051a565b60405161015e9190613cac565b60405180910390f35b610181600480360381019061017c9190612faf565b610942565b60405161018e9190613cac565b60405180910390f35b6101b160048036038101906101ac919061347a565b610a88565b005b3480156101bf57600080fd5b506101da60048036038101906101d59190613370565b610c03565b6040516101e8929190613db1565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190612d66565b610cf7565b6040516102289493929190613cce565b60405180910390f35b61024b6004803603810190610246919061328f565b610fea565b6040516102589190613e61565b60405180910390f35b61027b60048036038101906102769190613155565b611247565b604051610289929190613d66565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061347a565b6115a4565b005b6102d560048036038101906102d09190612dde565b61181d565b005b3480156102e357600080fd5b506102ec611abb565b6040516102f99190613e61565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612f10565b611ac1565b60405161033893929190613e7c565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613402565b611eba565b6040516103759190613d96565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061347a565b611f24565b6040516103b89796959493929190613ac0565b60405180910390f35b6103db60048036038101906103d69190613532565b612096565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612e85565b612293565b60405161041393929190613e7c565b60405180910390f35b60006060803073ffffffffffffffffffffffffffffffffffffffff1663bbfcd05f600080878152602001908152602001600020600101600080888152602001908152602001600020600001600080898152602001908152602001600020600401546000808a8152602001908152602001600020600501546040518563ffffffff1660e01b81526004016104b29493929190613bf8565b60006040518083038186803b1580156104ca57600080fd5b505afa1580156104de573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061050791906134a7565b8093508194508295505050509193909250565b60606000865167ffffffffffffffff811115610539576105386146c2565b5b6040519080825280602002602001820160405280156105675781602001602082028036833780820191505090505b5090506000875167ffffffffffffffff811115610587576105866146c2565b5b6040519080825280602002602001820160405280156105b55781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff8111156105d5576105d46146c2565b5b60405190808252806020026020018201604052801561060857816020015b60608152602001906001900390816105f35790505b5090506000600167ffffffffffffffff811115610628576106276146c2565b5b60405190808252806020026020018201604052801561065b57816020015b60608152602001906001900390816106465790505b5090506000600167ffffffffffffffff81111561067b5761067a6146c2565b5b6040519080825280602002602001820160405280156106a95781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff8111156106c9576106c86146c2565b5b6040519080825280602002602001820160405280156106f75781602001602082028036833780820191505090505b509050600080600090505b8d518110156108eb578c866000815181106107205761071f614693565b5b60200260200101819052508b856000815181106107405761073f614693565b5b60200260200101819052508a846000815181106107605761075f614693565b5b60200260200101818152505089818151811061077f5761077e614693565b5b60200260200101518360008151811061079b5761079a614693565b5b6020026020010181815250508d81815181106107ba576107b9614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663639b55ba846000815181106107f1576107f0614693565b5b6020026020010151888888886040518663ffffffff1660e01b815260040161081c9493929190613c4b565b6000604051808303818588803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061087391906133b9565b97508760008151811061088957610888614693565b5b60200260200101518782815181106108a4576108a3614693565b5b6020026020010181815250508981815181106108c3576108c2614693565b5b6020026020010151826108d691906141eb565b915080806108e39061458c565b915050610702565b503481111561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690613e41565b60405180910390fd5b8597505050505050505095945050505050565b60606000855167ffffffffffffffff811115610961576109606146c2565b5b60405190808252806020026020018201604052801561098f5781602001602082028036833780820191505090505b50905060005b86518110156109dd578651346109ab9190614241565b8282815181106109be576109bd614693565b5b60200260200101818152505080806109d59061458c565b915050610995565b5060003073ffffffffffffffffffffffffffffffffffffffff1663549f3f403489898989886040518763ffffffff1660e01b8152600401610a22959493929190613b3d565b6000604051808303818588803b158015610a3b57600080fd5b505af1158015610a4f573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190610a7991906133b9565b90508092505050949350505050565b60008060008381526020019081526020016000206001018054905067ffffffffffffffff811115610abc57610abb6146c2565b5b604051908082528060200260200182016040528015610aea5781602001602082028036833780820191505090505b50905060005b60008084815260200190815260200160002060010180549050811015610b66576000808481526020019081526020016000206001018054905034610b349190614241565b828281518110610b4757610b46614693565b5b6020026020010181815250508080610b5e9061458c565b915050610af0565b503073ffffffffffffffffffffffffffffffffffffffff1663b44071e934600080868152602001908152602001600020600101600080878152602001908152602001600020600001856040518563ffffffff1660e01b8152600401610bcd93929190613bac565b6000604051808303818588803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50505050505050565b606060008060009050606060008551905060005b81811015610ce8576000878281518110610c3457610c33614693565b5b602002602001015190506000600190506000600184610c5391906141eb565b90505b84811015610cc357610c9c8a8581518110610c7457610c73614693565b5b60200260200101518b8381518110610c8f57610c8e614693565b5b6020026020010151611eba565b15610cb0578180610cac9061458c565b9250505b8080610cbb9061458c565b915050610c56565b5085811115610cd3578095508194505b50508080610ce09061458c565b915050610c17565b50818394509450505050915091565b6060806060806000806000606060008a5167ffffffffffffffff811115610d2157610d206146c2565b5b604051908082528060200260200182016040528015610d4f5781602001602082028036833780820191505090505b50905060008b5167ffffffffffffffff811115610d6f57610d6e6146c2565b5b604051908082528060200260200182016040528015610da257816020015b6060815260200190600190039081610d8d5790505b50905060008c5167ffffffffffffffff811115610dc257610dc16146c2565b5b604051908082528060200260200182016040528015610df557816020015b6060815260200190600190039081610de05790505b50905060008d5167ffffffffffffffff811115610e1557610e146146c2565b5b604051908082528060200260200182016040528015610e435781602001602082028036833780820191505090505b50905060005b8d51811015610fcc578e8181518110610e6557610e64614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908f8381518110610e9b57610e9a614693565b5b60200260200101516040518263ffffffff1660e01b8152600401610ebf9190613e61565b60006040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610f149190613572565b809950819a50829b50839c505050505086600a610f3191906142c5565b89610f3c9190614241565b858281518110610f4f57610f4e614693565b5b60200260200101818152505085848281518110610f6f57610f6e614693565b5b602002602001018190525085838281518110610f8e57610f8d614693565b5b602002602001018190525087828281518110610fad57610fac614693565b5b6020026020010181815250508080610fc49061458c565b915050610e49565b50838383839b509b509b509b50505050505050505092959194509250565b600080875167ffffffffffffffff811115611008576110076146c2565b5b6040519080825280602002602001820160405280156110365781602001602082028036833780820191505090505b50905060005b8851811015611084578851346110529190614241565b82828151811061106557611064614693565b5b602002602001018181525050808061107c9061458c565b91505061103c565b5060003073ffffffffffffffffffffffffffffffffffffffff1663549f3f40348b8b8b8b886040518763ffffffff1660e01b81526004016110c9959493929190613b3d565b6000604051808303818588803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061112091906133b9565b9050600060015490506001600081548092919061113c9061458c565b919050555089600080838152602001908152602001600020600101908051906020019061116a9291906127c7565b50816000808381526020019081526020016000206000019080519060200190611194929190612851565b5085600080838152602001908152602001600020600401819055508460008083815260200190815260200160002060050181905550866000808381526020019081526020016000206008018190555088600080838152602001908152602001600020600601908051906020019061120c92919061289e565b5087600080838152602001908152602001600020600701908051906020019061123692919061289e565b508093505050509695505050505050565b60606000808b5167ffffffffffffffff811115611267576112666146c2565b5b6040519080825280602002602001820160405280156112955781602001602082028036833780820191505090505b509050600080600090505b8d518110156112e4578981815181106112bc576112bb614693565b5b6020026020010151826112cf91906141eb565b915080806112dc9061458c565b9150506112a0565b5084816112f191906141eb565b905034811115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d90613e41565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663549f3f40348f8f8f8f8f6040518763ffffffff1660e01b8152600401611378959493929190613b3d565b6000604051808303818588803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906113cf91906133b9565b915060006001549050600160008154809291906113eb9061458c565b91905055508d60008083815260200190815260200160002060010190805190602001906114199291906127c7565b50826000808381526020019081526020016000206000019080519060200190611443929190612851565b508660008083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860008083815260200190815260200160002060040181905550876000808381526020019081526020016000206005018190555085600080838152602001908152602001600020600301819055508a600080838152602001908152602001600020600801819055508c600080838152602001908152602001600020600601908051906020019061152992919061289e565b508b600080838152602001908152602001600020600701908051906020019061155392919061289e565b507f207b1e2592ae04dff4b2e95640f3160dcea244745ded9c216a19de8e1d4e447b8187604051611585929190613f14565b60405180910390a1828194509450505050995099975050505050505050565b60006060806000806000868152602001908152602001600020600301541415611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613de1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663bbfcd05f600080878152602001908152602001600020600101600080888152602001908152602001600020600001600080898152602001908152602001600020600401546000808a8152602001908152602001600020600501546040518563ffffffff1660e01b81526004016116939493929190613bf8565b60006040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116e891906134a7565b80935081945082955050505060008085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4605b62848484886040518563ffffffff1660e01b81526004016117689493929190613ec1565b600060405180830381600087803b15801561178257600080fd5b505af1158015611796573d6000803e3d6000fd5b5050505060008060008681526020019081526020016000206003015490506000806000878152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611815573d6000803e3d6000fd5b505050505050565b8151835114801561182f575080518251145b61186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613e01565b60405180910390fd5b600080600090505b8451811015611a71576000600167ffffffffffffffff81111561189c5761189b6146c2565b5b6040519080825280602002602001820160405280156118ca5781602001602082028036833780820191505090505b5090508482815181106118e0576118df614693565b5b6020026020010151816000815181106118fc576118fb614693565b5b6020026020010181815250506000600167ffffffffffffffff811115611925576119246146c2565b5b6040519080825280602002602001820160405280156119535781602001602082028036833780820191505090505b50905084838151811061196957611968614693565b5b60200260200101518160008151811061198557611984614693565b5b6020026020010181815250508483815181106119a4576119a3614693565b5b6020026020010151846119b791906141eb565b93508683815181106119cc576119cb614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663882fd78282600081518110611a0357611a02614693565b5b602002602001015184846040518463ffffffff1660e01b8152600401611a2a929190613d2f565b6000604051808303818588803b158015611a4357600080fd5b505af1158015611a57573d6000803e3d6000fd5b505050505050508080611a699061458c565b915050611876565b5034811115611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613e41565b60405180910390fd5b50505050565b60015481565b6000606080600080600060606000808c5167ffffffffffffffff811115611aeb57611aea6146c2565b5b604051908082528060200260200182016040528015611b195781602001602082028036833780820191505090505b50905060008d5167ffffffffffffffff811115611b3957611b386146c2565b5b604051908082528060200260200182016040528015611b6c57816020015b6060815260200190600190039081611b575790505b50905060005b8d51811015611ce3578e8181518110611b8e57611b8d614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908f8381518110611bc457611bc3614693565b5b60200260200101516040518263ffffffff1660e01b8152600401611be89190613e61565b60006040518083038186803b158015611c0057600080fd5b505afa158015611c14573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c3d9190613572565b809850819950829a50839b5050505050868d42611c5a91906143e3565b1080611c66575060008d145b15611cd05785600a611c7891906142c5565b88611c839190614241565b838281518110611c9657611c95614693565b5b60200260200101818152505084828281518110611cb657611cb5614693565b5b60200260200101819052508380611ccc9061458c565b9450505b8080611cdb9061458c565b915050611b72565b50828b1115611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90613e21565b60405180910390fd5b60008e5167ffffffffffffffff811115611d4457611d436146c2565b5b604051908082528060200260200182016040528015611d725781602001602082028036833780820191505090505b509050611d7e836125f2565b9050600160028251611d9091906145d5565b1415611de3576000600260018351611da891906141eb565b611db29190614241565b905081600182611dc291906143e3565b81518110611dd357611dd2614693565b5b60200260200101519b5050611e51565b600060028251611df39190614241565b90506002828281518110611e0a57611e09614693565b5b602002602001015183600184611e2091906143e3565b81518110611e3157611e30614693565b5b6020026020010151611e4391906141eb565b611e4d9190614241565b9b50505b611e5a82610c03565b809550819b505050899850838c1115611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613e21565b60405180910390fd5b50505050505050509450945094915050565b600081604051602001611ecd9190613aa9565b6040516020818303038152906040528051906020012083604051602001611ef49190613aa9565b604051602081830303815290604052805190602001201415611f195760019050611f1e565b600090505b92915050565b60006020528060005260406000206000915090508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006018054611f7f906144f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fab906144f5565b8015611ff85780601f10611fcd57610100808354040283529160200191611ff8565b820191906000526020600020905b815481529060010190602001808311611fdb57829003601f168201915b50505050509080600701805461200d906144f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612039906144f5565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b5050505050908060080154905087565b8060008084815260200190815260200160002060030160008282546120bb91906141eb565b9250508190555060008060008481526020019081526020016000206001018054905082346120e991906143e3565b6120f39190614241565b905060008060008581526020019081526020016000206001018054905067ffffffffffffffff811115612129576121286146c2565b5b6040519080825280602002602001820160405280156121575781602001602082028036833780820191505090505b50905060005b600080868152602001908152602001600020600101805490508110156121b0578282828151811061219157612190614693565b5b60200260200101818152505080806121a89061458c565b91505061215d565b503073ffffffffffffffffffffffffffffffffffffffff1663b44071e984346121d991906143e3565b600080888152602001908152602001600020600101600080898152602001908152602001600020600001856040518563ffffffff1660e01b815260040161222293929190613bac565b6000604051808303818588803b15801561223b57600080fd5b505af115801561224f573d6000803e3d6000fd5b50505050507f207b1e2592ae04dff4b2e95640f3160dcea244745ded9c216a19de8e1d4e447b8484604051612285929190613f14565b60405180910390a150505050565b60006060806000806000606060008a5167ffffffffffffffff8111156122bc576122bb6146c2565b5b6040519080825280602002602001820160405280156122ea5781602001602082028036833780820191505090505b50905060008b5167ffffffffffffffff81111561230a576123096146c2565b5b60405190808252806020026020018201604052801561233d57816020015b60608152602001906001900390816123285790505b50905060005b8b518110156124a6578c818151811061235f5761235e614693565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663ecb76d908d838151811061239557612394614693565b5b60200260200101516040518263ffffffff1660e01b81526004016123b99190613e61565b60006040518083038186803b1580156123d157600080fd5b505afa1580156123e5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061240e9190613572565b809750819850829950839a5050505050858b4261242b91906143e3565b1080612437575060008b145b156124935784600a61244991906142c5565b876124549190614241565b83828151811061246757612466614693565b5b6020026020010181815250508382828151811061248757612486614693565b5b60200260200101819052505b808061249e9061458c565b915050612343565b5060008c5167ffffffffffffffff8111156124c4576124c36146c2565b5b6040519080825280602002602001820160405280156124f25781602001602082028036833780820191505090505b5090506124fe836125f2565b905060016002825161251091906145d5565b141561256357600060026001835161252891906141eb565b6125329190614241565b90508160018261254291906143e3565b8151811061255357612552614693565b5b60200260200101519a50506125d1565b6000600282516125739190614241565b9050600282828151811061258a57612589614693565b5b6020026020010151836001846125a091906143e3565b815181106125b1576125b0614693565b5b60200260200101516125c391906141eb565b6125cd9190614241565b9a50505b6125da82610c03565b50809950508897505050505050505093509350939050565b606061260d8260006001855161260891906143e3565b612615565b819050919050565b600082905060008290508082141561262e5750506127c2565b6000856002868661263f91906143e3565b6126499190614241565b8661265491906141eb565b8151811061266557612664614693565b5b602002602001015190505b818311612796575b8086848151811061268c5761268b614693565b5b602002602001015110156126ad5782806126a59061458c565b935050612678565b5b600082141580156126d857508582815181106126cd576126cc614693565b5b602002602001015181105b156126f05781806126e8906144cb565b9250506126ae565b8183116127915785828151811061270a57612709614693565b5b602002602001015186848151811061272557612724614693565b5b60200260200101518785815181106127405761273f614693565b5b6020026020010188858151811061275a57612759614693565b5b602002602001018281525082815250505082806127769061458c565b9350506000821461279057818061278c906144cb565b9250505b5b612670565b818510156127aa576127a9868684612615565b5b838310156127be576127bd868486612615565b5b5050505b505050565b828054828255906000526020600020908101928215612840579160200282015b8281111561283f5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906127e7565b5b50905061284d9190612924565b5090565b82805482825590600052602060002090810192821561288d579160200282015b8281111561288c578251825591602001919060010190612871565b5b50905061289a9190612924565b5090565b8280546128aa906144f5565b90600052602060002090601f0160209004810192826128cc5760008555612913565b82601f106128e557805160ff1916838001178555612913565b82800160010185558215612913579182015b828111156129125782518255916020019190600101906128f7565b5b5090506129209190612924565b5090565b5b8082111561293d576000816000905550600101612925565b5090565b600061295461294f84613f62565b613f3d565b905080838252602082019050828560208602820111156129775761297661471c565b5b60005b858110156129a7578161298d8882612be5565b84526020840193506020830192505060018101905061297a565b5050509392505050565b60006129c46129bf84613f8e565b613f3d565b905080838252602082019050828560208602820111156129e7576129e661471c565b5b60005b85811015612a3557813567ffffffffffffffff811115612a0d57612a0c614717565b5b808601612a1a8982612ce0565b855260208501945060208401935050506001810190506129ea565b5050509392505050565b6000612a52612a4d84613fba565b613f3d565b90508083825260208201905082856020860282011115612a7557612a7461471c565b5b60005b85811015612aa55781612a8b8882612d3c565b845260208401935060208301925050600181019050612a78565b5050509392505050565b6000612ac2612abd84613fba565b613f3d565b90508083825260208201905082856020860282011115612ae557612ae461471c565b5b60005b85811015612b155781612afb8882612d51565b845260208401935060208301925050600181019050612ae8565b5050509392505050565b6000612b32612b2d84613fe6565b613f3d565b905082815260208101848484011115612b4e57612b4d614721565b5b612b59848285614498565b509392505050565b6000612b74612b6f84614017565b613f3d565b905082815260208101848484011115612b9057612b8f614721565b5b612b9b848285614489565b509392505050565b6000612bb6612bb184614017565b613f3d565b905082815260208101848484011115612bd257612bd1614721565b5b612bdd848285614498565b509392505050565b600081359050612bf4816147ff565b92915050565b600082601f830112612c0f57612c0e614717565b5b8135612c1f848260208601612941565b91505092915050565b600082601f830112612c3d57612c3c614717565b5b8135612c4d8482602086016129b1565b91505092915050565b600082601f830112612c6b57612c6a614717565b5b8135612c7b848260208601612a3f565b91505092915050565b600082601f830112612c9957612c98614717565b5b8151612ca9848260208601612aaf565b91505092915050565b600082601f830112612cc757612cc6614717565b5b8151612cd7848260208601612b1f565b91505092915050565b600082601f830112612cf557612cf4614717565b5b8135612d05848260208601612b61565b91505092915050565b600082601f830112612d2357612d22614717565b5b8151612d33848260208601612ba3565b91505092915050565b600081359050612d4b81614816565b92915050565b600081519050612d6081614816565b92915050565b60008060408385031215612d7d57612d7c61472b565b5b600083013567ffffffffffffffff811115612d9b57612d9a614726565b5b612da785828601612bfa565b925050602083013567ffffffffffffffff811115612dc857612dc7614726565b5b612dd485828601612c56565b9150509250929050565b600080600060608486031215612df757612df661472b565b5b600084013567ffffffffffffffff811115612e1557612e14614726565b5b612e2186828701612bfa565b935050602084013567ffffffffffffffff811115612e4257612e41614726565b5b612e4e86828701612c56565b925050604084013567ffffffffffffffff811115612e6f57612e6e614726565b5b612e7b86828701612c56565b9150509250925092565b600080600060608486031215612e9e57612e9d61472b565b5b600084013567ffffffffffffffff811115612ebc57612ebb614726565b5b612ec886828701612bfa565b935050602084013567ffffffffffffffff811115612ee957612ee8614726565b5b612ef586828701612c56565b9250506040612f0686828701612d3c565b9150509250925092565b60008060008060808587031215612f2a57612f2961472b565b5b600085013567ffffffffffffffff811115612f4857612f47614726565b5b612f5487828801612bfa565b945050602085013567ffffffffffffffff811115612f7557612f74614726565b5b612f8187828801612c56565b9350506040612f9287828801612d3c565b9250506060612fa387828801612d3c565b91505092959194509250565b60008060008060808587031215612fc957612fc861472b565b5b600085013567ffffffffffffffff811115612fe757612fe6614726565b5b612ff387828801612bfa565b945050602085013567ffffffffffffffff81111561301457613013614726565b5b61302087828801612ce0565b935050604085013567ffffffffffffffff81111561304157613040614726565b5b61304d87828801612ce0565b925050606061305e87828801612d3c565b91505092959194509250565b600080600080600060a086880312156130865761308561472b565b5b600086013567ffffffffffffffff8111156130a4576130a3614726565b5b6130b088828901612bfa565b955050602086013567ffffffffffffffff8111156130d1576130d0614726565b5b6130dd88828901612ce0565b945050604086013567ffffffffffffffff8111156130fe576130fd614726565b5b61310a88828901612ce0565b935050606061311b88828901612d3c565b925050608086013567ffffffffffffffff81111561313c5761313b614726565b5b61314888828901612c56565b9150509295509295909350565b60008060008060008060008060006101208a8c0312156131785761317761472b565b5b60008a013567ffffffffffffffff81111561319657613195614726565b5b6131a28c828d01612bfa565b99505060208a013567ffffffffffffffff8111156131c3576131c2614726565b5b6131cf8c828d01612ce0565b98505060408a013567ffffffffffffffff8111156131f0576131ef614726565b5b6131fc8c828d01612ce0565b975050606061320d8c828d01612d3c565b96505060808a013567ffffffffffffffff81111561322e5761322d614726565b5b61323a8c828d01612c56565b95505060a061324b8c828d01612d3c565b94505060c061325c8c828d01612d3c565b93505060e061326d8c828d01612be5565b92505061010061327f8c828d01612d3c565b9150509295985092959850929598565b60008060008060008060c087890312156132ac576132ab61472b565b5b600087013567ffffffffffffffff8111156132ca576132c9614726565b5b6132d689828a01612bfa565b965050602087013567ffffffffffffffff8111156132f7576132f6614726565b5b61330389828a01612ce0565b955050604087013567ffffffffffffffff81111561332457613323614726565b5b61333089828a01612ce0565b945050606061334189828a01612d3c565b935050608061335289828a01612d3c565b92505060a061336389828a01612d3c565b9150509295509295509295565b6000602082840312156133865761338561472b565b5b600082013567ffffffffffffffff8111156133a4576133a3614726565b5b6133b084828501612c28565b91505092915050565b6000602082840312156133cf576133ce61472b565b5b600082015167ffffffffffffffff8111156133ed576133ec614726565b5b6133f984828501612c84565b91505092915050565b600080604083850312156134195761341861472b565b5b600083013567ffffffffffffffff81111561343757613436614726565b5b61344385828601612ce0565b925050602083013567ffffffffffffffff81111561346457613463614726565b5b61347085828601612ce0565b9150509250929050565b6000602082840312156134905761348f61472b565b5b600061349e84828501612d3c565b91505092915050565b6000806000606084860312156134c0576134bf61472b565b5b60006134ce86828701612d51565b935050602084015167ffffffffffffffff8111156134ef576134ee614726565b5b6134fb86828701612d0e565b925050604084015167ffffffffffffffff81111561351c5761351b614726565b5b61352886828701612cb2565b9150509250925092565b600080604083850312156135495761354861472b565b5b600061355785828601612d3c565b925050602061356885828601612d3c565b9150509250929050565b6000806000806080858703121561358c5761358b61472b565b5b600061359a87828801612d51565b94505060206135ab87828801612d51565b93505060406135bc87828801612d51565b925050606085015167ffffffffffffffff8111156135dd576135dc614726565b5b6135e987828801612d0e565b91505092959194509250565b6000613601838361364d565b60208301905092915050565b600061361983836138ea565b905092915050565b600061362d838361395c565b905092915050565b60006136418383613a8b565b60208301905092915050565b61365681614441565b82525050565b61366581614441565b82525050565b6000613676826140b2565b6136808185614158565b935061368b83614048565b8060005b838110156136bc5781516136a388826135f5565b97506136ae8361410a565b92505060018101905061368f565b5085935050505092915050565b60006136d4826140bd565b6136de8185614158565b93506136e983614058565b8060005b83811015613721576136fe826146f1565b61370888826135f5565b975061371383614117565b9250506001810190506136ed565b5085935050505092915050565b6000613739826140c8565b6137438185614169565b9350836020820285016137558561406d565b8060005b858110156137915784840389528151613772858261360d565b945061377d83614124565b925060208a01995050600181019050613759565b50829750879550505050505092915050565b60006137ae826140d3565b6137b8818561417a565b9350836020820285016137ca8561407d565b8060005b8581101561380657848403895281516137e78582613621565b94506137f283614131565b925060208a019950506001810190506137ce565b50829750879550505050505092915050565b6000613823826140de565b61382d818561418b565b93506138388361408d565b8060005b838110156138695781516138508882613635565b975061385b8361413e565b92505060018101905061383c565b5085935050505092915050565b6000613881826140e9565b61388b818561418b565b93506138968361409d565b8060005b838110156138ce576138ab82614704565b6138b58882613635565b97506138c08361414b565b92505060018101905061389a565b5085935050505092915050565b6138e481614453565b82525050565b60006138f5826140f4565b6138ff818561419c565b935061390f818560208601614498565b61391881614730565b840191505092915050565b600061392e826140f4565b61393881856141ad565b9350613948818560208601614498565b61395181614730565b840191505092915050565b6000613967826140ff565b61397181856141be565b9350613981818560208601614498565b61398a81614730565b840191505092915050565b60006139a0826140ff565b6139aa81856141cf565b93506139ba818560208601614498565b6139c381614730565b840191505092915050565b60006139d9826140ff565b6139e381856141e0565b93506139f3818560208601614498565b80840191505092915050565b6000613a0c600f836141cf565b9150613a178261475b565b602082019050919050565b6000613a2f600f836141cf565b9150613a3a82614784565b602082019050919050565b6000613a52600e836141cf565b9150613a5d826147ad565b602082019050919050565b6000613a75601c836141cf565b9150613a80826147d6565b602082019050919050565b613a948161447f565b82525050565b613aa38161447f565b82525050565b6000613ab582846139ce565b915081905092915050565b600060e082019050613ad5600083018a61365c565b613ae26020830189613a9a565b613aef6040830188613a9a565b613afc6060830187613a9a565b8181036080830152613b0e8186613995565b905081810360a0830152613b228185613995565b9050613b3160c0830184613a9a565b98975050505050505050565b600060a0820190508181036000830152613b57818861366b565b90508181036020830152613b6b8187613995565b90508181036040830152613b7f8186613995565b9050613b8e6060830185613a9a565b8181036080830152613ba08184613818565b90509695505050505050565b60006060820190508181036000830152613bc681866136c9565b90508181036020830152613bda8185613876565b90508181036040830152613bee8184613818565b9050949350505050565b60006080820190508181036000830152613c1281876136c9565b90508181036020830152613c268186613876565b9050613c356040830185613a9a565b613c426060830184613a9a565b95945050505050565b60006080820190508181036000830152613c6581876137a3565b90508181036020830152613c7981866137a3565b90508181036040830152613c8d8185613818565b90508181036060830152613ca18184613818565b905095945050505050565b60006020820190508181036000830152613cc68184613818565b905092915050565b60006080820190508181036000830152613ce88187613818565b90508181036020830152613cfc81866137a3565b90508181036040830152613d10818561372e565b90508181036060830152613d248184613818565b905095945050505050565b60006040820190508181036000830152613d498185613818565b90508181036020830152613d5d8184613818565b90509392505050565b60006040820190508181036000830152613d808185613818565b9050613d8f6020830184613a9a565b9392505050565b6000602082019050613dab60008301846138db565b92915050565b60006040820190508181036000830152613dcb8185613995565b9050613dda6020830184613a9a565b9392505050565b60006020820190508181036000830152613dfa816139ff565b9050919050565b60006020820190508181036000830152613e1a81613a22565b9050919050565b60006020820190508181036000830152613e3a81613a45565b9050919050565b60006020820190508181036000830152613e5a81613a68565b9050919050565b6000602082019050613e766000830184613a9a565b92915050565b6000606082019050613e916000830186613a9a565b8181036020830152613ea38185613995565b90508181036040830152613eb78184613923565b9050949350505050565b6000608082019050613ed66000830187613a9a565b8181036020830152613ee88186613995565b90508181036040830152613efc8185613923565b9050613f0b6060830184613a9a565b95945050505050565b6000604082019050613f296000830185613a9a565b613f366020830184613a9a565b9392505050565b6000613f47613f58565b9050613f53828261455b565b919050565b6000604051905090565b600067ffffffffffffffff821115613f7d57613f7c6146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fa957613fa86146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fd557613fd46146c2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614001576140006146c2565b5b61400a82614730565b9050602081019050919050565b600067ffffffffffffffff821115614032576140316146c2565b5b61403b82614730565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f68261447f565b91506142018361447f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423657614235614606565b5b828201905092915050565b600061424c8261447f565b91506142578361447f565b92508261426757614266614635565b5b828204905092915050565b6000808291508390505b60018511156142bc5780860481111561429857614297614606565b5b60018516156142a75780820291505b80810290506142b58561474e565b945061427c565b94509492505050565b60006142d08261447f565b91506142db8361447f565b92506143087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614310565b905092915050565b60008261432057600190506143dc565b8161432e57600090506143dc565b8160018114614344576002811461434e5761437d565b60019150506143dc565b60ff8411156143605761435f614606565b5b8360020a91508482111561437757614376614606565b5b506143dc565b5060208310610133831016604e8410600b84101617156143b25782820a9050838111156143ad576143ac614606565b5b6143dc565b6143bf8484846001614272565b925090508184048111156143d6576143d5614606565b5b81810290505b9392505050565b60006143ee8261447f565b91506143f98361447f565b92508282101561440c5761440b614606565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061444c8261445f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144b657808201518184015260208101905061449b565b838111156144c5576000848401525b50505050565b60006144d68261447f565b915060008214156144ea576144e9614606565b5b600182039050919050565b6000600282049050600182168061450d57607f821691505b6020821081141561452157614520614664565b5b50919050565b600061453a61453583614741565b614417565b9050919050565b600061455461454f83614741565b614437565b9050919050565b61456482614730565b810181811067ffffffffffffffff82111715614583576145826146c2565b5b80604052505050565b60006145978261447f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145ca576145c9614606565b5b600182019050919050565b60006145e08261447f565b91506145eb8361447f565b9250826145fb576145fa614635565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006146fd8254614527565b9050919050565b60006147108254614541565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160001c9050919050565b60008160011c9050919050565b7f426f756e7479206e6f7420706169640000000000000000000000000000000000600082015250565b7f4c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b7f426f756e7479206e6f742070616964206279206d73672e76616c756500000000600082015250565b61480881614441565b811461481357600080fd5b50565b61481f8161447f565b811461482a57600080fd5b5056fea2646970667358221220563b54d064bbd32cefa1bde356eb5adc65f6f3b38bd139a9e6cafd07c1752d3f64736f6c63430008060033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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