Ape Curtis Testnet

Contract

0xfE5aC2a9B0026F4f3053249C76b6AD603E16C5C6

Overview

APE Balance

Ape Curtis LogoApe Curtis LogoApe Curtis Logo0 APE

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store Traits128231742024-11-22 1:15:3433 days ago1732238134IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231702024-11-22 1:15:3333 days ago1732238133IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231682024-11-22 1:15:3233 days ago1732238132IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231672024-11-22 1:15:3133 days ago1732238131IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231662024-11-22 1:15:3133 days ago1732238131IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231642024-11-22 1:15:3033 days ago1732238130IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231632024-11-22 1:15:2933 days ago1732238129IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231602024-11-22 1:15:2833 days ago1732238128IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231592024-11-22 1:15:2633 days ago1732238126IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231582024-11-22 1:15:2533 days ago1732238125IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231572024-11-22 1:15:2433 days ago1732238124IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231552024-11-22 1:15:2333 days ago1732238123IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231542024-11-22 1:15:2233 days ago1732238122IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231512024-11-22 1:15:2133 days ago1732238121IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018340.01
Store Traits128231502024-11-22 1:15:2033 days ago1732238120IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231492024-11-22 1:15:1933 days ago1732238119IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018340.01
Store Traits128231452024-11-22 1:15:1833 days ago1732238118IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231442024-11-22 1:15:1733 days ago1732238117IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018310.01
Store Traits128231432024-11-22 1:15:1633 days ago1732238116IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231412024-11-22 1:15:1533 days ago1732238115IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.01
Store Traits128231382024-11-22 1:15:1433 days ago1732238114IN
0xfE5aC2a9...03E16C5C6
0 APE0.00000340.01
Store Pixel Data128231362024-11-22 1:15:1233 days ago1732238112IN
0xfE5aC2a9...03E16C5C6
0 APE0.000018330.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-22
*/

/**
 *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 pixel data and generates SVGs for on-chain Goblin images.
 */
contract GobsDataSource {
    address payable internal deployer;
    bool private contractSealed = false;
    string internal constant SVG_HEADER = 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 29 29"><rect width="100%" height="100%" fill="#0047B1"/>';
    string internal constant SVG_FOOTER = '</svg>';
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";


    struct Trait {
        string traitType;
        string value;
    }

    struct GobData {
        bytes pixelData; // Row-major RGBA data (29x29 pixels, 3364 bytes)
        Trait[] traits;  // Array of traits for the token
    }

    

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

    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 Goblin.
     * @param tokenId The ID of the Goblin (0 <= tokenId < 2222).
     * @param pixelData The RGBA data (row-major order, 29x29 pixels, 3364 bytes).
     */
    function storePixelData(uint256 tokenId, bytes memory pixelData) external onlyDeployer unsealed {
        require(tokenId < 2222, "Invalid tokenId");
        require(pixelData.length == 29 * 29 * 3, "Invalid pixel data length");
        gobData[tokenId].pixelData = pixelData;
    }

   function storeTraits(uint256 tokenId, Trait[] memory traits) external onlyDeployer {
        delete gobData[tokenId].traits; // Clear existing traits
        for (uint256 i = 0; i < traits.length; i++) {
            gobData[tokenId].traits.push(traits[i]);
        }
    }


    // Retrieve traits for a token
    function getTraits(uint256 tokenId) external view returns (string memory) {
        require(gobData[tokenId].traits.length > 0, "Traits not set");

        string memory jsonTraits = "[";

        for (uint256 i = 0; i < gobData[tokenId].traits.length; i++) {
            jsonTraits = string.concat(
                jsonTraits,
                '{"trait_type": "', gobData[tokenId].traits[i].traitType,
                '", "value": "', gobData[tokenId].traits[i].value, '"}'
            );

            if (i < gobData[tokenId].traits.length - 1) {
                jsonTraits = string.concat(jsonTraits, ",");
            }
        }

        jsonTraits = string.concat(jsonTraits, "]");
        return jsonTraits;
    }
    /**
     * @notice Retrieve RGB pixel data for a Goblin.
     * @param tokenId The ID of the Goblin.
     * @return The RGB pixel data.
     */
    function getGobData(uint256 tokenId) external view returns (bytes memory) {
        require(tokenId < 2222, "Invalid tokenId");
        require(gobData[tokenId].pixelData.length == 29 * 29 * 3, "Pixel data not set");
        return gobData[tokenId].pixelData;
    }

    /**
     * @notice Generate the SVG for a Goblin from its pixel data.
     * @param tokenId The ID of the Goblin.
     */
   function getGobSVG(uint256 tokenId) external view returns (string memory svg) {
    require(tokenId < 2222, "Invalid tokenId");
    bytes memory pixels = gobData[tokenId].pixelData;

    svg = "";
    require(pixels.length > 0, "Pixel data not set");

    // Pre-allocate space for the SVG (estimate size to reduce reallocations)
    // string memory svg = string(abi.encodePacked(SVG_HEADER));
    bytes memory buffer = new bytes(7);

    for (uint y = 0; y < 29; y++) {
        for (uint x = 0; x < 29; x++) {
            uint p = (y * 29 + x) * 3;
            if(pixels[p] == 0x00 && pixels[p + 1] == 0x47 && pixels[p + 2] == 0xb1){
                continue;
            }
            // Convert RGB values to hex
            buffer[0] = "#";
            for (uint i = 0; i < 3; i++) {
                uint8 value = uint8(pixels[p + i]);
                buffer[1 + i * 2] = _HEX_SYMBOLS[value >> 4];
                buffer[2 + i * 2] = _HEX_SYMBOLS[value & 0xf];
            }
            // Append the rect element
            svg = string.concat(svg, 
                '<rect x="', toString(x),
                '" y="', toString(y),
                '" width="1" height="1" shape-rendering="crispEdges" fill="', string(buffer), '"/>'); 
        }
    }

    svg = string.concat(SVG_HEADER,svg,SVG_FOOTER);
}


/// @dev Returns the base 10 decimal representation of `value`.
    function toString(uint256 value) internal pure returns (string memory str) {
        /// @solidity memory-safe-assembly
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), but
            // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned.
            // We will need 1 word for the trailing zeros padding, 1 word for the length,
            // and 3 words for a maximum of 78 digits.
            str := add(mload(0x40), 0x80)
            // Update the free memory pointer to allocate.
            mstore(0x40, add(str, 0x20))
            // Zeroize the slot after the string.
            mstore(str, 0)

            // Cache the end of the memory to calculate the length later.
            let end := str

            let w := not(0) // Tsk.
            // We write the string from rightmost digit to leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            for { let temp := value } 1 {} {
                str := add(str, w) // `sub(str, 1)`.
                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            // Move the pointer 32 bytes leftwards to make room for the length.
            str := sub(str, 0x20)
            // Store the length.
            mstore(str, length)
        }
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobSVG","outputs":[{"internalType":"string","name":"svg","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTraits","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"pixelData","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"}]

