ETH Price: $3,796.50 (+7.59%)

Contract

0x30525a67A7314E9E059aa33046B5B12210584e34
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MergeFlowerArt

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 20 runs

Other Settings:
default evmVersion
File 1 of 4 : MergeFlowerArt.sol
// SPDX-License-Identifier: MIT
// Copyright (c) 2022 Lawrence X. Rogers

pragma solidity ^0.8.9;

import "@openzeppelin/contracts/utils/Base64.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import {BUD_STUB_1, BUD_STUB_2, FLOWER_ANIMATIONS, FLOWER_DEFS} from "contracts/Encodings.sol";

/// @title MergeFlowersArt
/// @author Lawrence X Rogers
/// @notice This smart contract creates the art for the MergeFlowers NFT.

contract MergeFlowerArt {
    using Strings for uint256;

    uint constant NUM_ATTRIBUTES = 4;

    /// @notice color information about the flower
    struct Palette {
        uint h1;            // hue1
        uint h2;            // hue2
        uint s;             // saturation
        uint l;             // lightness
        bool lwalk;         // whether to increase lightness per layer
        uint cycle;         // how many different colors in the palette
        Interval interval;  
        uint opacity;      
        Mutation mutation;  
    }

    /// @notice 
    struct FlowerTraits {
        Palette palette;
        uint maxDistance;      // starting distance of petals on first layer
        uint distanceDecrease; // how much to shrink each layer
        uint minCount;         // starting petal count on first layer
        uint countIncrease;    // how much to increase petal count each layer
        uint maxRadius;        // starting petal size on first layer
        uint radiusDecrease;   // how much to decrease the radius each layer
        uint levels;           // how many layers 
        uint petalSeed;        // seed storing what types of petals are on each layer
        Mutation mutation;     // what "Mutation" this flower has
        bool bg;               // whether or not this flower has a background
    }

    /// @notice this struct packs details for each layer to avoid stack-too-deep errors
    struct LayerDeets {
        uint distance;
        uint count;
        uint countEvened;
        uint radius;
        bool glow;
    }

    enum Interval {MONO, ANALAGOUS, TERTIARY, TRIADIC}
    uint constant NUM_MUTATIONS = 4;
    enum Mutation {NONE, BIO, VEINS, ALBINO}

    /// UTILITY FUNCTIONS
    /// @notice convert a byte to a number between min and max
    function randomValue(bytes1 seed, uint min, uint max) internal pure returns (uint value){
        uint percent = (100* (1 + uint32(uint8(seed)))) / 256;
        value = min + ((percent * (max - min)) / 100);
    }

    /// @notice the corehue is constant between the buds and the flowers, and is based on tokenId
    function getCoreHueFromTokenId(uint tokenId) internal view returns (uint) {
        bytes32 seed = keccak256(abi.encodePacked(tokenId));
        uint hue = uint(uint8(seed[0])) * uint(uint8(seed[10])) % 360;
        return hue % 360;
    }

    /// @notice convert hue, saturation, and lightness values to an HSL(x,y,z) string
    function getColor(uint _h, uint _s, uint _l) internal pure returns (bytes memory color) {
        color = abi.encodePacked("hsl(", _h.toString(), ", ", _s.toString(), "%, ", _l.toString(), "%)");
    }

    /// @notice return strings for each mutation, for attribute metadata
    function getMutationNames() internal pure returns(string[NUM_MUTATIONS] memory) {
        return ["None", "Bioluminescence", "Veins", "Albino"];
    }

    /// @notice each mutation has an opacity override
    function getMutationOpacity(Palette memory _p) internal pure returns(uint) {
        uint[NUM_MUTATIONS] memory opacities = [_p.opacity, 50, 30, 100];
        return opacities[uint(_p.mutation)];
    }

    /// @notice these are color intervals, in terms of degrees in the color wheel 
    function getIntervals() internal pure returns(uint8[4] memory) {
        return [0, 15, 60, 120];
    }

    /// FLOWER DESIGN

    /// @notice given a random seed and tokenId, generate all traits of the flower.
    function getFlowerTraits(uint _seed, uint tokenId) internal view returns (FlowerTraits memory f) {
        bytes32 seed = keccak256(abi.encodePacked(_seed, tokenId));
        
        uint h1 = getCoreHueFromTokenId(tokenId);
        uint s = 1; //the seed indexes could be hard-coded but tracking it with this variable makes coding much easier
        uint l = randomValue(seed[s++], 50, 70);
        uint maxDistance = randomValue(seed[s++], 250, 300);
        uint levels = randomValue(seed[s++], 2, 6);
        uint minCount = randomValue(seed[s++], 2, 6) * 2;
        Mutation mutation = randomValue(seed[s++], 0, 100) < 10 ? Mutation(randomValue(seed[s++], 0, NUM_MUTATIONS)) : Mutation.NONE;

        return FlowerTraits(
            Palette(
                h1,       // hue1
                (h1 + 10 + randomValue(seed[s++], 0, 20)) % 360, // hue2
                mutation == Mutation.BIO ? 100 : randomValue(seed[s++], 40, 80), // saturation
                l,        // lightness
                l < 60 && uint8(seed[s++]) < 180, // lwalk
                uint8(seed[s++]) < 120 ? 1 : randomValue(seed[s++], 2, 4), // cycle
                Interval(randomValue(seed[s++], 0, 4)), // interval
                mutation == Mutation.BIO ? 50 : randomValue(seed[s++], 50, 100), // opacity
                mutation//mutation == Mutation.VEINS || mutation == Mutation.ALBINO// stroked
            ), 
            maxDistance,   // maxDistance
            (maxDistance - randomValue(seed[s++], 80, 120)) / levels, // distanceDecrease
            minCount,      // min Count
            minCount == 4 ? randomValue(seed[s++], 4, 6) : randomValue(seed[s++], 1, 6),   // count increase
            randomValue(seed[s++], 150, 200),   // max width
            randomValue(seed[s++], 70, 90),     // width decrease
            levels,                             // levels
            uint(uint8(seed[s++])),             // petalSeed
            mutation,
            randomValue(seed[s++], 0, 100) < 50 // bg color
        );
    }

    function getAttributes(FlowerTraits memory _traits) internal pure returns (bytes memory attributeBytes) {
        (string[NUM_ATTRIBUTES] memory names, string[NUM_ATTRIBUTES] memory values) = getTraitNamesAndValues(_traits);
        return generateAttributeMetadata(names, values);
    }

    /// @notice generate the metadata strings and store in two arrays
    function getTraitNamesAndValues(FlowerTraits memory _traits) internal pure returns (string[NUM_ATTRIBUTES] memory names, string[NUM_ATTRIBUTES] memory values) {
        names = ["Base Color", "Levels", "Background Color", "Mutation"];
        values[0] = _traits.palette.h1.toString();              // Base Color
        values[1] = _traits.levels.toString();                  // Levels
        values[2] = _traits.bg ? "Color" : "None";              // Background Color
        values[3] = getMutationNames()[uint(_traits.mutation)]; // Mutation names
    }

    /// @notice helper function to pack metadata into a single string
    function generateAttributeMetadata(string[NUM_ATTRIBUTES] memory names, string[NUM_ATTRIBUTES] memory values) internal pure returns (bytes memory attributeMetadata) {
        attributeMetadata = abi.encodePacked("[");
        for (uint i = 0; i < names.length - 1; i++) {
            attributeMetadata = abi.encodePacked(attributeMetadata,
                '{"trait_type":"', names[i], '",',
                '"value":"', values[i], '"},');
        }

        attributeMetadata = abi.encodePacked(attributeMetadata,
                '{"trait_type":"', names[names.length - 1], '",',
                '"value":"', values[names.length - 1], '"}]');
    }

    /// @notice perform color math to turn palette traits into a specific petal's color
    function getColorFromPalette(Palette memory _p, uint _h, uint _index) internal pure returns (bytes memory) {
        uint h = (_h == 1) ? _p.h1 : _p.h2;
        h += (_index % _p.cycle) * getIntervals()[uint(_p.interval)];
        uint l = _p.lwalk ? _p.l + (_index * 7) : _p.l;
        return getColor(
            h, _p.s, l
        );
    }

    /// @notice return the bud SVG with the color injected.
    function getBudArt(uint tokenId) external view returns (bytes memory budBytes) {
        return abi.encodePacked(
            "data:image/svg+xml;base64,",
            Base64.encode(
                abi.encodePacked(
                    BUD_STUB_1, 
                    "hsl(", getCoreHueFromTokenId(tokenId).toString(), ",80%,60%",
                    BUD_STUB_2)
            )
        );
    }

    /// @notice pack the art into a single base64 encoded SVG. Can return with or without animations.
    function packArt(bytes memory flowerBytes, bool animated, bytes memory bg) internal pure returns (bytes memory) {
        
        return abi.encodePacked(
            "data:image/svg+xml;base64,",
            Base64.encode(
                abi.encodePacked(
                    '<svg width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="thesvg" viewBox="-700 -700 1400 1400" ',
                    'style="background-color: ', bg,'">',
                    '<style>',
                    animated ? FLOWER_ANIMATIONS : abi.encodePacked(""),
                    '</style>',
                    flowerBytes, 
                    "</svg>"
                )
            )
        );
    }

    function getBGColor(FlowerTraits memory _traits) internal pure returns (bytes memory bgcolorbytes) {
        if (_traits.mutation == Mutation.BIO) {
            return abi.encodePacked("#000");
        }
        else if (_traits.bg) {
            uint hue = (_traits.palette.h1 + 180 + getIntervals()[uint(_traits.palette.interval)]) % 360;
            return abi.encodePacked("hsl(", hue.toString(), ",40%,60%)");
        }
        else {
            return abi.encodePacked("#FFF");
        }
    }

    function getFlowerArt(uint _seed, uint tokenId) external view returns (bytes memory still, bytes memory animated, bytes memory attributes) {
        bytes memory flowerBytes = FLOWER_DEFS;
        FlowerTraits memory _traits = getFlowerTraits(_seed, tokenId);
        bytes[] memory layers = getFlowerLayers(_traits);
        for (uint i = 0; i < layers.length; i++) {
            flowerBytes = abi.encodePacked(flowerBytes, layers[i]);
        }
        bytes memory bg = getBGColor(_traits);
        return (packArt(flowerBytes, false, bg), packArt(flowerBytes, true, bg), getAttributes(_traits));
    }

    /// FLOWER CONSTRUCTION

    /// @notice rounds down petal radii to avoid petals being too large around top layer
    function getAdjustedRadius(LayerDeets memory _deets) internal pure returns (uint) {
        uint maximumRadius = ((_deets.distance * 2 * 314) / 100) / _deets.countEvened;
        return maximumRadius < _deets.radius ? maximumRadius : _deets.radius;
    }

    /// @notice main construction function. Takes the flower traits and generates each layer
    function getFlowerLayers(FlowerTraits memory _traits) internal pure returns (bytes[] memory layers) {
        layers = new bytes[](_traits.levels + 1);
        LayerDeets memory deets = LayerDeets(
                                    _traits.maxDistance, 
                                    _traits.minCount,
                                    _traits.minCount,
                                    _traits.maxRadius,
                                    _traits.mutation == Mutation.BIO);

        for (uint i = 0; i < _traits.levels; i++) {
            layers[i] = createLayer(i, _traits.petalSeed, deets, _traits.palette);

            deets.distance -= _traits.distanceDecrease;
            deets.count += _traits.countIncrease;
            deets.countEvened = (deets.count / 2) * 2;
            deets.radius = (deets.radius * _traits.radiusDecrease) / 100;
        }
        layers[layers.length - 1] = createCore(deets.distance + _traits.distanceDecrease, _traits.palette, _traits.levels - 1);
        return layers;
    }

    /// @notice creates a given flower layer. Each layer is actually two layers of petals of the same type
    function createLayer(uint _index, uint _typeSeed, LayerDeets memory _deets, Palette memory _p) internal pure returns (bytes memory layerBytes) {
        
        layerBytes = abi.encodePacked(
            "<g style='transform: rotate(0deg) scale(100%); animation: scaleUp 8s cubic-bezier(.24,.95,.6,1) both ",
             (_index * 200).toString(), "ms'>",
            _deets.glow && _index == 0 ? "<g filter='url(#glow)'>" : "<g filter='url(#shadow)'>");
        uint8 petalType = uint8(keccak256(abi.encodePacked(_typeSeed))[_index]);
        uint rotationInterval = 36000 / _deets.countEvened;

        for (uint i = 0; i < _deets.countEvened; i+= 2) {
            bytes memory color = getColorFromPalette(_p, 1, _index);
            layerBytes = abi.encodePacked(
                layerBytes, 
                createPetal(
                    _p,
                    petalType,
                    _deets.distance + 5,
                    (i * rotationInterval) / 100,// (_index % 2 == 1 ? i * rotationInterval + (rotationInterval / 2): i * rotationInterval) / 100,
                    getAdjustedRadius(_deets) + 5, 
                    color));
        }

        layerBytes = abi.encodePacked(
            layerBytes, 
            "</g></g><g style='transform: rotate(0deg) scale(100%); animation: scaleUp 8s cubic-bezier(.24,.95,.6,1) both ",
             (_index * 200).toString(), "ms'>",
            _deets.glow && _index == 0 ? "<g filter='url(#glow)'>" : "<g filter='url(#shadow)'>");
        
        for (uint i = 1; i < _deets.countEvened; i+= 2) {
            bytes memory color = getColorFromPalette(_p, 2, _index);
            layerBytes = abi.encodePacked(
                layerBytes, 
                createPetal(
                    _p,
                    petalType,
                    _deets.distance - 5, 
                    (i * rotationInterval) / 100,//(_index % 2 == 1 ? i * rotationInterval + (rotationInterval / 2): i * rotationInterval) / 100,
                    getAdjustedRadius(_deets) - 5, 
                    color));
        }
        layerBytes = abi.encodePacked(layerBytes, "</g></g>");
    }

    /// @notice each petal has some basic attributes that are the same regardless of petal type
    function getBasicPetalAttributes(Palette memory _p, bytes memory _hue) internal pure returns (bytes memory petalBytes) {
        return abi.encodePacked(
                '" stroke="', _p.mutation == Mutation.ALBINO ? abi.encodePacked("black") : _hue,
                '" fill="', _p.mutation == Mutation.ALBINO ? abi.encodePacked("white") : _hue,
                '" fill-opacity="', getMutationOpacity(_p).toString() , "%"
        );
    }

    /// @notice create the petal. there are three types of petals, each of which are created slightly differently
    function createPetal(Palette memory _p, uint8 _type, uint _distance, uint _rotation, uint _radius, bytes memory _hue) internal pure returns (bytes memory petalBytes) {
        if (_type <  85) { // CIRCLE
            petalBytes = abi.encodePacked(
                '<circle cy="', _distance.toString(), 
                '" r="', _radius.toString(),
                '" stroke-width="', _p.mutation == Mutation.VEINS || _p.mutation == Mutation.ALBINO ? "10px" : "0px",
                getBasicPetalAttributes(_p, _hue),
                '" style="transform: rotate(', _rotation.toString(), 'deg)" />'
            );
        }
        else if (_type < 170) { // ELLIPSE
            petalBytes = abi.encodePacked(
                '<ellipse cy="', _distance.toString(), 
                '" rx="', ((_radius * 80)/100).toString(),
                '" ry="', ((_radius * 150)/100).toString(),
                '" stroke-width="', _p.mutation == Mutation.VEINS || _p.mutation == Mutation.ALBINO ? "10px" : "0px",
                getBasicPetalAttributes(_p, _hue),
                '" style="transform: rotate(', _rotation.toString(), 'deg)" />'
            );
        }
        else {
            uint scale = ((100 * _radius) / 180);// needs two decimal places

            petalBytes = abi.encodePacked( // POINTY
                '<path d="M 0 300 C 0 300 -150 240 -170 170 C -220 0 0 -300 0 -300 C 0 -300 220 0 170 170 C 150 240 0 300 0 300 Z', 
                '" stroke-width="', abi.encodePacked((_p.mutation == Mutation.VEINS || _p.mutation == Mutation.ALBINO ? (1000 / scale) : 0).toString(), "px"),
                getBasicPetalAttributes(_p, _hue),
                '" style="transform: rotate(', _rotation.toString(),
                     'deg) translate(0px, -', _distance.toString(), 
                     'px) scale(', scale.toString(), '%)"/>'
            );
        }
    }

    /// @notice create the "core" of the flower, the circle in the center. 
    function createCore(uint _radius, Palette memory _p, uint _index) internal pure returns (bytes memory coreBytes) {
        bytes memory id = abi.encodePacked(_p.h1.toString(), _p.h2.toString()); //abi.encodePacked(hue1, "-", hue2);
        coreBytes = abi.encodePacked(
            "<radialGradient id='", id,"'>",
                "<stop offset='0%' stop-color='", getColor(_p.h1, _p.s, _p.l), "'/>",
                "<stop offset='100%' stop-color='", getColor(_p.h2, _p.s, _p.l - 30), "'/>",
            "</radialGradient>",
            "<g style='transform: rotate(0deg) scale(100%); animation: scaleUp 8s cubic-bezier(.24,.95,.6,1) both ",
             (_index * 200).toString(), "ms'>",
            "<circle r='", _radius.toString(), 
            "' filter='url(#shadow)'",
            " stroke='", _p.mutation == Mutation.ALBINO ? abi.encodePacked("black") : getColorFromPalette(_p, 0, _index),
            "' stroke-width='", _p.mutation == Mutation.ALBINO ? "10px" : "0px",
            "' fill-opacity='", (_p.mutation == Mutation.ALBINO ? "100" : (_p.opacity + 25).toString()), "%'",
            " fill='", _p.mutation == Mutation.ALBINO ? abi.encodePacked("white") : abi.encodePacked("url(#", id, ")"), 
            
            "'/></g>"
        );
    }

}

