Ape Curtis Testnet

Contract

0xfaA23BE7A030d36cCfE4E45e4C794DbCb21BdF11

Overview

APE Balance

Ape Curtis LogoApe Curtis LogoApe Curtis Logo0 APE

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store Traits127994642024-11-21 16:54:5034 days ago1732208090IN
0xfaA23BE7...Cb21BdF11
0 APE0.00000340.01
Store Pixel Data127994632024-11-21 16:54:4934 days ago1732208089IN
0xfaA23BE7...Cb21BdF11
0 APE0.000024460.01

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GobsDataSource

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at curtis.apescan.io on 2024-11-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title GobsDataSource
 * @notice Stores RGBA data, dynamically generates SVGs, and supports metadata traits.
 */
contract GobsDataSource {
    address payable internal deployer;
    bool private contractSealed = false;

    struct Trait {
        string traitType;
        string value;
    }

    struct GobData {
        bytes imageData; // Encoded RGBA data in row-major order
        Trait[] traits;  // Array of traits for the token
    }

    mapping(uint256 => GobData) private gobData; // Stores data for each token

    modifier onlyDeployer() {
        require(msg.sender == deployer, "Only deployer.");
        _;
    }

    modifier unsealed() {
        require(!contractSealed, "Contract is sealed.");
        _;
    }

    constructor() {
        deployer = payable(msg.sender);
    }

    /**
     * @notice Seal the contract to prevent further modifications.
     */
    function sealContract() external onlyDeployer unsealed {
        contractSealed = true;
    }

    /**
     * @notice Store RGBA pixel data for a token in row-major order.
     * @param tokenId The ID of the token.
     * @param imageData The RGBA data (row-major order, 29x29 pixels).
     */
    function storePixelData(uint256 tokenId, bytes memory imageData) external onlyDeployer unsealed {
        require(imageData.length == 29 * 29 * 4, "Invalid RGBA data length");
        gobData[tokenId].imageData = imageData;
    }

    /**
     * @notice Add traits for a token.
     * @param tokenId The ID of the token.
     * @param traits The traits to associate with the token.
     */
    function storeTraits(uint256 tokenId, Trait[] memory traits) external onlyDeployer unsealed {
        delete gobData[tokenId].traits; // Clear existing traits
        for (uint256 i = 0; i < traits.length; i++) {
            gobData[tokenId].traits.push(traits[i]);
        }
    }

    /**
     * @notice Retrieve RGBA pixel data for a token.
     * @param tokenId The ID of the token.
     * @return The RGBA pixel data.
     */
    function getPixelData(uint256 tokenId) external view returns (bytes memory) {
        require(gobData[tokenId].imageData.length > 0, "Image data not set");
        return gobData[tokenId].imageData;
    }

    /**
     * @notice Retrieve traits for a token.
     * @param tokenId The ID of the token.
     * @return The traits associated with the token.
     */
    function getTraits(uint256 tokenId) external view returns (Trait[] memory) {
        require(gobData[tokenId].traits.length > 0, "Traits not set");
        return gobData[tokenId].traits;
    }

    /**
     * @notice Dynamically generate SVG from RGBA data using bitwise operations.
     * @param tokenId The ID of the token.
     * @return The SVG representation of the token.
     */
    function getSVG(uint256 tokenId) external view returns (string memory) {
        bytes memory pixelData = gobData[tokenId].imageData;
        require(pixelData.length > 0, "Image data not set");

        string memory svgStart = '<svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" viewBox="0 0 29 29">';
        string memory rects;

        uint256 index = 0;
        for (uint256 y = 0; y < 29; y++) {
            for (uint256 x = 0; x < 29; x++) {
                uint32 rgba = toUint32(pixelData, index);
                index += 4;

                if ((rgba & 0xFF000000) != 0) { // Check alpha channel
                    string memory color = toHexColor(rgba);
                    rects = string(
                        abi.encodePacked(
                            rects,
                            '<rect x="', uint2str(x), '" y="', uint2str(y),
                            '" width="1" height="1" fill="', color, '" shape-rendering="crispEdges"/>'
                        )
                    );
                }
            }
        }

        return string(abi.encodePacked(svgStart, rects, "</svg>"));
    }

    /**
     * @notice Convert a slice of bytes to a uint32.
     * @param data The byte array.
     * @param index The starting index.
     * @return The uint32 representation.
     */
    function toUint32(bytes memory data, uint256 index) internal pure returns (uint32) {
        require(index + 4 <= data.length, "Index out of bounds");
        return uint32(
            uint8(data[index]) << 24 |
            uint8(data[index + 1]) << 16 |
            uint8(data[index + 2]) << 8 |
            uint8(data[index + 3])
        );
    }

    /**
     * @notice Convert a uint32 RGBA value to a hex color string.
     * @param rgba The RGBA value.
     * @return The hex color string.
     */
    function toHexColor(uint32 rgba) internal pure returns (string memory) {
        bytes16 hexSymbols = "0123456789abcdef";
        bytes memory buffer = new bytes(9); // '#RRGGBBAA'

        buffer[0] = "#";
        for (uint256 i = 0; i < 4; i++) {
            uint8 value = uint8(rgba >> ((3 - i) * 8));
            buffer[1 + i * 2] = hexSymbols[value >> 4];
            buffer[2 + i * 2] = hexSymbols[value & 0xF];
        }

        return string(buffer);
    }

    /**
     * @notice Utility function: Convert uint256 to string.
     * @param value The value to convert.
     * @return The string representation of the value.
     */
    function uint2str(uint256 value) internal pure returns (string memory) {
        if (value == 0) return "0";
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPixelData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTraits","outputs":[{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"imageData","type":"bytes"}],"name":"storePixelData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"traits","type":"tuple[]"}],"name":"storeTraits","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f8060146101000a81548160ff0219169083151502179055503480156027575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120c6806100745f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635840b0f81461006457806368bd580e14610094578063997c51d21461009e578063be985ac9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610f47565b610136565b60405161008b9190610fe2565b60405180910390f35b61009c61023a565b005b6100b860048036038101906100b3919061129d565b610332565b005b6100d460048036038101906100cf9190610f47565b6104cb565b6040516100e19190611349565b60405180910390f35b61010460048036038101906100ff9190611407565b6106a1565b005b610120600480360381019061011b9190610f47565b6107e7565b60405161012d91906115a5565b60405180910390f35b60605f60015f8481526020019081526020015f205f018054610157906115f2565b905011610199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101909061166c565b60405180910390fd5b60015f8381526020019081526020015f205f0180546101b7906115f2565b80601f01602080910402602001604051908101604052809291908181526020018280546101e3906115f2565b801561022e5780601f106102055761010080835404028352916020019161022e565b820191905f5260205f20905b81548152906001019060200180831161021157829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102be906116d4565b60405180910390fd5b5f60149054906101000a900460ff1615610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030d9061173c565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b6906116d4565b60405180910390fd5b5f60149054906101000a900460ff161561040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104059061173c565b60405180910390fd5b60015f8381526020019081526020015f206001015f61042d9190610e56565b5f5b81518110156104c65760015f8481526020019081526020015f2060010182828151811061045f5761045e61175a565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816104a09190611924565b5060208201518160010190816104b69190611924565b505050808060010191505061042f565b505050565b60605f60015f8481526020019081526020015f205f0180546104ec906115f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610518906115f2565b80156105635780601f1061053a57610100808354040283529160200191610563565b820191905f5260205f20905b81548152906001019060200180831161054657829003601f168201915b505050505090505f8151116105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a49061166c565b60405180910390fd5b5f60405180608001604052806053815260200161203e60539139905060605f805b601d811015610673575f5b601d811015610665575f6105ed87856109cf565b90506004846105fc9190611a20565b93505f63ff000000821663ffffffff1614610657575f61061b82610aeb565b90508561062784610cfd565b61063086610cfd565b836040516020016106449493929190611bb5565b6040516020818303038152906040529550505b5080806001019150506105d9565b5080806001019150506105ce565b508282604051602001610687929190611c68565b604051602081830303815290604052945050505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610725906116d4565b60405180910390fd5b5f60149054906101000a900460ff161561077d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061173c565b60405180910390fd5b610d248151146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990611ce0565b60405180910390fd5b8060015f8481526020019081526020015f205f0190816107e29190611d56565b505050565b60605f60015f8481526020019081526020015f206001018054905011610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990611e6f565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b828210156109c4578382905f5260205f2090600202016040518060400160405290815f820180546108a5906115f2565b80601f01602080910402602001604051908101604052809291908181526020018280546108d1906115f2565b801561091c5780601f106108f35761010080835404028352916020019161091c565b820191905f5260205f20905b8154815290600101906020018083116108ff57829003601f168201915b50505050508152602001600182018054610935906115f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906115f2565b80156109ac5780601f10610983576101008083540402835291602001916109ac565b820191905f5260205f20905b81548152906001019060200180831161098f57829003601f168201915b50505050508152505081526020019060010190610875565b505050509050919050565b5f82516004836109df9190611a20565b1115610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790611ed7565b60405180910390fd5b82600383610a2e9190611a20565b81518110610a3f57610a3e61175a565b5b602001015160f81c60f81b60f81c600884600285610a5d9190611a20565b81518110610a6e57610a6d61175a565b5b602001015160f81c60f81b60f81c60ff16901b601085600186610a919190611a20565b81518110610aa257610aa161175a565b5b602001015160f81c60f81b60f81c60ff16901b6018868681518110610aca57610ac961175a565b5b602001015160f81c60f81b60f81c60ff16901b17171760ff16905092915050565b60605f7f303132333435363738396162636465660000000000000000000000000000000090505f600967ffffffffffffffff811115610b2d57610b2c611006565b5b6040519080825280601f01601f191660200182016040528015610b5f5781602001600182028036833780820191505090505b5090507f2300000000000000000000000000000000000000000000000000000000000000815f81518110610b9657610b9561175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b6004811015610cf2575f6008826003610bdf9190611ef5565b610be99190611f28565b8663ffffffff16901c90508360048260ff16901c60ff1660108110610c1157610c1061175a565b5b1a60f81b83600284610c239190611f28565b6001610c2f9190611a20565b81518110610c4057610c3f61175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535083600f821660ff1660108110610c8757610c8661175a565b5b1a60f81b83600284610c999190611f28565b6002610ca59190611a20565b81518110610cb657610cb561175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610bc6565b508092505050919050565b60605f8203610d43576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610e51565b5f8290505f5b5f8214610d72578080610d5b90611f69565b915050600a82610d6b9190611fdd565b9150610d49565b5f8167ffffffffffffffff811115610d8d57610d8c611006565b5b6040519080825280601f01601f191660200182016040528015610dbf5781602001600182028036833780820191505090505b5090505b5f8514610e4a57600182610dd79190611ef5565b9150600a85610de6919061200d565b6030610df29190611a20565b60f81b818381518110610e0857610e0761175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610e439190611fdd565b9450610dc3565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610e749190610e77565b50565b5b80821115610ea7575f8082015f610e8f9190610eab565b600182015f610e9e9190610eab565b50600201610e78565b5090565b508054610eb7906115f2565b5f825580601f10610ec85750610ee5565b601f0160209004905f5260205f2090810190610ee49190610ee8565b5b50565b5b80821115610eff575f815f905550600101610ee9565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610f2681610f14565b8114610f30575f80fd5b50565b5f81359050610f4181610f1d565b92915050565b5f60208284031215610f5c57610f5b610f0c565b5b5f610f6984828501610f33565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610fb482610f72565b610fbe8185610f7c565b9350610fce818560208601610f8c565b610fd781610f9a565b840191505092915050565b5f6020820190508181035f830152610ffa8184610faa565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61103c82610f9a565b810181811067ffffffffffffffff8211171561105b5761105a611006565b5b80604052505050565b5f61106d610f03565b90506110798282611033565b919050565b5f67ffffffffffffffff82111561109857611097611006565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156110d3576110d2611006565b5b6110dc82610f9a565b9050602081019050919050565b828183375f83830152505050565b5f611109611104846110b9565b611064565b905082815260208101848484011115611125576111246110b5565b5b6111308482856110e9565b509392505050565b5f82601f83011261114c5761114b611002565b5b813561115c8482602086016110f7565b91505092915050565b5f6040828403121561117a576111796110ad565b5b6111846040611064565b90505f82013567ffffffffffffffff8111156111a3576111a26110b1565b5b6111af84828501611138565b5f83015250602082013567ffffffffffffffff8111156111d2576111d16110b1565b5b6111de84828501611138565b60208301525092915050565b5f6111fc6111f78461107e565b611064565b9050808382526020820190506020840283018581111561121f5761121e6110a9565b5b835b8181101561126657803567ffffffffffffffff81111561124457611243611002565b5b8086016112518982611165565b85526020850194505050602081019050611221565b5050509392505050565b5f82601f83011261128457611283611002565b5b81356112948482602086016111ea565b91505092915050565b5f80604083850312156112b3576112b2610f0c565b5b5f6112c085828601610f33565b925050602083013567ffffffffffffffff8111156112e1576112e0610f10565b5b6112ed85828601611270565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61131b826112f7565b6113258185611301565b9350611335818560208601610f8c565b61133e81610f9a565b840191505092915050565b5f6020820190508181035f8301526113618184611311565b905092915050565b5f67ffffffffffffffff82111561138357611382611006565b5b61138c82610f9a565b9050602081019050919050565b5f6113ab6113a684611369565b611064565b9050828152602081018484840111156113c7576113c66110b5565b5b6113d28482856110e9565b509392505050565b5f82601f8301126113ee576113ed611002565b5b81356113fe848260208601611399565b91505092915050565b5f806040838503121561141d5761141c610f0c565b5b5f61142a85828601610f33565b925050602083013567ffffffffffffffff81111561144b5761144a610f10565b5b611457858286016113da565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6114a4826112f7565b6114ae818561148a565b93506114be818560208601610f8c565b6114c781610f9a565b840191505092915050565b5f604083015f8301518482035f8601526114ec828261149a565b91505060208301518482036020860152611506828261149a565b9150508091505092915050565b5f61151e83836114d2565b905092915050565b5f602082019050919050565b5f61153c82611461565b611546818561146b565b9350836020820285016115588561147b565b805f5b8581101561159357848403895281516115748582611513565b945061157f83611526565b925060208a0199505060018101905061155b565b50829750879550505050505092915050565b5f6020820190508181035f8301526115bd8184611532565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061160957607f821691505b60208210810361161c5761161b6115c5565b5b50919050565b7f496d6167652064617461206e6f742073657400000000000000000000000000005f82015250565b5f611656601283611301565b915061166182611622565b602082019050919050565b5f6020820190508181035f8301526116838161164a565b9050919050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f6116be600e83611301565b91506116c98261168a565b602082019050919050565b5f6020820190508181035f8301526116eb816116b2565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f611726601383611301565b9150611731826116f2565b602082019050919050565b5f6020820190508181035f8301526117538161171a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026117e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117a8565b6117ed86836117a8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61182861182361181e84610f14565b611805565b610f14565b9050919050565b5f819050919050565b6118418361180e565b61185561184d8261182f565b8484546117b4565b825550505050565b5f90565b61186961185d565b611874818484611838565b505050565b5b818110156118975761188c5f82611861565b60018101905061187a565b5050565b601f8211156118dc576118ad81611787565b6118b684611799565b810160208510156118c5578190505b6118d96118d185611799565b830182611879565b50505b505050565b5f82821c905092915050565b5f6118fc5f19846008026118e1565b1980831691505092915050565b5f61191483836118ed565b9150826002028217905092915050565b61192d826112f7565b67ffffffffffffffff81111561194657611945611006565b5b61195082546115f2565b61195b82828561189b565b5f60209050601f83116001811461198c575f841561197a578287015190505b6119848582611909565b8655506119eb565b601f19841661199a86611787565b5f5b828110156119c15784890151825560018201915060208501945060208101905061199c565b868310156119de57848901516119da601f8916826118ed565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a2a82610f14565b9150611a3583610f14565b9250828201905080821115611a4d57611a4c6119f3565b5b92915050565b5f81905092915050565b5f611a67826112f7565b611a718185611a53565b9350611a81818560208601610f8c565b80840191505092915050565b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f611ac1600983611a53565b9150611acc82611a8d565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f611b0b600583611a53565b9150611b1682611ad7565b600582019050919050565b7f222077696474683d223122206865696768743d2231222066696c6c3d220000005f82015250565b5f611b55601d83611a53565b9150611b6082611b21565b601d82019050919050565b7f222073686170652d72656e646572696e673d2263726973704564676573222f3e5f82015250565b5f611b9f602083611a53565b9150611baa82611b6b565b602082019050919050565b5f611bc08287611a5d565b9150611bcb82611ab5565b9150611bd78286611a5d565b9150611be282611aff565b9150611bee8285611a5d565b9150611bf982611b49565b9150611c058284611a5d565b9150611c1082611b93565b915081905095945050505050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f611c52600683611a53565b9150611c5d82611c1e565b600682019050919050565b5f611c738285611a5d565b9150611c7f8284611a5d565b9150611c8a82611c46565b91508190509392505050565b7f496e76616c696420524742412064617461206c656e67746800000000000000005f82015250565b5f611cca601883611301565b9150611cd582611c96565b602082019050919050565b5f6020820190508181035f830152611cf781611cbe565b9050919050565b5f819050815f5260205f209050919050565b601f821115611d5157611d2281611cfe565b611d2b84611799565b81016020851015611d3a578190505b611d4e611d4685611799565b830182611879565b50505b505050565b611d5f82610f72565b67ffffffffffffffff811115611d7857611d77611006565b5b611d8282546115f2565b611d8d828285611d10565b5f60209050601f831160018114611dbe575f8415611dac578287015190505b611db68582611909565b865550611e1d565b601f198416611dcc86611cfe565b5f5b82811015611df357848901518255600182019150602085019450602081019050611dce565b86831015611e105784890151611e0c601f8916826118ed565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611e59600e83611301565b9150611e6482611e25565b602082019050919050565b5f6020820190508181035f830152611e8681611e4d565b9050919050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f611ec1601383611301565b9150611ecc82611e8d565b602082019050919050565b5f6020820190508181035f830152611eee81611eb5565b9050919050565b5f611eff82610f14565b9150611f0a83610f14565b9250828203905081811115611f2257611f216119f3565b5b92915050565b5f611f3282610f14565b9150611f3d83610f14565b9250828202611f4b81610f14565b91508282048414831517611f6257611f616119f3565b5b5092915050565b5f611f7382610f14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fa557611fa46119f3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611fe782610f14565b9150611ff283610f14565b92508261200257612001611fb0565b5b828204905092915050565b5f61201782610f14565b915061202283610f14565b92508261203257612031611fb0565b5b82820690509291505056fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222077696474683d22323922206865696768743d223239222076696577426f783d22302030203239203239223ea264697066735822122031f8b966b202a31c74dae0e24b9b72f8b55503e33c8909212d3c07c5187d7c7364736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635840b0f81461006457806368bd580e14610094578063997c51d21461009e578063be985ac9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610f47565b610136565b60405161008b9190610fe2565b60405180910390f35b61009c61023a565b005b6100b860048036038101906100b3919061129d565b610332565b005b6100d460048036038101906100cf9190610f47565b6104cb565b6040516100e19190611349565b60405180910390f35b61010460048036038101906100ff9190611407565b6106a1565b005b610120600480360381019061011b9190610f47565b6107e7565b60405161012d91906115a5565b60405180910390f35b60605f60015f8481526020019081526020015f205f018054610157906115f2565b905011610199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101909061166c565b60405180910390fd5b60015f8381526020019081526020015f205f0180546101b7906115f2565b80601f01602080910402602001604051908101604052809291908181526020018280546101e3906115f2565b801561022e5780601f106102055761010080835404028352916020019161022e565b820191905f5260205f20905b81548152906001019060200180831161021157829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102be906116d4565b60405180910390fd5b5f60149054906101000a900460ff1615610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030d9061173c565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b6906116d4565b60405180910390fd5b5f60149054906101000a900460ff161561040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104059061173c565b60405180910390fd5b60015f8381526020019081526020015f206001015f61042d9190610e56565b5f5b81518110156104c65760015f8481526020019081526020015f2060010182828151811061045f5761045e61175a565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816104a09190611924565b5060208201518160010190816104b69190611924565b505050808060010191505061042f565b505050565b60605f60015f8481526020019081526020015f205f0180546104ec906115f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610518906115f2565b80156105635780601f1061053a57610100808354040283529160200191610563565b820191905f5260205f20905b81548152906001019060200180831161054657829003601f168201915b505050505090505f8151116105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a49061166c565b60405180910390fd5b5f60405180608001604052806053815260200161203e60539139905060605f805b601d811015610673575f5b601d811015610665575f6105ed87856109cf565b90506004846105fc9190611a20565b93505f63ff000000821663ffffffff1614610657575f61061b82610aeb565b90508561062784610cfd565b61063086610cfd565b836040516020016106449493929190611bb5565b6040516020818303038152906040529550505b5080806001019150506105d9565b5080806001019150506105ce565b508282604051602001610687929190611c68565b604051602081830303815290604052945050505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610725906116d4565b60405180910390fd5b5f60149054906101000a900460ff161561077d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061173c565b60405180910390fd5b610d248151146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990611ce0565b60405180910390fd5b8060015f8481526020019081526020015f205f0190816107e29190611d56565b505050565b60605f60015f8481526020019081526020015f206001018054905011610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990611e6f565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b828210156109c4578382905f5260205f2090600202016040518060400160405290815f820180546108a5906115f2565b80601f01602080910402602001604051908101604052809291908181526020018280546108d1906115f2565b801561091c5780601f106108f35761010080835404028352916020019161091c565b820191905f5260205f20905b8154815290600101906020018083116108ff57829003601f168201915b50505050508152602001600182018054610935906115f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906115f2565b80156109ac5780601f10610983576101008083540402835291602001916109ac565b820191905f5260205f20905b81548152906001019060200180831161098f57829003601f168201915b50505050508152505081526020019060010190610875565b505050509050919050565b5f82516004836109df9190611a20565b1115610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790611ed7565b60405180910390fd5b82600383610a2e9190611a20565b81518110610a3f57610a3e61175a565b5b602001015160f81c60f81b60f81c600884600285610a5d9190611a20565b81518110610a6e57610a6d61175a565b5b602001015160f81c60f81b60f81c60ff16901b601085600186610a919190611a20565b81518110610aa257610aa161175a565b5b602001015160f81c60f81b60f81c60ff16901b6018868681518110610aca57610ac961175a565b5b602001015160f81c60f81b60f81c60ff16901b17171760ff16905092915050565b60605f7f303132333435363738396162636465660000000000000000000000000000000090505f600967ffffffffffffffff811115610b2d57610b2c611006565b5b6040519080825280601f01601f191660200182016040528015610b5f5781602001600182028036833780820191505090505b5090507f2300000000000000000000000000000000000000000000000000000000000000815f81518110610b9657610b9561175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b6004811015610cf2575f6008826003610bdf9190611ef5565b610be99190611f28565b8663ffffffff16901c90508360048260ff16901c60ff1660108110610c1157610c1061175a565b5b1a60f81b83600284610c239190611f28565b6001610c2f9190611a20565b81518110610c4057610c3f61175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535083600f821660ff1660108110610c8757610c8661175a565b5b1a60f81b83600284610c999190611f28565b6002610ca59190611a20565b81518110610cb657610cb561175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610bc6565b508092505050919050565b60605f8203610d43576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610e51565b5f8290505f5b5f8214610d72578080610d5b90611f69565b915050600a82610d6b9190611fdd565b9150610d49565b5f8167ffffffffffffffff811115610d8d57610d8c611006565b5b6040519080825280601f01601f191660200182016040528015610dbf5781602001600182028036833780820191505090505b5090505b5f8514610e4a57600182610dd79190611ef5565b9150600a85610de6919061200d565b6030610df29190611a20565b60f81b818381518110610e0857610e0761175a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610e439190611fdd565b9450610dc3565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610e749190610e77565b50565b5b80821115610ea7575f8082015f610e8f9190610eab565b600182015f610e9e9190610eab565b50600201610e78565b5090565b508054610eb7906115f2565b5f825580601f10610ec85750610ee5565b601f0160209004905f5260205f2090810190610ee49190610ee8565b5b50565b5b80821115610eff575f815f905550600101610ee9565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610f2681610f14565b8114610f30575f80fd5b50565b5f81359050610f4181610f1d565b92915050565b5f60208284031215610f5c57610f5b610f0c565b5b5f610f6984828501610f33565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610fb482610f72565b610fbe8185610f7c565b9350610fce818560208601610f8c565b610fd781610f9a565b840191505092915050565b5f6020820190508181035f830152610ffa8184610faa565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61103c82610f9a565b810181811067ffffffffffffffff8211171561105b5761105a611006565b5b80604052505050565b5f61106d610f03565b90506110798282611033565b919050565b5f67ffffffffffffffff82111561109857611097611006565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156110d3576110d2611006565b5b6110dc82610f9a565b9050602081019050919050565b828183375f83830152505050565b5f611109611104846110b9565b611064565b905082815260208101848484011115611125576111246110b5565b5b6111308482856110e9565b509392505050565b5f82601f83011261114c5761114b611002565b5b813561115c8482602086016110f7565b91505092915050565b5f6040828403121561117a576111796110ad565b5b6111846040611064565b90505f82013567ffffffffffffffff8111156111a3576111a26110b1565b5b6111af84828501611138565b5f83015250602082013567ffffffffffffffff8111156111d2576111d16110b1565b5b6111de84828501611138565b60208301525092915050565b5f6111fc6111f78461107e565b611064565b9050808382526020820190506020840283018581111561121f5761121e6110a9565b5b835b8181101561126657803567ffffffffffffffff81111561124457611243611002565b5b8086016112518982611165565b85526020850194505050602081019050611221565b5050509392505050565b5f82601f83011261128457611283611002565b5b81356112948482602086016111ea565b91505092915050565b5f80604083850312156112b3576112b2610f0c565b5b5f6112c085828601610f33565b925050602083013567ffffffffffffffff8111156112e1576112e0610f10565b5b6112ed85828601611270565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61131b826112f7565b6113258185611301565b9350611335818560208601610f8c565b61133e81610f9a565b840191505092915050565b5f6020820190508181035f8301526113618184611311565b905092915050565b5f67ffffffffffffffff82111561138357611382611006565b5b61138c82610f9a565b9050602081019050919050565b5f6113ab6113a684611369565b611064565b9050828152602081018484840111156113c7576113c66110b5565b5b6113d28482856110e9565b509392505050565b5f82601f8301126113ee576113ed611002565b5b81356113fe848260208601611399565b91505092915050565b5f806040838503121561141d5761141c610f0c565b5b5f61142a85828601610f33565b925050602083013567ffffffffffffffff81111561144b5761144a610f10565b5b611457858286016113da565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6114a4826112f7565b6114ae818561148a565b93506114be818560208601610f8c565b6114c781610f9a565b840191505092915050565b5f604083015f8301518482035f8601526114ec828261149a565b91505060208301518482036020860152611506828261149a565b9150508091505092915050565b5f61151e83836114d2565b905092915050565b5f602082019050919050565b5f61153c82611461565b611546818561146b565b9350836020820285016115588561147b565b805f5b8581101561159357848403895281516115748582611513565b945061157f83611526565b925060208a0199505060018101905061155b565b50829750879550505050505092915050565b5f6020820190508181035f8301526115bd8184611532565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061160957607f821691505b60208210810361161c5761161b6115c5565b5b50919050565b7f496d6167652064617461206e6f742073657400000000000000000000000000005f82015250565b5f611656601283611301565b915061166182611622565b602082019050919050565b5f6020820190508181035f8301526116838161164a565b9050919050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f6116be600e83611301565b91506116c98261168a565b602082019050919050565b5f6020820190508181035f8301526116eb816116b2565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f611726601383611301565b9150611731826116f2565b602082019050919050565b5f6020820190508181035f8301526117538161171a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026117e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117a8565b6117ed86836117a8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61182861182361181e84610f14565b611805565b610f14565b9050919050565b5f819050919050565b6118418361180e565b61185561184d8261182f565b8484546117b4565b825550505050565b5f90565b61186961185d565b611874818484611838565b505050565b5b818110156118975761188c5f82611861565b60018101905061187a565b5050565b601f8211156118dc576118ad81611787565b6118b684611799565b810160208510156118c5578190505b6118d96118d185611799565b830182611879565b50505b505050565b5f82821c905092915050565b5f6118fc5f19846008026118e1565b1980831691505092915050565b5f61191483836118ed565b9150826002028217905092915050565b61192d826112f7565b67ffffffffffffffff81111561194657611945611006565b5b61195082546115f2565b61195b82828561189b565b5f60209050601f83116001811461198c575f841561197a578287015190505b6119848582611909565b8655506119eb565b601f19841661199a86611787565b5f5b828110156119c15784890151825560018201915060208501945060208101905061199c565b868310156119de57848901516119da601f8916826118ed565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a2a82610f14565b9150611a3583610f14565b9250828201905080821115611a4d57611a4c6119f3565b5b92915050565b5f81905092915050565b5f611a67826112f7565b611a718185611a53565b9350611a81818560208601610f8c565b80840191505092915050565b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f611ac1600983611a53565b9150611acc82611a8d565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f611b0b600583611a53565b9150611b1682611ad7565b600582019050919050565b7f222077696474683d223122206865696768743d2231222066696c6c3d220000005f82015250565b5f611b55601d83611a53565b9150611b6082611b21565b601d82019050919050565b7f222073686170652d72656e646572696e673d2263726973704564676573222f3e5f82015250565b5f611b9f602083611a53565b9150611baa82611b6b565b602082019050919050565b5f611bc08287611a5d565b9150611bcb82611ab5565b9150611bd78286611a5d565b9150611be282611aff565b9150611bee8285611a5d565b9150611bf982611b49565b9150611c058284611a5d565b9150611c1082611b93565b915081905095945050505050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f611c52600683611a53565b9150611c5d82611c1e565b600682019050919050565b5f611c738285611a5d565b9150611c7f8284611a5d565b9150611c8a82611c46565b91508190509392505050565b7f496e76616c696420524742412064617461206c656e67746800000000000000005f82015250565b5f611cca601883611301565b9150611cd582611c96565b602082019050919050565b5f6020820190508181035f830152611cf781611cbe565b9050919050565b5f819050815f5260205f209050919050565b601f821115611d5157611d2281611cfe565b611d2b84611799565b81016020851015611d3a578190505b611d4e611d4685611799565b830182611879565b50505b505050565b611d5f82610f72565b67ffffffffffffffff811115611d7857611d77611006565b5b611d8282546115f2565b611d8d828285611d10565b5f60209050601f831160018114611dbe575f8415611dac578287015190505b611db68582611909565b865550611e1d565b601f198416611dcc86611cfe565b5f5b82811015611df357848901518255600182019150602085019450602081019050611dce565b86831015611e105784890151611e0c601f8916826118ed565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611e59600e83611301565b9150611e6482611e25565b602082019050919050565b5f6020820190508181035f830152611e8681611e4d565b9050919050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f611ec1601383611301565b9150611ecc82611e8d565b602082019050919050565b5f6020820190508181035f830152611eee81611eb5565b9050919050565b5f611eff82610f14565b9150611f0a83610f14565b9250828203905081811115611f2257611f216119f3565b5b92915050565b5f611f3282610f14565b9150611f3d83610f14565b9250828202611f4b81610f14565b91508282048414831517611f6257611f616119f3565b5b5092915050565b5f611f7382610f14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fa557611fa46119f3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611fe782610f14565b9150611ff283610f14565b92508261200257612001611fb0565b5b828204905092915050565b5f61201782610f14565b915061202283610f14565b92508261203257612031611fb0565b5b82820690509291505056fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222077696474683d22323922206865696768743d223239222076696577426f783d22302030203239203239223ea264697066735822122031f8b966b202a31c74dae0e24b9b72f8b55503e33c8909212d3c07c5187d7c7364736f6c634300081a0033