60806040525f8060146101000a81548160ff0219169083151502179055503480156027575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fb2806100745f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610ec8565b610136565b60405161008b9190610f63565b60405180910390f35b61009c6106aa565b005b6100b860048036038101906100b3919061121e565b6107a2565b005b6100d460048036038101906100cf9190610ec8565b6108ec565b6040516100e191906112ca565b60405180910390f35b61010460048036038101906100ff9190611388565b610a36565b005b610120600480360381019061011b9190610ec8565b610bc0565b60405161012d9190610f63565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061142c565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611477565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611477565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b5050505050905060405180602001604052805f81525091505f81511161026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610264906114f1565b60405180910390fd5b5f600767ffffffffffffffff81111561028957610288610f87565b5b6040519080825280601f01601f1916602001820160405280156102bb5781602001600182028036833780820191505090505b5090505f5b601d81101561062f575f5b601d811015610621575f600382601d856102e5919061153c565b6102ef919061157d565b6102f9919061153c565b90505f60f81b858281518110610312576103116115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561039a5750604760f81b8560018361035a919061157d565b8151811061036b5761036a6115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80156103f4575060b160f81b856002836103b4919061157d565b815181106103c5576103c46115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156103ff5750610614565b7f2300000000000000000000000000000000000000000000000000000000000000845f81518110610433576104326115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b60038110156105d9575f86828461047a919061157d565b8151811061048b5761048a6115b0565b5b602001015160f81c60f81b60f81c90507f303132333435363738396162636465660000000000000000000000000000000060048260ff16901c60ff16601081106104d8576104d76115b0565b5b1a60f81b866002846104ea919061153c565b60016104f6919061157d565b81518110610507576105066115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff166010811061056e5761056d6115b0565b5b1a60f81b86600284610580919061153c565b600261058c919061157d565b8151811061059d5761059c6115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610463565b50856105e483610d88565b6105ed85610d88565b8660405160200161060194939291906116f9565b6040516020818303038152906040529550505b80806001019150506102cb565b5080806001019150506102c0565b506040518060c0016040528060938152602001611eea60939139836040518060400160405280600681526020017f3c2f7376673e00000000000000000000000000000000000000000000000000008152506040516020016106929392919061176e565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906117e8565b60405180910390fd5b5f60149054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d90611850565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906117e8565b60405180910390fd5b60015f8381526020019081526020015f206001015f61084e9190610dd7565b5f5b81518110156108e75760015f8481526020019081526020015f206001018282815181106108805761087f6115b0565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816108c19190611a0b565b5060208201518160010190816108d79190611a0b565b5050508080600101915050610850565b505050565b60606108ae8210610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061142c565b60405180910390fd5b6109db60015f8481526020019081526020015f205f01805461095390611477565b905014610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c906114f1565b60405180910390fd5b60015f8381526020019081526020015f205f0180546109b390611477565b80601f01602080910402602001604051908101604052809291908181526020018280546109df90611477565b8015610a2a5780601f10610a0157610100808354040283529160200191610a2a565b820191905f5260205f20905b815481529060010190602001808311610a0d57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906117e8565b60405180910390fd5b5f60149054906101000a900460ff1615610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990611850565b60405180910390fd5b6108ae8210610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061142c565b60405180910390fd5b6109db815114610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290611b24565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610bbb9190611b9a565b505050565b60605f60015f8481526020019081526020015f206001018054905011610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290611cb3565b60405180910390fd5b5f6040518060400160405280600181526020017f5b0000000000000000000000000000000000000000000000000000000000000081525090505f5b60015f8581526020019081526020015f2060010180549050811015610d5c578160015f8681526020019081526020015f206001018281548110610c9c57610c9b6115b0565b5b905f5260205f2090600202015f0160015f8781526020019081526020015f206001018381548110610cd057610ccf6115b0565b5b905f5260205f209060020201600101604051602001610cf193929190611dc3565b60405160208183030381529060405291506001805f8681526020019081526020015f2060010180549050610d259190611e20565b811015610d4f5781604051602001610d3d9190611e79565b60405160208183030381529060405291505b8080600101915050610c56565b5080604051602001610d6e9190611ec4565b604051602081830303815290604052905080915050919050565b60606080604051019050602081016040525f8152805f19835b600115610dc2578184019350600a81066030018453600a8104905080610da1575b50828203602084039350808452505050919050565b5080545f8255600202905f5260205f2090810190610df59190610df8565b50565b5b80821115610e28575f8082015f610e109190610e2c565b600182015f610e1f9190610e2c565b50600201610df9565b5090565b508054610e3890611477565b5f825580601f10610e495750610e66565b601f0160209004905f5260205f2090810190610e659190610e69565b5b50565b5b80821115610e80575f815f905550600101610e6a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610ea781610e95565b8114610eb1575f80fd5b50565b5f81359050610ec281610e9e565b92915050565b5f60208284031215610edd57610edc610e8d565b5b5f610eea84828501610eb4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f3582610ef3565b610f3f8185610efd565b9350610f4f818560208601610f0d565b610f5881610f1b565b840191505092915050565b5f6020820190508181035f830152610f7b8184610f2b565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fbd82610f1b565b810181811067ffffffffffffffff82111715610fdc57610fdb610f87565b5b80604052505050565b5f610fee610e84565b9050610ffa8282610fb4565b919050565b5f67ffffffffffffffff82111561101957611018610f87565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561105457611053610f87565b5b61105d82610f1b565b9050602081019050919050565b828183375f83830152505050565b5f61108a6110858461103a565b610fe5565b9050828152602081018484840111156110a6576110a5611036565b5b6110b184828561106a565b509392505050565b5f82601f8301126110cd576110cc610f83565b5b81356110dd848260208601611078565b91505092915050565b5f604082840312156110fb576110fa61102e565b5b6111056040610fe5565b90505f82013567ffffffffffffffff81111561112457611123611032565b5b611130848285016110b9565b5f83015250602082013567ffffffffffffffff81111561115357611152611032565b5b61115f848285016110b9565b60208301525092915050565b5f61117d61117884610fff565b610fe5565b905080838252602082019050602084028301858111156111a05761119f61102a565b5b835b818110156111e757803567ffffffffffffffff8111156111c5576111c4610f83565b5b8086016111d289826110e6565b855260208501945050506020810190506111a2565b5050509392505050565b5f82601f83011261120557611204610f83565b5b813561121584826020860161116b565b91505092915050565b5f806040838503121561123457611233610e8d565b5b5f61124185828601610eb4565b925050602083013567ffffffffffffffff81111561126257611261610e91565b5b61126e858286016111f1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61129c82611278565b6112a68185611282565b93506112b6818560208601610f0d565b6112bf81610f1b565b840191505092915050565b5f6020820190508181035f8301526112e28184611292565b905092915050565b5f67ffffffffffffffff82111561130457611303610f87565b5b61130d82610f1b565b9050602081019050919050565b5f61132c611327846112ea565b610fe5565b90508281526020810184848401111561134857611347611036565b5b61135384828561106a565b509392505050565b5f82601f83011261136f5761136e610f83565b5b813561137f84826020860161131a565b91505092915050565b5f806040838503121561139e5761139d610e8d565b5b5f6113ab85828601610eb4565b925050602083013567ffffffffffffffff8111156113cc576113cb610e91565b5b6113d88582860161135b565b9150509250929050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611416600f83610efd565b9150611421826113e2565b602082019050919050565b5f6020820190508181035f8301526114438161140a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061148e57607f821691505b6020821081036114a1576114a061144a565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6114db601283610efd565b91506114e6826114a7565b602082019050919050565b5f6020820190508181035f830152611508816114cf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61154682610e95565b915061155183610e95565b925082820261155f81610e95565b915082820484148315176115765761157561150f565b5b5092915050565b5f61158782610e95565b915061159283610e95565b92508282019050808211156115aa576115a961150f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b5f6115f182610ef3565b6115fb81856115dd565b935061160b818560208601610f0d565b80840191505092915050565b7f3c7265637420783d220000000000000000000000000000000000000000000000815250565b7f2220793d22000000000000000000000000000000000000000000000000000000815250565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22000000000000602082015250565b5f6116bd603a836115dd565b91506116c882611663565b603a82019050919050565b7f222f3e0000000000000000000000000000000000000000000000000000000000815250565b5f61170482876115e7565b915061170f82611617565b60098201915061171f82866115e7565b915061172a8261163d565b60058201915061173a82856115e7565b9150611745826116b1565b915061175182846115e7565b915061175c826116d3565b60038201915081905095945050505050565b5f61177982866115e7565b915061178582856115e7565b915061179182846115e7565b9150819050949350505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f6117d2600e83610efd565b91506117dd8261179e565b602082019050919050565b5f6020820190508181035f8301526117ff816117c6565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f61183a601383610efd565b915061184582611806565b602082019050919050565b5f6020820190508181035f8301526118678161182e565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026118ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261188f565b6118d4868361188f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61190f61190a61190584610e95565b6118ec565b610e95565b9050919050565b5f819050919050565b611928836118f5565b61193c61193482611916565b84845461189b565b825550505050565b5f90565b611950611944565b61195b81848461191f565b505050565b5b8181101561197e576119735f82611948565b600181019050611961565b5050565b601f8211156119c3576119948161186e565b61199d84611880565b810160208510156119ac578190505b6119c06119b885611880565b830182611960565b50505b505050565b5f82821c905092915050565b5f6119e35f19846008026119c8565b1980831691505092915050565b5f6119fb83836119d4565b9150826002028217905092915050565b611a1482610ef3565b67ffffffffffffffff811115611a2d57611a2c610f87565b5b611a378254611477565b611a42828285611982565b5f60209050601f831160018114611a73575f8415611a61578287015190505b611a6b85826119f0565b865550611ad2565b601f198416611a818661186e565b5f5b82811015611aa857848901518255600182019150602085019450602081019050611a83565b86831015611ac55784890151611ac1601f8916826119d4565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611b0e601983610efd565b9150611b1982611ada565b602082019050919050565b5f6020820190508181035f830152611b3b81611b02565b9050919050565b5f819050815f5260205f209050919050565b601f821115611b9557611b6681611b42565b611b6f84611880565b81016020851015611b7e578190505b611b92611b8a85611880565b830182611960565b50505b505050565b611ba382611278565b67ffffffffffffffff811115611bbc57611bbb610f87565b5b611bc68254611477565b611bd1828285611b54565b5f60209050601f831160018114611c02575f8415611bf0578287015190505b611bfa85826119f0565b865550611c61565b601f198416611c1086611b42565b5f5b82811015611c3757848901518255600182019150602085019450602081019050611c12565b86831015611c545784890151611c50601f8916826119d4565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611c9d600e83610efd565b9150611ca882611c69565b602082019050919050565b5f6020820190508181035f830152611cca81611c91565b9050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000815250565b5f8154611d0381611477565b611d0d81866115dd565b9450600182165f8114611d275760018114611d3c57611d6e565b60ff1983168652811515820286019350611d6e565b611d458561186e565b5f5b83811015611d6657815481890152600182019150602081019050611d47565b838801955050505b50505092915050565b7f222c202276616c7565223a202200000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b5f611dce82866115e7565b9150611dd982611cd1565b601082019150611de98285611cf7565b9150611df482611d77565b600d82019150611e048284611cf7565b9150611e0f82611d9d565b600282019150819050949350505050565b5f611e2a82610e95565b9150611e3583610e95565b9250828203905081811115611e4d57611e4c61150f565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b5f611e8482846115e7565b9150611e8f82611e53565b60018201915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f611ecf82846115e7565b9150611eda82611e9e565b6001820191508190509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223303034374231222f3ea2646970667358221220e19d07e3afb14eaa4ddaeb0980bb49b9428ed84f164125e00833f32d6dc03cdd64736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610ec8565b610136565b60405161008b9190610f63565b60405180910390f35b61009c6106aa565b005b6100b860048036038101906100b3919061121e565b6107a2565b005b6100d460048036038101906100cf9190610ec8565b6108ec565b6040516100e191906112ca565b60405180910390f35b61010460048036038101906100ff9190611388565b610a36565b005b610120600480360381019061011b9190610ec8565b610bc0565b60405161012d9190610f63565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061142c565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611477565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611477565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b5050505050905060405180602001604052805f81525091505f81511161026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610264906114f1565b60405180910390fd5b5f600767ffffffffffffffff81111561028957610288610f87565b5b6040519080825280601f01601f1916602001820160405280156102bb5781602001600182028036833780820191505090505b5090505f5b601d81101561062f575f5b601d811015610621575f600382601d856102e5919061153c565b6102ef919061157d565b6102f9919061153c565b90505f60f81b858281518110610312576103116115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561039a5750604760f81b8560018361035a919061157d565b8151811061036b5761036a6115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80156103f4575060b160f81b856002836103b4919061157d565b815181106103c5576103c46115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156103ff5750610614565b7f2300000000000000000000000000000000000000000000000000000000000000845f81518110610433576104326115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b60038110156105d9575f86828461047a919061157d565b8151811061048b5761048a6115b0565b5b602001015160f81c60f81b60f81c90507f303132333435363738396162636465660000000000000000000000000000000060048260ff16901c60ff16601081106104d8576104d76115b0565b5b1a60f81b866002846104ea919061153c565b60016104f6919061157d565b81518110610507576105066115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff166010811061056e5761056d6115b0565b5b1a60f81b86600284610580919061153c565b600261058c919061157d565b8151811061059d5761059c6115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610463565b50856105e483610d88565b6105ed85610d88565b8660405160200161060194939291906116f9565b6040516020818303038152906040529550505b80806001019150506102cb565b5080806001019150506102c0565b506040518060c0016040528060938152602001611eea60939139836040518060400160405280600681526020017f3c2f7376673e00000000000000000000000000000000000000000000000000008152506040516020016106929392919061176e565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906117e8565b60405180910390fd5b5f60149054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d90611850565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906117e8565b60405180910390fd5b60015f8381526020019081526020015f206001015f61084e9190610dd7565b5f5b81518110156108e75760015f8481526020019081526020015f206001018282815181106108805761087f6115b0565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816108c19190611a0b565b5060208201518160010190816108d79190611a0b565b5050508080600101915050610850565b505050565b60606108ae8210610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061142c565b60405180910390fd5b6109db60015f8481526020019081526020015f205f01805461095390611477565b905014610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c906114f1565b60405180910390fd5b60015f8381526020019081526020015f205f0180546109b390611477565b80601f01602080910402602001604051908101604052809291908181526020018280546109df90611477565b8015610a2a5780601f10610a0157610100808354040283529160200191610a2a565b820191905f5260205f20905b815481529060010190602001808311610a0d57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906117e8565b60405180910390fd5b5f60149054906101000a900460ff1615610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990611850565b60405180910390fd5b6108ae8210610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061142c565b60405180910390fd5b6109db815114610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290611b24565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610bbb9190611b9a565b505050565b60605f60015f8481526020019081526020015f206001018054905011610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290611cb3565b60405180910390fd5b5f6040518060400160405280600181526020017f5b0000000000000000000000000000000000000000000000000000000000000081525090505f5b60015f8581526020019081526020015f2060010180549050811015610d5c578160015f8681526020019081526020015f206001018281548110610c9c57610c9b6115b0565b5b905f5260205f2090600202015f0160015f8781526020019081526020015f206001018381548110610cd057610ccf6115b0565b5b905f5260205f209060020201600101604051602001610cf193929190611dc3565b60405160208183030381529060405291506001805f8681526020019081526020015f2060010180549050610d259190611e20565b811015610d4f5781604051602001610d3d9190611e79565b60405160208183030381529060405291505b8080600101915050610c56565b5080604051602001610d6e9190611ec4565b604051602081830303815290604052905080915050919050565b60606080604051019050602081016040525f8152805f19835b600115610dc2578184019350600a81066030018453600a8104905080610da1575b50828203602084039350808452505050919050565b5080545f8255600202905f5260205f2090810190610df59190610df8565b50565b5b80821115610e28575f8082015f610e109190610e2c565b600182015f610e1f9190610e2c565b50600201610df9565b5090565b508054610e3890611477565b5f825580601f10610e495750610e66565b601f0160209004905f5260205f2090810190610e659190610e69565b5b50565b5b80821115610e80575f815f905550600101610e6a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610ea781610e95565b8114610eb1575f80fd5b50565b5f81359050610ec281610e9e565b92915050565b5f60208284031215610edd57610edc610e8d565b5b5f610eea84828501610eb4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f3582610ef3565b610f3f8185610efd565b9350610f4f818560208601610f0d565b610f5881610f1b565b840191505092915050565b5f6020820190508181035f830152610f7b8184610f2b565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fbd82610f1b565b810181811067ffffffffffffffff82111715610fdc57610fdb610f87565b5b80604052505050565b5f610fee610e84565b9050610ffa8282610fb4565b919050565b5f67ffffffffffffffff82111561101957611018610f87565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561105457611053610f87565b5b61105d82610f1b565b9050602081019050919050565b828183375f83830152505050565b5f61108a6110858461103a565b610fe5565b9050828152602081018484840111156110a6576110a5611036565b5b6110b184828561106a565b509392505050565b5f82601f8301126110cd576110cc610f83565b5b81356110dd848260208601611078565b91505092915050565b5f604082840312156110fb576110fa61102e565b5b6111056040610fe5565b90505f82013567ffffffffffffffff81111561112457611123611032565b5b611130848285016110b9565b5f83015250602082013567ffffffffffffffff81111561115357611152611032565b5b61115f848285016110b9565b60208301525092915050565b5f61117d61117884610fff565b610fe5565b905080838252602082019050602084028301858111156111a05761119f61102a565b5b835b818110156111e757803567ffffffffffffffff8111156111c5576111c4610f83565b5b8086016111d289826110e6565b855260208501945050506020810190506111a2565b5050509392505050565b5f82601f83011261120557611204610f83565b5b813561121584826020860161116b565b91505092915050565b5f806040838503121561123457611233610e8d565b5b5f61124185828601610eb4565b925050602083013567ffffffffffffffff81111561126257611261610e91565b5b61126e858286016111f1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61129c82611278565b6112a68185611282565b93506112b6818560208601610f0d565b6112bf81610f1b565b840191505092915050565b5f6020820190508181035f8301526112e28184611292565b905092915050565b5f67ffffffffffffffff82111561130457611303610f87565b5b61130d82610f1b565b9050602081019050919050565b5f61132c611327846112ea565b610fe5565b90508281526020810184848401111561134857611347611036565b5b61135384828561106a565b509392505050565b5f82601f83011261136f5761136e610f83565b5b813561137f84826020860161131a565b91505092915050565b5f806040838503121561139e5761139d610e8d565b5b5f6113ab85828601610eb4565b925050602083013567ffffffffffffffff8111156113cc576113cb610e91565b5b6113d88582860161135b565b9150509250929050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611416600f83610efd565b9150611421826113e2565b602082019050919050565b5f6020820190508181035f8301526114438161140a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061148e57607f821691505b6020821081036114a1576114a061144a565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6114db601283610efd565b91506114e6826114a7565b602082019050919050565b5f6020820190508181035f830152611508816114cf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61154682610e95565b915061155183610e95565b925082820261155f81610e95565b915082820484148315176115765761157561150f565b5b5092915050565b5f61158782610e95565b915061159283610e95565b92508282019050808211156115aa576115a961150f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b5f6115f182610ef3565b6115fb81856115dd565b935061160b818560208601610f0d565b80840191505092915050565b7f3c7265637420783d220000000000000000000000000000000000000000000000815250565b7f2220793d22000000000000000000000000000000000000000000000000000000815250565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22000000000000602082015250565b5f6116bd603a836115dd565b91506116c882611663565b603a82019050919050565b7f222f3e0000000000000000000000000000000000000000000000000000000000815250565b5f61170482876115e7565b915061170f82611617565b60098201915061171f82866115e7565b915061172a8261163d565b60058201915061173a82856115e7565b9150611745826116b1565b915061175182846115e7565b915061175c826116d3565b60038201915081905095945050505050565b5f61177982866115e7565b915061178582856115e7565b915061179182846115e7565b9150819050949350505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f6117d2600e83610efd565b91506117dd8261179e565b602082019050919050565b5f6020820190508181035f8301526117ff816117c6565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f61183a601383610efd565b915061184582611806565b602082019050919050565b5f6020820190508181035f8301526118678161182e565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026118ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261188f565b6118d4868361188f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61190f61190a61190584610e95565b6118ec565b610e95565b9050919050565b5f819050919050565b611928836118f5565b61193c61193482611916565b84845461189b565b825550505050565b5f90565b611950611944565b61195b81848461191f565b505050565b5b8181101561197e576119735f82611948565b600181019050611961565b5050565b601f8211156119c3576119948161186e565b61199d84611880565b810160208510156119ac578190505b6119c06119b885611880565b830182611960565b50505b505050565b5f82821c905092915050565b5f6119e35f19846008026119c8565b1980831691505092915050565b5f6119fb83836119d4565b9150826002028217905092915050565b611a1482610ef3565b67ffffffffffffffff811115611a2d57611a2c610f87565b5b611a378254611477565b611a42828285611982565b5f60209050601f831160018114611a73575f8415611a61578287015190505b611a6b85826119f0565b865550611ad2565b601f198416611a818661186e565b5f5b82811015611aa857848901518255600182019150602085019450602081019050611a83565b86831015611ac55784890151611ac1601f8916826119d4565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611b0e601983610efd565b9150611b1982611ada565b602082019050919050565b5f6020820190508181035f830152611b3b81611b02565b9050919050565b5f819050815f5260205f209050919050565b601f821115611b9557611b6681611b42565b611b6f84611880565b81016020851015611b7e578190505b611b92611b8a85611880565b830182611960565b50505b505050565b611ba382611278565b67ffffffffffffffff811115611bbc57611bbb610f87565b5b611bc68254611477565b611bd1828285611b54565b5f60209050601f831160018114611c02575f8415611bf0578287015190505b611bfa85826119f0565b865550611c61565b601f198416611c1086611b42565b5f5b82811015611c3757848901518255600182019150602085019450602081019050611c12565b86831015611c545784890151611c50601f8916826119d4565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611c9d600e83610efd565b9150611ca882611c69565b602082019050919050565b5f6020820190508181035f830152611cca81611c91565b9050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000815250565b5f8154611d0381611477565b611d0d81866115dd565b9450600182165f8114611d275760018114611d3c57611d6e565b60ff1983168652811515820286019350611d6e565b611d458561186e565b5f5b83811015611d6657815481890152600182019150602081019050611d47565b838801955050505b50505092915050565b7f222c202276616c7565223a202200000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b5f611dce82866115e7565b9150611dd982611cd1565b601082019150611de98285611cf7565b9150611df482611d77565b600d82019150611e048284611cf7565b9150611e0f82611d9d565b600282019150819050949350505050565b5f611e2a82610e95565b9150611e3583610e95565b9250828203905081811115611e4d57611e4c61150f565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b5f611e8482846115e7565b9150611e8f82611e53565b60018201915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f611ecf82846115e7565b9150611eda82611e9e565b6001820191508190509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223303034374231222f3ea2646970667358221220e19d07e3afb14eaa4ddaeb0980bb49b9428ed84f164125e00833f32d6dc03cdd64736f6c634300081a0033

