Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 36 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Many Colors ... | 16601609 | 644 days ago | IN | 0 ETH | 0.01015638 | ||||
Add Many Bg Colo... | 16601608 | 644 days ago | IN | 0 ETH | 0.0015158 | ||||
Add Many Backgro... | 16601606 | 644 days ago | IN | 0 ETH | 0.02412653 | ||||
Add Many Backgro... | 16601604 | 644 days ago | IN | 0 ETH | 0.00153546 | ||||
Add Many Colors ... | 16351265 | 679 days ago | IN | 0 ETH | 0.02115375 | ||||
Add Many Backgro... | 16351260 | 679 days ago | IN | 0 ETH | 0.00174572 | ||||
Add Many Backgro... | 16351250 | 679 days ago | IN | 0 ETH | 0.01682182 | ||||
Add Many Bg Colo... | 16351233 | 679 days ago | IN | 0 ETH | 0.00111798 | ||||
Add Many Colors ... | 16120938 | 711 days ago | IN | 0 ETH | 0.01220985 | ||||
Add Many Backgro... | 16120936 | 711 days ago | IN | 0 ETH | 0.01899717 | ||||
Add Many Bg Colo... | 16120933 | 711 days ago | IN | 0 ETH | 0.00126594 | ||||
Add Many Backgro... | 16120929 | 711 days ago | IN | 0 ETH | 0.00235995 | ||||
Add Many Bg Colo... | 16120795 | 711 days ago | IN | 0 ETH | 0.00135056 | ||||
Add Many Backgro... | 16120780 | 711 days ago | IN | 0 ETH | 0.01888371 | ||||
Add Many Colors ... | 16120774 | 711 days ago | IN | 0 ETH | 0.01358757 | ||||
Add Many Mouths | 15850649 | 749 days ago | IN | 0 ETH | 0.00750708 | ||||
Add Many Mouth N... | 15850648 | 749 days ago | IN | 0 ETH | 0.00778448 | ||||
Add Many Heads | 15850644 | 749 days ago | IN | 0 ETH | 0.06763941 | ||||
Add Many Heads | 15850643 | 749 days ago | IN | 0 ETH | 0.20114702 | ||||
Add Many Heads | 15850641 | 749 days ago | IN | 0 ETH | 0.17900218 | ||||
Add Many Head Na... | 15850636 | 749 days ago | IN | 0 ETH | 0.00909019 | ||||
Add Many Head Na... | 15850634 | 749 days ago | IN | 0 ETH | 0.02634282 | ||||
Add Many Head Na... | 15850632 | 749 days ago | IN | 0 ETH | 0.01580769 | ||||
Add Many Eyes Na... | 15850629 | 749 days ago | IN | 0 ETH | 0.01087752 | ||||
Add Many Eyes | 15850625 | 749 days ago | IN | 0 ETH | 0.04598775 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SweepersDescriptor
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import { Strings } from '@openzeppelin/contracts/utils/Strings.sol'; import { ISweepersDescriptor } from './interfaces/ISweepersDescriptor.sol'; import { ISweepersSeeder } from './interfaces/ISweepersSeeder.sol'; import { NFTDescriptor } from './libs/NFTDescriptor.sol'; import { MultiPartRLEToSVG } from './libs/MultiPartRLEToSVG.sol'; contract SweepersDescriptor is ISweepersDescriptor, Ownable { using Strings for uint256; // Whether or not new Sweeper parts can be added bool public override arePartsLocked; // Whether or not `tokenURI` should be returned as a data URI (Default: true) bool public override isDataURIEnabled = true; // Base URI string public override baseURI; // Sweeper Color Palettes (Index => Hex Colors) mapping(uint8 => string[]) public override palettes; mapping(uint256 => uint8) public override bgPalette; // Sweeper Backgrounds (Hex Colors) string[] public override bgColors; // Sweeper Backgrounds (Hex Colors) bytes[] public override backgrounds; // Sweeper Bodies (Custom RLE) bytes[] public override bodies; // Sweeper Accessories (Custom RLE) bytes[] public override accessories; // Sweeper Heads (Custom RLE) bytes[] public override heads; // Sweeper Eyes (Custom RLE) bytes[] public override eyes; // Sweeper Eyes (Custom RLE) bytes[] public override mouths; // Sweeper Backgrounds (Hex Colors) string[] public override backgroundNames; // Sweeper Bodies (Custom RLE) string[] public override bodyNames; // Sweeper Accessories (Custom RLE) string[] public override accessoryNames; // Sweeper Heads (Custom RLE) string[] public override headNames; // Sweeper Eyes (Custom RLE) string[] public override eyesNames; // Sweeper Eyes (Custom RLE) string[] public override mouthNames; /** * @notice Require that the parts have not been locked. */ modifier whenPartsNotLocked() { require(!arePartsLocked, 'Parts are locked'); _; } /** * @notice Get the number of available Sweeper `backgrounds`. */ function backgroundCount() external view override returns (uint256) { return backgrounds.length; } /** * @notice Get the number of available Sweeper `backgrounds`. */ function bgColorsCount() external view override returns (uint256) { return bgColors.length; } /** * @notice Get the number of available Sweeper `bodies`. */ function bodyCount() external view override returns (uint256) { return bodies.length; } /** * @notice Get the number of available Sweeper `accessories`. */ function accessoryCount() external view override returns (uint256) { return accessories.length; } /** * @notice Get the number of available Sweeper `heads`. */ function headCount() external view override returns (uint256) { return heads.length; } /** * @notice Get the number of available Sweeper `eyes`. */ function eyesCount() external view override returns (uint256) { return eyes.length; } /** * @notice Get the number of available Sweeper `mouths`. */ function mouthCount() external view override returns (uint256) { return mouths.length; } /** * @notice Add colors to a color palette. * @dev This function can only be called by the owner. */ function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { require(palettes[paletteIndex].length + newColors.length <= 264, 'Palettes can only hold 265 colors'); for (uint256 i = 0; i < newColors.length; i++) { _addColorToPalette(paletteIndex, newColors[i]); } } /** * @notice Batch add Sweeper backgrounds. * @dev This function can only be called by the owner when not locked. */ function addManyBgColors(string[] calldata _bgColors) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _bgColors.length; i++) { _addBgColor(_bgColors[i]); } } /** * @notice Batch add Sweeper backgrounds. * @dev This function can only be called by the owner when not locked. */ function addManyBackgrounds(bytes[] calldata _backgrounds, uint8 _paletteAdjuster) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _backgrounds.length; i++) { _addBackground(_backgrounds[i], _paletteAdjuster); } } /** * @notice Batch add Sweeper bodies. * @dev This function can only be called by the owner when not locked. */ function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _bodies.length; i++) { _addBody(_bodies[i]); } } /** * @notice Batch add Sweeper accessories. * @dev This function can only be called by the owner when not locked. */ function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _accessories.length; i++) { _addAccessory(_accessories[i]); } } /** * @notice Batch add Sweeper heads. * @dev This function can only be called by the owner when not locked. */ function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _heads.length; i++) { _addHead(_heads[i]); } } /** * @notice Batch add Sweeper eyes. * @dev This function can only be called by the owner when not locked. */ function addManyEyes(bytes[] calldata _eyes) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _eyes.length; i++) { _addEyes(_eyes[i]); } } /** * @notice Batch add Sweeper mouths. * @dev This function can only be called by the owner when not locked. */ function addManyMouths(bytes[] calldata _mouths) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _mouths.length; i++) { _addMouth(_mouths[i]); } } /** * @notice Batch add Sweeper background names. * @dev This function can only be called by the owner when not locked. */ function addManyBackgroundNames(string[] calldata _backgroundNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _backgroundNames.length; i++) { _addBackgroundName(_backgroundNames[i]); } } /** * @notice Batch add Sweeper body names. * @dev This function can only be called by the owner when not locked. */ function addManyBodyNames(string[] calldata _bodyNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _bodyNames.length; i++) { _addBodyName(_bodyNames[i]); } } /** * @notice Batch add Sweeper accessory names. * @dev This function can only be called by the owner when not locked. */ function addManyAccessoryNames(string[] calldata _accessoryNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _accessoryNames.length; i++) { _addAccessoryName(_accessoryNames[i]); } } /** * @notice Batch add Sweeper head names. * @dev This function can only be called by the owner when not locked. */ function addManyHeadNames(string[] calldata _headNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _headNames.length; i++) { _addHeadName(_headNames[i]); } } /** * @notice Batch add Sweeper eyes names. * @dev This function can only be called by the owner when not locked. */ function addManyEyesNames(string[] calldata _eyesNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _eyesNames.length; i++) { _addEyesName(_eyesNames[i]); } } /** * @notice Batch add Sweeper mouth names. * @dev This function can only be called by the owner when not locked. */ function addManyMouthNames(string[] calldata _mouthNames) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _mouthNames.length; i++) { _addMouthName(_mouthNames[i]); } } /** * @notice Add a single color to a color palette. * @dev This function can only be called by the owner. */ function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); _addColorToPalette(_paletteIndex, _color); } /** * @notice Add a Sweeper background. * @dev This function can only be called by the owner when not locked. */ function addBgColor(string calldata _bgColor) external override onlyOwner whenPartsNotLocked { _addBgColor(_bgColor); } /** * @notice Add a Sweeper background. * @dev This function can only be called by the owner when not locked. */ function addBackground(bytes calldata _background, uint8 _paletteAdjuster) external override onlyOwner whenPartsNotLocked { _addBackground(_background, _paletteAdjuster); } /** * @notice Add a Sweeper body. * @dev This function can only be called by the owner when not locked. */ function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { _addBody(_body); } /** * @notice Add a Sweeper accessory. * @dev This function can only be called by the owner when not locked. */ function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { _addAccessory(_accessory); } /** * @notice Add a Sweeper head. * @dev This function can only be called by the owner when not locked. */ function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { _addHead(_head); } /** * @notice Add Sweeper eyes. * @dev This function can only be called by the owner when not locked. */ function addEyes(bytes calldata _eyes) external override onlyOwner whenPartsNotLocked { _addEyes(_eyes); } /** * @notice Add Sweeper mouth. * @dev This function can only be called by the owner when not locked. */ function addMouth(bytes calldata _mouth) external override onlyOwner whenPartsNotLocked { _addMouth(_mouth); } /** * @notice Add a Sweeper background Name. * @dev This function can only be called by the owner when not locked. */ function addBackgroundName(string calldata _backgroundName) external override onlyOwner whenPartsNotLocked { _addBackgroundName(_backgroundName); } /** * @notice Add a Sweeper body Name. * @dev This function can only be called by the owner when not locked. */ function addBodyName(string calldata _bodyName) external override onlyOwner whenPartsNotLocked { _addBodyName(_bodyName); } /** * @notice Add a Sweeper accessory Name. * @dev This function can only be called by the owner when not locked. */ function addAccessoryName(string calldata _accessoryName) external override onlyOwner whenPartsNotLocked { _addAccessoryName(_accessoryName); } /** * @notice Add a Sweeper head Name. * @dev This function can only be called by the owner when not locked. */ function addHeadName(string calldata _headName) external override onlyOwner whenPartsNotLocked { _addHeadName(_headName); } /** * @notice Add Sweeper eyes Name. * @dev This function can only be called by the owner when not locked. */ function addEyesName(string calldata _eyesName) external override onlyOwner whenPartsNotLocked { _addEyesName(_eyesName); } /** * @notice Add Sweeper mouth Name. * @dev This function can only be called by the owner when not locked. */ function addMouthName(string calldata _mouthName) external override onlyOwner whenPartsNotLocked { _addMouthName(_mouthName); } /** * @notice Lock all Sweeper parts. * @dev This cannot be reversed and can only be called by the owner when not locked. */ function lockParts() external override onlyOwner whenPartsNotLocked { arePartsLocked = true; emit PartsLocked(); } /** * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI * or an HTTP URL. * @dev This can only be called by the owner. */ function toggleDataURIEnabled() external override onlyOwner { bool enabled = !isDataURIEnabled; isDataURIEnabled = enabled; emit DataURIToggled(enabled); } /** * @notice Set the base URI for all token IDs. It is automatically * added as a prefix to the value returned in {tokenURI}, or to the * token ID if {tokenURI} is empty. * @dev This can only be called by the owner. */ function setBaseURI(string calldata _baseURI) external override onlyOwner { baseURI = _baseURI; emit BaseURIUpdated(_baseURI); } /** * @notice Given a token ID and seed, construct a token URI for an official Sweepers Treasury sweeper. * @dev The returned value may be a base64 encoded data URI or an API URL. */ function tokenURI(uint256 tokenId, ISweepersSeeder.Seed memory seed) external view override returns (string memory) { if (isDataURIEnabled) { return dataURI(tokenId, seed); } return string(abi.encodePacked(baseURI, tokenId.toString())); } /** * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Sweepers Treasury sweeper. */ function dataURI(uint256 tokenId, ISweepersSeeder.Seed memory seed) public view override returns (string memory) { string memory sweeperId = tokenId.toString(); string memory name = string(abi.encodePacked('Sweeper ', sweeperId)); string memory description = string(abi.encodePacked('Sweeper ', sweeperId, ' is a member of the Sweepers Treasury')); return genericDataURI(name, description, seed); } /** * @notice Given a name, description, and seed, construct a base64 encoded data URI. */ function genericDataURI( string memory name, string memory description, ISweepersSeeder.Seed memory seed ) public view override returns (string memory) { NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ name: name, description: description, parts: _getPartsForSeed(seed), background: bgColors[seed.background], names: _getAttributesForSeed(seed), bgPaletteAdj: bgPalette[seed.background] }); return NFTDescriptor.constructTokenURI(params, palettes); } /** * @notice Given a seed, construct a base64 encoded SVG image. */ function generateSVGImage(ISweepersSeeder.Seed memory seed) external view override returns (string memory) { MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ parts: _getPartsForSeed(seed), background: bgColors[seed.background], bgPaletteAdj: bgPalette[seed.background] }); return NFTDescriptor.generateSVGImage(params, palettes); } /** * @notice Add a single color to a color palette. */ function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { palettes[_paletteIndex].push(_color); } /** * @notice Add a Sweeper background. */ function _addBgColor(string calldata _bgColor) internal { bgColors.push(_bgColor); } /** * @notice Add a Sweeper background. */ function _addBackground(bytes calldata _background, uint8 paletteAdjuster) internal { backgrounds.push(_background); uint256 index = backgrounds.length - 1; bgPalette[index] = paletteAdjuster; } /** * @notice Add a Sweeper body. */ function _addBody(bytes calldata _body) internal { bodies.push(_body); } /** * @notice Add a Sweeper accessory. */ function _addAccessory(bytes calldata _accessory) internal { accessories.push(_accessory); } /** * @notice Add a Sweeper head. */ function _addHead(bytes calldata _head) internal { heads.push(_head); } /** * @notice Add Sweeper eyes. */ function _addEyes(bytes calldata _eyes) internal { eyes.push(_eyes); } /** * @notice Add Sweeper mouth. */ function _addMouth(bytes calldata _mouth) internal { mouths.push(_mouth); } /** * @notice Add a Sweeper background. */ function _addBackgroundName(string calldata _backgroundName) internal { backgroundNames.push(_backgroundName); } /** * @notice Add a Sweeper body. */ function _addBodyName(string calldata _bodyName) internal { bodyNames.push(_bodyName); } /** * @notice Add a Sweeper accessory. */ function _addAccessoryName(string calldata _accessoryName) internal { accessoryNames.push(_accessoryName); } /** * @notice Add a Sweeper head. */ function _addHeadName(string calldata _headName) internal { headNames.push(_headName); } /** * @notice Add Sweeper eyes. */ function _addEyesName(string calldata _eyesName) internal { eyesNames.push(_eyesName); } /** * @notice Add Sweeper mouth. */ function _addMouthName(string calldata _mouthName) internal { mouthNames.push(_mouthName); } /** * @notice Get all Sweeper parts for the passed `seed`. */ function _getPartsForSeed(ISweepersSeeder.Seed memory seed) internal view returns (bytes[] memory) { bytes[] memory _parts = new bytes[](6); _parts[0] = backgrounds[seed.background]; _parts[1] = bodies[seed.body]; _parts[2] = heads[seed.head]; _parts[3] = accessories[seed.accessory]; _parts[4] = eyes[seed.eyes]; _parts[5] = mouths[seed.mouth]; return _parts; } /** * @notice Get all Sweeper attributes for the passed `seed`. */ function _getAttributesForSeed(ISweepersSeeder.Seed memory seed) internal view returns (string[] memory) { string[] memory _attributes = new string[](6); _attributes[0] = backgroundNames[seed.background]; _attributes[1] = bodyNames[seed.body]; _attributes[2] = headNames[seed.head]; _attributes[3] = accessoryNames[seed.accessory]; _attributes[4] = eyesNames[seed.eyes]; _attributes[5] = mouthNames[seed.mouth]; return _attributes; } }
// SPDX-License-Identifier: MIT /// @title A library used to convert multi-part RLE compressed images to SVG pragma solidity ^0.8.6; library MultiPartRLEToSVG { struct SVGParams { bytes[] parts; string background; uint8 bgPaletteAdj; } struct ContentBounds { uint8 top; uint8 right; uint8 bottom; uint8 left; } struct Rect { uint8 length; uint8 colorIndex; } struct DecodedImage { uint8 paletteIndex; ContentBounds bounds; Rect[] rects; } /** * @notice Given RLE image parts and color palettes, merge to generate a single SVG image. */ function generateSVG(SVGParams memory params, mapping(uint8 => string[]) storage palettes) internal view returns (string memory svg) { // prettier-ignore return string( abi.encodePacked( '<svg width="320" height="320" viewBox="0 0 320 320" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges">', '<rect width="100%" height="100%" fill="#', params.background, '" />', _generateSVGRects(params, palettes), '</svg>' ) ); } /** * @notice Given RLE image parts and color palettes, generate SVG rects. */ // prettier-ignore function _generateSVGRects(SVGParams memory params, mapping(uint8 => string[]) storage palettes) private view returns (string memory svg) { string[33] memory lookup = [ '0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '110', '120', '130', '140', '150', '160', '170', '180', '190', '200', '210', '220', '230', '240', '250', '260', '270', '280', '290', '300', '310', '320' ]; string memory rects; for (uint8 p = 0; p < params.parts.length; p++) { DecodedImage memory image = _decodeRLEImage(params.parts[p], p == 0 ? params.bgPaletteAdj : 0); string[] storage palette = palettes[image.paletteIndex]; uint256 currentX = image.bounds.left; uint256 currentY = image.bounds.top; uint256 cursor; string[16] memory buffer; string memory part; for (uint256 i = 0; i < image.rects.length; i++) { Rect memory rect = image.rects[i]; if (rect.colorIndex != 0) { buffer[cursor] = lookup[rect.length]; // width buffer[cursor + 1] = lookup[currentX]; // x buffer[cursor + 2] = lookup[currentY]; // y buffer[cursor + 3] = palette[rect.colorIndex]; // color cursor += 4; if (cursor >= 16) { part = string(abi.encodePacked(part, _getChunk(cursor, buffer))); cursor = 0; } } currentX += rect.length; if (currentX == image.bounds.right) { currentX = image.bounds.left; currentY++; } } if (cursor != 0) { part = string(abi.encodePacked(part, _getChunk(cursor, buffer))); } rects = string(abi.encodePacked(rects, part)); } return rects; } /** * @notice Return a string that consists of all rects in the provided `buffer`. */ // prettier-ignore function _getChunk(uint256 cursor, string[16] memory buffer) private pure returns (string memory) { string memory chunk; for (uint256 i = 0; i < cursor; i += 4) { chunk = string( abi.encodePacked( chunk, '<rect width="', buffer[i], '" height="10" x="', buffer[i + 1], '" y="', buffer[i + 2], '" fill="#', buffer[i + 3], '" />' ) ); } return chunk; } /** * @notice Decode a single RLE compressed image into a `DecodedImage`. */ function _decodeRLEImage(bytes memory image, uint8 paletteAdjuster) private pure returns (DecodedImage memory) { uint8 paletteIndex = uint8(image[0]) + paletteAdjuster; ContentBounds memory bounds = ContentBounds({ top: uint8(image[1]), right: uint8(image[2]), bottom: uint8(image[3]), left: uint8(image[4]) }); uint256 cursor; Rect[] memory rects = new Rect[]((image.length - 5) / 2); for (uint256 i = 5; i < image.length; i += 2) { rects[cursor] = Rect({ length: uint8(image[i]), colorIndex: uint8(image[i + 1]) }); cursor++; } return DecodedImage({ paletteIndex: paletteIndex, bounds: bounds, rects: rects }); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import { Base64 } from 'base64-sol/base64.sol'; import { MultiPartRLEToSVG } from './MultiPartRLEToSVG.sol'; library NFTDescriptor { struct TokenURIParams { string name; string description; bytes[] parts; string background; string[] names; uint8 bgPaletteAdj; } /** * @notice Construct an ERC721 token URI. */ function constructTokenURI(TokenURIParams memory params, mapping(uint8 => string[]) storage palettes) public view returns (string memory) { string memory image = generateSVGImage( MultiPartRLEToSVG.SVGParams({ parts: params.parts, background: params.background, bgPaletteAdj: params.bgPaletteAdj }), palettes ); string memory attributes = generateAttributes(params.names); // prettier-ignore return string( abi.encodePacked( 'data:application/json;base64,', Base64.encode( bytes( abi.encodePacked('{"name":"', params.name, '", "description":"', params.description, '", "image": "', 'data:image/svg+xml;base64,', image, '", "attributes":', attributes, '}') ) ) ) ); } /** * @notice Generate an SVG image for use in the ERC721 token URI. */ function generateSVGImage(MultiPartRLEToSVG.SVGParams memory params, mapping(uint8 => string[]) storage palettes) public view returns (string memory svg) { return Base64.encode(bytes(MultiPartRLEToSVG.generateSVG(params, palettes))); } function generateAttributes(string[] memory _attributes) public view returns (string memory) { string memory traits; traits = string(abi.encodePacked( attributeForTypeAndValue("Background", _attributes[0]),',', attributeForTypeAndValue("Body", _attributes[1]),',', attributeForTypeAndValue("Bristles", _attributes[2]),',', attributeForTypeAndValue("Accessory", _attributes[3]),',', attributeForTypeAndValue("Eyes", _attributes[4]),',', attributeForTypeAndValue("Mouth", _attributes[5]) )); return string(abi.encodePacked( '[', traits, ']' )); } function attributeForTypeAndValue(string memory traitType, string memory value) internal pure returns (string memory) { return string(abi.encodePacked( '{"trait_type":"', traitType, '","value":"', value, '"}' )); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import { ISweepersDescriptor } from './ISweepersDescriptor.sol'; interface ISweepersSeeder { struct Seed { uint48 background; uint48 body; uint48 accessory; uint48 head; uint48 eyes; uint48 mouth; } function generateSeed(uint256 sweeperId, ISweepersDescriptor descriptor) external view returns (Seed memory); }
// SPDX-License-Identifier: MIT /// @title Interface for SweepersDescriptor pragma solidity ^0.8.6; import { ISweepersSeeder } from './ISweepersSeeder.sol'; interface ISweepersDescriptor { event PartsLocked(); event DataURIToggled(bool enabled); event BaseURIUpdated(string baseURI); function arePartsLocked() external returns (bool); function isDataURIEnabled() external returns (bool); function baseURI() external returns (string memory); function palettes(uint8 paletteIndex, uint256 colorIndex) external view returns (string memory); function bgPalette(uint256 index) external view returns (uint8); function bgColors(uint256 index) external view returns (string memory); function backgrounds(uint256 index) external view returns (bytes memory); function bodies(uint256 index) external view returns (bytes memory); function accessories(uint256 index) external view returns (bytes memory); function heads(uint256 index) external view returns (bytes memory); function eyes(uint256 index) external view returns (bytes memory); function mouths(uint256 index) external view returns (bytes memory); function backgroundNames(uint256 index) external view returns (string memory); function bodyNames(uint256 index) external view returns (string memory); function accessoryNames(uint256 index) external view returns (string memory); function headNames(uint256 index) external view returns (string memory); function eyesNames(uint256 index) external view returns (string memory); function mouthNames(uint256 index) external view returns (string memory); function bgColorsCount() external view returns (uint256); function backgroundCount() external view returns (uint256); function bodyCount() external view returns (uint256); function accessoryCount() external view returns (uint256); function headCount() external view returns (uint256); function eyesCount() external view returns (uint256); function mouthCount() external view returns (uint256); function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; function addManyBgColors(string[] calldata bgColors) external; function addManyBackgrounds(bytes[] calldata backgrounds, uint8 _paletteAdjuster) external; function addManyBodies(bytes[] calldata bodies) external; function addManyAccessories(bytes[] calldata accessories) external; function addManyHeads(bytes[] calldata heads) external; function addManyEyes(bytes[] calldata eyes) external; function addManyMouths(bytes[] calldata mouths) external; function addManyBackgroundNames(string[] calldata backgroundNames) external; function addManyBodyNames(string[] calldata bodyNames) external; function addManyAccessoryNames(string[] calldata accessoryNames) external; function addManyHeadNames(string[] calldata headNames) external; function addManyEyesNames(string[] calldata eyesNames) external; function addManyMouthNames(string[] calldata mouthNames) external; function addColorToPalette(uint8 paletteIndex, string calldata color) external; function addBgColor(string calldata bgColor) external; function addBackground(bytes calldata background, uint8 _paletteAdjuster) external; function addBody(bytes calldata body) external; function addAccessory(bytes calldata accessory) external; function addHead(bytes calldata head) external; function addEyes(bytes calldata eyes) external; function addMouth(bytes calldata mouth) external; function addBackgroundName(string calldata backgroundName) external; function addBodyName(string calldata bodyName) external; function addAccessoryName(string calldata accessoryName) external; function addHeadName(string calldata headName) external; function addEyesName(string calldata eyesName) external; function addMouthName(string calldata mouthName) external; function lockParts() external; function toggleDataURIEnabled() external; function setBaseURI(string calldata baseURI) external; function tokenURI(uint256 tokenId, ISweepersSeeder.Seed memory seed) external view returns (string memory); function dataURI(uint256 tokenId, ISweepersSeeder.Seed memory seed) external view returns (string memory); function genericDataURI( string calldata name, string calldata description, ISweepersSeeder.Seed memory seed ) external view returns (string memory); function generateSVGImage(ISweepersSeeder.Seed memory seed) external view returns (string memory); }
// 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 999999 }, "libraries": { "contracts/libs/NFTDescriptor.sol": { "NFTDescriptor": "0xE0F17d4F763E1031E628e4a0E7256247B98E3bc3" } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"DataURIToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"PartsLocked","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"accessories","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accessoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"accessoryNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_accessory","type":"bytes"}],"name":"addAccessory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_accessoryName","type":"string"}],"name":"addAccessoryName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_background","type":"bytes"},{"internalType":"uint8","name":"_paletteAdjuster","type":"uint8"}],"name":"addBackground","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_backgroundName","type":"string"}],"name":"addBackgroundName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_bgColor","type":"string"}],"name":"addBgColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_body","type":"bytes"}],"name":"addBody","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_bodyName","type":"string"}],"name":"addBodyName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_paletteIndex","type":"uint8"},{"internalType":"string","name":"_color","type":"string"}],"name":"addColorToPalette","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_eyes","type":"bytes"}],"name":"addEyes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_eyesName","type":"string"}],"name":"addEyesName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_head","type":"bytes"}],"name":"addHead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_headName","type":"string"}],"name":"addHeadName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_accessories","type":"bytes[]"}],"name":"addManyAccessories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_accessoryNames","type":"string[]"}],"name":"addManyAccessoryNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_backgroundNames","type":"string[]"}],"name":"addManyBackgroundNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_backgrounds","type":"bytes[]"},{"internalType":"uint8","name":"_paletteAdjuster","type":"uint8"}],"name":"addManyBackgrounds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_bgColors","type":"string[]"}],"name":"addManyBgColors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_bodies","type":"bytes[]"}],"name":"addManyBodies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_bodyNames","type":"string[]"}],"name":"addManyBodyNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"paletteIndex","type":"uint8"},{"internalType":"string[]","name":"newColors","type":"string[]"}],"name":"addManyColorsToPalette","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_eyes","type":"bytes[]"}],"name":"addManyEyes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_eyesNames","type":"string[]"}],"name":"addManyEyesNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_headNames","type":"string[]"}],"name":"addManyHeadNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_heads","type":"bytes[]"}],"name":"addManyHeads","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_mouthNames","type":"string[]"}],"name":"addManyMouthNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_mouths","type":"bytes[]"}],"name":"addManyMouths","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_mouth","type":"bytes"}],"name":"addMouth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_mouthName","type":"string"}],"name":"addMouthName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arePartsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backgroundCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"backgroundNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"backgrounds","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bgColors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bgColorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bgPalette","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bodies","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bodyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bodyNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint48","name":"background","type":"uint48"},{"internalType":"uint48","name":"body","type":"uint48"},{"internalType":"uint48","name":"accessory","type":"uint48"},{"internalType":"uint48","name":"head","type":"uint48"},{"internalType":"uint48","name":"eyes","type":"uint48"},{"internalType":"uint48","name":"mouth","type":"uint48"}],"internalType":"struct ISweepersSeeder.Seed","name":"seed","type":"tuple"}],"name":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eyes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eyesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eyesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint48","name":"background","type":"uint48"},{"internalType":"uint48","name":"body","type":"uint48"},{"internalType":"uint48","name":"accessory","type":"uint48"},{"internalType":"uint48","name":"head","type":"uint48"},{"internalType":"uint48","name":"eyes","type":"uint48"},{"internalType":"uint48","name":"mouth","type":"uint48"}],"internalType":"struct ISweepersSeeder.Seed","name":"seed","type":"tuple"}],"name":"generateSVGImage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"uint48","name":"background","type":"uint48"},{"internalType":"uint48","name":"body","type":"uint48"},{"internalType":"uint48","name":"accessory","type":"uint48"},{"internalType":"uint48","name":"head","type":"uint48"},{"internalType":"uint48","name":"eyes","type":"uint48"},{"internalType":"uint48","name":"mouth","type":"uint48"}],"internalType":"struct ISweepersSeeder.Seed","name":"seed","type":"tuple"}],"name":"genericDataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"headCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"headNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"heads","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDataURIEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockParts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mouthCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mouthNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mouths","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"palettes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleDataURIEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint48","name":"background","type":"uint48"},{"internalType":"uint48","name":"body","type":"uint48"},{"internalType":"uint48","name":"accessory","type":"uint48"},{"internalType":"uint48","name":"head","type":"uint48"},{"internalType":"uint48","name":"eyes","type":"uint48"},{"internalType":"uint48","name":"mouth","type":"uint48"}],"internalType":"struct ISweepersSeeder.Seed","name":"seed","type":"tuple"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b1916600160a81b1790553480156200002457600080fd5b50620000303362000036565b62000086565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61423280620000966000396000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c80637ca94210116101ff578063b48f35d21161011a578063dfe8478b116100ad578063f2fde38b1161007c578063f2fde38b1461081e578063f452754714610831578063f9da886314610844578063fc8214ba1461085757600080fd5b8063dfe8478b146107e8578063e2c24605146107f0578063eba8180614610803578063f00946bf1461080b57600080fd5b8063ce2f4f53116100e9578063ce2f4f5314610789578063d089daa8146107af578063d7680f40146107c2578063dce72c23146107d557600080fd5b8063b48f35d214610748578063bd837f241461075b578063cc22f5f01461076e578063cc2aa0911461078157600080fd5b806392d76a1b11610192578063a3053dd511610161578063a3053dd5146106fc578063ab94a4af1461070f578063af8f35b614610722578063b09caf321461073557600080fd5b806392d76a1b146106b05780639a796205146106c35780639ad88642146106d6578063a18f6710146106e957600080fd5b806387f30789116101ce57806387f307891461065a5780638a85a1e8146106625780638da5cb5b1461067557806390f1d5dc1461069d57600080fd5b80637ca94210146106195780637d2a1e201461062c5780638104468c1461063f578063839644da1461064757600080fd5b80634531c0a8116102ef5780636844af7611610282578063773b977111610251578063773b9771146105ab578063778df0b6146105e05780637a34aad3146105f35780637bce0b871461060657600080fd5b80636844af76146105755780636c0360eb14610588578063715018a61461059057806371aaa66b1461059857600080fd5b806355f804b3116102be57806355f804b314610529578063591501051461053c578063598fa9da1461054f5780635a503f131461056257600080fd5b80634531c0a8146104f35780634daebac2146104fb5780634e415566146105035780634e6dcee41461051657600080fd5b8063211a643c116103675780633d96303d116103365780633d96303d146104a757806342638121146104ba578063440b57d2146104cd57806344cee73c146104e057600080fd5b8063211a643c146104665780632715c90e146104795780632a1d07691461048c5780632ae52a951461049457600080fd5b806317b552ab116103a357806317b552ab1461041b578063198dbb121461042e5780631b7afa3c146104415780631da71d711461045357600080fd5b80630475d863146103ca57806304bde4dd146103df5780630584b66214610408575b600080fd5b6103dd6103d8366004613527565b61088c565b005b6103f26103ed366004613569565b61096c565b6040516103ff91906135f0565b60405180910390f35b6103dd610416366004613645565b610a18565b6103dd610429366004613645565b610ab3565b6103dd61043c366004613645565b610b4a565b600a545b6040519081526020016103ff565b6103f2610461366004613569565b610be1565b6103f26104743660046137b6565b610bf1565b6103dd610487366004613645565b610da7565b6103dd610e3e565b6103f26104a2366004613569565b610f33565b6103dd6104b5366004613645565b610f43565b6103f26104c83660046137d2565b610fda565b6103dd6104db366004613527565b611046565b6103f26104ee366004613569565b61111c565b600554610445565b600754610445565b6103dd610511366004613527565b61112c565b6103f2610524366004613569565b611202565b6103dd610537366004613645565b611212565b6103dd61054a366004613810565b611265565b6103f261055d366004613864565b611342565b6103f2610570366004613569565b61137a565b6103f261058336600461392a565b61138a565b6103f261155b565b6103dd611568565b6103dd6105a6366004613645565b61157c565b6000546105d09074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016103ff565b6103dd6105ee366004613645565b611613565b6103dd610601366004613527565b6116aa565b6103dd610614366004613997565b611780565b6103f2610627366004613569565b611818565b6103dd61063a366004613527565b611828565b600954610445565b6103dd6106553660046139cf565b6118fe565b600454610445565b6103dd610670366004613527565b611a00565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ff565b6103f26106ab366004613569565b611ad6565b6103dd6106be366004613645565b611ae6565b6103dd6106d1366004613645565b611b7d565b6103f26106e4366004613569565b611c14565b6103f26106f73660046137d2565b611c24565b6103f261070a366004613569565b611c90565b6103dd61071d366004613527565b611ca0565b6103dd610730366004613527565b611d76565b6103dd610743366004613645565b611e4c565b6103dd610756366004613527565b611ee3565b6103dd610769366004613527565b611fb9565b6103dd61077c366004613527565b61208f565b600854610445565b6000546105d0907501000000000000000000000000000000000000000000900460ff1681565b6103f26107bd366004613569565b612165565b6103f26107d0366004613569565b612175565b6103dd6107e3366004613645565b612185565b6103dd61221c565b6103f26107fe366004613569565b6122a7565b600654610445565b6103dd610819366004613527565b6122b7565b6103dd61082c366004613a22565b61238d565b6103dd61083f366004613645565b612444565b6103dd610852366004613a58565b6124db565b61087a610865366004613569565b60036020526000908152604090205460ff1681565b60405160ff90911681526020016103ff565b610894612590565b60005474010000000000000000000000000000000000000000900460ff161561091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b65640000000000000000000000000000000060448201526064015b60405180910390fd5b60005b818110156109675761095583838381811061093e5761093e613a9e565b90506020028101906109509190613acd565b612611565b8061095f81613b61565b915050610921565b505050565b6005818154811061097c57600080fd5b90600052602060002001600091509050805461099790613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546109c390613b99565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b610a20612590565b60005474010000000000000000000000000000000000000000900460ff1615610aa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261264e565b5050565b610abb612590565b60005474010000000000000000000000000000000000000000900460ff1615610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612611565b610b52612590565b60005474010000000000000000000000000000000000000000900460ff1615610bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261268b565b600e818154811061097c57600080fd5b606060006040518060600160405280610c09856126c8565b81526020016004856000015165ffffffffffff1681548110610c2d57610c2d613a9e565b906000526020600020018054610c4290613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e90613b99565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050509183525050845165ffffffffffff166000908152600360209081526040918290205460ff16920191909152517f66b8c24100000000000000000000000000000000000000000000000000000000815290915073e0f17d4f763e1031e628e4a0e7256247b98e3bc3906366b8c24190610d3d908490600290600401613c41565b600060405180830381865af4158015610d5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610da09190810190613cb1565b9392505050565b610daf612590565b60005474010000000000000000000000000000000000000000900460ff1615610e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612be1565b610e46612590565b60005474010000000000000000000000000000000000000000900460ff1615610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001781556040517f1680ee6d421f70ed6030d2fc4fcb50217a5dd617858d56562b119eca59172e579190a1565b600c818154811061097c57600080fd5b610f4b612590565b60005474010000000000000000000000000000000000000000900460ff1615610fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612c1e565b6000546060907501000000000000000000000000000000000000000000900460ff16156110125761100b8383611c24565b9050611040565b600161101d84612c5b565b60405160200161102e929190613d1f565b60405160208183030381529060405290505b92915050565b61104e612590565b60005474010000000000000000000000000000000000000000900460ff16156110d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761110a8383838181106110f3576110f3613a9e565b90506020028101906111059190613acd565b612d98565b8061111481613b61565b9150506110d6565b6006818154811061097c57600080fd5b611134612590565b60005474010000000000000000000000000000000000000000900460ff16156111b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b81811015610967576111f08383838181106111d9576111d9613a9e565b90506020028101906111eb9190613acd565b612dd5565b806111fa81613b61565b9150506111bc565b600b818154811061097c57600080fd5b61121a612590565b6001611227828483613e12565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8282604051611259929190613f2d565b60405180910390a15050565b61126d612590565b60005474010000000000000000000000000000000000000000900460ff16156112f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8281101561133c5761132a84848381811061131257611312613a9e565b90506020028101906113249190613acd565b84612e12565b8061133481613b61565b9150506112f5565b50505050565b6002602052816000526040600020818154811061135e57600080fd5b9060005260206000200160009150915050805461099790613b99565b6008818154811061097c57600080fd5b606060006040518060c001604052808681526020018581526020016113ae856126c8565b81526020016004856000015165ffffffffffff16815481106113d2576113d2613a9e565b9060005260206000200180546113e790613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461141390613b99565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050815260200161147385612ea6565b8152845165ffffffffffff166000908152600360209081526040918290205460ff16920191909152517fbf1deae200000000000000000000000000000000000000000000000000000000815290915073e0f17d4f763e1031e628e4a0e7256247b98e3bc39063bf1deae2906114ef908490600290600401613f7a565b600060405180830381865af415801561150c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115529190810190613cb1565b95945050505050565b6001805461099790613b99565b611570612590565b61157a6000613308565b565b611584612590565b60005474010000000000000000000000000000000000000000900460ff1615611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612d98565b61161b612590565b60005474010000000000000000000000000000000000000000900460ff16156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261337d565b6116b2612590565b60005474010000000000000000000000000000000000000000900460ff1615611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761176e83838381811061175757611757613a9e565b90506020028101906117699190613acd565b6133ba565b8061177881613b61565b91505061173a565b611788612590565b60005474010000000000000000000000000000000000000000900460ff161561180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610967838383612e12565b6007818154811061097c57600080fd5b611830612590565b60005474010000000000000000000000000000000000000000900460ff16156118b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b81811015610967576118ec8383838181106118d5576118d5613a9e565b90506020028101906118e79190613acd565b61337d565b806118f681613b61565b9150506118b8565b611906612590565b60ff8316600090815260026020526040902054610108906119289083906140a8565b11156119b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50616c65747465732063616e206f6e6c7920686f6c642032363520636f6c6f7260448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610915565b60005b8181101561133c576119ee848484848181106119d7576119d7613a9e565b90506020028101906119e99190613acd565b6133f7565b806119f881613b61565b9150506119b9565b611a08612590565b60005474010000000000000000000000000000000000000000900460ff1615611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611ac4838383818110611aad57611aad613a9e565b9050602002810190611abf9190613acd565b612be1565b80611ace81613b61565b915050611a90565b600a818154811061097c57600080fd5b611aee612590565b60005474010000000000000000000000000000000000000000900460ff1615611b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612dd5565b611b85612590565b60005474010000000000000000000000000000000000000000900460ff1615611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf82826133ba565b6010818154811061097c57600080fd5b60606000611c3184612c5b565b9050600081604051602001611c4691906140bb565b6040516020818303038152906040529050600082604051602001611c6a9190614100565b6040516020818303038152906040529050611c8682828761138a565b9695505050505050565b6009818154811061097c57600080fd5b611ca8612590565b60005474010000000000000000000000000000000000000000900460ff1615611d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611d64838383818110611d4d57611d4d613a9e565b9050602002810190611d5f9190613acd565b612c1e565b80611d6e81613b61565b915050611d30565b611d7e612590565b60005474010000000000000000000000000000000000000000900460ff1615611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611e3a838383818110611e2357611e23613a9e565b9050602002810190611e359190613acd565b613424565b80611e4481613b61565b915050611e06565b611e54612590565b60005474010000000000000000000000000000000000000000900460ff1615611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282613461565b611eeb612590565b60005474010000000000000000000000000000000000000000900460ff1615611f70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611fa7838383818110611f9057611f90613a9e565b9050602002810190611fa29190613acd565b61349e565b80611fb181613b61565b915050611f73565b611fc1612590565b60005474010000000000000000000000000000000000000000900460ff1615612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761207d83838381811061206657612066613a9e565b90506020028101906120789190613acd565b613461565b8061208781613b61565b915050612049565b612097612590565b60005474010000000000000000000000000000000000000000900460ff161561211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761215383838381811061213c5761213c613a9e565b905060200281019061214e9190613acd565b61264e565b8061215d81613b61565b91505061211f565b600f818154811061097c57600080fd5b600d818154811061097c57600080fd5b61218d612590565b60005474010000000000000000000000000000000000000000900460ff1615612212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261349e565b612224612590565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff811675010000000000000000000000000000000000000000009182900460ff1615918202179091556040518181527f360c3d72ee193226275b842f85231c259c934e85459fed80fa68e502ffa9dbde9060200160405180910390a150565b6004818154811061097c57600080fd5b6122bf612590565b60005474010000000000000000000000000000000000000000900460ff1615612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761237b83838381811061236457612364613a9e565b90506020028101906123769190613acd565b61268b565b8061238581613b61565b915050612347565b612395612590565b73ffffffffffffffffffffffffffffffffffffffff8116612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610915565b61244181613308565b50565b61244c612590565b60005474010000000000000000000000000000000000000000900460ff16156124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282613424565b6124e3612590565b60ff8381166000908152600260205260409020541115612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50616c65747465732063616e206f6e6c7920686f6c642032353620636f6c6f7260448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610915565b6109678383836133f7565b60005473ffffffffffffffffffffffffffffffffffffffff16331461157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610915565b600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801610967828483613e12565b600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901610967828483613e12565b600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701610967828483613e12565b60408051600680825260e0820190925260609160009190816020015b60608152602001906001900390816126e45790505090506005836000015165ffffffffffff168154811061271a5761271a613a9e565b90600052602060002001805461272f90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461275b90613b99565b80156127a85780601f1061277d576101008083540402835291602001916127a8565b820191906000526020600020905b81548152906001019060200180831161278b57829003601f168201915b5050505050816000815181106127c0576127c0613a9e565b60200260200101819052506006836020015165ffffffffffff16815481106127ea576127ea613a9e565b9060005260206000200180546127ff90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461282b90613b99565b80156128785780601f1061284d57610100808354040283529160200191612878565b820191906000526020600020905b81548152906001019060200180831161285b57829003601f168201915b50505050508160018151811061289057612890613a9e565b60200260200101819052506008836060015165ffffffffffff16815481106128ba576128ba613a9e565b9060005260206000200180546128cf90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90613b99565b80156129485780601f1061291d57610100808354040283529160200191612948565b820191906000526020600020905b81548152906001019060200180831161292b57829003601f168201915b50505050508160028151811061296057612960613a9e565b60200260200101819052506007836040015165ffffffffffff168154811061298a5761298a613a9e565b90600052602060002001805461299f90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546129cb90613b99565b8015612a185780601f106129ed57610100808354040283529160200191612a18565b820191906000526020600020905b8154815290600101906020018083116129fb57829003601f168201915b505050505081600381518110612a3057612a30613a9e565b60200260200101819052506009836080015165ffffffffffff1681548110612a5a57612a5a613a9e565b906000526020600020018054612a6f90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612a9b90613b99565b8015612ae85780601f10612abd57610100808354040283529160200191612ae8565b820191906000526020600020905b815481529060010190602001808311612acb57829003601f168201915b505050505081600481518110612b0057612b00613a9e565b6020026020010181905250600a8360a0015165ffffffffffff1681548110612b2a57612b2a613a9e565b906000526020600020018054612b3f90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6b90613b99565b8015612bb85780601f10612b8d57610100808354040283529160200191612bb8565b820191906000526020600020905b815481529060010190602001808311612b9b57829003601f168201915b505050505081600581518110612bd057612bd0613a9e565b602090810291909101015292915050565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01610967828483613e12565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01610967828483613e12565b606081600003612c9e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cc85780612cb281613b61565b9150612cc19050600a836141c1565b9150612ca2565b60008167ffffffffffffffff811115612ce357612ce361367b565b6040519080825280601f01601f191660200182016040528015612d0d576020820181803683370190505b5090505b8415612d9057612d226001836141d5565b9150612d2f600a866141e8565b612d3a9060306140a8565b60f81b818381518110612d4f57612d4f613a9e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612d89600a866141c1565b9450612d11565b949350505050565b600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801610967828483613e12565b601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67201610967828483613e12565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001612e4f838583613e12565b50600554600090612e62906001906141d5565b600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9390931692909217909155505050565b60408051600680825260e0820190925260609160009190816020015b6060815260200190600190039081612ec2579050509050600b836000015165ffffffffffff1681548110612ef857612ef8613a9e565b906000526020600020018054612f0d90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612f3990613b99565b8015612f865780601f10612f5b57610100808354040283529160200191612f86565b820191906000526020600020905b815481529060010190602001808311612f6957829003601f168201915b505050505081600081518110612f9e57612f9e613a9e565b6020026020010181905250600c836020015165ffffffffffff1681548110612fc857612fc8613a9e565b906000526020600020018054612fdd90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461300990613b99565b80156130565780601f1061302b57610100808354040283529160200191613056565b820191906000526020600020905b81548152906001019060200180831161303957829003601f168201915b50505050508160018151811061306e5761306e613a9e565b6020026020010181905250600e836060015165ffffffffffff168154811061309857613098613a9e565b9060005260206000200180546130ad90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546130d990613b99565b80156131265780601f106130fb57610100808354040283529160200191613126565b820191906000526020600020905b81548152906001019060200180831161310957829003601f168201915b50505050508160028151811061313e5761313e613a9e565b6020026020010181905250600d836040015165ffffffffffff168154811061316857613168613a9e565b90600052602060002001805461317d90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990613b99565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508160038151811061320e5761320e613a9e565b6020026020010181905250600f836080015165ffffffffffff168154811061323857613238613a9e565b90600052602060002001805461324d90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461327990613b99565b80156132c65780601f1061329b576101008083540402835291602001916132c6565b820191906000526020600020905b8154815290600101906020018083116132a957829003601f168201915b5050505050816004815181106132de576132de613a9e565b602002602001018190525060108360a0015165ffffffffffff1681548110612b2a57612b2a613a9e565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01610967828483613e12565b600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301610967828483613e12565b60ff831660009081526002602090815260408220805460018101825590835291200161133c828483613e12565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb501610967828483613e12565b600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201610967828483613e12565b600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01610967828483613e12565b60008083601f8401126134ed57600080fd5b50813567ffffffffffffffff81111561350557600080fd5b6020830191508360208260051b850101111561352057600080fd5b9250929050565b6000806020838503121561353a57600080fd5b823567ffffffffffffffff81111561355157600080fd5b61355d858286016134db565b90969095509350505050565b60006020828403121561357b57600080fd5b5035919050565b60005b8381101561359d578181015183820152602001613585565b50506000910152565b600081518084526135be816020860160208601613582565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610da060208301846135a6565b60008083601f84011261361557600080fd5b50813567ffffffffffffffff81111561362d57600080fd5b60208301915083602082850101111561352057600080fd5b6000806020838503121561365857600080fd5b823567ffffffffffffffff81111561366f57600080fd5b61355d85828601613603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156136f1576136f161367b565b604052919050565b803565ffffffffffff8116811461370f57600080fd5b919050565b600060c0828403121561372657600080fd5b60405160c0810181811067ffffffffffffffff821117156137495761374961367b565b604052905080613758836136f9565b8152613766602084016136f9565b6020820152613777604084016136f9565b6040820152613788606084016136f9565b6060820152613799608084016136f9565b60808201526137aa60a084016136f9565b60a08201525092915050565b600060c082840312156137c857600080fd5b610da08383613714565b60008060e083850312156137e557600080fd5b823591506137f68460208501613714565b90509250929050565b803560ff8116811461370f57600080fd5b60008060006040848603121561382557600080fd5b833567ffffffffffffffff81111561383c57600080fd5b613848868287016134db565b909450925061385b9050602085016137ff565b90509250925092565b6000806040838503121561387757600080fd5b613880836137ff565b946020939093013593505050565b600067ffffffffffffffff8211156138a8576138a861367b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138e557600080fd5b81356138f86138f38261388e565b6136aa565b81815284602083860101111561390d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000610100848603121561394057600080fd5b833567ffffffffffffffff8082111561395857600080fd5b613964878388016138d4565b9450602086013591508082111561397a57600080fd5b50613987868287016138d4565b92505061385b8560408601613714565b6000806000604084860312156139ac57600080fd5b833567ffffffffffffffff8111156139c357600080fd5b61384886828701613603565b6000806000604084860312156139e457600080fd5b6139ed846137ff565b9250602084013567ffffffffffffffff811115613a0957600080fd5b613a15868287016134db565b9497909650939450505050565b600060208284031215613a3457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610da057600080fd5b600080600060408486031215613a6d57600080fd5b613a76846137ff565b9250602084013567ffffffffffffffff811115613a9257600080fd5b613a1586828701613603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b0257600080fd5b83018035915067ffffffffffffffff821115613b1d57600080fd5b60200191503681900382131561352057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b9257613b92613b32565b5060010190565b600181811c90821680613bad57607f821691505b602082108103613be6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081518084526020808501808196508360051b8101915082860160005b85811015613c34578284038952613c228483516135a6565b98850198935090840190600101613c0a565b5091979650505050505050565b604081526000835160606040840152613c5d60a0840182613bec565b905060208501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0848303016060850152613c9882826135a6565b6040969096015160ff1660808501525050506020015290565b600060208284031215613cc357600080fd5b815167ffffffffffffffff811115613cda57600080fd5b8201601f81018413613ceb57600080fd5b8051613cf96138f38261388e565b818152856020838501011115613d0e57600080fd5b611552826020830160208601613582565b6000808454613d2d81613b99565b60018281168015613d455760018114613d7857613da7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613da7565b8860005260208060002060005b85811015613d9e5781548a820152908401908201613d85565b50505082870194505b505050508351613dbb818360208801613582565b01949350505050565b601f82111561096757600081815260208120601f850160051c81016020861015613deb5750805b601f850160051c820191505b81811015613e0a57828155600101613df7565b505050505050565b67ffffffffffffffff831115613e2a57613e2a61367b565b613e3e83613e388354613b99565b83613dc4565b6000601f841160018114613e905760008515613e5a5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613f26565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613edf5786850135825560209485019460019092019101613ebf565b5086821015613f1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b604081526000835160c06040840152613f976101008401826135a6565b90506020808601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016060870152613fd484836135a6565b93506040880151915080868503016080870152613ff18483613bec565b935060608801519150808685030160a087015261400e84836135a6565b608089015187820390920160c08801528151808252909450908301915082840190600581901b8501840160005b82811015614087577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08783030184526140758286516135a6565b9486019493860193915060010161403b565b5060a0999099015160ff1660e0880152505050909201929092525090919050565b8082018082111561104057611040613b32565b7f53776565706572200000000000000000000000000000000000000000000000008152600082516140f3816008850160208701613582565b9190910160080192915050565b7f5377656570657220000000000000000000000000000000000000000000000000815260008251614138816008850160208701613582565b7f2069732061206d656d626572206f66207468652053776565706572732054726560089390910192830152507f61737572790000000000000000000000000000000000000000000000000000006028820152602d01919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141d0576141d0614192565b500490565b8181038181111561104057611040613b32565b6000826141f7576141f7614192565b50069056fea26469706673582212208790cb9be98dba3d7265a20281e094df3b821b496265c222f55fbc5dbb1699c264736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103c55760003560e01c80637ca94210116101ff578063b48f35d21161011a578063dfe8478b116100ad578063f2fde38b1161007c578063f2fde38b1461081e578063f452754714610831578063f9da886314610844578063fc8214ba1461085757600080fd5b8063dfe8478b146107e8578063e2c24605146107f0578063eba8180614610803578063f00946bf1461080b57600080fd5b8063ce2f4f53116100e9578063ce2f4f5314610789578063d089daa8146107af578063d7680f40146107c2578063dce72c23146107d557600080fd5b8063b48f35d214610748578063bd837f241461075b578063cc22f5f01461076e578063cc2aa0911461078157600080fd5b806392d76a1b11610192578063a3053dd511610161578063a3053dd5146106fc578063ab94a4af1461070f578063af8f35b614610722578063b09caf321461073557600080fd5b806392d76a1b146106b05780639a796205146106c35780639ad88642146106d6578063a18f6710146106e957600080fd5b806387f30789116101ce57806387f307891461065a5780638a85a1e8146106625780638da5cb5b1461067557806390f1d5dc1461069d57600080fd5b80637ca94210146106195780637d2a1e201461062c5780638104468c1461063f578063839644da1461064757600080fd5b80634531c0a8116102ef5780636844af7611610282578063773b977111610251578063773b9771146105ab578063778df0b6146105e05780637a34aad3146105f35780637bce0b871461060657600080fd5b80636844af76146105755780636c0360eb14610588578063715018a61461059057806371aaa66b1461059857600080fd5b806355f804b3116102be57806355f804b314610529578063591501051461053c578063598fa9da1461054f5780635a503f131461056257600080fd5b80634531c0a8146104f35780634daebac2146104fb5780634e415566146105035780634e6dcee41461051657600080fd5b8063211a643c116103675780633d96303d116103365780633d96303d146104a757806342638121146104ba578063440b57d2146104cd57806344cee73c146104e057600080fd5b8063211a643c146104665780632715c90e146104795780632a1d07691461048c5780632ae52a951461049457600080fd5b806317b552ab116103a357806317b552ab1461041b578063198dbb121461042e5780631b7afa3c146104415780631da71d711461045357600080fd5b80630475d863146103ca57806304bde4dd146103df5780630584b66214610408575b600080fd5b6103dd6103d8366004613527565b61088c565b005b6103f26103ed366004613569565b61096c565b6040516103ff91906135f0565b60405180910390f35b6103dd610416366004613645565b610a18565b6103dd610429366004613645565b610ab3565b6103dd61043c366004613645565b610b4a565b600a545b6040519081526020016103ff565b6103f2610461366004613569565b610be1565b6103f26104743660046137b6565b610bf1565b6103dd610487366004613645565b610da7565b6103dd610e3e565b6103f26104a2366004613569565b610f33565b6103dd6104b5366004613645565b610f43565b6103f26104c83660046137d2565b610fda565b6103dd6104db366004613527565b611046565b6103f26104ee366004613569565b61111c565b600554610445565b600754610445565b6103dd610511366004613527565b61112c565b6103f2610524366004613569565b611202565b6103dd610537366004613645565b611212565b6103dd61054a366004613810565b611265565b6103f261055d366004613864565b611342565b6103f2610570366004613569565b61137a565b6103f261058336600461392a565b61138a565b6103f261155b565b6103dd611568565b6103dd6105a6366004613645565b61157c565b6000546105d09074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016103ff565b6103dd6105ee366004613645565b611613565b6103dd610601366004613527565b6116aa565b6103dd610614366004613997565b611780565b6103f2610627366004613569565b611818565b6103dd61063a366004613527565b611828565b600954610445565b6103dd6106553660046139cf565b6118fe565b600454610445565b6103dd610670366004613527565b611a00565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ff565b6103f26106ab366004613569565b611ad6565b6103dd6106be366004613645565b611ae6565b6103dd6106d1366004613645565b611b7d565b6103f26106e4366004613569565b611c14565b6103f26106f73660046137d2565b611c24565b6103f261070a366004613569565b611c90565b6103dd61071d366004613527565b611ca0565b6103dd610730366004613527565b611d76565b6103dd610743366004613645565b611e4c565b6103dd610756366004613527565b611ee3565b6103dd610769366004613527565b611fb9565b6103dd61077c366004613527565b61208f565b600854610445565b6000546105d0907501000000000000000000000000000000000000000000900460ff1681565b6103f26107bd366004613569565b612165565b6103f26107d0366004613569565b612175565b6103dd6107e3366004613645565b612185565b6103dd61221c565b6103f26107fe366004613569565b6122a7565b600654610445565b6103dd610819366004613527565b6122b7565b6103dd61082c366004613a22565b61238d565b6103dd61083f366004613645565b612444565b6103dd610852366004613a58565b6124db565b61087a610865366004613569565b60036020526000908152604090205460ff1681565b60405160ff90911681526020016103ff565b610894612590565b60005474010000000000000000000000000000000000000000900460ff161561091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b65640000000000000000000000000000000060448201526064015b60405180910390fd5b60005b818110156109675761095583838381811061093e5761093e613a9e565b90506020028101906109509190613acd565b612611565b8061095f81613b61565b915050610921565b505050565b6005818154811061097c57600080fd5b90600052602060002001600091509050805461099790613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546109c390613b99565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b505050505081565b610a20612590565b60005474010000000000000000000000000000000000000000900460ff1615610aa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261264e565b5050565b610abb612590565b60005474010000000000000000000000000000000000000000900460ff1615610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612611565b610b52612590565b60005474010000000000000000000000000000000000000000900460ff1615610bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261268b565b600e818154811061097c57600080fd5b606060006040518060600160405280610c09856126c8565b81526020016004856000015165ffffffffffff1681548110610c2d57610c2d613a9e565b906000526020600020018054610c4290613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e90613b99565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050509183525050845165ffffffffffff166000908152600360209081526040918290205460ff16920191909152517f66b8c24100000000000000000000000000000000000000000000000000000000815290915073e0f17d4f763e1031e628e4a0e7256247b98e3bc3906366b8c24190610d3d908490600290600401613c41565b600060405180830381865af4158015610d5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610da09190810190613cb1565b9392505050565b610daf612590565b60005474010000000000000000000000000000000000000000900460ff1615610e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612be1565b610e46612590565b60005474010000000000000000000000000000000000000000900460ff1615610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001781556040517f1680ee6d421f70ed6030d2fc4fcb50217a5dd617858d56562b119eca59172e579190a1565b600c818154811061097c57600080fd5b610f4b612590565b60005474010000000000000000000000000000000000000000900460ff1615610fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612c1e565b6000546060907501000000000000000000000000000000000000000000900460ff16156110125761100b8383611c24565b9050611040565b600161101d84612c5b565b60405160200161102e929190613d1f565b60405160208183030381529060405290505b92915050565b61104e612590565b60005474010000000000000000000000000000000000000000900460ff16156110d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761110a8383838181106110f3576110f3613a9e565b90506020028101906111059190613acd565b612d98565b8061111481613b61565b9150506110d6565b6006818154811061097c57600080fd5b611134612590565b60005474010000000000000000000000000000000000000000900460ff16156111b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b81811015610967576111f08383838181106111d9576111d9613a9e565b90506020028101906111eb9190613acd565b612dd5565b806111fa81613b61565b9150506111bc565b600b818154811061097c57600080fd5b61121a612590565b6001611227828483613e12565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8282604051611259929190613f2d565b60405180910390a15050565b61126d612590565b60005474010000000000000000000000000000000000000000900460ff16156112f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8281101561133c5761132a84848381811061131257611312613a9e565b90506020028101906113249190613acd565b84612e12565b8061133481613b61565b9150506112f5565b50505050565b6002602052816000526040600020818154811061135e57600080fd5b9060005260206000200160009150915050805461099790613b99565b6008818154811061097c57600080fd5b606060006040518060c001604052808681526020018581526020016113ae856126c8565b81526020016004856000015165ffffffffffff16815481106113d2576113d2613a9e565b9060005260206000200180546113e790613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461141390613b99565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050815260200161147385612ea6565b8152845165ffffffffffff166000908152600360209081526040918290205460ff16920191909152517fbf1deae200000000000000000000000000000000000000000000000000000000815290915073e0f17d4f763e1031e628e4a0e7256247b98e3bc39063bf1deae2906114ef908490600290600401613f7a565b600060405180830381865af415801561150c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115529190810190613cb1565b95945050505050565b6001805461099790613b99565b611570612590565b61157a6000613308565b565b611584612590565b60005474010000000000000000000000000000000000000000900460ff1615611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612d98565b61161b612590565b60005474010000000000000000000000000000000000000000900460ff16156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261337d565b6116b2612590565b60005474010000000000000000000000000000000000000000900460ff1615611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761176e83838381811061175757611757613a9e565b90506020028101906117699190613acd565b6133ba565b8061177881613b61565b91505061173a565b611788612590565b60005474010000000000000000000000000000000000000000900460ff161561180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610967838383612e12565b6007818154811061097c57600080fd5b611830612590565b60005474010000000000000000000000000000000000000000900460ff16156118b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b81811015610967576118ec8383838181106118d5576118d5613a9e565b90506020028101906118e79190613acd565b61337d565b806118f681613b61565b9150506118b8565b611906612590565b60ff8316600090815260026020526040902054610108906119289083906140a8565b11156119b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50616c65747465732063616e206f6e6c7920686f6c642032363520636f6c6f7260448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610915565b60005b8181101561133c576119ee848484848181106119d7576119d7613a9e565b90506020028101906119e99190613acd565b6133f7565b806119f881613b61565b9150506119b9565b611a08612590565b60005474010000000000000000000000000000000000000000900460ff1615611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611ac4838383818110611aad57611aad613a9e565b9050602002810190611abf9190613acd565b612be1565b80611ace81613b61565b915050611a90565b600a818154811061097c57600080fd5b611aee612590565b60005474010000000000000000000000000000000000000000900460ff1615611b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282612dd5565b611b85612590565b60005474010000000000000000000000000000000000000000900460ff1615611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf82826133ba565b6010818154811061097c57600080fd5b60606000611c3184612c5b565b9050600081604051602001611c4691906140bb565b6040516020818303038152906040529050600082604051602001611c6a9190614100565b6040516020818303038152906040529050611c8682828761138a565b9695505050505050565b6009818154811061097c57600080fd5b611ca8612590565b60005474010000000000000000000000000000000000000000900460ff1615611d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611d64838383818110611d4d57611d4d613a9e565b9050602002810190611d5f9190613acd565b612c1e565b80611d6e81613b61565b915050611d30565b611d7e612590565b60005474010000000000000000000000000000000000000000900460ff1615611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611e3a838383818110611e2357611e23613a9e565b9050602002810190611e359190613acd565b613424565b80611e4481613b61565b915050611e06565b611e54612590565b60005474010000000000000000000000000000000000000000900460ff1615611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282613461565b611eeb612590565b60005474010000000000000000000000000000000000000000900460ff1615611f70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b8181101561096757611fa7838383818110611f9057611f90613a9e565b9050602002810190611fa29190613acd565b61349e565b80611fb181613b61565b915050611f73565b611fc1612590565b60005474010000000000000000000000000000000000000000900460ff1615612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761207d83838381811061206657612066613a9e565b90506020028101906120789190613acd565b613461565b8061208781613b61565b915050612049565b612097612590565b60005474010000000000000000000000000000000000000000900460ff161561211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761215383838381811061213c5761213c613a9e565b905060200281019061214e9190613acd565b61264e565b8061215d81613b61565b91505061211f565b600f818154811061097c57600080fd5b600d818154811061097c57600080fd5b61218d612590565b60005474010000000000000000000000000000000000000000900460ff1615612212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf828261349e565b612224612590565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff811675010000000000000000000000000000000000000000009182900460ff1615918202179091556040518181527f360c3d72ee193226275b842f85231c259c934e85459fed80fa68e502ffa9dbde9060200160405180910390a150565b6004818154811061097c57600080fd5b6122bf612590565b60005474010000000000000000000000000000000000000000900460ff1615612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b60005b818110156109675761237b83838381811061236457612364613a9e565b90506020028101906123769190613acd565b61268b565b8061238581613b61565b915050612347565b612395612590565b73ffffffffffffffffffffffffffffffffffffffff8116612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610915565b61244181613308565b50565b61244c612590565b60005474010000000000000000000000000000000000000000900460ff16156124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f506172747320617265206c6f636b6564000000000000000000000000000000006044820152606401610915565b610aaf8282613424565b6124e3612590565b60ff8381166000908152600260205260409020541115612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f50616c65747465732063616e206f6e6c7920686f6c642032353620636f6c6f7260448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610915565b6109678383836133f7565b60005473ffffffffffffffffffffffffffffffffffffffff16331461157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610915565b600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801610967828483613e12565b600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901610967828483613e12565b600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701610967828483613e12565b60408051600680825260e0820190925260609160009190816020015b60608152602001906001900390816126e45790505090506005836000015165ffffffffffff168154811061271a5761271a613a9e565b90600052602060002001805461272f90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461275b90613b99565b80156127a85780601f1061277d576101008083540402835291602001916127a8565b820191906000526020600020905b81548152906001019060200180831161278b57829003601f168201915b5050505050816000815181106127c0576127c0613a9e565b60200260200101819052506006836020015165ffffffffffff16815481106127ea576127ea613a9e565b9060005260206000200180546127ff90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461282b90613b99565b80156128785780601f1061284d57610100808354040283529160200191612878565b820191906000526020600020905b81548152906001019060200180831161285b57829003601f168201915b50505050508160018151811061289057612890613a9e565b60200260200101819052506008836060015165ffffffffffff16815481106128ba576128ba613a9e565b9060005260206000200180546128cf90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90613b99565b80156129485780601f1061291d57610100808354040283529160200191612948565b820191906000526020600020905b81548152906001019060200180831161292b57829003601f168201915b50505050508160028151811061296057612960613a9e565b60200260200101819052506007836040015165ffffffffffff168154811061298a5761298a613a9e565b90600052602060002001805461299f90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546129cb90613b99565b8015612a185780601f106129ed57610100808354040283529160200191612a18565b820191906000526020600020905b8154815290600101906020018083116129fb57829003601f168201915b505050505081600381518110612a3057612a30613a9e565b60200260200101819052506009836080015165ffffffffffff1681548110612a5a57612a5a613a9e565b906000526020600020018054612a6f90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612a9b90613b99565b8015612ae85780601f10612abd57610100808354040283529160200191612ae8565b820191906000526020600020905b815481529060010190602001808311612acb57829003601f168201915b505050505081600481518110612b0057612b00613a9e565b6020026020010181905250600a8360a0015165ffffffffffff1681548110612b2a57612b2a613a9e565b906000526020600020018054612b3f90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6b90613b99565b8015612bb85780601f10612b8d57610100808354040283529160200191612bb8565b820191906000526020600020905b815481529060010190602001808311612b9b57829003601f168201915b505050505081600581518110612bd057612bd0613a9e565b602090810291909101015292915050565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01610967828483613e12565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01610967828483613e12565b606081600003612c9e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cc85780612cb281613b61565b9150612cc19050600a836141c1565b9150612ca2565b60008167ffffffffffffffff811115612ce357612ce361367b565b6040519080825280601f01601f191660200182016040528015612d0d576020820181803683370190505b5090505b8415612d9057612d226001836141d5565b9150612d2f600a866141e8565b612d3a9060306140a8565b60f81b818381518110612d4f57612d4f613a9e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612d89600a866141c1565b9450612d11565b949350505050565b600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801610967828483613e12565b601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67201610967828483613e12565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001612e4f838583613e12565b50600554600090612e62906001906141d5565b600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9390931692909217909155505050565b60408051600680825260e0820190925260609160009190816020015b6060815260200190600190039081612ec2579050509050600b836000015165ffffffffffff1681548110612ef857612ef8613a9e565b906000526020600020018054612f0d90613b99565b80601f0160208091040260200160405190810160405280929190818152602001828054612f3990613b99565b8015612f865780601f10612f5b57610100808354040283529160200191612f86565b820191906000526020600020905b815481529060010190602001808311612f6957829003601f168201915b505050505081600081518110612f9e57612f9e613a9e565b6020026020010181905250600c836020015165ffffffffffff1681548110612fc857612fc8613a9e565b906000526020600020018054612fdd90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461300990613b99565b80156130565780601f1061302b57610100808354040283529160200191613056565b820191906000526020600020905b81548152906001019060200180831161303957829003601f168201915b50505050508160018151811061306e5761306e613a9e565b6020026020010181905250600e836060015165ffffffffffff168154811061309857613098613a9e565b9060005260206000200180546130ad90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546130d990613b99565b80156131265780601f106130fb57610100808354040283529160200191613126565b820191906000526020600020905b81548152906001019060200180831161310957829003601f168201915b50505050508160028151811061313e5761313e613a9e565b6020026020010181905250600d836040015165ffffffffffff168154811061316857613168613a9e565b90600052602060002001805461317d90613b99565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990613b99565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508160038151811061320e5761320e613a9e565b6020026020010181905250600f836080015165ffffffffffff168154811061323857613238613a9e565b90600052602060002001805461324d90613b99565b80601f016020809104026020016040519081016040528092919081815260200182805461327990613b99565b80156132c65780601f1061329b576101008083540402835291602001916132c6565b820191906000526020600020905b8154815290600101906020018083116132a957829003601f168201915b5050505050816004815181106132de576132de613a9e565b602002602001018190525060108360a0015165ffffffffffff1681548110612b2a57612b2a613a9e565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01610967828483613e12565b600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301610967828483613e12565b60ff831660009081526002602090815260408220805460018101825590835291200161133c828483613e12565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb501610967828483613e12565b600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201610967828483613e12565b600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01610967828483613e12565b60008083601f8401126134ed57600080fd5b50813567ffffffffffffffff81111561350557600080fd5b6020830191508360208260051b850101111561352057600080fd5b9250929050565b6000806020838503121561353a57600080fd5b823567ffffffffffffffff81111561355157600080fd5b61355d858286016134db565b90969095509350505050565b60006020828403121561357b57600080fd5b5035919050565b60005b8381101561359d578181015183820152602001613585565b50506000910152565b600081518084526135be816020860160208601613582565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610da060208301846135a6565b60008083601f84011261361557600080fd5b50813567ffffffffffffffff81111561362d57600080fd5b60208301915083602082850101111561352057600080fd5b6000806020838503121561365857600080fd5b823567ffffffffffffffff81111561366f57600080fd5b61355d85828601613603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156136f1576136f161367b565b604052919050565b803565ffffffffffff8116811461370f57600080fd5b919050565b600060c0828403121561372657600080fd5b60405160c0810181811067ffffffffffffffff821117156137495761374961367b565b604052905080613758836136f9565b8152613766602084016136f9565b6020820152613777604084016136f9565b6040820152613788606084016136f9565b6060820152613799608084016136f9565b60808201526137aa60a084016136f9565b60a08201525092915050565b600060c082840312156137c857600080fd5b610da08383613714565b60008060e083850312156137e557600080fd5b823591506137f68460208501613714565b90509250929050565b803560ff8116811461370f57600080fd5b60008060006040848603121561382557600080fd5b833567ffffffffffffffff81111561383c57600080fd5b613848868287016134db565b909450925061385b9050602085016137ff565b90509250925092565b6000806040838503121561387757600080fd5b613880836137ff565b946020939093013593505050565b600067ffffffffffffffff8211156138a8576138a861367b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138e557600080fd5b81356138f86138f38261388e565b6136aa565b81815284602083860101111561390d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000610100848603121561394057600080fd5b833567ffffffffffffffff8082111561395857600080fd5b613964878388016138d4565b9450602086013591508082111561397a57600080fd5b50613987868287016138d4565b92505061385b8560408601613714565b6000806000604084860312156139ac57600080fd5b833567ffffffffffffffff8111156139c357600080fd5b61384886828701613603565b6000806000604084860312156139e457600080fd5b6139ed846137ff565b9250602084013567ffffffffffffffff811115613a0957600080fd5b613a15868287016134db565b9497909650939450505050565b600060208284031215613a3457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610da057600080fd5b600080600060408486031215613a6d57600080fd5b613a76846137ff565b9250602084013567ffffffffffffffff811115613a9257600080fd5b613a1586828701613603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b0257600080fd5b83018035915067ffffffffffffffff821115613b1d57600080fd5b60200191503681900382131561352057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b9257613b92613b32565b5060010190565b600181811c90821680613bad57607f821691505b602082108103613be6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081518084526020808501808196508360051b8101915082860160005b85811015613c34578284038952613c228483516135a6565b98850198935090840190600101613c0a565b5091979650505050505050565b604081526000835160606040840152613c5d60a0840182613bec565b905060208501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0848303016060850152613c9882826135a6565b6040969096015160ff1660808501525050506020015290565b600060208284031215613cc357600080fd5b815167ffffffffffffffff811115613cda57600080fd5b8201601f81018413613ceb57600080fd5b8051613cf96138f38261388e565b818152856020838501011115613d0e57600080fd5b611552826020830160208601613582565b6000808454613d2d81613b99565b60018281168015613d455760018114613d7857613da7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613da7565b8860005260208060002060005b85811015613d9e5781548a820152908401908201613d85565b50505082870194505b505050508351613dbb818360208801613582565b01949350505050565b601f82111561096757600081815260208120601f850160051c81016020861015613deb5750805b601f850160051c820191505b81811015613e0a57828155600101613df7565b505050505050565b67ffffffffffffffff831115613e2a57613e2a61367b565b613e3e83613e388354613b99565b83613dc4565b6000601f841160018114613e905760008515613e5a5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613f26565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613edf5786850135825560209485019460019092019101613ebf565b5086821015613f1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b604081526000835160c06040840152613f976101008401826135a6565b90506020808601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016060870152613fd484836135a6565b93506040880151915080868503016080870152613ff18483613bec565b935060608801519150808685030160a087015261400e84836135a6565b608089015187820390920160c08801528151808252909450908301915082840190600581901b8501840160005b82811015614087577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08783030184526140758286516135a6565b9486019493860193915060010161403b565b5060a0999099015160ff1660e0880152505050909201929092525090919050565b8082018082111561104057611040613b32565b7f53776565706572200000000000000000000000000000000000000000000000008152600082516140f3816008850160208701613582565b9190910160080192915050565b7f5377656570657220000000000000000000000000000000000000000000000000815260008251614138816008850160208701613582565b7f2069732061206d656d626572206f66207468652053776565706572732054726560089390910192830152507f61737572790000000000000000000000000000000000000000000000000000006028820152602d01919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141d0576141d0614192565b500490565b8181038181111561104057611040613b32565b6000826141f7576141f7614192565b50069056fea26469706673582212208790cb9be98dba3d7265a20281e094df3b821b496265c222f55fbc5dbb1699c264736f6c63430008110033
Deployed Bytecode Sourcemap
466:19007:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:227;;;;;;:::i;:::-;;:::i;:::-;;1133:35;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11100:159;;;;;;:::i;:::-;;:::i;10068:138::-;;;;;;:::i;:::-;;:::i;11396:135::-;;;;;;:::i;:::-;;:::i;3399:100::-;3479:6;:13;3399:100;;;3179:25:9;;;3167:2;3152:18;3399:100:4;3033:177:9;1820:34:4;;;;;;:::i;:::-;;:::i;15571:420::-;;;;;;:::i;:::-;;:::i;9813:118::-;;;;;;:::i;:::-;;:::i;12795:135::-;;;:::i;1659:34::-;;;;;;:::i;:::-;;:::i;9228:131::-;;;;;;:::i;:::-;;:::i;13909:278::-;;;;;;:::i;:::-;;:::i;6263:203::-;;;;;;:::i;:::-;;:::i;1210:30::-;;;;;;:::i;:::-;;:::i;2276:110::-;2361:11;:18;2276:110;;2849:109;2933:11;:18;2849:109;;8480:224;;;;;;:::i;:::-;;:::i;1577:40::-;;;;;;:::i;:::-;;:::i;13552:149::-;;;;;;:::i;:::-;;:::i;4480:270::-;;;;;;:::i;:::-;;:::i;897:51::-;;;;;;:::i;:::-;;:::i;1363:29::-;;;;;;:::i;:::-;;:::i;14876:606::-;;;;;;:::i;:::-;;:::i;808:30::-;;;:::i;1831:101:0:-;;;:::i;10835:122:4:-;;;;;;:::i;:::-;;:::i;617:35::-;;;;;;;;;;;;;;;8383:14:9;;8376:22;8358:41;;8346:2;8331:18;617:35:4;8218:187:9;11965:135:4;;;;;;:::i;:::-;;:::i;5597:198::-;;;;;;:::i;:::-;;:::i;9497:184::-;;;;;;:::i;:::-;;:::i;1287:35::-;;;;;;:::i;:::-;;:::i;7757:219::-;;;;;;:::i;:::-;;:::i;3219:97::-;3298:4;:11;3219:97;;3626:354;;;;;;:::i;:::-;;:::i;2474:105::-;2557:8;:15;2474:105;;4888:202;;;;;;:::i;:::-;;:::i;1201:85:0:-;1247:7;1273:6;1201:85;;1273:6;;;;9572:74:9;;9560:2;9545:18;1201:85:0;9426:226:9;1500:30:4;;;;;;:::i;:::-;;:::i;12506:139::-;;;;;;:::i;:::-;;:::i;10338:118::-;;;;;;:::i;:::-;;:::i;1968:35::-;;;;;;:::i;:::-;;:::i;14330:435::-;;;;;;:::i;:::-;;:::i;1432:28::-;;;;;;:::i;:::-;;:::i;4123:214::-;;;;;;:::i;:::-;;:::i;7371:244::-;;;;;;:::i;:::-;;:::i;12235:135::-;;;;;;:::i;:::-;;:::i;5931:194::-;;;;;;:::i;:::-;;:::i;8118:219::-;;;;;;:::i;:::-;;:::i;6614:249::-;;;;;;:::i;:::-;;:::i;3040:98::-;3119:5;:12;3040:98;;741:44;;;;;;;;;;;;1894:34;;;;;;:::i;:::-;;:::i;1740:39::-;;;;;;:::i;:::-;;:::i;10586:118::-;;;;;;:::i;:::-;;:::i;13113:184::-;;;:::i;1053:33::-;;;;;;:::i;:::-;;:::i;2662:99::-;2741:6;:13;2662:99;;7005:219;;;;;;:::i;:::-;;:::i;2081:198:0:-;;;;;;:::i;:::-;;:::i;11673:155:4:-;;;;;;:::i;:::-;;:::i;8839:251::-;;;;;;:::i;:::-;;:::i;955:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10709:4:9;10697:17;;;10679:36;;10667:2;10652:18;955:51:4;10537:184:9;5233:227:4;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;;;;;;;;;5354:9:::2;5349:105;5369:23:::0;;::::2;5349:105;;;5413:30;5427:12;;5440:1;5427:15;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5413:13;:30::i;:::-;5394:3:::0;::::2;::::0;::::2;:::i;:::-;;;;5349:105;;;;5233:227:::0;;:::o;1133:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11100:159::-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;11217:35:::2;11236:15;;11217:18;:35::i;:::-;11100:159:::0;;:::o;10068:138::-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;10174:25:::2;10188:10;;10174:13;:25::i;11396:135::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;11501:23:::2;11514:9;;11501:12;:23::i;1820:34::-:0;;;;;;;;;;;;15571:420;15663:13;15688:41;15732:187;;;;;;;;15781:22;15798:4;15781:16;:22::i;:::-;15732:187;;;;15829:8;15838:4;:15;;;15829:25;;;;;;;;;;:::i;:::-;;;;;;;;15732:187;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15732:187:4;;;-1:-1:-1;;15892:15:4;;15882:26;;;;;;:9;15732:187;15882:26;;;;;;;;;;;15732:187;;;;;;15936:48;;;;15688:231;;-1:-1:-1;15936:13:4;;:30;;:48;;15688:231;;15975:8;;15936:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15929:55;15571:420;-1:-1:-1;;;15571:420:4:o;9813:118::-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;9909:15:::2;9918:5;;9909:8;:15::i;12795:135::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;12873:14:::2;:21:::0;;;::::2;::::0;::::2;::::0;;12910:13:::2;::::0;::::2;::::0;12873:14;12910:13:::2;12795:135::o:0;1659:34::-;;;;;;;;;;;;9228:131;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;9331:21:::2;9343:8;;9331:11;:21::i;13909:278::-:0;14039:16;;14010:13;;14039:16;;;;;14035:76;;;14078:22;14086:7;14095:4;14078:7;:22::i;:::-;14071:29;;;;14035:76;14151:7;14160:18;:7;:16;:18::i;:::-;14134:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14120:60;;13909:278;;;;;:::o;6263:203::-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;6374:9:::2;6369:91;6389:18:::0;;::::2;6369:91;;;6428:21;6438:7;;6446:1;6438:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6428:9;:21::i;:::-;6409:3:::0;::::2;::::0;::::2;:::i;:::-;;;;6369:91;;1210:30:::0;;;;;;;;;;;;8480:224;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;8600:9:::2;8595:103;8615:22:::0;;::::2;8595:103;;;8658:29;8672:11;;8684:1;8672:14;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8658:13;:29::i;:::-;8639:3:::0;::::2;::::0;::::2;:::i;:::-;;;;8595:103;;1577:40:::0;;;;;;;;;;;;13552:149;1094:13:0;:11;:13::i;:::-;13636:7:4::1;:18;13646:8:::0;;13636:7;:18:::1;:::i;:::-;;13670:24;13685:8;;13670:24;;;;;;;:::i;:::-;;;;;;;;13552:149:::0;;:::o;4480:270::-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;4625:9:::2;4620:124;4640:23:::0;;::::2;4620:124;;;4684:49;4699:12;;4712:1;4699:15;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4716:16;4684:14;:49::i;:::-;4665:3:::0;::::2;::::0;::::2;:::i;:::-;;;;4620:124;;;;4480:270:::0;;;:::o;897:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1363:29::-;;;;;;;;;;;;14876:606;15041:13;15066:42;15111:298;;;;;;;;15160:4;15111:298;;;;15191:11;15111:298;;;;15223:22;15240:4;15223:16;:22::i;:::-;15111:298;;;;15271:8;15280:4;:15;;;15271:25;;;;;;;;;;:::i;:::-;;;;;;;;15111:298;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15317:27;15339:4;15317:21;:27::i;:::-;15111:298;;15382:15;;15372:26;;;;;;:9;15111:298;15372:26;;;;;;;;;;;15111:298;;;;;;15426:49;;;;15066:343;;-1:-1:-1;15426:13:4;;:31;;:49;;15066:343;;15466:8;;15426:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15419:56;14876:606;-1:-1:-1;;;;;14876:606:4:o;808:30::-;;;;;;;:::i;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;10835:122:4:-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;10933:17:::2;10943:6;;10933:9;:17::i;11965:135::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;12070:23:::2;12083:9;;12070:12;:23::i;5597:198::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;5706:9:::2;5701:88;5721:17:::0;;::::2;5701:88;;;5759:19;5768:6;;5775:1;5768:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5759:8;:19::i;:::-;5740:3:::0;::::2;::::0;::::2;:::i;:::-;;;;5701:88;;9497:184:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;9629:45:::2;9644:11;;9657:16;9629:14;:45::i;1287:35::-:0;;;;;;;;;;;;7757:219;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;7875:9:::2;7870:100;7890:21:::0;;::::2;7870:100;;;7932:27;7945:10;;7956:1;7945:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7932:12;:27::i;:::-;7913:3:::0;::::2;::::0;::::2;:::i;:::-;;;;7870:100;;3626:354:::0;1094:13:0;:11;:13::i;:::-;3753:22:4::1;::::0;::::1;;::::0;;;:8:::1;:22;::::0;;;;:29;3805:3:::1;::::0;3753:48:::1;::::0;3785:9;;3753:48:::1;:::i;:::-;:55;;3745:101;;;::::0;::::1;::::0;;21489:2:9;3745:101:4::1;::::0;::::1;21471:21:9::0;21528:2;21508:18;;;21501:30;21567:34;21547:18;;;21540:62;21638:3;21618:18;;;21611:31;21659:19;;3745:101:4::1;21287:397:9::0;3745:101:4::1;3861:9;3856:118;3876:20:::0;;::::1;3856:118;;;3917:46;3936:12;3950:9;;3960:1;3950:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;3917:18;:46::i;:::-;3898:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3856:118;;4888:202:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;4999:9:::2;4994:90;5014:18:::0;;::::2;4994:90;;;5053:20;5062:7;;5070:1;5062:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5053:8;:20::i;:::-;5034:3:::0;::::2;::::0;::::2;:::i;:::-;;;;4994:90;;1500:30:::0;;;;;;;;;;;;12506:139;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;12613:25:::2;12627:10;;12613:13;:25::i;10338:118::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;10434:15:::2;10443:5;;10434:8;:15::i;1968:35::-:0;;;;;;;;;;;;14330:435;14428:13;14453:23;14479:18;:7;:16;:18::i;:::-;14453:44;;14507:18;14564:9;14535:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;14507:68;;14585:25;14649:9;14620:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;14585:116;;14719:39;14734:4;14740:11;14753:4;14719:14;:39::i;:::-;14712:46;14330:435;-1:-1:-1;;;;;;14330:435:4:o;1432:28::-;;;;;;;;;;;;4123:214;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;4239:9:::2;4234:97;4254:20:::0;;::::2;4234:97;;;4295:25;4307:9;;4317:1;4307:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4295:11;:25::i;:::-;4276:3:::0;::::2;::::0;::::2;:::i;:::-;;;;4234:97;;7371:244:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;7499:9:::2;7494:115;7514:26:::0;;::::2;7494:115;;;7561:37;7579:15;;7595:1;7579:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7561:17;:37::i;:::-;7542:3:::0;::::2;::::0;::::2;:::i;:::-;;;;7494:115;;12235:135:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;12340:23:::2;12353:9;;12340:12;:23::i;5931:194::-:0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;6038:9:::2;6033:86;6053:16:::0;;::::2;6033:86;;;6090:18;6099:5;;6105:1;6099:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6090;:18::i;:::-;6071:3:::0;::::2;::::0;::::2;:::i;:::-;;;;6033:86;;8118:219:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;8236:9:::2;8231:100;8251:21:::0;;::::2;8231:100;;;8293:27;8306:10;;8317:1;8306:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8293:12;:27::i;:::-;8274:3:::0;::::2;::::0;::::2;:::i;:::-;;;;8231:100;;6614:249:::0;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;6744:9:::2;6739:118;6759:27:::0;;::::2;6739:118;;;6807:39;6826:16;;6843:1;6826:19;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6807:18;:39::i;:::-;6788:3:::0;::::2;::::0;::::2;:::i;:::-;;;;6739:118;;1894:34:::0;;;;;;;;;;;;1740:39;;;;;;;;;;;;10586:118;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;10682:15:::2;10691:5;;10682:8;:15::i;13113:184::-:0;1094:13:0;:11;:13::i;:::-;13183:12:4::1;13199:16:::0;;13226:26;;::::1;13199:16:::0;;;;::::1;;;13198:17;13226:26:::0;;::::1;;::::0;;;13267:23:::1;::::0;8358:41:9;;;13267:23:4::1;::::0;8346:2:9;8331:18;13267:23:4::1;;;;;;;13173:124;13113:184::o:0;1053:33::-;;;;;;;;;;;;7005:219;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;7123:9:::2;7118:100;7138:21:::0;;::::2;7118:100;;;7180:27;7193:10;;7204:1;7193:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7180:12;:27::i;:::-;7161:3:::0;::::2;::::0;::::2;:::i;:::-;;;;7118:100;;2081:198:0::0;1094:13;:11;:13::i;:::-;2169:22:::1;::::0;::::1;2161:73;;;::::0;::::1;::::0;;23000:2:9;2161:73:0::1;::::0;::::1;22982:21:9::0;23039:2;23019:18;;;23012:30;23078:34;23058:18;;;23051:62;23149:8;23129:18;;;23122:36;23175:19;;2161:73:0::1;22798:402:9::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;11673:155:4:-;1094:13:0;:11;:13::i;:::-;2135:14:4::1;::::0;;;::::1;;;2134:15;2126:44;;;::::0;::::1;::::0;;10928:2:9;2126:44:4::1;::::0;::::1;10910:21:9::0;10967:2;10947:18;;;10940:30;11006:18;10986;;;10979:46;11042:18;;2126:44:4::1;10726:340:9::0;2126:44:4::1;11788:33:::2;11806:14;;11788:17;:33::i;8839:251::-:0;1094:13:0;:11;:13::i;:::-;8991:3:4::1;8957:23:::0;;::::1;;::::0;;;:8:::1;:23;::::0;;;;:30;:37:::1;;8949:83;;;::::0;::::1;::::0;;23407:2:9;8949:83:4::1;::::0;::::1;23389:21:9::0;23446:2;23426:18;;;23419:30;23485:34;23465:18;;;23458:62;23556:3;23536:18;;;23529:31;23577:19;;8949:83:4::1;23205:397:9::0;8949:83:4::1;9042:41;9061:13;9076:6;;9042:18;:41::i;1359:130:0:-:0;1247:7;1273:6;1422:23;1273:6;719:10:1;1422:23:0;1414:68;;;;;;;23809:2:9;1414:68:0;;;23791:21:9;;;23828:18;;;23821:30;23887:34;23867:18;;;23860:62;23939:18;;1414:68:0;23607:356:9;16849:104:4;16918:11;:28;;;;;;;-1:-1:-1;16918:28:4;;;;;;;16935:10;;16918:28;;:::i;17436:124::-;17516:15;:37;;;;;;;-1:-1:-1;17516:37:4;;;;;;;17537:15;;17516:37;;:::i;17617:100::-;17685:9;:25;;;;;;;-1:-1:-1;17685:25:4;;;;;;;17700:9;;17685:25;;:::i;18453:430::-;18586:14;;;18598:1;18586:14;;;;;;;;;18536;;18562:21;;18586:14;;;;;;;;;;;;;;;;;;;;;18562:38;;18622:11;18634:4;:15;;;18622:28;;;;;;;;;;:::i;:::-;;;;;;;;18610:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18617:1;18610:9;;;;;;;;:::i;:::-;;;;;;:40;;;;18672:6;18679:4;:9;;;18672:17;;;;;;;;;;:::i;:::-;;;;;;;;18660:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18667:1;18660:9;;;;;;;;:::i;:::-;;;;;;:29;;;;18711:5;18717:4;:9;;;18711:16;;;;;;;;;;:::i;:::-;;;;;;;;18699:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18706:1;18699:9;;;;;;;;:::i;:::-;;;;;;:28;;;;18749:11;18761:4;:14;;;18749:27;;;;;;;;;;:::i;:::-;;;;;;;;18737:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18744:1;18737:9;;;;;;;;:::i;:::-;;;;;;:39;;;;18798:4;18803;:9;;;18798:15;;;;;;;;;;:::i;:::-;;;;;;;;18786:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18793:1;18786:9;;;;;;;;:::i;:::-;;;;;;:27;;;;18835:6;18842:4;:10;;;18835:18;;;;;;;;;;:::i;:::-;;;;;;;;18823:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;18830:1;18823:9;;;;;;;;:::i;:::-;;;;;;;;;;:30;18870:6;18453:430;-1:-1:-1;;18453:430:4:o;16703:84::-;16762:6;:18;;;;;;;-1:-1:-1;16762:18:4;;;;;;;16774:5;;16762:18;;:::i;16265:96::-;16331:8;:23;;;;;;;-1:-1:-1;16331:23:4;;;;;;;16345:8;;16331:23;;:::i;392:703:2:-;448:13;665:5;674:1;665:10;661:51;;-1:-1:-1;;691:10:2;;;;;;;;;;;;;;;;;;392:703::o;661:51::-;736:5;721:12;775:75;782:9;;775:75;;807:8;;;;:::i;:::-;;-1:-1:-1;829:10:2;;-1:-1:-1;837:2:2;829:10;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;881:17:2;;859:39;;908:150;915:10;;908:150;;941:11;951:1;941:11;;:::i;:::-;;-1:-1:-1;1009:10:2;1017:2;1009:5;:10;:::i;:::-;996:24;;:2;:24;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1036:11:2;1045:2;1036:11;;:::i;:::-;;;908:150;;;1081:6;392:703;-1:-1:-1;;;;392:703:2:o;17286:87:4:-;17347:6;:19;;;;;;;-1:-1:-1;17347:19:4;;;;;;;17359:6;;17347:19;;:::i;18267:104::-;18337:10;:27;;;;;;;-1:-1:-1;18337:27:4;;;;;;;18353:10;;18337:27;;:::i;16424:222::-;16518:11;:29;;;;;;;-1:-1:-1;16518:29:4;;;;;;;16535:11;;16518:29;;:::i;:::-;-1:-1:-1;16573:11:4;:18;16557:13;;16573:22;;16594:1;;16573:22;:::i;:::-;16605:16;;;;:9;:16;;;;;:34;;;;;;;;;;;;;;;;-1:-1:-1;;;16424:222:4:o;18970:501::-;19115:15;;;19128:1;19115:15;;;;;;;;;19058;;19085:27;;19115:15;;;;;;;;;;;;;;;;;;;;;19085:45;;19157:15;19173:4;:15;;;19157:32;;;;;;;;;;:::i;:::-;;;;;;;;19140:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;19152:1;19140:14;;;;;;;;:::i;:::-;;;;;;:49;;;;19216:9;19226:4;:9;;;19216:20;;;;;;;;;;:::i;:::-;;;;;;;;19199:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;19211:1;19199:14;;;;;;;;:::i;:::-;;;;;;:37;;;;19263:9;19273:4;:9;;;19263:20;;;;;;;;;;:::i;:::-;;;;;;;;19246:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;19258:1;19246:14;;;;;;;;:::i;:::-;;;;;;:37;;;;19310:14;19325:4;:14;;;19310:30;;;;;;;;;;:::i;:::-;;;;;;;;19293:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;19305:1;19293:14;;;;;;;;:::i;:::-;;;;;;:47;;;;19367:9;19377:4;:9;;;19367:20;;;;;;;;;;:::i;:::-;;;;;;;;19350:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;19362:1;19350:14;;;;;;;;:::i;:::-;;;;;;:37;;;;19414:10;19425:4;:10;;;19414:22;;;;;;;;;;:::i;2433:187:0:-;2506:16;2525:6;;;2541:17;;;;;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;17956:100:4:-;18024:9;:25;;;;;;;-1:-1:-1;18024:25:4;;;;;;;18039:9;;18024:25;;:::i;17010:83::-;17069:5;:17;;;;;;;-1:-1:-1;17069:17:4;;;;;;;17080:5;;17069:17;;:::i;16067:135::-;16159:23;;;;;;;:8;:23;;;;;;;:36;;;;;;;;;;;;;;16188:6;;16159:36;;:::i;17779:120::-;17857:14;:35;;;;;;;-1:-1:-1;17857:35:4;;;;;;;17877:14;;17857:35;;:::i;18111:100::-;18179:9;:25;;;;;;;-1:-1:-1;18179:25:4;;;;;;;18194:9;;18179:25;;:::i;17148:82::-;17207:4;:16;;;;;;;-1:-1:-1;17207:16:4;;;;;;;17217:5;;17207:16;;:::i;14:374:9:-;84:8;94:6;148:3;141:4;133:6;129:17;125:27;115:55;;166:1;163;156:12;115:55;-1:-1:-1;189:20:9;;232:18;221:30;;218:50;;;264:1;261;254:12;218:50;301:4;293:6;289:17;277:29;;361:3;354:4;344:6;341:1;337:14;329:6;325:27;321:38;318:47;315:67;;;378:1;375;368:12;315:67;14:374;;;;;:::o;393:455::-;490:6;498;551:2;539:9;530:7;526:23;522:32;519:52;;;567:1;564;557:12;519:52;607:9;594:23;640:18;632:6;629:30;626:50;;;672:1;669;662:12;626:50;711:77;780:7;771:6;760:9;756:22;711:77;:::i;:::-;807:8;;685:103;;-1:-1:-1;393:455:9;-1:-1:-1;;;;393:455:9:o;853:180::-;912:6;965:2;953:9;944:7;940:23;936:32;933:52;;;981:1;978;971:12;933:52;-1:-1:-1;1004:23:9;;853:180;-1:-1:-1;853:180:9:o;1038:250::-;1123:1;1133:113;1147:6;1144:1;1141:13;1133:113;;;1223:11;;;1217:18;1204:11;;;1197:39;1169:2;1162:10;1133:113;;;-1:-1:-1;;1280:1:9;1262:16;;1255:27;1038:250::o;1293:329::-;1334:3;1372:5;1366:12;1399:6;1394:3;1387:19;1415:76;1484:6;1477:4;1472:3;1468:14;1461:4;1454:5;1450:16;1415:76;:::i;:::-;1536:2;1524:15;1541:66;1520:88;1511:98;;;;1611:4;1507:109;;1293:329;-1:-1:-1;;1293:329:9:o;1627:217::-;1774:2;1763:9;1756:21;1737:4;1794:44;1834:2;1823:9;1819:18;1811:6;1794:44;:::i;1849:348::-;1901:8;1911:6;1965:3;1958:4;1950:6;1946:17;1942:27;1932:55;;1983:1;1980;1973:12;1932:55;-1:-1:-1;2006:20:9;;2049:18;2038:30;;2035:50;;;2081:1;2078;2071:12;2035:50;2118:4;2110:6;2106:17;2094:29;;2170:3;2163:4;2154:6;2146;2142:19;2138:30;2135:39;2132:59;;;2187:1;2184;2177:12;2202:411;2273:6;2281;2334:2;2322:9;2313:7;2309:23;2305:32;2302:52;;;2350:1;2347;2340:12;2302:52;2390:9;2377:23;2423:18;2415:6;2412:30;2409:50;;;2455:1;2452;2445:12;2409:50;2494:59;2545:7;2536:6;2525:9;2521:22;2494:59;:::i;3439:184::-;3491:77;3488:1;3481:88;3588:4;3585:1;3578:15;3612:4;3609:1;3602:15;3628:334;3699:2;3693:9;3755:2;3745:13;;3760:66;3741:86;3729:99;;3858:18;3843:34;;3879:22;;;3840:62;3837:88;;;3905:18;;:::i;:::-;3941:2;3934:22;3628:334;;-1:-1:-1;3628:334:9:o;3967:167::-;4034:20;;4094:14;4083:26;;4073:37;;4063:65;;4124:1;4121;4114:12;4063:65;3967:167;;;:::o;4139:767::-;4190:5;4238:4;4226:9;4221:3;4217:19;4213:30;4210:50;;;4256:1;4253;4246:12;4210:50;4289:2;4283:9;4331:4;4323:6;4319:17;4402:6;4390:10;4387:22;4366:18;4354:10;4351:34;4348:62;4345:88;;;4413:18;;:::i;:::-;4449:2;4442:22;4482:6;-1:-1:-1;4482:6:9;4512:28;4530:9;4512:28;:::i;:::-;4504:6;4497:44;4574:37;4607:2;4596:9;4592:18;4574:37;:::i;:::-;4569:2;4561:6;4557:15;4550:62;4645:37;4678:2;4667:9;4663:18;4645:37;:::i;:::-;4640:2;4632:6;4628:15;4621:62;4716:37;4749:2;4738:9;4734:18;4716:37;:::i;:::-;4711:2;4703:6;4699:15;4692:62;4788:38;4821:3;4810:9;4806:19;4788:38;:::i;:::-;4782:3;4774:6;4770:16;4763:64;4861:38;4894:3;4883:9;4879:19;4861:38;:::i;:::-;4855:3;4847:6;4843:16;4836:64;;4139:767;;;;:::o;4911:222::-;4992:6;5045:3;5033:9;5024:7;5020:23;5016:33;5013:53;;;5062:1;5059;5052:12;5013:53;5085:42;5119:7;5108:9;5085:42;:::i;5138:290::-;5228:6;5236;5289:3;5277:9;5268:7;5264:23;5260:33;5257:53;;;5306:1;5303;5296:12;5257:53;5342:9;5329:23;5319:33;;5371:51;5414:7;5409:2;5398:9;5394:18;5371:51;:::i;:::-;5361:61;;5138:290;;;;;:::o;5894:156::-;5960:20;;6020:4;6009:16;;5999:27;;5989:55;;6040:1;6037;6030:12;6055:525;6159:6;6167;6175;6228:2;6216:9;6207:7;6203:23;6199:32;6196:52;;;6244:1;6241;6234:12;6196:52;6284:9;6271:23;6317:18;6309:6;6306:30;6303:50;;;6349:1;6346;6339:12;6303:50;6388:77;6457:7;6448:6;6437:9;6433:22;6388:77;:::i;:::-;6484:8;;-1:-1:-1;6362:103:9;-1:-1:-1;6538:36:9;;-1:-1:-1;6570:2:9;6555:18;;6538:36;:::i;:::-;6528:46;;6055:525;;;;;:::o;6585:250::-;6651:6;6659;6712:2;6700:9;6691:7;6687:23;6683:32;6680:52;;;6728:1;6725;6718:12;6680:52;6751:27;6768:9;6751:27;:::i;:::-;6741:37;6825:2;6810:18;;;;6797:32;;-1:-1:-1;;;6585:250:9:o;6840:246::-;6889:4;6922:18;6914:6;6911:30;6908:56;;;6944:18;;:::i;:::-;-1:-1:-1;7001:2:9;6989:15;7006:66;6985:88;7075:4;6981:99;;6840:246::o;7091:464::-;7134:5;7187:3;7180:4;7172:6;7168:17;7164:27;7154:55;;7205:1;7202;7195:12;7154:55;7241:6;7228:20;7272:49;7288:32;7317:2;7288:32;:::i;:::-;7272:49;:::i;:::-;7346:2;7337:7;7330:19;7392:3;7385:4;7380:2;7372:6;7368:15;7364:26;7361:35;7358:55;;;7409:1;7406;7399:12;7358:55;7474:2;7467:4;7459:6;7455:17;7448:4;7439:7;7435:18;7422:55;7522:1;7497:16;;;7515:4;7493:27;7486:38;;;;7501:7;7091:464;-1:-1:-1;;;7091:464:9:o;7560:653::-;7679:6;7687;7695;7748:3;7736:9;7727:7;7723:23;7719:33;7716:53;;;7765:1;7762;7755:12;7716:53;7805:9;7792:23;7834:18;7875:2;7867:6;7864:14;7861:34;;;7891:1;7888;7881:12;7861:34;7914:50;7956:7;7947:6;7936:9;7932:22;7914:50;:::i;:::-;7904:60;;8017:2;8006:9;8002:18;7989:32;7973:48;;8046:2;8036:8;8033:16;8030:36;;;8062:1;8059;8052:12;8030:36;;8085:52;8129:7;8118:8;8107:9;8103:24;8085:52;:::i;:::-;8075:62;;;8156:51;8199:7;8194:2;8183:9;8179:18;8156:51;:::i;8410:480::-;8487:6;8495;8503;8556:2;8544:9;8535:7;8531:23;8527:32;8524:52;;;8572:1;8569;8562:12;8524:52;8612:9;8599:23;8645:18;8637:6;8634:30;8631:50;;;8677:1;8674;8667:12;8631:50;8716:59;8767:7;8758:6;8747:9;8743:22;8716:59;:::i;8895:526::-;9000:6;9008;9016;9069:2;9057:9;9048:7;9044:23;9040:32;9037:52;;;9085:1;9082;9075:12;9037:52;9108:27;9125:9;9108:27;:::i;:::-;9098:37;;9186:2;9175:9;9171:18;9158:32;9213:18;9205:6;9202:30;9199:50;;;9245:1;9242;9235:12;9199:50;9284:77;9353:7;9344:6;9333:9;9329:22;9284:77;:::i;:::-;8895:526;;9380:8;;-1:-1:-1;9258:103:9;;-1:-1:-1;;;;8895:526:9:o;9657:309::-;9716:6;9769:2;9757:9;9748:7;9744:23;9740:32;9737:52;;;9785:1;9782;9775:12;9737:52;9824:9;9811:23;9874:42;9867:5;9863:54;9856:5;9853:65;9843:93;;9932:1;9929;9922:12;9971:481;10049:6;10057;10065;10118:2;10106:9;10097:7;10093:23;10089:32;10086:52;;;10134:1;10131;10124:12;10086:52;10157:27;10174:9;10157:27;:::i;:::-;10147:37;;10235:2;10224:9;10220:18;10207:32;10262:18;10254:6;10251:30;10248:50;;;10294:1;10291;10284:12;10248:50;10333:59;10384:7;10375:6;10364:9;10360:22;10333:59;:::i;11071:184::-;11123:77;11120:1;11113:88;11220:4;11217:1;11210:15;11244:4;11241:1;11234:15;11260:580;11337:4;11343:6;11403:11;11390:25;11493:66;11482:8;11466:14;11462:29;11458:102;11438:18;11434:127;11424:155;;11575:1;11572;11565:12;11424:155;11602:33;;11654:20;;;-1:-1:-1;11697:18:9;11686:30;;11683:50;;;11729:1;11726;11719:12;11683:50;11762:4;11750:17;;-1:-1:-1;11793:14:9;11789:27;;;11779:38;;11776:58;;;11830:1;11827;11820:12;11845:184;11897:77;11894:1;11887:88;11994:4;11991:1;11984:15;12018:4;12015:1;12008:15;12034:195;12073:3;12104:66;12097:5;12094:77;12091:103;;12174:18;;:::i;:::-;-1:-1:-1;12221:1:9;12210:13;;12034:195::o;12234:437::-;12313:1;12309:12;;;;12356;;;12377:61;;12431:4;12423:6;12419:17;12409:27;;12377:61;12484:2;12476:6;12473:14;12453:18;12450:38;12447:218;;12521:77;12518:1;12511:88;12622:4;12619:1;12612:15;12650:4;12647:1;12640:15;12447:218;;12234:437;;;:::o;12676:614::-;12727:3;12765:5;12759:12;12792:6;12787:3;12780:19;12818:4;12859:2;12854:3;12850:12;12884:11;12911;12904:18;;12961:6;12958:1;12954:14;12947:5;12943:26;12931:38;;13003:2;12996:5;12992:14;13024:1;13034:230;13048:6;13045:1;13042:13;13034:230;;;13119:5;13113:4;13109:16;13104:3;13097:29;13147:37;13179:4;13170:6;13164:13;13147:37;:::i;:::-;13242:12;;;;13139:45;-1:-1:-1;13207:15:9;;;;13070:1;13063:9;13034:230;;;-1:-1:-1;13280:4:9;;12676:614;-1:-1:-1;;;;;;;12676:614:9:o;13295:838::-;13566:2;13555:9;13548:21;13529:4;13604:6;13598:13;13647:4;13642:2;13631:9;13627:18;13620:32;13675:61;13731:3;13720:9;13716:19;13702:12;13675:61;:::i;:::-;13661:75;;13785:4;13777:6;13773:17;13767:24;13857:66;13845:9;13837:6;13833:22;13829:95;13822:4;13811:9;13807:20;13800:125;13948:40;13981:6;13965:14;13948:40;:::i;:::-;14047:2;14035:15;;;;14029:22;14053:4;14025:33;14019:3;14004:19;;13997:62;-1:-1:-1;;;14113:4:9;14098:20;14091:36;13934:54;13295:838::o;14138:649::-;14218:6;14271:2;14259:9;14250:7;14246:23;14242:32;14239:52;;;14287:1;14284;14277:12;14239:52;14320:9;14314:16;14353:18;14345:6;14342:30;14339:50;;;14385:1;14382;14375:12;14339:50;14408:22;;14461:4;14453:13;;14449:27;-1:-1:-1;14439:55:9;;14490:1;14487;14480:12;14439:55;14519:2;14513:9;14544:49;14560:32;14589:2;14560:32;:::i;14544:49::-;14616:2;14609:5;14602:17;14656:7;14651:2;14646;14642;14638:11;14634:20;14631:33;14628:53;;;14677:1;14674;14667:12;14628:53;14690:67;14754:2;14749;14742:5;14738:14;14733:2;14729;14725:11;14690:67;:::i;14918:1078::-;15094:3;15123:1;15156:6;15150:13;15186:36;15212:9;15186:36;:::i;:::-;15241:1;15258:18;;;15285:191;;;;15490:1;15485:356;;;;15251:590;;15285:191;15333:66;15322:9;15318:82;15313:3;15306:95;15456:6;15449:14;15442:22;15434:6;15430:35;15425:3;15421:45;15414:52;;15285:191;;15485:356;15516:6;15513:1;15506:17;15546:4;15591:2;15588:1;15578:16;15616:1;15630:165;15644:6;15641:1;15638:13;15630:165;;;15722:14;;15709:11;;;15702:35;15765:16;;;;15659:10;;15630:165;;;15634:3;;;15824:6;15819:3;15815:16;15808:23;;15251:590;;;;;15872:6;15866:13;15888:68;15947:8;15942:3;15935:4;15927:6;15923:17;15888:68;:::i;:::-;15972:18;;14918:1078;-1:-1:-1;;;;14918:1078:9:o;16587:545::-;16689:2;16684:3;16681:11;16678:448;;;16725:1;16750:5;16746:2;16739:17;16795:4;16791:2;16781:19;16865:2;16853:10;16849:19;16846:1;16842:27;16836:4;16832:38;16901:4;16889:10;16886:20;16883:47;;;-1:-1:-1;16924:4:9;16883:47;16979:2;16974:3;16970:12;16967:1;16963:20;16957:4;16953:31;16943:41;;17034:82;17052:2;17045:5;17042:13;17034:82;;;17097:17;;;17078:1;17067:13;17034:82;;;17038:3;;;16587:545;;;:::o;17368:1325::-;17492:18;17487:3;17484:27;17481:53;;;17514:18;;:::i;:::-;17543:94;17633:3;17593:38;17625:4;17619:11;17593:38;:::i;:::-;17587:4;17543:94;:::i;:::-;17663:1;17688:2;17683:3;17680:11;17705:1;17700:735;;;;18479:1;18496:3;18493:93;;;-1:-1:-1;18552:19:9;;;18539:33;18493:93;17274:66;17265:1;17261:11;;;17257:84;17253:89;17243:100;17349:1;17345:11;;;17240:117;18599:78;;17673:1014;;17700:735;14865:1;14858:14;;;14902:4;14889:18;;17745:66;17736:76;;;17896:9;17918:229;17932:7;17929:1;17926:14;17918:229;;;18021:19;;;18008:33;17993:49;;18128:4;18113:20;;;;18081:1;18069:14;;;;17948:12;17918:229;;;17922:3;18175;18166:7;18163:16;18160:219;;;18295:66;18289:3;18283;18280:1;18276:11;18272:21;18268:94;18264:99;18251:9;18246:3;18242:19;18229:33;18225:139;18217:6;18210:155;18160:219;;;18422:1;18416:3;18413:1;18409:11;18405:19;18399:4;18392:33;17673:1014;;;17368:1325;;;:::o;18698:449::-;18857:2;18846:9;18839:21;18896:6;18891:2;18880:9;18876:18;18869:34;18953:6;18945;18940:2;18929:9;18925:18;18912:48;19009:1;18980:22;;;19004:2;18976:31;;;18969:42;;;;19063:2;19051:15;;;19068:66;19047:88;19032:104;19028:113;;18698:449;-1:-1:-1;18698:449:9:o;19152:2000::-;19433:2;19422:9;19415:21;19396:4;19471:6;19465:13;19514:4;19509:2;19498:9;19494:18;19487:32;19542:51;19588:3;19577:9;19573:19;19559:12;19542:51;:::i;:::-;19528:65;;19612:4;19665:2;19657:6;19653:15;19647:22;19688:66;19818:2;19806:9;19798:6;19794:22;19790:31;19785:2;19774:9;19770:18;19763:59;19845:40;19878:6;19862:14;19845:40;:::i;:::-;19831:54;;19934:2;19926:6;19922:15;19916:22;19894:44;;20003:2;19991:9;19983:6;19979:22;19975:31;19969:3;19958:9;19954:19;19947:60;20030:50;20073:6;20057:14;20030:50;:::i;:::-;20016:64;;20129:2;20121:6;20117:15;20111:22;20089:44;;20198:2;20186:9;20178:6;20174:22;20170:31;20164:3;20153:9;20149:19;20142:60;20225:40;20258:6;20242:14;20225:40;:::i;:::-;20314:3;20302:16;;20296:23;20361:22;;;20357:31;;;20350:4;20335:20;;20328:61;20438:21;;20468:22;;;20211:54;;-1:-1:-1;20603:23:9;;;;-1:-1:-1;20506:15:9;;;;20564:1;20560:14;;;20548:27;;20544:36;;20644:1;20654:310;20668:6;20665:1;20662:13;20654:310;;;20754:66;20745:6;20737;20733:19;20729:92;20724:3;20717:105;20845:39;20877:6;20868;20862:13;20845:39;:::i;:::-;20907:15;;;;20942:12;;;;20835:49;-1:-1:-1;20690:1:9;20683:9;20654:310;;;-1:-1:-1;21013:3:9;21001:16;;;;20995:23;10524:4;10513:16;21075:3;21060:19;;10501:29;-1:-1:-1;;;21119:18:9;;;21112:34;;;;-1:-1:-1;21119:18:9;;;-1:-1:-1;19152:2000:9:o;21157:125::-;21222:9;;;21243:10;;;21240:36;;;21256:18;;:::i;21689:438::-;21951:10;21946:3;21939:23;21921:3;21991:6;21985:13;22007:74;22074:6;22070:1;22065:3;22061:11;22054:4;22046:6;22042:17;22007:74;:::i;:::-;22101:16;;;;22119:1;22097:24;;21689:438;-1:-1:-1;;21689:438:9:o;22132:661::-;22495:10;22490:3;22483:23;22465:3;22535:6;22529:13;22551:74;22618:6;22614:1;22609:3;22605:11;22598:4;22590:6;22586:17;22551:74;:::i;:::-;22688:34;22684:1;22644:16;;;;22676:10;;;22669:54;-1:-1:-1;22752:7:9;22747:2;22739:11;;22732:28;22784:2;22776:11;;22132:661;-1:-1:-1;22132:661:9:o;25296:184::-;25348:77;25345:1;25338:88;25445:4;25442:1;25435:15;25469:4;25466:1;25459:15;25485:120;25525:1;25551;25541:35;;25556:18;;:::i;:::-;-1:-1:-1;25590:9:9;;25485:120::o;25610:128::-;25677:9;;;25698:11;;;25695:37;;;25712:18;;:::i;25743:112::-;25775:1;25801;25791:35;;25806:18;;:::i;:::-;-1:-1:-1;25840:9:9;;25743:112::o
Swarm Source
ipfs://8790cb9be98dba3d7265a20281e094df3b821b496265c222f55fbc5dbb1699c2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.