File 2 of 4 : Base64.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 *
 * _Available since v4.5._
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

File 3 of 4 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

File 4 of 4 : Encodings.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

bytes constant BUD_STUB_1 = hex"3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222069643d22746865737667222076696577426f783d222d373030202d37303020313430302031343030223e202020203c7374796c653e406b65796672616d6573206c6561664c6f6164207b3025207b726f746174653a206e6f6e653b7d373025207b726f746174653a202d31306465673b7d31303025207b726f746174653a203336306465673b7d7d406b65796672616d6573207363616c655570207b3025207b726f746174653a2034356465673b7363616c653a203130253b7d31303025207b726f746174653a206e6f6e653b7363616c653a20313030253b7d7d406b65796672616d6573207363616c654f7363696c6c617465207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d3570783b7363616c653a203938253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d323070783b7363616c653a20313031253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64526f74617465207b3025207b726f746174653a206e6f6e653b7d353025207b726f746174653a202d2e356465673b7d31303025207b726f746174653a206e6f6e653b7d7d237374656d207b7472616e73666f726d2d6f726967696e3a20626f74746f6d3b7d2e616e74686572207b616e696d6174696f6e3a20616e74686572426c6f6f6d2031307320656173652d696e2d6f75743b7d406b65796672616d657320616e74686572426c6f6f6d207b3025207b7363616c653a203230253b7d353025207b7363616c653a20313230253b7d31303025207b7363616c653a20313030253b7d7d3c2f7374796c653e202020203c646566733e20202020202020203c66696c7465722066696c746572556e6974733d227573657253706163654f6e557365222069643d22736861646f772220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c66654f666673657420726573756c743d226f66664f75742220696e3d22536f75726365416c706861222064783d2230222064793d2230223e3c2f66654f66667365743e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d226f66664f75742220737464446576696174696f6e3d223230223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e20202020202020203c66696c7465722069643d22736861646f772d736d616c6c2220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d2235223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e2020202020202020202020203c2f646566733e202020203c726563742069643d227374656d2220783d222d31302220793d2230222077696474683d22303022206865696768743d2232303030222066696c6c3d22677265656e223e3c2f726563743e202020203c672069643d22666c6f77657222207374796c653d22616e696d6174696f6e3a20347320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e672077696e643b223e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f74617465283064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652831383064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f7461746528393064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652832373064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283435646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313335646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323235646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528333135646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c636972636c652066696c6c3d22";
bytes constant BUD_STUB_2 = hex"2220723d223130222069643d2268696e74223e3c2f636972636c653e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283630646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313230646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323430646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333030646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313530646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323130646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c2f673e3c2f7376673e";
bytes constant FLOWER_STUB_NO_STYLES = hex"3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222069643d22746865737667222076696577426f783d222d373030202d37303020313430302031343030223e203c7374796c653e2020203c2f7374796c653e203c646566733e203c66696c7465722066696c746572556e6974733d227573657253706163654f6e557365222069643d22736861646f772220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e20203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d22323022202f3e20203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c22202f3e203c2f66696c7465723e203c66696c7465722066696c746572556e6974733d227573657253706163654f6e557365222069643d22736861646f772d736d616c6c2220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e20203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d223422202f3e20203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c22202f3e203c2f66696c7465723e203c2f646566733e";
bytes constant FLOWER_ANIMATIONS = hex"406b65796672616d6573206c6561664c6f6164207b203025207b20726f746174653a20306465673b207d20373025207b20726f746174653a202d31306465673b207d2031303025207b20726f746174653a203336306465673b207d7d20406b65796672616d6573207363616c655570207b203025207b7363616c653a20313025203130253b726f746174653a2034356465673b207d2031303025207b7363616c653a203130302520313030253b726f746174653a20306465673b207d7d406b65796672616d65732077696e64207b203025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d20353025207b7472616e736c6174653a202d31303070783b7363616c653a203935253b207d2031303025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d7d";
bytes constant FLOWER_DEFS = hex"3c646566733e203c7061747465726e2069643d227061747465726e2d636972636c65732220783d22302220793d2230222077696474683d22383022206865696768743d2233303022207061747465726e556e6974733d227573657253706163654f6e55736522207061747465726e436f6e74656e74556e6974733d227573657253706163654f6e557365223e203c7265637420783d22302220793d2230222077696474683d223130302522206865696768743d2231303025222066696c6c3d2270696e6b222f3e203c7465787420783d22302220793d22302220636c6173733d22686561767922207472616e73666f726d3d22726f7461746528393029223e204d455247453c2f746578743e203c2f7061747465726e3e203c66696c7465722069643d22736861646f77222020783d222d3430252220793d222d343025222077696474683d223138302522206865696768743d2231383025223e203c6665436f6c6f724d617472697820747970653d226d6174726978222076616c7565733d20202022302030203020302020203020302030203020302020203020302030203020302020203020302030203020302e372030222f3e203c6665476175737369616e426c757220737464446576696174696f6e3d2231382220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c746572202069643d22736861646f772d736d616c6c2220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d223422202f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22626c75724f7574222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c7465722069643d22676c6f772220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220737464446576696174696f6e3d2233302220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c2f646566733e";

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBudArt","outputs":[{"internalType":"bytes","name":"budBytes","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFlowerArt","outputs":[{"internalType":"bytes","name":"still","type":"bytes"},{"internalType":"bytes","name":"animated","type":"bytes"},{"internalType":"bytes","name":"attributes","type":"bytes"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50615c9a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063511042b81461003b578063f50ca50914610066575b600080fd5b61004e610049366004611c33565b610086565b60405161005d93929190611cd2565b60405180910390f35b610079610074366004611d0b565b610162565b60405161005d9190611d2c565b6060806060600060405180610440016040528061041d8152602001613c1961041d9139905060006100b787876101fc565b905060006100c482610728565b905060005b815181101561012257838282815181106100e5576100e5611d3d565b60200260200101516040516020016100fe929190611d75565b6040516020818303038152906040529350808061011a90611da3565b9150506100c9565b50600061012e83610914565b905061013c846000836109f0565b610148856001846109f0565b61015185610a76565b965096509650505050509250925092565b60606101d660405180611ae00160405280611ab581526020016141b0611ab5913961019461018f85610a9a565b610af7565b6040518061112001604052806110f18152602001612b286110f191396040516020016101c293929190611de9565b604051602081830303815290604052610bf7565b6040516020016101e69190611e23565b6040516020818303038152906040529050919050565b610204611b07565b60408051602080820186905281830185905282518083038401815260609092019092528051910120600061023784610a9a565b90506001600061026a848361024b81611da3565b94506020811061025d5761025d611d3d565b1a60f81b60326046610d49565b9050600061029c858461027c81611da3565b95506020811061028e5761028e611d3d565b1a60f81b60fa61012c610d49565b905060006102cd86856102ae81611da3565b9650602081106102c0576102c0611d3d565b1a60f81b60026006610d49565b905060006102f187866102df81611da3565b9750602081106102c0576102c0611d3d565b6102fc906002611e52565b90506000600a61032f898861031081611da3565b99506020811061032257610322611d3d565b1a60f81b60006064610d49565b1061033b576000610379565b610368888761034981611da3565b98506020811061035b5761035b611d3d565b1a60f81b60006004610d49565b600381111561037957610379611e71565b90506040518061016001604052806040518061012001604052808a81526020016101686103ca8d8c806103ab90611da3565b9d50602081106103bd576103bd611d3d565b1a60f81b60006014610d49565b6103d58d600a611e87565b6103df9190611e87565b6103e99190611eb5565b8152602001600185600381111561040257610402611e71565b14610439576104348c8b61041581611da3565b9c506020811061042757610427611d3d565b1a60f81b60286050610d49565b61043c565b60645b8152602001888152602001603c89108015610474575060b48c8b61045f81611da3565b9c506020811061047157610471611d3d565b1a105b1515815260200160788c8b61048881611da3565b9c506020811061049a5761049a611d3d565b1a106104d2576104cd8c8b6104ae81611da3565b9c50602081106104c0576104c0611d3d565b1a60f81b60026004610d49565b6104d5565b60015b81526020016104fa8c8b6104e881611da3565b9c506020811061035b5761035b611d3d565b600381111561050b5761050b611e71565b600381111561051c5761051c611e71565b8152602001600185600381111561053557610535611e71565b1461056c576105678c8b61054881611da3565b9c506020811061055a5761055a611d3d565b1a60f81b60326064610d49565b61056f565b60325b815260200184600381111561058657610586611e71565b9052815260208101869052604001846105c28b8a6105a381611da3565b9b50602081106105b5576105b5611d3d565b1a60f81b60506078610d49565b6105cc9088611ec9565b6105d69190611ee0565b81526020018381526020018360041461061b576106168a896105f781611da3565b9a506020811061060957610609611d3d565b1a60f81b60016006610d49565b610648565b6106488a8961062981611da3565b9a506020811061063b5761063b611d3d565b1a60f81b60046006610d49565b815260200161067a8a8961065b81611da3565b9a506020811061066d5761066d611d3d565b1a60f81b609660c8610d49565b81526020016106ac8a8961068d81611da3565b9a506020811061069f5761069f611d3d565b1a60f81b6046605a610d49565b81526020018481526020018988806106c390611da3565b9950602081106106d5576106d5611d3d565b1a81526020018260038111156106ed576106ed611e71565b815260200160326107148b8a61070281611da3565b9b506020811061032257610322611d3d565b109052985050505050505050505b92915050565b60608160e00151600161073b9190611e87565b6001600160401b0381111561075257610752611ef8565b60405190808252806020026020018201604052801561078557816020015b60608152602001906001900390816107705790505b50905060006040518060a001604052808460200151815260200184606001518152602001846060015181526020018460a001518152602001600160038111156107d0576107d0611e71565b85610120015160038111156107e7576107e7611e71565b149052905060005b8360e001518110156108b75761081081856101000151848760000151610dae565b83828151811061082257610822611d3d565b60200260200101819052508360400151826000018181516108439190611ec9565b905250608084015160208301805161085c908390611e87565b905250602082015161087090600290611ee0565b61087b906002611e52565b604083015260c0840151606083015160649161089691611e52565b6108a09190611ee0565b6060830152806108af81611da3565b9150506107ef565b50604083015181516108e4916108cc91611e87565b845160e08601516108df90600190611ec9565b6110ba565b82600184516108f39190611ec9565b8151811061090357610903611d3d565b602002602001018190525050919050565b60606001826101200151600381111561092f5761092f611e71565b03610943576040516020016101e690611f1f565b816101400151156109e157600061016861095b6112de565b845160c00151600381111561097257610972611e71565b6004811061098257610982611d3d565b602002015184515160ff9091169061099b9060b4611e87565b6109a59190611e87565b6109af9190611eb5565b90506109ba81610af7565b6040516020016109ca9190611f43565b604051602081830303815290604052915050919050565b6040516020016101e690611f76565b6060610a4e8284610a1e57604051602001610a0a90611f81565b604051602081830303815290604052610a3b565b60405180610160016040528061013a815260200161403661013a91395b866040516020016101c293929190611fdd565b604051602001610a5e9190611e23565b60405160208183030381529060405290509392505050565b6060600080610a848461130f565b91509150610a92828261146b565b949350505050565b60008082604051602001610ab091815260200190565b60408051808303601f19018152919052805160209091012090506000610168610adf600a84901a84841a611e52565b610ae99190611eb5565b9050610a9261016882611eb5565b606081600003610b1e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610b485780610b3281611da3565b9150610b419050600a83611ee0565b9150610b22565b6000816001600160401b03811115610b6257610b62611ef8565b6040519080825280601f01601f191660200182016040528015610b8c576020820181803683370190505b5090505b8415610a9257610ba1600183611ec9565b9150610bae600a86611eb5565b610bb9906030611e87565b60f81b818381518110610bce57610bce611d3d565b60200101906001600160f81b031916908160001a905350610bf0600a86611ee0565b9450610b90565b60608151600003610c1657505060408051602081019091526000815290565b60006040518060600160405280604081526020016141706040913990506000600384516002610c459190611e87565b610c4f9190611ee0565b610c5a906004611e52565b6001600160401b03811115610c7157610c71611ef8565b6040519080825280601f01601f191660200182016040528015610c9b576020820181803683370190505b509050600182016020820185865187015b80821015610d07576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050610cac565b5050600386510660018114610d235760028114610d3657610d3e565b603d6001830353603d6002830353610d3e565b603d60018303535b509195945050505050565b600080610100610d5e60f887901c60016120fa565b610d69906064612124565b610d739190612152565b63ffffffff1690506064610d878585611ec9565b610d919083611e52565b610d9b9190611ee0565b610da59085611e87565b95945050505050565b6060610dbe61018f8660c8611e52565b83608001518015610dcd575085155b610e0857604051806040016040528060198152602001781e33903334b63a32b91e93bab9361411b9b430b237bb94939f60391b815250610e39565b604051806040016040528060178152602001761e33903334b63a32b91e93bab9361411b3b637bb94939f60491b8152505b604051602001610e4a9291906121fd565b60408051601f1981840301815282825260208301879052925060009101604051602081830303815290604052805190602001208660208110610e8e57610e8e611d3d565b604086015191901a9150600090610ea790618ca0611ee0565b905060005b8560400151811015610f46576000610ec68660018b611577565b905084610f0f87868a600001516005610edf9190611e87565b6064610eeb8989611e52565b610ef59190611ee0565b610efe8d611638565b610f09906005611e87565b87611693565b604051602001610f20929190611d75565b604051602081830303815290604052945050600281610f3f9190611e87565b9050610eac565b5082610f5661018f8960c8611e52565b86608001518015610f65575088155b610fa057604051806040016040528060198152602001781e33903334b63a32b91e93bab9361411b9b430b237bb94939f60391b815250610fd1565b604051806040016040528060178152602001761e33903334b63a32b91e93bab9361411b3b637bb94939f60491b8152505b604051602001610fe39392919061221f565b60408051601f19818403018152919052925060015b856040015181101561108d5760006110128660028b611577565b905084611056878660058b6000015161102b9190611ec9565b60646110378989611e52565b6110419190611ee0565b600561104c8e611638565b610f099190611ec9565b604051602001611067929190611d75565b6040516020818303038152906040529450506002816110869190611e87565b9050610ff8565b508260405160200161109f91906122df565b60405160208183030381529060405292505050949350505050565b606060006110cb8460000151610af7565b6110d88560200151610af7565b6040516020016110e9929190611d75565b604051602081830303815290604052905080611112856000015186604001518760600151611937565b61113586602001518760400151601e89606001516111309190611ec9565b611937565b61114361018f8760c8611e52565b61114c89610af7565b6003896101000151600381111561116557611165611e71565b1461117b576111768960008a611577565b61119a565b60405160200161118a9061230b565b6040516020818303038152906040525b60038a610100015160038111156111b3576111b3611e71565b146111d95760405180604001604052806003815260200162060e0f60eb1b8152506111f7565b6040518060400160405280600481526020016306260e0f60e31b8152505b60038b6101000151600381111561121057611210611e71565b1461122e576112298b60e00151601961018f9190611e87565b61124b565b6040518060400160405280600381526020016203130360ec1b8152505b60038c6101000151600381111561126457611264611e71565b1461128e578860405160200161127a9190612336565b6040516020818303038152906040526112ad565b60405160200161129d9061236a565b6040516020818303038152906040525b6040516020016112c599989796959493929190612421565b6040516020818303038152906040529150509392505050565b6112e6611b78565b506040805160808101825260008152600f6020820152603c918101919091526078606082015290565b611317611b96565b61131f611b96565b6040805160c081018252600a60808201908152692130b9b29021b7b637b960b11b60a083015281528151808301835260068152654c6576656c7360d01b6020828101919091528083019190915282518084018452601081526f2130b1b5b3b937bab7321021b7b637b960811b81830152828401528251808401909352600883526726baba30ba34b7b760c11b9083015260608101919091528351519092506113c690610af7565b815260e08301516113d690610af7565b602082015261014083015161140757604051806040016040528060048152602001634e6f6e6560e01b815250611426565b6040518060400160405280600581526020016421b7b637b960d91b8152505b6040820152611433611966565b836101200151600381111561144a5761144a611e71565b6004811061145a5761145a611d3d565b602002015160608201529092909150565b606060405160200161147c906125da565b604051602081830303815290604052905060005b61149c60016004611ec9565b81101561150857818482600481106114b6576114b6611d3d565b60200201518483600481106114cd576114cd611d3d565b60200201516040516020016114e493929190612635565b6040516020818303038152906040529150808061150090611da3565b915050611490565b50808361151760016004611ec9565b6004811061152757611527611d3d565b60200201518361153960016004611ec9565b6004811061154957611549611d3d565b602002015160405160200161156093929190612695565b604051602081830303815290604052905092915050565b606060008360011461158d578460200151611590565b84515b905061159a6112de565b8560c0015160038111156115b0576115b0611e71565b600481106115c0576115c0611d3d565b602002015160ff168560a00151846115d89190611eb5565b6115e29190611e52565b6115ec9082611e87565b90506000856080015161160357856060015161161d565b61160e846007611e52565b866060015161161d9190611e87565b905061162e82876040015183611937565b9695505050505050565b60008082604001516064846000015160026116539190611e52565b61165f9061013a611e52565b6116699190611ee0565b6116739190611ee0565b90508260600151811061168a57826060015161168c565b805b9392505050565b606060558660ff16101561176e576116aa85610af7565b6116b384610af7565b600289610100015160038111156116cc576116cc611e71565b14806116ee5750600389610100015160038111156116ec576116ec611e71565b145b6117135760405180604001604052806003815260200162060e0f60eb1b815250611731565b6040518060400160405280600481526020016306260e0f60e31b8152505b61173b8a86611a00565b61174488610af7565b604051602001611758959493929190612750565b604051602081830303815290604052905061162e565b60aa8660ff1610156118535761178385610af7565b61179d6064611793866050611e52565b61018f9190611ee0565b6117ad6064611793876096611e52565b60028a610100015160038111156117c6576117c6611e71565b14806117e8575060038a610100015160038111156117e6576117e6611e71565b145b61180d5760405180604001604052806003815260200162060e0f60eb1b81525061182b565b6040518060400160405280600481526020016306260e0f60e31b8152505b6118358b87611a00565b61183e89610af7565b604051602001611758969594939291906127fe565b600060b4611862856064611e52565b61186c9190611ee0565b90506118c36002896101000151600381111561188a5761188a611e71565b14806118ac5750600389610100015160038111156118aa576118aa611e71565b145b6118b7576000610af7565b61018f826103e8611ee0565b6040516020016118d391906128ae565b6040516020818303038152906040526118ec8985611a00565b6118f587610af7565b6118fe89610af7565b61190785610af7565b60405160200161191b9594939291906128f1565b6040516020818303038152906040529150509695505050505050565b606061194284610af7565b61194b84610af7565b61195484610af7565b604051602001610a5e93929190612a30565b61196e611b96565b506040805160c081018252600460808201908152634e6f6e6560e01b60a0830152815281518083018352600f81526e42696f6c756d696e657363656e636560881b602082810191909152808301919091528251808401845260058152645665696e7360d81b818301528284015282518084019093526006835265416c62696e6f60d01b90830152606081019190915290565b606060038361010001516003811115611a1b57611a1b611e71565b14611a265781611a45565b604051602001611a359061230b565b6040516020818303038152906040525b60038461010001516003811115611a5e57611a5e611e71565b14611a695782611a88565b604051602001611a789061236a565b6040516020818303038152906040525b611a9461018f86611aa6565b60405160200161156093929190612ad7565b60008060405180608001604052808460e00151815260200160328152602001601e815260200160648152509050808361010001516003811115611aeb57611aeb611e71565b60048110611afb57611afb611d3d565b60200201519392505050565b604051806101600160405280611b1b611bbd565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006003811115611b6b57611b6b611e71565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180608001604052806004905b6060815260200190600190039081611ba55790505090565b604051806101200160405280600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160006003811115611c0857611c08611e71565b81526020016000815260200160006003811115611c2757611c27611e71565b905290565b8035610722565b60008060408385031215611c4957611c49600080fd5b6000611c558585611c2c565b9250506020611c6685828601611c2c565b9150509250929050565b60005b83811015611c8b578181015183820152602001611c73565b83811115611c9a576000848401525b50505050565b6000611caa825190565b808452602084019350611cc1818560208601611c70565b601f01601f19169290920192915050565b60608082528101611ce38186611ca0565b90508181036020830152611cf78185611ca0565b90508181036040830152610da58184611ca0565b600060208284031215611d2057611d20600080fd5b6000610a928484611c2c565b6020808252810161168c8184611ca0565b634e487b7160e01b600052603260045260246000fd5b6000611d5d825190565b611d6b818560208601611c70565b9290920192915050565b6000611d818285611d53565b9150610a928284611d53565b634e487b7160e01b600052601160045260246000fd5b60006000198203611db657611db6611d8d565b5060010190565b630d0e6d8560e31b815260005b5060040190565b672c3830252c36302560c01b815260005b5060080190565b6000611df58286611d53565b9150611e0082611dbd565b9150611e0c8285611d53565b9150611e1782611dd1565b9150610da58284611d53565b7919185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60321b8152601a01600061168c8284611d53565b6000816000190483118215151615611e6c57611e6c611d8d565b500290565b634e487b7160e01b600052602160045260246000fd5b60008219821115611e9a57611e9a611d8d565b500190565b634e487b7160e01b600052601260045260246000fd5b600082611ec457611ec4611e9f565b500690565b600082821015611edb57611edb611d8d565b500390565b6000825b925082611ef357611ef3611e9f565b500490565b634e487b7160e01b600052604160045260246000fd5b630233030360e41b81526000611dca565b600061072282611f0e565b682c3430252c3630252960b81b815260005b5060090190565b6000611f4e82611dbd565b9150611f5a8284611d53565b915061168c82611f2a565b6311a3232360e11b81526000611dca565b600061072282611f65565b600081610722565b61111f60f11b815260005b5060020190565b661e39ba3cb6329f60c91b815260005b5060070190565b671e17b9ba3cb6329f60c11b81526000611de2565b651e17b9bb339f60d11b815260005b5060060190565b7f3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f81527f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b60208201527f3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222060408201527f69643d22746865737667222076696577426f783d222d373030202d373030203160608201526901a181810189a181811160b51b608082015278039ba3cb6329e913130b1b5b3b937bab73216b1b7b637b91d1603d1b608a82015260a30160006120b68286611d53565b91506120c182611f89565b91506120cc82611f9b565b91506120d88285611d53565b91506120e382611fb2565b91506120ef8284611d53565b9150610da582611fc7565b600063ffffffff8216915063ffffffff831692508263ffffffff03821115611e9a57611e9a611d8d565b600063ffffffff8216915063ffffffff831692508163ffffffff0483118215151615611e6c57611e6c611d8d565b600063ffffffff8216915063ffffffff8316611ee4565b7f3c67207374796c653d277472616e73666f726d3a20726f74617465283064656781527f29207363616c652831303025293b20616e696d6174696f6e3a207363616c655560208201527f702038732063756269632d62657a696572282e32342c2e39352c2e362c31292060408201526403137ba34160dd1b606082015260650190565b6336b9939f60e11b81526000611dca565b600061220882612169565b91506122148285611d53565b9150611d81826121ec565b600061222b8286611d53565b7f3c2f673e3c2f673e3c67207374796c653d277472616e73666f726d3a20726f7481527f617465283064656729207363616c652831303025293b20616e696d6174696f6e60208201527f3a207363616c6555702038732063756269632d62657a696572282e32342c2e3960408201526c01a96171b161894903137ba341609d1b6060820152606d0191506122bf8285611d53565b9150611e17826121ec565b671e17b39f1e17b39f60c11b81526000611de2565b60006122eb8284611d53565b915061168c826122ca565b64626c61636b60d81b815260005b5060050190565b6000610722826122f6565b6475726c282360d81b81526000612304565b602960f81b81526000611db6565b600061234182612316565b915061234d8284611d53565b915061168c82612328565b64776869746560d81b81526000612304565b600061072282612358565b61139f60f11b81526000611f94565b6213979f60e91b815260005b5060030190565b68207374726f6b653d2760b81b81526000611f3c565b6f27207374726f6b652d77696474683d2760801b815260005b5060100190565b6f272066696c6c2d6f7061636974793d2760801b815260006123c6565b61252760f01b81526000611f94565b662066696c6c3d2760c81b81526000611fab565b6613979f1e17b39f60c91b81526000611fab565b733c72616469616c4772616469656e742069643d2760601b8152601401600061244a828c611d53565b915061245582612375565b7f3c73746f70206f66667365743d273025272073746f702d636f6c6f723d2700008152601e019150612487828b611d53565b915061249282612384565b7f3c73746f70206f66667365743d2731303025272073746f702d636f6c6f723d27815260200191506124c4828a611d53565b91506124cf82612384565b701e17b930b234b0b623b930b234b2b73a1f60791b815260110191506124f482612169565b91506125008289611d53565b915061250b826121ec565b6a3c636972636c6520723d2760a81b8152600b01915061252b8288611d53565b76272066696c7465723d2775726c2823736861646f77292760481b8152601701915061255682612397565b91506125628287611d53565b915061256d826123ad565b91506125798286611d53565b9150612584826123cd565b91506125908285611d53565b915061259b826123ea565b91506125a6826123f9565b91506125b28284611d53565b91506125bd8261240d565b9b9a5050505050505050505050565b605b60f81b81526000611db6565b6000610722826125cc565b6e3d913a3930b4ba2fba3cb832911d1160891b8152600f0190565b61088b60f21b81526000611f94565b68113b30b63ab2911d1160b91b81526000611f3c565b62089f4b60ea1b81526000612390565b60006126418286611d53565b915061264c826125e5565b91506126588285611d53565b915061266382612600565b915061266e8261260f565b915061267a8284611d53565b9150610da582612625565b62227d5d60e81b81526000612390565b60006126a18286611d53565b91506126ac826125e5565b91506126b88285611d53565b91506126c382612600565b91506126ce8261260f565b91506126da8284611d53565b9150610da582612685565b641110391e9160d91b81526000612304565b6f111039ba3937b5b296bbb4b23a341e9160811b815260006123c6565b7a04440e6e8f2d8ca7a44e8e4c2dce6ccdee4da7440e4dee8c2e8ca5602b1b8152601b0190565b673232b3949110179f60c11b81526000611de2565b6b1e31b4b931b6329031bc9e9160a11b8152600c0160006127718288611d53565b915061277c826126e5565b91506127888287611d53565b9150612793826126f7565b915061279f8286611d53565b91506127ab8285611d53565b91506127b682612714565b91506127c28284611d53565b91506127cd8261273b565b979650505050505050565b651110393c1e9160d11b81526000611fd6565b651110393c9e9160d11b81526000611fd6565b6c1e32b63634b839b29031bc9e9160991b8152600d0160006128208289611d53565b915061282b826127d8565b91506128378288611d53565b9150612842826127eb565b915061284e8287611d53565b9150612859826126f7565b91506128658286611d53565b91506128718285611d53565b915061287c82612714565b91506128888284611d53565b91506128938261273b565b98975050505050505050565b610e0f60f31b81526000611f94565b60006128ba8284611d53565b915061168c8261289f565b690e0f05240e6c6c2d8ca560b31b815260005b50600a0190565b64129491179f60d91b81526000612304565b7f3c7061746820643d224d2030203330302043203020333030202d31353020323481527f30202d313730203137302043202d32323020302030202d3330302030202d333060208201527f3020432030202d3330302032323020302031373020313730204320313530203260408201526f1a18101810199818101810199818102d60811b60608201526070016000612987826126f7565b91506129938288611d53565b915061299f8287611d53565b91506129aa82612714565b91506129b68286611d53565b7464656729207472616e736c617465283070782c202d60581b815260150191506129e08285611d53565b91506129eb826128c5565b91506129f78284611d53565b91506127cd826128df565b61016160f51b81526000611f94565b6201296160ed1b81526000612390565b61252960f01b81526000611f94565b6000612a3b82611dbd565b9150612a478286611d53565b9150612a5282612a02565b9150612a5e8285611d53565b9150612a6982612a11565b9150612a758284611d53565b9150610da582612a21565b69111039ba3937b5b29e9160b11b815260006128d8565b6711103334b6361e9160c11b81526000611de2565b6f11103334b63616b7b830b1b4ba3c9e9160811b815260006123c6565b602560f81b81526000611db6565b6000612ae282612a80565b9150612aee8286611d53565b9150612af982612a97565b9150612b058285611d53565b9150612b1082612aac565b9150612b1c8284611d53565b9150610da582612ac956fe2220723d223130222069643d2268696e74223e3c2f636972636c653e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283630646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313230646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323430646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333030646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313530646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323130646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c2f673e3c2f7376673e3c646566733e203c7061747465726e2069643d227061747465726e2d636972636c65732220783d22302220793d2230222077696474683d22383022206865696768743d2233303022207061747465726e556e6974733d227573657253706163654f6e55736522207061747465726e436f6e74656e74556e6974733d227573657253706163654f6e557365223e203c7265637420783d22302220793d2230222077696474683d223130302522206865696768743d2231303025222066696c6c3d2270696e6b222f3e203c7465787420783d22302220793d22302220636c6173733d22686561767922207472616e73666f726d3d22726f7461746528393029223e204d455247453c2f746578743e203c2f7061747465726e3e203c66696c7465722069643d22736861646f77222020783d222d3430252220793d222d343025222077696474683d223138302522206865696768743d2231383025223e203c6665436f6c6f724d617472697820747970653d226d6174726978222076616c7565733d20202022302030203020302020203020302030203020302020203020302030203020302020203020302030203020302e372030222f3e203c6665476175737369616e426c757220737464446576696174696f6e3d2231382220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c746572202069643d22736861646f772d736d616c6c2220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d223422202f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22626c75724f7574222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c7465722069643d22676c6f772220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220737464446576696174696f6e3d2233302220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c2f646566733e406b65796672616d6573206c6561664c6f6164207b203025207b20726f746174653a20306465673b207d20373025207b20726f746174653a202d31306465673b207d2031303025207b20726f746174653a203336306465673b207d7d20406b65796672616d6573207363616c655570207b203025207b7363616c653a20313025203130253b726f746174653a2034356465673b207d2031303025207b7363616c653a203130302520313030253b726f746174653a20306465673b207d7d406b65796672616d65732077696e64207b203025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d20353025207b7472616e736c6174653a202d31303070783b7363616c653a203935253b207d2031303025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d7d4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222069643d22746865737667222076696577426f783d222d373030202d37303020313430302031343030223e202020203c7374796c653e406b65796672616d6573206c6561664c6f6164207b3025207b726f746174653a206e6f6e653b7d373025207b726f746174653a202d31306465673b7d31303025207b726f746174653a203336306465673b7d7d406b65796672616d6573207363616c655570207b3025207b726f746174653a2034356465673b7363616c653a203130253b7d31303025207b726f746174653a206e6f6e653b7363616c653a20313030253b7d7d406b65796672616d6573207363616c654f7363696c6c617465207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d3570783b7363616c653a203938253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d323070783b7363616c653a20313031253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64526f74617465207b3025207b726f746174653a206e6f6e653b7d353025207b726f746174653a202d2e356465673b7d31303025207b726f746174653a206e6f6e653b7d7d237374656d207b7472616e73666f726d2d6f726967696e3a20626f74746f6d3b7d2e616e74686572207b616e696d6174696f6e3a20616e74686572426c6f6f6d2031307320656173652d696e2d6f75743b7d406b65796672616d657320616e74686572426c6f6f6d207b3025207b7363616c653a203230253b7d353025207b7363616c653a20313230253b7d31303025207b7363616c653a20313030253b7d7d3c2f7374796c653e202020203c646566733e20202020202020203c66696c7465722066696c746572556e6974733d227573657253706163654f6e557365222069643d22736861646f772220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c66654f666673657420726573756c743d226f66664f75742220696e3d22536f75726365416c706861222064783d2230222064793d2230223e3c2f66654f66667365743e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d226f66664f75742220737464446576696174696f6e3d223230223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e20202020202020203c66696c7465722069643d22736861646f772d736d616c6c2220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d2235223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e2020202020202020202020203c2f646566733e202020203c726563742069643d227374656d2220783d222d31302220793d2230222077696474683d22303022206865696768743d2232303030222066696c6c3d22677265656e223e3c2f726563743e202020203c672069643d22666c6f77657222207374796c653d22616e696d6174696f6e3a20347320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e672077696e643b223e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f74617465283064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652831383064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f7461746528393064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652832373064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283435646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313335646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323235646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528333135646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c636972636c652066696c6c3d22a2646970667358221220e65c41d49f145c85a1f7e79f4392c165fa303a8bc221e425636b095a46e4dc8c64736f6c634300080f0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063511042b81461003b578063f50ca50914610066575b600080fd5b61004e610049366004611c33565b610086565b60405161005d93929190611cd2565b60405180910390f35b610079610074366004611d0b565b610162565b60405161005d9190611d2c565b6060806060600060405180610440016040528061041d8152602001613c1961041d9139905060006100b787876101fc565b905060006100c482610728565b905060005b815181101561012257838282815181106100e5576100e5611d3d565b60200260200101516040516020016100fe929190611d75565b6040516020818303038152906040529350808061011a90611da3565b9150506100c9565b50600061012e83610914565b905061013c846000836109f0565b610148856001846109f0565b61015185610a76565b965096509650505050509250925092565b60606101d660405180611ae00160405280611ab581526020016141b0611ab5913961019461018f85610a9a565b610af7565b6040518061112001604052806110f18152602001612b286110f191396040516020016101c293929190611de9565b604051602081830303815290604052610bf7565b6040516020016101e69190611e23565b6040516020818303038152906040529050919050565b610204611b07565b60408051602080820186905281830185905282518083038401815260609092019092528051910120600061023784610a9a565b90506001600061026a848361024b81611da3565b94506020811061025d5761025d611d3d565b1a60f81b60326046610d49565b9050600061029c858461027c81611da3565b95506020811061028e5761028e611d3d565b1a60f81b60fa61012c610d49565b905060006102cd86856102ae81611da3565b9650602081106102c0576102c0611d3d565b1a60f81b60026006610d49565b905060006102f187866102df81611da3565b9750602081106102c0576102c0611d3d565b6102fc906002611e52565b90506000600a61032f898861031081611da3565b99506020811061032257610322611d3d565b1a60f81b60006064610d49565b1061033b576000610379565b610368888761034981611da3565b98506020811061035b5761035b611d3d565b1a60f81b60006004610d49565b600381111561037957610379611e71565b90506040518061016001604052806040518061012001604052808a81526020016101686103ca8d8c806103ab90611da3565b9d50602081106103bd576103bd611d3d565b1a60f81b60006014610d49565b6103d58d600a611e87565b6103df9190611e87565b6103e99190611eb5565b8152602001600185600381111561040257610402611e71565b14610439576104348c8b61041581611da3565b9c506020811061042757610427611d3d565b1a60f81b60286050610d49565b61043c565b60645b8152602001888152602001603c89108015610474575060b48c8b61045f81611da3565b9c506020811061047157610471611d3d565b1a105b1515815260200160788c8b61048881611da3565b9c506020811061049a5761049a611d3d565b1a106104d2576104cd8c8b6104ae81611da3565b9c50602081106104c0576104c0611d3d565b1a60f81b60026004610d49565b6104d5565b60015b81526020016104fa8c8b6104e881611da3565b9c506020811061035b5761035b611d3d565b600381111561050b5761050b611e71565b600381111561051c5761051c611e71565b8152602001600185600381111561053557610535611e71565b1461056c576105678c8b61054881611da3565b9c506020811061055a5761055a611d3d565b1a60f81b60326064610d49565b61056f565b60325b815260200184600381111561058657610586611e71565b9052815260208101869052604001846105c28b8a6105a381611da3565b9b50602081106105b5576105b5611d3d565b1a60f81b60506078610d49565b6105cc9088611ec9565b6105d69190611ee0565b81526020018381526020018360041461061b576106168a896105f781611da3565b9a506020811061060957610609611d3d565b1a60f81b60016006610d49565b610648565b6106488a8961062981611da3565b9a506020811061063b5761063b611d3d565b1a60f81b60046006610d49565b815260200161067a8a8961065b81611da3565b9a506020811061066d5761066d611d3d565b1a60f81b609660c8610d49565b81526020016106ac8a8961068d81611da3565b9a506020811061069f5761069f611d3d565b1a60f81b6046605a610d49565b81526020018481526020018988806106c390611da3565b9950602081106106d5576106d5611d3d565b1a81526020018260038111156106ed576106ed611e71565b815260200160326107148b8a61070281611da3565b9b506020811061032257610322611d3d565b109052985050505050505050505b92915050565b60608160e00151600161073b9190611e87565b6001600160401b0381111561075257610752611ef8565b60405190808252806020026020018201604052801561078557816020015b60608152602001906001900390816107705790505b50905060006040518060a001604052808460200151815260200184606001518152602001846060015181526020018460a001518152602001600160038111156107d0576107d0611e71565b85610120015160038111156107e7576107e7611e71565b149052905060005b8360e001518110156108b75761081081856101000151848760000151610dae565b83828151811061082257610822611d3d565b60200260200101819052508360400151826000018181516108439190611ec9565b905250608084015160208301805161085c908390611e87565b905250602082015161087090600290611ee0565b61087b906002611e52565b604083015260c0840151606083015160649161089691611e52565b6108a09190611ee0565b6060830152806108af81611da3565b9150506107ef565b50604083015181516108e4916108cc91611e87565b845160e08601516108df90600190611ec9565b6110ba565b82600184516108f39190611ec9565b8151811061090357610903611d3d565b602002602001018190525050919050565b60606001826101200151600381111561092f5761092f611e71565b03610943576040516020016101e690611f1f565b816101400151156109e157600061016861095b6112de565b845160c00151600381111561097257610972611e71565b6004811061098257610982611d3d565b602002015184515160ff9091169061099b9060b4611e87565b6109a59190611e87565b6109af9190611eb5565b90506109ba81610af7565b6040516020016109ca9190611f43565b604051602081830303815290604052915050919050565b6040516020016101e690611f76565b6060610a4e8284610a1e57604051602001610a0a90611f81565b604051602081830303815290604052610a3b565b60405180610160016040528061013a815260200161403661013a91395b866040516020016101c293929190611fdd565b604051602001610a5e9190611e23565b60405160208183030381529060405290509392505050565b6060600080610a848461130f565b91509150610a92828261146b565b949350505050565b60008082604051602001610ab091815260200190565b60408051808303601f19018152919052805160209091012090506000610168610adf600a84901a84841a611e52565b610ae99190611eb5565b9050610a9261016882611eb5565b606081600003610b1e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610b485780610b3281611da3565b9150610b419050600a83611ee0565b9150610b22565b6000816001600160401b03811115610b6257610b62611ef8565b6040519080825280601f01601f191660200182016040528015610b8c576020820181803683370190505b5090505b8415610a9257610ba1600183611ec9565b9150610bae600a86611eb5565b610bb9906030611e87565b60f81b818381518110610bce57610bce611d3d565b60200101906001600160f81b031916908160001a905350610bf0600a86611ee0565b9450610b90565b60608151600003610c1657505060408051602081019091526000815290565b60006040518060600160405280604081526020016141706040913990506000600384516002610c459190611e87565b610c4f9190611ee0565b610c5a906004611e52565b6001600160401b03811115610c7157610c71611ef8565b6040519080825280601f01601f191660200182016040528015610c9b576020820181803683370190505b509050600182016020820185865187015b80821015610d07576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050610cac565b5050600386510660018114610d235760028114610d3657610d3e565b603d6001830353603d6002830353610d3e565b603d60018303535b509195945050505050565b600080610100610d5e60f887901c60016120fa565b610d69906064612124565b610d739190612152565b63ffffffff1690506064610d878585611ec9565b610d919083611e52565b610d9b9190611ee0565b610da59085611e87565b95945050505050565b6060610dbe61018f8660c8611e52565b83608001518015610dcd575085155b610e0857604051806040016040528060198152602001781e33903334b63a32b91e93bab9361411b9b430b237bb94939f60391b815250610e39565b604051806040016040528060178152602001761e33903334b63a32b91e93bab9361411b3b637bb94939f60491b8152505b604051602001610e4a9291906121fd565b60408051601f1981840301815282825260208301879052925060009101604051602081830303815290604052805190602001208660208110610e8e57610e8e611d3d565b604086015191901a9150600090610ea790618ca0611ee0565b905060005b8560400151811015610f46576000610ec68660018b611577565b905084610f0f87868a600001516005610edf9190611e87565b6064610eeb8989611e52565b610ef59190611ee0565b610efe8d611638565b610f09906005611e87565b87611693565b604051602001610f20929190611d75565b604051602081830303815290604052945050600281610f3f9190611e87565b9050610eac565b5082610f5661018f8960c8611e52565b86608001518015610f65575088155b610fa057604051806040016040528060198152602001781e33903334b63a32b91e93bab9361411b9b430b237bb94939f60391b815250610fd1565b604051806040016040528060178152602001761e33903334b63a32b91e93bab9361411b3b637bb94939f60491b8152505b604051602001610fe39392919061221f565b60408051601f19818403018152919052925060015b856040015181101561108d5760006110128660028b611577565b905084611056878660058b6000015161102b9190611ec9565b60646110378989611e52565b6110419190611ee0565b600561104c8e611638565b610f099190611ec9565b604051602001611067929190611d75565b6040516020818303038152906040529450506002816110869190611e87565b9050610ff8565b508260405160200161109f91906122df565b60405160208183030381529060405292505050949350505050565b606060006110cb8460000151610af7565b6110d88560200151610af7565b6040516020016110e9929190611d75565b604051602081830303815290604052905080611112856000015186604001518760600151611937565b61113586602001518760400151601e89606001516111309190611ec9565b611937565b61114361018f8760c8611e52565b61114c89610af7565b6003896101000151600381111561116557611165611e71565b1461117b576111768960008a611577565b61119a565b60405160200161118a9061230b565b6040516020818303038152906040525b60038a610100015160038111156111b3576111b3611e71565b146111d95760405180604001604052806003815260200162060e0f60eb1b8152506111f7565b6040518060400160405280600481526020016306260e0f60e31b8152505b60038b6101000151600381111561121057611210611e71565b1461122e576112298b60e00151601961018f9190611e87565b61124b565b6040518060400160405280600381526020016203130360ec1b8152505b60038c6101000151600381111561126457611264611e71565b1461128e578860405160200161127a9190612336565b6040516020818303038152906040526112ad565b60405160200161129d9061236a565b6040516020818303038152906040525b6040516020016112c599989796959493929190612421565b6040516020818303038152906040529150509392505050565b6112e6611b78565b506040805160808101825260008152600f6020820152603c918101919091526078606082015290565b611317611b96565b61131f611b96565b6040805160c081018252600a60808201908152692130b9b29021b7b637b960b11b60a083015281528151808301835260068152654c6576656c7360d01b6020828101919091528083019190915282518084018452601081526f2130b1b5b3b937bab7321021b7b637b960811b81830152828401528251808401909352600883526726baba30ba34b7b760c11b9083015260608101919091528351519092506113c690610af7565b815260e08301516113d690610af7565b602082015261014083015161140757604051806040016040528060048152602001634e6f6e6560e01b815250611426565b6040518060400160405280600581526020016421b7b637b960d91b8152505b6040820152611433611966565b836101200151600381111561144a5761144a611e71565b6004811061145a5761145a611d3d565b602002015160608201529092909150565b606060405160200161147c906125da565b604051602081830303815290604052905060005b61149c60016004611ec9565b81101561150857818482600481106114b6576114b6611d3d565b60200201518483600481106114cd576114cd611d3d565b60200201516040516020016114e493929190612635565b6040516020818303038152906040529150808061150090611da3565b915050611490565b50808361151760016004611ec9565b6004811061152757611527611d3d565b60200201518361153960016004611ec9565b6004811061154957611549611d3d565b602002015160405160200161156093929190612695565b604051602081830303815290604052905092915050565b606060008360011461158d578460200151611590565b84515b905061159a6112de565b8560c0015160038111156115b0576115b0611e71565b600481106115c0576115c0611d3d565b602002015160ff168560a00151846115d89190611eb5565b6115e29190611e52565b6115ec9082611e87565b90506000856080015161160357856060015161161d565b61160e846007611e52565b866060015161161d9190611e87565b905061162e82876040015183611937565b9695505050505050565b60008082604001516064846000015160026116539190611e52565b61165f9061013a611e52565b6116699190611ee0565b6116739190611ee0565b90508260600151811061168a57826060015161168c565b805b9392505050565b606060558660ff16101561176e576116aa85610af7565b6116b384610af7565b600289610100015160038111156116cc576116cc611e71565b14806116ee5750600389610100015160038111156116ec576116ec611e71565b145b6117135760405180604001604052806003815260200162060e0f60eb1b815250611731565b6040518060400160405280600481526020016306260e0f60e31b8152505b61173b8a86611a00565b61174488610af7565b604051602001611758959493929190612750565b604051602081830303815290604052905061162e565b60aa8660ff1610156118535761178385610af7565b61179d6064611793866050611e52565b61018f9190611ee0565b6117ad6064611793876096611e52565b60028a610100015160038111156117c6576117c6611e71565b14806117e8575060038a610100015160038111156117e6576117e6611e71565b145b61180d5760405180604001604052806003815260200162060e0f60eb1b81525061182b565b6040518060400160405280600481526020016306260e0f60e31b8152505b6118358b87611a00565b61183e89610af7565b604051602001611758969594939291906127fe565b600060b4611862856064611e52565b61186c9190611ee0565b90506118c36002896101000151600381111561188a5761188a611e71565b14806118ac5750600389610100015160038111156118aa576118aa611e71565b145b6118b7576000610af7565b61018f826103e8611ee0565b6040516020016118d391906128ae565b6040516020818303038152906040526118ec8985611a00565b6118f587610af7565b6118fe89610af7565b61190785610af7565b60405160200161191b9594939291906128f1565b6040516020818303038152906040529150509695505050505050565b606061194284610af7565b61194b84610af7565b61195484610af7565b604051602001610a5e93929190612a30565b61196e611b96565b506040805160c081018252600460808201908152634e6f6e6560e01b60a0830152815281518083018352600f81526e42696f6c756d696e657363656e636560881b602082810191909152808301919091528251808401845260058152645665696e7360d81b818301528284015282518084019093526006835265416c62696e6f60d01b90830152606081019190915290565b606060038361010001516003811115611a1b57611a1b611e71565b14611a265781611a45565b604051602001611a359061230b565b6040516020818303038152906040525b60038461010001516003811115611a5e57611a5e611e71565b14611a695782611a88565b604051602001611a789061236a565b6040516020818303038152906040525b611a9461018f86611aa6565b60405160200161156093929190612ad7565b60008060405180608001604052808460e00151815260200160328152602001601e815260200160648152509050808361010001516003811115611aeb57611aeb611e71565b60048110611afb57611afb611d3d565b60200201519392505050565b604051806101600160405280611b1b611bbd565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006003811115611b6b57611b6b611e71565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180608001604052806004905b6060815260200190600190039081611ba55790505090565b604051806101200160405280600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160006003811115611c0857611c08611e71565b81526020016000815260200160006003811115611c2757611c27611e71565b905290565b8035610722565b60008060408385031215611c4957611c49600080fd5b6000611c558585611c2c565b9250506020611c6685828601611c2c565b9150509250929050565b60005b83811015611c8b578181015183820152602001611c73565b83811115611c9a576000848401525b50505050565b6000611caa825190565b808452602084019350611cc1818560208601611c70565b601f01601f19169290920192915050565b60608082528101611ce38186611ca0565b90508181036020830152611cf78185611ca0565b90508181036040830152610da58184611ca0565b600060208284031215611d2057611d20600080fd5b6000610a928484611c2c565b6020808252810161168c8184611ca0565b634e487b7160e01b600052603260045260246000fd5b6000611d5d825190565b611d6b818560208601611c70565b9290920192915050565b6000611d818285611d53565b9150610a928284611d53565b634e487b7160e01b600052601160045260246000fd5b60006000198203611db657611db6611d8d565b5060010190565b630d0e6d8560e31b815260005b5060040190565b672c3830252c36302560c01b815260005b5060080190565b6000611df58286611d53565b9150611e0082611dbd565b9150611e0c8285611d53565b9150611e1782611dd1565b9150610da58284611d53565b7919185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60321b8152601a01600061168c8284611d53565b6000816000190483118215151615611e6c57611e6c611d8d565b500290565b634e487b7160e01b600052602160045260246000fd5b60008219821115611e9a57611e9a611d8d565b500190565b634e487b7160e01b600052601260045260246000fd5b600082611ec457611ec4611e9f565b500690565b600082821015611edb57611edb611d8d565b500390565b6000825b925082611ef357611ef3611e9f565b500490565b634e487b7160e01b600052604160045260246000fd5b630233030360e41b81526000611dca565b600061072282611f0e565b682c3430252c3630252960b81b815260005b5060090190565b6000611f4e82611dbd565b9150611f5a8284611d53565b915061168c82611f2a565b6311a3232360e11b81526000611dca565b600061072282611f65565b600081610722565b61111f60f11b815260005b5060020190565b661e39ba3cb6329f60c91b815260005b5060070190565b671e17b9ba3cb6329f60c11b81526000611de2565b651e17b9bb339f60d11b815260005b5060060190565b7f3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f81527f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b60208201527f3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222060408201527f69643d22746865737667222076696577426f783d222d373030202d373030203160608201526901a181810189a181811160b51b608082015278039ba3cb6329e913130b1b5b3b937bab73216b1b7b637b91d1603d1b608a82015260a30160006120b68286611d53565b91506120c182611f89565b91506120cc82611f9b565b91506120d88285611d53565b91506120e382611fb2565b91506120ef8284611d53565b9150610da582611fc7565b600063ffffffff8216915063ffffffff831692508263ffffffff03821115611e9a57611e9a611d8d565b600063ffffffff8216915063ffffffff831692508163ffffffff0483118215151615611e6c57611e6c611d8d565b600063ffffffff8216915063ffffffff8316611ee4565b7f3c67207374796c653d277472616e73666f726d3a20726f74617465283064656781527f29207363616c652831303025293b20616e696d6174696f6e3a207363616c655560208201527f702038732063756269632d62657a696572282e32342c2e39352c2e362c31292060408201526403137ba34160dd1b606082015260650190565b6336b9939f60e11b81526000611dca565b600061220882612169565b91506122148285611d53565b9150611d81826121ec565b600061222b8286611d53565b7f3c2f673e3c2f673e3c67207374796c653d277472616e73666f726d3a20726f7481527f617465283064656729207363616c652831303025293b20616e696d6174696f6e60208201527f3a207363616c6555702038732063756269632d62657a696572282e32342c2e3960408201526c01a96171b161894903137ba341609d1b6060820152606d0191506122bf8285611d53565b9150611e17826121ec565b671e17b39f1e17b39f60c11b81526000611de2565b60006122eb8284611d53565b915061168c826122ca565b64626c61636b60d81b815260005b5060050190565b6000610722826122f6565b6475726c282360d81b81526000612304565b602960f81b81526000611db6565b600061234182612316565b915061234d8284611d53565b915061168c82612328565b64776869746560d81b81526000612304565b600061072282612358565b61139f60f11b81526000611f94565b6213979f60e91b815260005b5060030190565b68207374726f6b653d2760b81b81526000611f3c565b6f27207374726f6b652d77696474683d2760801b815260005b5060100190565b6f272066696c6c2d6f7061636974793d2760801b815260006123c6565b61252760f01b81526000611f94565b662066696c6c3d2760c81b81526000611fab565b6613979f1e17b39f60c91b81526000611fab565b733c72616469616c4772616469656e742069643d2760601b8152601401600061244a828c611d53565b915061245582612375565b7f3c73746f70206f66667365743d273025272073746f702d636f6c6f723d2700008152601e019150612487828b611d53565b915061249282612384565b7f3c73746f70206f66667365743d2731303025272073746f702d636f6c6f723d27815260200191506124c4828a611d53565b91506124cf82612384565b701e17b930b234b0b623b930b234b2b73a1f60791b815260110191506124f482612169565b91506125008289611d53565b915061250b826121ec565b6a3c636972636c6520723d2760a81b8152600b01915061252b8288611d53565b76272066696c7465723d2775726c2823736861646f77292760481b8152601701915061255682612397565b91506125628287611d53565b915061256d826123ad565b91506125798286611d53565b9150612584826123cd565b91506125908285611d53565b915061259b826123ea565b91506125a6826123f9565b91506125b28284611d53565b91506125bd8261240d565b9b9a5050505050505050505050565b605b60f81b81526000611db6565b6000610722826125cc565b6e3d913a3930b4ba2fba3cb832911d1160891b8152600f0190565b61088b60f21b81526000611f94565b68113b30b63ab2911d1160b91b81526000611f3c565b62089f4b60ea1b81526000612390565b60006126418286611d53565b915061264c826125e5565b91506126588285611d53565b915061266382612600565b915061266e8261260f565b915061267a8284611d53565b9150610da582612625565b62227d5d60e81b81526000612390565b60006126a18286611d53565b91506126ac826125e5565b91506126b88285611d53565b91506126c382612600565b91506126ce8261260f565b91506126da8284611d53565b9150610da582612685565b641110391e9160d91b81526000612304565b6f111039ba3937b5b296bbb4b23a341e9160811b815260006123c6565b7a04440e6e8f2d8ca7a44e8e4c2dce6ccdee4da7440e4dee8c2e8ca5602b1b8152601b0190565b673232b3949110179f60c11b81526000611de2565b6b1e31b4b931b6329031bc9e9160a11b8152600c0160006127718288611d53565b915061277c826126e5565b91506127888287611d53565b9150612793826126f7565b915061279f8286611d53565b91506127ab8285611d53565b91506127b682612714565b91506127c28284611d53565b91506127cd8261273b565b979650505050505050565b651110393c1e9160d11b81526000611fd6565b651110393c9e9160d11b81526000611fd6565b6c1e32b63634b839b29031bc9e9160991b8152600d0160006128208289611d53565b915061282b826127d8565b91506128378288611d53565b9150612842826127eb565b915061284e8287611d53565b9150612859826126f7565b91506128658286611d53565b91506128718285611d53565b915061287c82612714565b91506128888284611d53565b91506128938261273b565b98975050505050505050565b610e0f60f31b81526000611f94565b60006128ba8284611d53565b915061168c8261289f565b690e0f05240e6c6c2d8ca560b31b815260005b50600a0190565b64129491179f60d91b81526000612304565b7f3c7061746820643d224d2030203330302043203020333030202d31353020323481527f30202d313730203137302043202d32323020302030202d3330302030202d333060208201527f3020432030202d3330302032323020302031373020313730204320313530203260408201526f1a18101810199818101810199818102d60811b60608201526070016000612987826126f7565b91506129938288611d53565b915061299f8287611d53565b91506129aa82612714565b91506129b68286611d53565b7464656729207472616e736c617465283070782c202d60581b815260150191506129e08285611d53565b91506129eb826128c5565b91506129f78284611d53565b91506127cd826128df565b61016160f51b81526000611f94565b6201296160ed1b81526000612390565b61252960f01b81526000611f94565b6000612a3b82611dbd565b9150612a478286611d53565b9150612a5282612a02565b9150612a5e8285611d53565b9150612a6982612a11565b9150612a758284611d53565b9150610da582612a21565b69111039ba3937b5b29e9160b11b815260006128d8565b6711103334b6361e9160c11b81526000611de2565b6f11103334b63616b7b830b1b4ba3c9e9160811b815260006123c6565b602560f81b81526000611db6565b6000612ae282612a80565b9150612aee8286611d53565b9150612af982612a97565b9150612b058285611d53565b9150612b1082612aac565b9150612b1c8284611d53565b9150610da582612ac956fe2220723d223130222069643d2268696e74223e3c2f636972636c653e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283630646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313230646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323430646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333030646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f772d736d616c6c223e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528313530646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323130646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223237222072783d22313522207374796c653d227472616e73666f726d3a20726f7461746528333330646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c2031292030732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c2f673e3c2f7376673e3c646566733e203c7061747465726e2069643d227061747465726e2d636972636c65732220783d22302220793d2230222077696474683d22383022206865696768743d2233303022207061747465726e556e6974733d227573657253706163654f6e55736522207061747465726e436f6e74656e74556e6974733d227573657253706163654f6e557365223e203c7265637420783d22302220793d2230222077696474683d223130302522206865696768743d2231303025222066696c6c3d2270696e6b222f3e203c7465787420783d22302220793d22302220636c6173733d22686561767922207472616e73666f726d3d22726f7461746528393029223e204d455247453c2f746578743e203c2f7061747465726e3e203c66696c7465722069643d22736861646f77222020783d222d3430252220793d222d343025222077696474683d223138302522206865696768743d2231383025223e203c6665436f6c6f724d617472697820747970653d226d6174726978222076616c7565733d20202022302030203020302020203020302030203020302020203020302030203020302020203020302030203020302e372030222f3e203c6665476175737369616e426c757220737464446576696174696f6e3d2231382220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c746572202069643d22736861646f772d736d616c6c2220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d223422202f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22626c75724f7574222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c66696c7465722069643d22676c6f772220783d222d3330252220793d222d333025222077696474683d223136302522206865696768743d2231363025223e203c6665476175737369616e426c757220737464446576696174696f6e3d2233302220726573756c743d22636f6c6f726564426c7572222f3e203c66654d657267653e203c66654d657267654e6f646520696e3d22636f6c6f726564426c7572222f3e203c66654d657267654e6f646520696e3d22536f7572636547726170686963222f3e203c2f66654d657267653e203c2f66696c7465723e203c2f646566733e406b65796672616d6573206c6561664c6f6164207b203025207b20726f746174653a20306465673b207d20373025207b20726f746174653a202d31306465673b207d2031303025207b20726f746174653a203336306465673b207d7d20406b65796672616d6573207363616c655570207b203025207b7363616c653a20313025203130253b726f746174653a2034356465673b207d2031303025207b7363616c653a203130302520313030253b726f746174653a20306465673b207d7d406b65796672616d65732077696e64207b203025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d20353025207b7472616e736c6174653a202d31303070783b7363616c653a203935253b207d2031303025207b7472616e736c6174653a203070783b7363616c653a20313030253b207d7d4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672077696474683d22313030252220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222069643d22746865737667222076696577426f783d222d373030202d37303020313430302031343030223e202020203c7374796c653e406b65796672616d6573206c6561664c6f6164207b3025207b726f746174653a206e6f6e653b7d373025207b726f746174653a202d31306465673b7d31303025207b726f746174653a203336306465673b7d7d406b65796672616d6573207363616c655570207b3025207b726f746174653a2034356465673b7363616c653a203130253b7d31303025207b726f746174653a206e6f6e653b7363616c653a20313030253b7d7d406b65796672616d6573207363616c654f7363696c6c617465207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d3570783b7363616c653a203938253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64207b3025207b7472616e736c6174653a20303b7363616c653a20313030253b7d353025207b7472616e736c6174653a202d323070783b7363616c653a20313031253b7d31303025207b7472616e736c6174653a20303b7363616c653a20313030253b7d7d406b65796672616d65732077696e64526f74617465207b3025207b726f746174653a206e6f6e653b7d353025207b726f746174653a202d2e356465673b7d31303025207b726f746174653a206e6f6e653b7d7d237374656d207b7472616e73666f726d2d6f726967696e3a20626f74746f6d3b7d2e616e74686572207b616e696d6174696f6e3a20616e74686572426c6f6f6d2031307320656173652d696e2d6f75743b7d406b65796672616d657320616e74686572426c6f6f6d207b3025207b7363616c653a203230253b7d353025207b7363616c653a20313230253b7d31303025207b7363616c653a20313030253b7d7d3c2f7374796c653e202020203c646566733e20202020202020203c66696c7465722066696c746572556e6974733d227573657253706163654f6e557365222069643d22736861646f772220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c66654f666673657420726573756c743d226f66664f75742220696e3d22536f75726365416c706861222064783d2230222064793d2230223e3c2f66654f66667365743e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d226f66664f75742220737464446576696174696f6e3d223230223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e20202020202020203c66696c7465722069643d22736861646f772d736d616c6c2220783d222d3530252220793d222d353025222077696474683d223230302522206865696768743d2232303025223e2020202020202020202020203c6665476175737369616e426c757220726573756c743d22626c75724f75742220696e3d22536f75726365416c7068612220737464446576696174696f6e3d2235223e3c2f6665476175737369616e426c75723e2020202020202020202020203c6665426c656e6420696e3d22536f75726365477261706869632220696e323d22626c75724f757422206d6f64653d226e6f726d616c223e3c2f6665426c656e643e20202020202020203c2f66696c7465723e2020202020202020202020203c2f646566733e202020203c726563742069643d227374656d2220783d222d31302220793d2230222077696474683d22303022206865696768743d2232303030222066696c6c3d22677265656e223e3c2f726563743e202020203c672069643d22666c6f77657222207374796c653d22616e696d6174696f6e3a20347320656173652d696e2d6f757420307320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e672077696e643b223e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f74617465283064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652831383064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f7461746528393064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c7061746820643d224d202d302e343737202d3133372e3030362043202d302e343737202d3133372e303036202d36302e313037202d34342e313536202d35312e343436202d302e3336332043202d34362e3731342032332e353636202d32322e3939382035302e38343820312e3338372035302e32363720432032342e3638362034392e3731322034342e3934382032322e3339392034392e353037202d302e34353620432035382e303532202d34332e323933202d302e343737202d3133372e303036202d302e343737202d3133372e303036205a22207374796c653d227472616e73666f726d3a20726f746174652832373064656729207363616c652831293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e33732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e337320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e367320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f706174683e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f746174652830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283930646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313830646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323730646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c672066696c7465723d2275726c2823736861646f7729223e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f74617465283435646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528313335646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528323235646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c656c6c697073652063783d2230222063793d223430222072783d22333022207374796c653d227472616e73666f726d3a20726f7461746528333135646567293b20616e696d6174696f6e3a203130732063756269632d62657a69657228302e32342c20302e39352c20302e362c20312920302e32732031206e6f726d616c20626f74682072756e6e696e67207363616c6555702c20377320656173652d696e2d6f757420302e327320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67206c6561664c6f61642c20347320656173652d696e2d6f75742031302e347320696e66696e697465206e6f726d616c206e6f6e652072756e6e696e67207363616c654f7363696c6c6174653b222066696c6c3d2268736c283132362c203630252c2035302529222066696c6c2d6f7061636974793d22302e3722207374726f6b653d2268736c283132362c203630252c2035302529223e3c2f656c6c697073653e3c2f673e3c636972636c652066696c6c3d22a2646970667358221220e65c41d49f145c85a1f7e79f4392c165fa303a8bc221e425636b095a46e4dc8c64736f6c634300080f0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.