Deployed Bytecode Sourcemap

254:6480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:1343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1394:95;;;:::i;:::-;;2011:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3231:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1718:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2334:738;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3637:1343;3696:17;3740:4;3730:7;:14;3722:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:19;3793:7;:16;3801:7;3793:16;;;;;;;;;;;:26;;3771:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3828:8;;;;;;;;;;;;;;3867:1;3851:6;:13;:17;3843:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4045:19;4077:1;4067:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4045:34;;4093:6;4088:834;4109:2;4105:1;:6;4088:834;;;4134:6;4129:786;4150:2;4146:1;:6;4129:786;;;4174:6;4198:1;4193;4188:2;4184:1;:6;;;;:::i;:::-;:10;;;;:::i;:::-;4183:16;;;;:::i;:::-;4174:25;;4230:4;4217:17;;:6;4224:1;4217:9;;;;;;;;:::i;:::-;;;;;;;;;;:17;;;;:42;;;;;4255:4;4238:21;;:6;4249:1;4245;:5;;;;:::i;:::-;4238:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;4217:42;:67;;;;;4280:4;4263:21;;:6;4274:1;4270;:5;;;;:::i;:::-;4263:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;4217:67;4214:114;;;4304:8;;;4214:114;4384:15;:6;4391:1;4384:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;4419:6;4414:225;4435:1;4431;:5;4414:225;;;4462:11;4482:6;4493:1;4489;:5;;;;:::i;:::-;4482:13;;;;;;;;:::i;:::-;;;;;;;;;;4476:20;;4462:34;;4535:12;4557:1;4548:5;:10;;;;4535:24;;;;;;;;;:::i;:::-;;;;;4515:6;4530:1;4526;:5;;;;:::i;:::-;4522:1;:9;;;;:::i;:::-;4515:17;;;;;;;;:::i;:::-;;;;;:44;;;;;;;;;;;4598:12;4619:3;4611:5;:11;4598:25;;;;;;;;;:::i;:::-;;;;;4578:6;4593:1;4589;:5;;;;:::i;:::-;4585:1;:9;;;;:::i;:::-;4578:17;;;;;;;;:::i;:::-;;;;;:45;;;;;;;;;;;4443:196;4438:3;;;;;;;4414:225;;;;4713:3;4749:11;4758:1;4749:8;:11::i;:::-;4788;4797:1;4788:8;:11::i;:::-;4887:6;4699:203;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4693:209;;4159:756;4129:786;4154:3;;;;;;;4129:786;;;;4113:3;;;;;;;4088:834;;;;4950:10;;;;;;;;;;;;;;;;;4961:3;4965:10;;;;;;;;;;;;;;;;;4936:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4930:46;;3715:1265;;3637:1343;;;:::o;1394:95::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1171:14:::1;;;;;;;;;;;1170:15;1162:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1477:4:::2;1460:14;;:21;;;;;;;;;;;;;;;;;;1394:95::o:0;2011:277::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2112:7:::1;:16;2120:7;2112:16;;;;;;;;;;;:23;;;2105:30;;;;:::i;:::-;2176:9;2171:110;2195:6;:13;2191:1;:17;2171:110;;;2230:7;:16;2238:7;2230:16;;;;;;;;;;;:23;;2259:6;2266:1;2259:9;;;;;;;;:::i;:::-;;;;;;;;2230:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;2210:3;;;;;;;2171:110;;;;2011:277:::0;;:::o;3231:269::-;3291:12;3334:4;3324:7;:14;3316:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3414:11;3377:7;:16;3385:7;3377:16;;;;;;;;;;;:26;;:33;;;;;:::i;:::-;;;:48;3369:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3466:7;:16;3474:7;3466:16;;;;;;;;;;;:26;;3459:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3231:269;;;:::o;1718:286::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1171:14:::1;;;;;;;;;;;1170:15;1162:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1843:4:::2;1833:7;:14;1825:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1906:11;1886:9;:16;:31;1878:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1987:9;1958:7;:16;1966:7;1958:16;;;;;;;;;;;:26;;:38;;;;;;:::i;:::-;;1718:286:::0;;:::o;2334:738::-;2393:13;2460:1;2427:7;:16;2435:7;2427:16;;;;;;;;;;;:23;;:30;;;;:34;2419:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2493:24;:30;;;;;;;;;;;;;;;;;;;2541:9;2536:445;2560:7;:16;2568:7;2560:16;;;;;;;;;;;:23;;:30;;;;2556:1;:34;2536:445;;;2657:10;2706:7;:16;2714:7;2706:16;;;;;;;;;;;:23;;2730:1;2706:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;2778:7;:16;2786:7;2778:16;;;;;;;;;;;:23;;2802:1;2778:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;2625:206;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2612:219;;2889:1;2856:7;:16;2864:7;2856:16;;;;;;;;;;;:23;;:30;;;;:34;;;;:::i;:::-;2852:1;:38;2848:122;;;2938:10;2924:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;2911:43;;2848:122;2592:3;;;;;;;2536:445;;;;3020:10;3006:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;2993:43;;3054:10;3047:17;;;2334:738;;;:::o;5055:1676::-;5111:17;5563:4;5556;5550:11;5546:22;5539:29;;5664:4;5659:3;5655:14;5649:4;5642:28;5747:1;5742:3;5735:14;5851:3;5883:1;5879:6;6095:5;6077:410;6103:1;6077:410;;;6143:1;6138:3;6134:11;6127:18;;6332:2;6326:4;6322:13;6318:2;6314:22;6309:3;6301:36;6426:2;6420:4;6416:13;6408:21;;6457:4;6077:410;6447:25;6077:410;6081:21;6526:3;6521;6517:13;6641:4;6636:3;6632:14;6625:21;;6706:6;6701:3;6694:19;5194:1530;;;5055:1676;;;:::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:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:117::-;2369:1;2366;2359:12;2383:180;2431:77;2428:1;2421:88;2528:4;2525:1;2518:15;2552:4;2549:1;2542:15;2569:281;2652:27;2674:4;2652:27;:::i;:::-;2644:6;2640:40;2782:6;2770:10;2767:22;2746:18;2734:10;2731:34;2728:62;2725:88;;;2793:18;;:::i;:::-;2725:88;2833:10;2829:2;2822:22;2612:238;2569:281;;:::o;2856:129::-;2890:6;2917:20;;:::i;:::-;2907:30;;2946:33;2974:4;2966:6;2946:33;:::i;:::-;2856:129;;;:::o;2991:332::-;3089:4;3179:18;3171:6;3168:30;3165:56;;;3201:18;;:::i;:::-;3165:56;3251:4;3243:6;3239:17;3231:25;;3311:4;3305;3301:15;3293:23;;2991:332;;;:::o;3329:117::-;3438:1;3435;3428:12;3452:117;3561:1;3558;3551:12;3575:117;3684:1;3681;3674:12;3698:117;3807:1;3804;3797:12;3821:308;3883:4;3973:18;3965:6;3962:30;3959:56;;;3995:18;;:::i;:::-;3959:56;4033:29;4055:6;4033:29;:::i;:::-;4025:37;;4117:4;4111;4107:15;4099:23;;3821:308;;;:::o;4135:148::-;4233:6;4228:3;4223;4210:30;4274:1;4265:6;4260:3;4256:16;4249:27;4135:148;;;:::o;4289:425::-;4367:5;4392:66;4408:49;4450:6;4408:49;:::i;:::-;4392:66;:::i;:::-;4383:75;;4481:6;4474:5;4467:21;4519:4;4512:5;4508:16;4557:3;4548:6;4543:3;4539:16;4536:25;4533:112;;;4564:79;;:::i;:::-;4533:112;4654:54;4701:6;4696:3;4691;4654:54;:::i;:::-;4373:341;4289:425;;;;;:::o;4734:340::-;4790:5;4839:3;4832:4;4824:6;4820:17;4816:27;4806:122;;4847:79;;:::i;:::-;4806:122;4964:6;4951:20;4989:79;5064:3;5056:6;5049:4;5041:6;5037:17;4989:79;:::i;:::-;4980:88;;4796:278;4734:340;;;;:::o;5115:916::-;5185:5;5229:4;5217:9;5212:3;5208:19;5204:30;5201:117;;;5237:79;;:::i;:::-;5201:117;5336:21;5352:4;5336:21;:::i;:::-;5327:30;;5449:1;5438:9;5434:17;5421:31;5479:18;5471:6;5468:30;5465:117;;;5501:79;;:::i;:::-;5465:117;5621:59;5676:3;5667:6;5656:9;5652:22;5621:59;:::i;:::-;5614:4;5607:5;5603:16;5596:85;5367:325;5780:2;5769:9;5765:18;5752:32;5811:18;5803:6;5800:30;5797:117;;;5833:79;;:::i;:::-;5797:117;5953:59;6008:3;5999:6;5988:9;5984:22;5953:59;:::i;:::-;5946:4;5939:5;5935:16;5928:85;5702:322;5115:916;;;;:::o;6074:978::-;6191:5;6216:102;6232:85;6310:6;6232:85;:::i;:::-;6216:102;:::i;:::-;6207:111;;6338:5;6367:6;6360:5;6353:21;6401:4;6394:5;6390:16;6383:23;;6454:4;6446:6;6442:17;6434:6;6430:30;6483:3;6475:6;6472:15;6469:122;;;6502:79;;:::i;:::-;6469:122;6617:6;6600:446;6634:6;6629:3;6626:15;6600:446;;;6723:3;6710:17;6759:18;6746:11;6743:35;6740:122;;;6781:79;;:::i;:::-;6740:122;6905:11;6897:6;6893:24;6943:58;6997:3;6985:10;6943:58;:::i;:::-;6938:3;6931:71;7031:4;7026:3;7022:14;7015:21;;6676:370;;6660:4;6655:3;6651:14;6644:21;;6600:446;;;6604:21;6197:855;;6074:978;;;;;:::o;7095:412::-;7187:5;7236:3;7229:4;7221:6;7217:17;7213:27;7203:122;;7244:79;;:::i;:::-;7203:122;7361:6;7348:20;7386:115;7497:3;7489:6;7482:4;7474:6;7470:17;7386:115;:::i;:::-;7377:124;;7193:314;7095:412;;;;:::o;7513:726::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7965:2;7954:9;7950:18;7937:32;7996:18;7988:6;7985:30;7982:117;;;8018:79;;:::i;:::-;7982:117;8123:99;8214:7;8205:6;8194:9;8190:22;8123:99;:::i;:::-;8113:109;;7908:324;7513:726;;;;;:::o;8245:98::-;8296:6;8330:5;8324:12;8314:22;;8245:98;;;:::o;8349:168::-;8432:11;8466:6;8461:3;8454:19;8506:4;8501:3;8497:14;8482:29;;8349:168;;;;:::o;8523:373::-;8609:3;8637:38;8669:5;8637:38;:::i;:::-;8691:70;8754:6;8749:3;8691:70;:::i;:::-;8684:77;;8770:65;8828:6;8823:3;8816:4;8809:5;8805:16;8770:65;:::i;:::-;8860:29;8882:6;8860:29;:::i;:::-;8855:3;8851:39;8844:46;;8613:283;8523:373;;;;:::o;8902:309::-;9013:4;9051:2;9040:9;9036:18;9028:26;;9100:9;9094:4;9090:20;9086:1;9075:9;9071:17;9064:47;9128:76;9199:4;9190:6;9128:76;:::i;:::-;9120:84;;8902:309;;;;:::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:165::-;11114:17;11110:1;11102:6;11098:14;11091:41;10974:165;:::o;11145:366::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:419::-;11683:4;11721:2;11710:9;11706:18;11698:26;;11770:9;11764:4;11760:20;11756:1;11745:9;11741:17;11734:47;11798:131;11924:4;11798:131;:::i;:::-;11790:139;;11517:419;;;:::o;11942:180::-;11990:77;11987:1;11980:88;12087:4;12084:1;12077:15;12111:4;12108:1;12101:15;12128:320;12172:6;12209:1;12203:4;12199:12;12189:22;;12256:1;12250:4;12246:12;12277:18;12267:81;;12333:4;12325:6;12321:17;12311:27;;12267:81;12395:2;12387:6;12384:14;12364:18;12361:38;12358:84;;12414:18;;:::i;:::-;12358:84;12179:269;12128:320;;;:::o;12454:168::-;12594:20;12590:1;12582:6;12578:14;12571:44;12454:168;:::o;12628:366::-;12770:3;12791:67;12855:2;12850:3;12791:67;:::i;:::-;12784:74;;12867:93;12956:3;12867:93;:::i;:::-;12985:2;12980:3;12976:12;12969:19;;12628:366;;;:::o;13000:419::-;13166:4;13204:2;13193:9;13189:18;13181:26;;13253:9;13247:4;13243:20;13239:1;13228:9;13224:17;13217:47;13281:131;13407:4;13281:131;:::i;:::-;13273:139;;13000:419;;;:::o;13425:180::-;13473:77;13470:1;13463:88;13570:4;13567:1;13560:15;13594:4;13591:1;13584:15;13611:410;13651:7;13674:20;13692:1;13674:20;:::i;:::-;13669:25;;13708:20;13726:1;13708:20;:::i;:::-;13703:25;;13763:1;13760;13756:9;13785:30;13803:11;13785:30;:::i;:::-;13774:41;;13964:1;13955:7;13951:15;13948:1;13945:22;13925:1;13918:9;13898:83;13875:139;;13994:18;;:::i;:::-;13875:139;13659:362;13611:410;;;;:::o;14027:191::-;14067:3;14086:20;14104:1;14086:20;:::i;:::-;14081:25;;14120:20;14138:1;14120:20;:::i;:::-;14115:25;;14163:1;14160;14156:9;14149:16;;14184:3;14181:1;14178:10;14175:36;;;14191:18;;:::i;:::-;14175:36;14027:191;;;;:::o;14224:180::-;14272:77;14269:1;14262:88;14369:4;14366:1;14359:15;14393:4;14390:1;14383:15;14410:148;14512:11;14549:3;14534:18;;14410:148;;;;:::o;14564:390::-;14670:3;14698:39;14731:5;14698:39;:::i;:::-;14753:89;14835:6;14830:3;14753:89;:::i;:::-;14746:96;;14851:65;14909:6;14904:3;14897:4;14890:5;14886:16;14851:65;:::i;:::-;14941:6;14936:3;14932:16;14925:23;;14674:280;14564:390;;;;:::o;14960:241::-;15128:66;15123:3;15116:79;14960:241;:::o;15207:::-;15375:66;15370:3;15363:79;15207:241;:::o;15454:315::-;15594:66;15590:1;15582:6;15578:14;15571:90;15695:66;15690:2;15682:6;15678:15;15671:91;15454:315;:::o;15775:402::-;15935:3;15956:85;16038:2;16033:3;15956:85;:::i;:::-;15949:92;;16050:93;16139:3;16050:93;:::i;:::-;16168:2;16163:3;16159:12;16152:19;;15775:402;;;:::o;16183:241::-;16351:66;16346:3;16339:79;16183:241;:::o;16430:1813::-;17077:3;17099:95;17190:3;17181:6;17099:95;:::i;:::-;17092:102;;17204:137;17337:3;17204:137;:::i;:::-;17366:1;17361:3;17357:11;17350:18;;17385:95;17476:3;17467:6;17385:95;:::i;:::-;17378:102;;17490:137;17623:3;17490:137;:::i;:::-;17652:1;17647:3;17643:11;17636:18;;17671:95;17762:3;17753:6;17671:95;:::i;:::-;17664:102;;17783:148;17927:3;17783:148;:::i;:::-;17776:155;;17948:95;18039:3;18030:6;17948:95;:::i;:::-;17941:102;;18053:137;18186:3;18053:137;:::i;:::-;18215:1;18210:3;18206:11;18199:18;;18234:3;18227:10;;16430:1813;;;;;;;:::o;18249:595::-;18477:3;18499:95;18590:3;18581:6;18499:95;:::i;:::-;18492:102;;18611:95;18702:3;18693:6;18611:95;:::i;:::-;18604:102;;18723:95;18814:3;18805:6;18723:95;:::i;:::-;18716:102;;18835:3;18828:10;;18249:595;;;;;;:::o;18850:164::-;18990:16;18986:1;18978:6;18974:14;18967:40;18850:164;:::o;19020:366::-;19162:3;19183:67;19247:2;19242:3;19183:67;:::i;:::-;19176:74;;19259:93;19348:3;19259:93;:::i;:::-;19377:2;19372:3;19368:12;19361:19;;19020:366;;;:::o;19392:419::-;19558:4;19596:2;19585:9;19581:18;19573:26;;19645:9;19639:4;19635:20;19631:1;19620:9;19616:17;19609:47;19673:131;19799:4;19673:131;:::i;:::-;19665:139;;19392:419;;;:::o;19817:169::-;19957:21;19953:1;19945:6;19941:14;19934:45;19817:169;:::o;19992:366::-;20134:3;20155:67;20219:2;20214:3;20155:67;:::i;:::-;20148:74;;20231:93;20320:3;20231:93;:::i;:::-;20349:2;20344:3;20340:12;20333:19;;19992:366;;;:::o;20364:419::-;20530:4;20568:2;20557:9;20553:18;20545:26;;20617:9;20611:4;20607:20;20603:1;20592:9;20588:17;20581:47;20645:131;20771:4;20645:131;:::i;:::-;20637:139;;20364:419;;;:::o;20789:141::-;20838:4;20861:3;20853:11;;20884:3;20881:1;20874:14;20918:4;20915:1;20905:18;20897:26;;20789:141;;;:::o;20936:93::-;20973:6;21020:2;21015;21008:5;21004:14;21000:23;20990:33;;20936:93;;;:::o;21035:107::-;21079:8;21129:5;21123:4;21119:16;21098:37;;21035:107;;;;:::o;21148:393::-;21217:6;21267:1;21255:10;21251:18;21290:97;21320:66;21309:9;21290:97;:::i;:::-;21408:39;21438:8;21427:9;21408:39;:::i;:::-;21396:51;;21480:4;21476:9;21469:5;21465:21;21456:30;;21529:4;21519:8;21515:19;21508:5;21505:30;21495:40;;21224:317;;21148:393;;;;;:::o;21547:60::-;21575:3;21596:5;21589:12;;21547:60;;;:::o;21613:142::-;21663:9;21696:53;21714:34;21723:24;21741:5;21723:24;:::i;:::-;21714:34;:::i;:::-;21696:53;:::i;:::-;21683:66;;21613:142;;;:::o;21761:75::-;21804:3;21825:5;21818:12;;21761:75;;;:::o;21842:269::-;21952:39;21983:7;21952:39;:::i;:::-;22013:91;22062:41;22086:16;22062:41;:::i;:::-;22054:6;22047:4;22041:11;22013:91;:::i;:::-;22007:4;22000:105;21918:193;21842:269;;;:::o;22117:73::-;22162:3;22117:73;:::o;22196:189::-;22273:32;;:::i;:::-;22314:65;22372:6;22364;22358:4;22314:65;:::i;:::-;22249:136;22196:189;;:::o;22391:186::-;22451:120;22468:3;22461:5;22458:14;22451:120;;;22522:39;22559:1;22552:5;22522:39;:::i;:::-;22495:1;22488:5;22484:13;22475:22;;22451:120;;;22391:186;;:::o;22583:543::-;22684:2;22679:3;22676:11;22673:446;;;22718:38;22750:5;22718:38;:::i;:::-;22802:29;22820:10;22802:29;:::i;:::-;22792:8;22788:44;22985:2;22973:10;22970:18;22967:49;;;23006:8;22991:23;;22967:49;23029:80;23085:22;23103:3;23085:22;:::i;:::-;23075:8;23071:37;23058:11;23029:80;:::i;:::-;22688:431;;22673:446;22583:543;;;:::o;23132:117::-;23186:8;23236:5;23230:4;23226:16;23205:37;;23132:117;;;;:::o;23255:169::-;23299:6;23332:51;23380:1;23376:6;23368:5;23365:1;23361:13;23332:51;:::i;:::-;23328:56;23413:4;23407;23403:15;23393:25;;23306:118;23255:169;;;;:::o;23429:295::-;23505:4;23651:29;23676:3;23670:4;23651:29;:::i;:::-;23643:37;;23713:3;23710:1;23706:11;23700:4;23697:21;23689:29;;23429:295;;;;:::o;23729:1395::-;23846:37;23879:3;23846:37;:::i;:::-;23948:18;23940:6;23937:30;23934:56;;;23970:18;;:::i;:::-;23934:56;24014:38;24046:4;24040:11;24014:38;:::i;:::-;24099:67;24159:6;24151;24145:4;24099:67;:::i;:::-;24193:1;24217:4;24204:17;;24249:2;24241:6;24238:14;24266:1;24261:618;;;;24923:1;24940:6;24937:77;;;24989:9;24984:3;24980:19;24974:26;24965:35;;24937:77;25040:67;25100:6;25093:5;25040:67;:::i;:::-;25034:4;25027:81;24896:222;24231:887;;24261:618;24313:4;24309:9;24301:6;24297:22;24347:37;24379:4;24347:37;:::i;:::-;24406:1;24420:208;24434:7;24431:1;24428:14;24420:208;;;24513:9;24508:3;24504:19;24498:26;24490:6;24483:42;24564:1;24556:6;24552:14;24542:24;;24611:2;24600:9;24596:18;24583:31;;24457:4;24454:1;24450:12;24445:17;;24420:208;;;24656:6;24647:7;24644:19;24641:179;;;24714:9;24709:3;24705:19;24699:26;24757:48;24799:4;24791:6;24787:17;24776:9;24757:48;:::i;:::-;24749:6;24742:64;24664:156;24641:179;24866:1;24862;24854:6;24850:14;24846:22;24840:4;24833:36;24268:611;;;24231:887;;23821:1303;;;23729:1395;;:::o;25130:175::-;25270:27;25266:1;25258:6;25254:14;25247:51;25130:175;:::o;25311:366::-;25453:3;25474:67;25538:2;25533:3;25474:67;:::i;:::-;25467:74;;25550:93;25639:3;25550:93;:::i;:::-;25668:2;25663:3;25659:12;25652:19;;25311:366;;;:::o;25683:419::-;25849:4;25887:2;25876:9;25872:18;25864:26;;25936:9;25930:4;25926:20;25922:1;25911:9;25907:17;25900:47;25964:131;26090:4;25964:131;:::i;:::-;25956:139;;25683:419;;;:::o;26108:140::-;26156:4;26179:3;26171:11;;26202:3;26199:1;26192:14;26236:4;26233:1;26223:18;26215:26;;26108:140;;;:::o;26254:541::-;26354:2;26349:3;26346:11;26343:445;;;26388:37;26419:5;26388:37;:::i;:::-;26471:29;26489:10;26471:29;:::i;:::-;26461:8;26457:44;26654:2;26642:10;26639:18;26636:49;;;26675:8;26660:23;;26636:49;26698:80;26754:22;26772:3;26754:22;:::i;:::-;26744:8;26740:37;26727:11;26698:80;:::i;:::-;26358:430;;26343:445;26254:541;;;:::o;26801:1390::-;26916:36;26948:3;26916:36;:::i;:::-;27017:18;27009:6;27006:30;27003:56;;;27039:18;;:::i;:::-;27003:56;27083:38;27115:4;27109:11;27083:38;:::i;:::-;27168:66;27227:6;27219;27213:4;27168:66;:::i;:::-;27261:1;27285:4;27272:17;;27317:2;27309:6;27306:14;27334:1;27329:617;;;;27990:1;28007:6;28004:77;;;28056:9;28051:3;28047:19;28041:26;28032:35;;28004:77;28107:67;28167:6;28160:5;28107:67;:::i;:::-;28101:4;28094:81;27963:222;27299:886;;27329:617;27381:4;27377:9;27369:6;27365:22;27415:36;27446:4;27415:36;:::i;:::-;27473:1;27487:208;27501:7;27498:1;27495:14;27487:208;;;27580:9;27575:3;27571:19;27565:26;27557:6;27550:42;27631:1;27623:6;27619:14;27609:24;;27678:2;27667:9;27663:18;27650:31;;27524:4;27521:1;27517:12;27512:17;;27487:208;;;27723:6;27714:7;27711:19;27708:179;;;27781:9;27776:3;27772:19;27766:26;27824:48;27866:4;27858:6;27854:17;27843:9;27824:48;:::i;:::-;27816:6;27809:64;27731:156;27708:179;27933:1;27929;27921:6;27917:14;27913:22;27907:4;27900:36;27336:610;;;27299:886;;26891:1300;;;26801:1390;;:::o;28197:164::-;28337:16;28333:1;28325:6;28321:14;28314:40;28197:164;:::o;28367:366::-;28509:3;28530:67;28594:2;28589:3;28530:67;:::i;:::-;28523:74;;28606:93;28695:3;28606:93;:::i;:::-;28724:2;28719:3;28715:12;28708:19;;28367:366;;;:::o;28739:419::-;28905:4;28943:2;28932:9;28928:18;28920:26;;28992:9;28986:4;28982:20;28978:1;28967:9;28963:17;28956:47;29020:131;29146:4;29020:131;:::i;:::-;29012:139;;28739:419;;;:::o;29164:242::-;29333:66;29328:3;29321:79;29164:242;:::o;29436:874::-;29539:3;29576:5;29570:12;29605:36;29631:9;29605:36;:::i;:::-;29657:89;29739:6;29734:3;29657:89;:::i;:::-;29650:96;;29777:1;29766:9;29762:17;29793:1;29788:166;;;;29968:1;29963:341;;;;29755:549;;29788:166;29872:4;29868:9;29857;29853:25;29848:3;29841:38;29934:6;29927:14;29920:22;29912:6;29908:35;29903:3;29899:45;29892:52;;29788:166;;29963:341;30030:38;30062:5;30030:38;:::i;:::-;30090:1;30104:154;30118:6;30115:1;30112:13;30104:154;;;30192:7;30186:14;30182:1;30177:3;30173:11;30166:35;30242:1;30233:7;30229:15;30218:26;;30140:4;30137:1;30133:12;30128:17;;30104:154;;;30287:6;30282:3;30278:16;30271:23;;29970:334;;29755:549;;29543:767;;29436:874;;;;:::o;30316:242::-;30485:66;30480:3;30473:79;30316:242;:::o;30564:241::-;30732:66;30727:3;30720:79;30564:241;:::o;30811:1381::-;31305:3;31327:95;31418:3;31409:6;31327:95;:::i;:::-;31320:102;;31432:138;31566:3;31432:138;:::i;:::-;31595:2;31590:3;31586:12;31579:19;;31615:92;31703:3;31694:6;31615:92;:::i;:::-;31608:99;;31717:138;31851:3;31717:138;:::i;:::-;31880:2;31875:3;31871:12;31864:19;;31900:92;31988:3;31979:6;31900:92;:::i;:::-;31893:99;;32002:137;32135:3;32002:137;:::i;:::-;32164:1;32159:3;32155:11;32148:18;;32183:3;32176:10;;30811:1381;;;;;;:::o;32198:194::-;32238:4;32258:20;32276:1;32258:20;:::i;:::-;32253:25;;32292:20;32310:1;32292:20;:::i;:::-;32287:25;;32336:1;32333;32329:9;32321:17;;32360:1;32354:4;32351:11;32348:37;;;32365:18;;:::i;:::-;32348:37;32198:194;;;;:::o;32398:178::-;32566:3;32561;32554:16;32398:178;:::o;32582:539::-;32804:3;32826:95;32917:3;32908:6;32826:95;:::i;:::-;32819:102;;32931:137;33064:3;32931:137;:::i;:::-;33093:1;33088:3;33084:11;33077:18;;33112:3;33105:10;;32582:539;;;;:::o;33127:178::-;33295:3;33290;33283:16;33127:178;:::o;33311:539::-;33533:3;33555:95;33646:3;33637:6;33555:95;:::i;:::-;33548:102;;33660:137;33793:3;33660:137;:::i;:::-;33822:1;33817:3;33813:11;33806:18;;33841:3;33834:10;;33311:539;;;;:::o

Swarm Source

ipfs://e19d07e3afb14eaa4ddaeb0980bb49b9428ed84f164125e00833f32d6dc03cdd

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.