Deployed Bytecode Sourcemap

184:5803:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2149:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;991:95;;;:::i;:::-;;1702:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2926:1165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1298:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2525:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2149:207;2211:12;2280:1;2244:7;:16;2252:7;2244:16;;;;;;;;;;;:26;;:33;;;;;:::i;:::-;;;:37;2236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2322:7;:16;2330:7;2322:16;;;;;;;;;;;:26;;2315:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2149:207;;;:::o;991:95::-;673:8;;;;;;;;;;659:22;;:10;:22;;;651:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;768:14:::1;;;;;;;;;;;767:15;759:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1074:4:::2;1057:14;;:21;;;;;;;;;;;;;;;;;;991:95::o:0;1702:286::-;673:8;;;;;;;;;;659:22;;:10;:22;;;651:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;768:14:::1;;;;;;;;;;;767:15;759:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:7:::2;:16;1820:7;1812:16;;;;;;;;;;;:23;;;1805:30;;;;:::i;:::-;1876:9;1871:110;1895:6;:13;1891:1;:17;1871:110;;;1930:7;:16;1938:7;1930:16;;;;;;;;;;;:23;;1959:6;1966:1;1959:9;;;;;;;;:::i;:::-;;;;;;;;1930:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;1910:3;;;;;;;1871:110;;;;1702:286:::0;;:::o;2926:1165::-;2982:13;3008:22;3033:7;:16;3041:7;3033:16;;;;;;;;;;;:26;;3008:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3097:1;3078:9;:16;:20;3070:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;3134:22;:110;;;;;;;;;;;;;;;;;;;3255:19;3287:13;3320:9;3315:698;3339:2;3335:1;:6;3315:698;;;3368:9;3363:639;3387:2;3383:1;:6;3363:639;;;3415:11;3429:26;3438:9;3449:5;3429:8;:26::i;:::-;3415:40;;3483:1;3474:10;;;;;:::i;:::-;;;3532:1;3517:10;3510:4;:17;3509:24;;;3505:482;;3581:19;3603:16;3614:4;3603:10;:16::i;:::-;3581:38;;3730:5;3779:11;3788:1;3779:8;:11::i;:::-;3801;3810:1;3801:8;:11::i;:::-;3876:5;3683:261;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3642:325;;3535:452;3505:482;3396:606;3391:3;;;;;;;3363:639;;;;3343:3;;;;;;;3315:698;;;;4056:8;4066:5;4039:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4025:58;;;;;;2926:1165;;;:::o;1298:232::-;673:8;;;;;;;;;;659:22;;:10;:22;;;651:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;768:14:::1;;;;;;;;;;;767:15;759:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1433:11:::2;1413:9;:16;:31;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1513:9;1484:7;:16;1492:7;1484:16;;;;;;;;;;;:26;;:38;;;;;;:::i;:::-;;1298:232:::0;;:::o;2525:196::-;2584:14;2652:1;2619:7;:16;2627:7;2619:16;;;;;;;;;;;:23;;:30;;;;:34;2611:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2690:7;:16;2698:7;2690:16;;;;;;;;;;;:23;;2683:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2525:196;;;:::o;4291:357::-;4366:6;4406:4;:11;4401:1;4393:5;:9;;;;:::i;:::-;:24;;4385:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4613:4;4626:1;4618:5;:9;;;;:::i;:::-;4613:15;;;;;;;;:::i;:::-;;;;;;;;;;4607:22;;4590:1;4570:4;4583:1;4575:5;:9;;;;:::i;:::-;4570:15;;;;;;;;:::i;:::-;;;;;;;;;;4564:22;;:27;;;;4546:2;4526:4;4539:1;4531:5;:9;;;;:::i;:::-;4526:15;;;;;;;;:::i;:::-;;;;;;;;;;4520:22;;:28;;;;4502:2;4486:4;4491:5;4486:11;;;;;;;;:::i;:::-;;;;;;;;;;4480:18;;:24;;;;:68;:111;:149;4459:181;;4452:188;;4291:357;;;;:::o;4815:477::-;4871:13;4897:18;:39;;;4947:19;4979:1;4969:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4947:34;;5009:15;:6;5016:1;5009:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;5040:9;5035:216;5059:1;5055;:5;5035:216;;;5082:11;5121:1;5116;5112;:5;;;;:::i;:::-;5111:11;;;;:::i;:::-;5102:4;:21;;;;5082:42;;5159:10;5179:1;5170:5;:10;;;;5159:22;;;;;;;;;:::i;:::-;;;;;5139:6;5154:1;5150;:5;;;;:::i;:::-;5146:1;:9;;;;:::i;:::-;5139:17;;;;;;;;:::i;:::-;;;;;:42;;;;;;;;;;;5216:10;5235:3;5227:5;:11;5216:23;;;;;;;;;:::i;:::-;;;;;5196:6;5211:1;5207;:5;;;;:::i;:::-;5203:1;:9;;;;:::i;:::-;5196:17;;;;;;;;:::i;:::-;;;;;:43;;;;;;;;;;;5067:184;5062:3;;;;;;;5035:216;;;;5277:6;5263:21;;;;4815:477;;;:::o;5478:506::-;5534:13;5573:1;5564:5;:10;5560:26;;5576:10;;;;;;;;;;;;;;;;;;;;;5560:26;5597:12;5612:5;5597:20;;5628:14;5653:78;5668:1;5660:4;:9;5653:78;;5686:8;;;;;:::i;:::-;;;;5717:2;5709:10;;;;;:::i;:::-;;;5653:78;;;5741:19;5773:6;5763:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5741:39;;5791:154;5807:1;5798:5;:10;5791:154;;5835:1;5825:11;;;;;:::i;:::-;;;5902:2;5894:5;:10;;;;:::i;:::-;5881:2;:24;;;;:::i;:::-;5868:39;;5851:6;5858;5851:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5931:2;5922:11;;;;;:::i;:::-;;;5791:154;;;5969:6;5955:21;;;;;5478:506;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:98::-;1076:6;1110:5;1104:12;1094:22;;1025:98;;;:::o;1129:168::-;1212:11;1246:6;1241:3;1234:19;1286:4;1281:3;1277:14;1262:29;;1129:168;;;;:::o;1303:139::-;1392:6;1387:3;1382;1376:23;1433:1;1424:6;1419:3;1415:16;1408:27;1303:139;;;:::o;1448:102::-;1489:6;1540:2;1536:7;1531:2;1524:5;1520:14;1516:28;1506:38;;1448:102;;;:::o;1556:373::-;1642:3;1670:38;1702:5;1670:38;:::i;:::-;1724:70;1787:6;1782:3;1724:70;:::i;:::-;1717:77;;1803:65;1861:6;1856:3;1849:4;1842:5;1838:16;1803:65;:::i;:::-;1893:29;1915:6;1893:29;:::i;:::-;1888:3;1884:39;1877:46;;1646:283;1556:373;;;;:::o;1935:309::-;2046:4;2084:2;2073:9;2069:18;2061:26;;2133:9;2127:4;2123:20;2119:1;2108:9;2104:17;2097:47;2161:76;2232:4;2223:6;2161:76;:::i;:::-;2153:84;;1935:309;;;;:::o;2250:117::-;2359:1;2356;2349:12;2373:180;2421:77;2418:1;2411:88;2518:4;2515:1;2508:15;2542:4;2539:1;2532:15;2559:281;2642:27;2664:4;2642:27;:::i;:::-;2634:6;2630:40;2772:6;2760:10;2757:22;2736:18;2724:10;2721:34;2718:62;2715:88;;;2783:18;;:::i;:::-;2715:88;2823:10;2819:2;2812:22;2602:238;2559:281;;:::o;2846:129::-;2880:6;2907:20;;:::i;:::-;2897:30;;2936:33;2964:4;2956:6;2936:33;:::i;:::-;2846:129;;;:::o;2981:332::-;3079:4;3169:18;3161:6;3158:30;3155:56;;;3191:18;;:::i;:::-;3155:56;3241:4;3233:6;3229:17;3221:25;;3301:4;3295;3291:15;3283:23;;2981:332;;;:::o;3319:117::-;3428:1;3425;3418:12;3442:117;3551:1;3548;3541:12;3565:117;3674:1;3671;3664:12;3688:117;3797:1;3794;3787:12;3811:308;3873:4;3963:18;3955:6;3952:30;3949:56;;;3985:18;;:::i;:::-;3949:56;4023:29;4045:6;4023:29;:::i;:::-;4015:37;;4107:4;4101;4097:15;4089:23;;3811:308;;;:::o;4125:148::-;4223:6;4218:3;4213;4200:30;4264:1;4255:6;4250:3;4246:16;4239:27;4125:148;;;:::o;4279:425::-;4357:5;4382:66;4398:49;4440:6;4398:49;:::i;:::-;4382:66;:::i;:::-;4373:75;;4471:6;4464:5;4457:21;4509:4;4502:5;4498:16;4547:3;4538:6;4533:3;4529:16;4526:25;4523:112;;;4554:79;;:::i;:::-;4523:112;4644:54;4691:6;4686:3;4681;4644:54;:::i;:::-;4363:341;4279:425;;;;;:::o;4724:340::-;4780:5;4829:3;4822:4;4814:6;4810:17;4806:27;4796:122;;4837:79;;:::i;:::-;4796:122;4954:6;4941:20;4979:79;5054:3;5046:6;5039:4;5031:6;5027:17;4979:79;:::i;:::-;4970:88;;4786:278;4724:340;;;;:::o;5105:916::-;5175:5;5219:4;5207:9;5202:3;5198:19;5194:30;5191:117;;;5227:79;;:::i;:::-;5191:117;5326:21;5342:4;5326:21;:::i;:::-;5317:30;;5439:1;5428:9;5424:17;5411:31;5469:18;5461:6;5458:30;5455:117;;;5491:79;;:::i;:::-;5455:117;5611:59;5666:3;5657:6;5646:9;5642:22;5611:59;:::i;:::-;5604:4;5597:5;5593:16;5586:85;5357:325;5770:2;5759:9;5755:18;5742:32;5801:18;5793:6;5790:30;5787:117;;;5823:79;;:::i;:::-;5787:117;5943:59;5998:3;5989:6;5978:9;5974:22;5943:59;:::i;:::-;5936:4;5929:5;5925:16;5918:85;5692:322;5105:916;;;;:::o;6064:978::-;6181:5;6206:102;6222:85;6300:6;6222:85;:::i;:::-;6206:102;:::i;:::-;6197:111;;6328:5;6357:6;6350:5;6343:21;6391:4;6384:5;6380:16;6373:23;;6444:4;6436:6;6432:17;6424:6;6420:30;6473:3;6465:6;6462:15;6459:122;;;6492:79;;:::i;:::-;6459:122;6607:6;6590:446;6624:6;6619:3;6616:15;6590:446;;;6713:3;6700:17;6749:18;6736:11;6733:35;6730:122;;;6771:79;;:::i;:::-;6730:122;6895:11;6887:6;6883:24;6933:58;6987:3;6975:10;6933:58;:::i;:::-;6928:3;6921:71;7021:4;7016:3;7012:14;7005:21;;6666:370;;6650:4;6645:3;6641:14;6634:21;;6590:446;;;6594:21;6187:855;;6064:978;;;;;:::o;7085:412::-;7177:5;7226:3;7219:4;7211:6;7207:17;7203:27;7193:122;;7234:79;;:::i;:::-;7193:122;7351:6;7338:20;7376:115;7487:3;7479:6;7472:4;7464:6;7460:17;7376:115;:::i;:::-;7367:124;;7183:314;7085:412;;;;:::o;7503:726::-;7617:6;7625;7674:2;7662:9;7653:7;7649:23;7645:32;7642:119;;;7680:79;;:::i;:::-;7642:119;7800:1;7825:53;7870:7;7861:6;7850:9;7846:22;7825:53;:::i;:::-;7815:63;;7771:117;7955:2;7944:9;7940:18;7927:32;7986:18;7978:6;7975:30;7972:117;;;8008:79;;:::i;:::-;7972:117;8113:99;8204:7;8195:6;8184:9;8180:22;8113:99;:::i;:::-;8103:109;;7898:324;7503:726;;;;;:::o;8235:99::-;8287:6;8321:5;8315:12;8305:22;;8235:99;;;:::o;8340:169::-;8424:11;8458:6;8453:3;8446:19;8498:4;8493:3;8489:14;8474:29;;8340:169;;;;:::o;8515:377::-;8603:3;8631:39;8664:5;8631:39;:::i;:::-;8686:71;8750:6;8745:3;8686:71;:::i;:::-;8679:78;;8766:65;8824:6;8819:3;8812:4;8805:5;8801:16;8766:65;:::i;:::-;8856:29;8878:6;8856:29;:::i;:::-;8851:3;8847:39;8840:46;;8607:285;8515:377;;;;:::o;8898:313::-;9011:4;9049:2;9038:9;9034:18;9026:26;;9098:9;9092:4;9088:20;9084:1;9073:9;9069:17;9062:47;9126:78;9199:4;9190:6;9126:78;:::i;:::-;9118:86;;8898:313;;;;:::o;9217:307::-;9278:4;9368:18;9360:6;9357:30;9354:56;;;9390:18;;:::i;:::-;9354:56;9428:29;9450:6;9428:29;:::i;:::-;9420:37;;9512:4;9506;9502:15;9494:23;;9217:307;;;:::o;9530:423::-;9607:5;9632:65;9648:48;9689:6;9648:48;:::i;:::-;9632:65;:::i;:::-;9623:74;;9720:6;9713:5;9706:21;9758:4;9751:5;9747:16;9796:3;9787:6;9782:3;9778:16;9775:25;9772:112;;;9803:79;;:::i;:::-;9772:112;9893:54;9940:6;9935:3;9930;9893:54;:::i;:::-;9613:340;9530:423;;;;;:::o;9972:338::-;10027:5;10076:3;10069:4;10061:6;10057:17;10053:27;10043:122;;10084:79;;:::i;:::-;10043:122;10201:6;10188:20;10226:78;10300:3;10292:6;10285:4;10277:6;10273:17;10226:78;:::i;:::-;10217:87;;10033:277;9972:338;;;;:::o;10316:652::-;10393:6;10401;10450:2;10438:9;10429:7;10425:23;10421:32;10418:119;;;10456:79;;:::i;:::-;10418:119;10576:1;10601:53;10646:7;10637:6;10626:9;10622:22;10601:53;:::i;:::-;10591:63;;10547:117;10731:2;10720:9;10716:18;10703:32;10762:18;10754:6;10751:30;10748:117;;;10784:79;;:::i;:::-;10748:117;10889:62;10943:7;10934:6;10923:9;10919:22;10889:62;:::i;:::-;10879:72;;10674:287;10316:652;;;;;:::o;10974:135::-;11062:6;11096:5;11090:12;11080:22;;10974:135;;;:::o;11115:205::-;11235:11;11269:6;11264:3;11257:19;11309:4;11304:3;11300:14;11285:29;;11115:205;;;;:::o;11326:153::-;11414:4;11437:3;11429:11;;11467:4;11462:3;11458:14;11450:22;;11326:153;;;:::o;11485:159::-;11559:11;11593:6;11588:3;11581:19;11633:4;11628:3;11624:14;11609:29;;11485:159;;;;:::o;11650:357::-;11728:3;11756:39;11789:5;11756:39;:::i;:::-;11811:61;11865:6;11860:3;11811:61;:::i;:::-;11804:68;;11881:65;11939:6;11934:3;11927:4;11920:5;11916:16;11881:65;:::i;:::-;11971:29;11993:6;11971:29;:::i;:::-;11966:3;11962:39;11955:46;;11732:275;11650:357;;;;:::o;12079:665::-;12180:3;12216:4;12211:3;12207:14;12308:4;12301:5;12297:16;12291:23;12361:3;12355:4;12351:14;12344:4;12339:3;12335:14;12328:38;12387:73;12455:4;12441:12;12387:73;:::i;:::-;12379:81;;12231:240;12554:4;12547:5;12543:16;12537:23;12607:3;12601:4;12597:14;12590:4;12585:3;12581:14;12574:38;12633:73;12701:4;12687:12;12633:73;:::i;:::-;12625:81;;12481:236;12734:4;12727:11;;12185:559;12079:665;;;;:::o;12750:240::-;12861:10;12896:88;12980:3;12972:6;12896:88;:::i;:::-;12882:102;;12750:240;;;;:::o;12996:134::-;13087:4;13119;13114:3;13110:14;13102:22;;12996:134;;;:::o;13206:1079::-;13367:3;13396:75;13465:5;13396:75;:::i;:::-;13487:107;13587:6;13582:3;13487:107;:::i;:::-;13480:114;;13620:3;13665:4;13657:6;13653:17;13648:3;13644:27;13695:77;13766:5;13695:77;:::i;:::-;13795:7;13826:1;13811:429;13836:6;13833:1;13830:13;13811:429;;;13907:9;13901:4;13897:20;13892:3;13885:33;13958:6;13952:13;13986:106;14087:4;14072:13;13986:106;:::i;:::-;13978:114;;14115:81;14189:6;14115:81;:::i;:::-;14105:91;;14225:4;14220:3;14216:14;14209:21;;13871:369;13858:1;13855;13851:9;13846:14;;13811:429;;;13815:14;14256:4;14249:11;;14276:3;14269:10;;13372:913;;;;;13206:1079;;;;:::o;14291:457::-;14476:4;14514:2;14503:9;14499:18;14491:26;;14563:9;14557:4;14553:20;14549:1;14538:9;14534:17;14527:47;14591:150;14736:4;14727:6;14591:150;:::i;:::-;14583:158;;14291:457;;;;:::o;14754:180::-;14802:77;14799:1;14792:88;14899:4;14896:1;14889:15;14923:4;14920:1;14913:15;14940:320;14984:6;15021:1;15015:4;15011:12;15001:22;;15068:1;15062:4;15058:12;15089:18;15079:81;;15145:4;15137:6;15133:17;15123:27;;15079:81;15207:2;15199:6;15196:14;15176:18;15173:38;15170:84;;15226:18;;:::i;:::-;15170:84;14991:269;14940:320;;;:::o;15266:168::-;15406:20;15402:1;15394:6;15390:14;15383:44;15266:168;:::o;15440:366::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:419::-;15978:4;16016:2;16005:9;16001:18;15993:26;;16065:9;16059:4;16055:20;16051:1;16040:9;16036:17;16029:47;16093:131;16219:4;16093:131;:::i;:::-;16085:139;;15812:419;;;:::o;16237:164::-;16377:16;16373:1;16365:6;16361:14;16354:40;16237:164;:::o;16407:366::-;16549:3;16570:67;16634:2;16629:3;16570:67;:::i;:::-;16563:74;;16646:93;16735:3;16646:93;:::i;:::-;16764:2;16759:3;16755:12;16748:19;;16407:366;;;:::o;16779:419::-;16945:4;16983:2;16972:9;16968:18;16960:26;;17032:9;17026:4;17022:20;17018:1;17007:9;17003:17;16996:47;17060:131;17186:4;17060:131;:::i;:::-;17052:139;;16779:419;;;:::o;17204:169::-;17344:21;17340:1;17332:6;17328:14;17321:45;17204:169;:::o;17379:366::-;17521:3;17542:67;17606:2;17601:3;17542:67;:::i;:::-;17535:74;;17618:93;17707:3;17618:93;:::i;:::-;17736:2;17731:3;17727:12;17720:19;;17379:366;;;:::o;17751:419::-;17917:4;17955:2;17944:9;17940:18;17932:26;;18004:9;17998:4;17994:20;17990:1;17979:9;17975:17;17968:47;18032:131;18158:4;18032:131;:::i;:::-;18024:139;;17751:419;;;:::o;18176:180::-;18224:77;18221:1;18214:88;18321:4;18318:1;18311:15;18345:4;18342:1;18335:15;18362:141;18411:4;18434:3;18426:11;;18457:3;18454:1;18447:14;18491:4;18488:1;18478:18;18470:26;;18362:141;;;:::o;18509:93::-;18546:6;18593:2;18588;18581:5;18577:14;18573:23;18563:33;;18509:93;;;:::o;18608:107::-;18652:8;18702:5;18696:4;18692:16;18671:37;;18608:107;;;;:::o;18721:393::-;18790:6;18840:1;18828:10;18824:18;18863:97;18893:66;18882:9;18863:97;:::i;:::-;18981:39;19011:8;19000:9;18981:39;:::i;:::-;18969:51;;19053:4;19049:9;19042:5;19038:21;19029:30;;19102:4;19092:8;19088:19;19081:5;19078:30;19068:40;;18797:317;;18721:393;;;;;:::o;19120:60::-;19148:3;19169:5;19162:12;;19120:60;;;:::o;19186:142::-;19236:9;19269:53;19287:34;19296:24;19314:5;19296:24;:::i;:::-;19287:34;:::i;:::-;19269:53;:::i;:::-;19256:66;;19186:142;;;:::o;19334:75::-;19377:3;19398:5;19391:12;;19334:75;;;:::o;19415:269::-;19525:39;19556:7;19525:39;:::i;:::-;19586:91;19635:41;19659:16;19635:41;:::i;:::-;19627:6;19620:4;19614:11;19586:91;:::i;:::-;19580:4;19573:105;19491:193;19415:269;;;:::o;19690:73::-;19735:3;19690:73;:::o;19769:189::-;19846:32;;:::i;:::-;19887:65;19945:6;19937;19931:4;19887:65;:::i;:::-;19822:136;19769:189;;:::o;19964:186::-;20024:120;20041:3;20034:5;20031:14;20024:120;;;20095:39;20132:1;20125:5;20095:39;:::i;:::-;20068:1;20061:5;20057:13;20048:22;;20024:120;;;19964:186;;:::o;20156:543::-;20257:2;20252:3;20249:11;20246:446;;;20291:38;20323:5;20291:38;:::i;:::-;20375:29;20393:10;20375:29;:::i;:::-;20365:8;20361:44;20558:2;20546:10;20543:18;20540:49;;;20579:8;20564:23;;20540:49;20602:80;20658:22;20676:3;20658:22;:::i;:::-;20648:8;20644:37;20631:11;20602:80;:::i;:::-;20261:431;;20246:446;20156:543;;;:::o;20705:117::-;20759:8;20809:5;20803:4;20799:16;20778:37;;20705:117;;;;:::o;20828:169::-;20872:6;20905:51;20953:1;20949:6;20941:5;20938:1;20934:13;20905:51;:::i;:::-;20901:56;20986:4;20980;20976:15;20966:25;;20879:118;20828:169;;;;:::o;21002:295::-;21078:4;21224:29;21249:3;21243:4;21224:29;:::i;:::-;21216:37;;21286:3;21283:1;21279:11;21273:4;21270:21;21262:29;;21002:295;;;;:::o;21302:1395::-;21419:37;21452:3;21419:37;:::i;:::-;21521:18;21513:6;21510:30;21507:56;;;21543:18;;:::i;:::-;21507:56;21587:38;21619:4;21613:11;21587:38;:::i;:::-;21672:67;21732:6;21724;21718:4;21672:67;:::i;:::-;21766:1;21790:4;21777:17;;21822:2;21814:6;21811:14;21839:1;21834:618;;;;22496:1;22513:6;22510:77;;;22562:9;22557:3;22553:19;22547:26;22538:35;;22510:77;22613:67;22673:6;22666:5;22613:67;:::i;:::-;22607:4;22600:81;22469:222;21804:887;;21834:618;21886:4;21882:9;21874:6;21870:22;21920:37;21952:4;21920:37;:::i;:::-;21979:1;21993:208;22007:7;22004:1;22001:14;21993:208;;;22086:9;22081:3;22077:19;22071:26;22063:6;22056:42;22137:1;22129:6;22125:14;22115:24;;22184:2;22173:9;22169:18;22156:31;;22030:4;22027:1;22023:12;22018:17;;21993:208;;;22229:6;22220:7;22217:19;22214:179;;;22287:9;22282:3;22278:19;22272:26;22330:48;22372:4;22364:6;22360:17;22349:9;22330:48;:::i;:::-;22322:6;22315:64;22237:156;22214:179;22439:1;22435;22427:6;22423:14;22419:22;22413:4;22406:36;21841:611;;;21804:887;;21394:1303;;;21302:1395;;:::o;22703:180::-;22751:77;22748:1;22741:88;22848:4;22845:1;22838:15;22872:4;22869:1;22862:15;22889:191;22929:3;22948:20;22966:1;22948:20;:::i;:::-;22943:25;;22982:20;23000:1;22982:20;:::i;:::-;22977:25;;23025:1;23022;23018:9;23011:16;;23046:3;23043:1;23040:10;23037:36;;;23053:18;;:::i;:::-;23037:36;22889:191;;;;:::o;23086:148::-;23188:11;23225:3;23210:18;;23086:148;;;;:::o;23240:390::-;23346:3;23374:39;23407:5;23374:39;:::i;:::-;23429:89;23511:6;23506:3;23429:89;:::i;:::-;23422:96;;23527:65;23585:6;23580:3;23573:4;23566:5;23562:16;23527:65;:::i;:::-;23617:6;23612:3;23608:16;23601:23;;23350:280;23240:390;;;;:::o;23636:214::-;23776:66;23772:1;23764:6;23760:14;23753:90;23636:214;:::o;23856:400::-;24016:3;24037:84;24119:1;24114:3;24037:84;:::i;:::-;24030:91;;24130:93;24219:3;24130:93;:::i;:::-;24248:1;24243:3;24239:11;24232:18;;23856:400;;;:::o;24262:214::-;24402:66;24398:1;24390:6;24386:14;24379:90;24262:214;:::o;24482:400::-;24642:3;24663:84;24745:1;24740:3;24663:84;:::i;:::-;24656:91;;24756:93;24845:3;24756:93;:::i;:::-;24874:1;24869:3;24865:11;24858:18;;24482:400;;;:::o;24888:214::-;25028:66;25024:1;25016:6;25012:14;25005:90;24888:214;:::o;25108:402::-;25268:3;25289:85;25371:2;25366:3;25289:85;:::i;:::-;25282:92;;25383:93;25472:3;25383:93;:::i;:::-;25501:2;25496:3;25492:12;25485:19;;25108:402;;;:::o;25516:214::-;25656:66;25652:1;25644:6;25640:14;25633:90;25516:214;:::o;25736:402::-;25896:3;25917:85;25999:2;25994:3;25917:85;:::i;:::-;25910:92;;26011:93;26100:3;26011:93;:::i;:::-;26129:2;26124:3;26120:12;26113:19;;25736:402;;;:::o;26144:1819::-;26824:3;26846:95;26937:3;26928:6;26846:95;:::i;:::-;26839:102;;26958:148;27102:3;26958:148;:::i;:::-;26951:155;;27123:95;27214:3;27205:6;27123:95;:::i;:::-;27116:102;;27235:148;27379:3;27235:148;:::i;:::-;27228:155;;27400:95;27491:3;27482:6;27400:95;:::i;:::-;27393:102;;27512:148;27656:3;27512:148;:::i;:::-;27505:155;;27677:95;27768:3;27759:6;27677:95;:::i;:::-;27670:102;;27789:148;27933:3;27789:148;:::i;:::-;27782:155;;27954:3;27947:10;;26144:1819;;;;;;;:::o;27969:156::-;28109:8;28105:1;28097:6;28093:14;28086:32;27969:156;:::o;28131:400::-;28291:3;28312:84;28394:1;28389:3;28312:84;:::i;:::-;28305:91;;28405:93;28494:3;28405:93;:::i;:::-;28523:1;28518:3;28514:11;28507:18;;28131:400;;;:::o;28537:701::-;28818:3;28840:95;28931:3;28922:6;28840:95;:::i;:::-;28833:102;;28952:95;29043:3;29034:6;28952:95;:::i;:::-;28945:102;;29064:148;29208:3;29064:148;:::i;:::-;29057:155;;29229:3;29222:10;;28537:701;;;;;:::o;29244:174::-;29384:26;29380:1;29372:6;29368:14;29361:50;29244:174;:::o;29424:366::-;29566:3;29587:67;29651:2;29646:3;29587:67;:::i;:::-;29580:74;;29663:93;29752:3;29663:93;:::i;:::-;29781:2;29776:3;29772:12;29765:19;;29424:366;;;:::o;29796:419::-;29962:4;30000:2;29989:9;29985:18;29977:26;;30049:9;30043:4;30039:20;30035:1;30024:9;30020:17;30013:47;30077:131;30203:4;30077:131;:::i;:::-;30069:139;;29796:419;;;:::o;30221:140::-;30269:4;30292:3;30284:11;;30315:3;30312:1;30305:14;30349:4;30346:1;30336:18;30328:26;;30221:140;;;:::o;30367:541::-;30467:2;30462:3;30459:11;30456:445;;;30501:37;30532:5;30501:37;:::i;:::-;30584:29;30602:10;30584:29;:::i;:::-;30574:8;30570:44;30767:2;30755:10;30752:18;30749:49;;;30788:8;30773:23;;30749:49;30811:80;30867:22;30885:3;30867:22;:::i;:::-;30857:8;30853:37;30840:11;30811:80;:::i;:::-;30471:430;;30456:445;30367:541;;;:::o;30914:1390::-;31029:36;31061:3;31029:36;:::i;:::-;31130:18;31122:6;31119:30;31116:56;;;31152:18;;:::i;:::-;31116:56;31196:38;31228:4;31222:11;31196:38;:::i;:::-;31281:66;31340:6;31332;31326:4;31281:66;:::i;:::-;31374:1;31398:4;31385:17;;31430:2;31422:6;31419:14;31447:1;31442:617;;;;32103:1;32120:6;32117:77;;;32169:9;32164:3;32160:19;32154:26;32145:35;;32117:77;32220:67;32280:6;32273:5;32220:67;:::i;:::-;32214:4;32207:81;32076:222;31412:886;;31442:617;31494:4;31490:9;31482:6;31478:22;31528:36;31559:4;31528:36;:::i;:::-;31586:1;31600:208;31614:7;31611:1;31608:14;31600:208;;;31693:9;31688:3;31684:19;31678:26;31670:6;31663:42;31744:1;31736:6;31732:14;31722:24;;31791:2;31780:9;31776:18;31763:31;;31637:4;31634:1;31630:12;31625:17;;31600:208;;;31836:6;31827:7;31824:19;31821:179;;;31894:9;31889:3;31885:19;31879:26;31937:48;31979:4;31971:6;31967:17;31956:9;31937:48;:::i;:::-;31929:6;31922:64;31844:156;31821:179;32046:1;32042;32034:6;32030:14;32026:22;32020:4;32013:36;31449:610;;;31412:886;;31004:1300;;;30914:1390;;:::o;32310:164::-;32450:16;32446:1;32438:6;32434:14;32427:40;32310:164;:::o;32480:366::-;32622:3;32643:67;32707:2;32702:3;32643:67;:::i;:::-;32636:74;;32719:93;32808:3;32719:93;:::i;:::-;32837:2;32832:3;32828:12;32821:19;;32480:366;;;:::o;32852:419::-;33018:4;33056:2;33045:9;33041:18;33033:26;;33105:9;33099:4;33095:20;33091:1;33080:9;33076:17;33069:47;33133:131;33259:4;33133:131;:::i;:::-;33125:139;;32852:419;;;:::o;33277:169::-;33417:21;33413:1;33405:6;33401:14;33394:45;33277:169;:::o;33452:366::-;33594:3;33615:67;33679:2;33674:3;33615:67;:::i;:::-;33608:74;;33691:93;33780:3;33691:93;:::i;:::-;33809:2;33804:3;33800:12;33793:19;;33452:366;;;:::o;33824:419::-;33990:4;34028:2;34017:9;34013:18;34005:26;;34077:9;34071:4;34067:20;34063:1;34052:9;34048:17;34041:47;34105:131;34231:4;34105:131;:::i;:::-;34097:139;;33824:419;;;:::o;34249:194::-;34289:4;34309:20;34327:1;34309:20;:::i;:::-;34304:25;;34343:20;34361:1;34343:20;:::i;:::-;34338:25;;34387:1;34384;34380:9;34372:17;;34411:1;34405:4;34402:11;34399:37;;;34416:18;;:::i;:::-;34399:37;34249:194;;;;:::o;34449:410::-;34489:7;34512:20;34530:1;34512:20;:::i;:::-;34507:25;;34546:20;34564:1;34546:20;:::i;:::-;34541:25;;34601:1;34598;34594:9;34623:30;34641:11;34623:30;:::i;:::-;34612:41;;34802:1;34793:7;34789:15;34786:1;34783:22;34763:1;34756:9;34736:83;34713:139;;34832:18;;:::i;:::-;34713:139;34497:362;34449:410;;;;:::o;34865:233::-;34904:3;34927:24;34945:5;34927:24;:::i;:::-;34918:33;;34973:66;34966:5;34963:77;34960:103;;35043:18;;:::i;:::-;34960:103;35090:1;35083:5;35079:13;35072:20;;34865:233;;;:::o;35104:180::-;35152:77;35149:1;35142:88;35249:4;35246:1;35239:15;35273:4;35270:1;35263:15;35290:185;35330:1;35347:20;35365:1;35347:20;:::i;:::-;35342:25;;35381:20;35399:1;35381:20;:::i;:::-;35376:25;;35420:1;35410:35;;35425:18;;:::i;:::-;35410:35;35467:1;35464;35460:9;35455:14;;35290:185;;;;:::o;35481:176::-;35513:1;35530:20;35548:1;35530:20;:::i;:::-;35525:25;;35564:20;35582:1;35564:20;:::i;:::-;35559:25;;35603:1;35593:35;;35608:18;;:::i;:::-;35593:35;35649:1;35646;35642:9;35637:14;;35481:176;;;;:::o

Swarm Source

ipfs://31f8b966b202a31c74dae0e24b9b72f8b55503e33c8909212d3c07c5187d7c73

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.