Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60066103 | 13656398 | 971 days ago | IN | Create: dungeonsRender | 0 ETH | 0.23801043 |
Loading...
Loading
Contract Name:
dungeonsRender
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: CC0-1.0 /// @title Rendering code to draw an svg of the dungeon /***************************************************** 0000000 0000000 0001100 Crypts and Caverns 0001100 0001100 9000 generative on-chain dungeons 0001100 0003300 0003300 *****************************************************/ pragma solidity ^0.8.0; import { IDungeons } from './interfaces/IDungeons.sol'; contract dungeonsRender { struct Maps { // Data structure that stores our different maps (layout, doors, points) uint256[] layout; uint256[] doors; uint256[] points; } struct RenderHelper { // Helper variables when iterating through and drawing dungeon tiles uint256 pixel; uint256 start; uint256[] layout; string parts; uint256 counter; uint256 numRects; uint256 lastStart; } struct EntityHelper { uint256 size; uint256 environment; } string[24] private colors = [ // Array contains sets of 4 colors: // 0 = bg, 1 = wall, 2 = door, 3 = point // To calculate, multiply environment (int 0-5) by 4 and add the above numbers. // Desert "F3D899", // 0 "160F09", // 1 "FAAA00", // 2 "00A29D", // 3 // Stone Temple "967E67", // 4 "F3D899", // 5 "3C2A1A", // 6 "006669", // 7 // Forest Ruins "2F590E", // 8 "A98C00", // 9 "802F1A", // 10 "C55300", // 11 // Mountain Deep "36230F", // 12 "744936", // 13 "802F1A", // 14 "FFA800", // 15 //Underwater Keep "006669", // 16 "004238", // 17 "967E67", // 18 "F9B569", // 19 // Ember"s Glow "340D07", // 20 "5D0503", // 21 "B75700", // 22 "FF1800" // 23 ]; string[6] private environmentName = [ // Names mapped to the above colors "Desert Oasis", "Stone Temple", "Forest Ruins", "Mountain Deep", "Underwater Keep", "Ember's Glow" ]; function draw(IDungeons.Dungeon memory dungeon, uint8[] memory x, uint8[] memory y, uint8[] memory entityData) external view returns (string memory) { // Hardcoded to save memory: Width = 100 string memory parts; // Setup SVG and draw our background // We write at 100x100 and scale it 5x to 500x500 to avoid safari small rendering parts = string(abi.encodePacked( '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 500 500" shape-rendering="crispEdges" transform-origin="center"><rect width="100%" height="100%" fill="#', colors[dungeon.environment * 4], '" />')); // Draw the name at the top of the image parts = drawNameplate(parts, dungeon.dungeonName); // Draw the dungeon layout and entities (uint256 start, uint256 pixel) = getWidth(dungeon.size); // Calculate width of each pixel and where we should start the dungeon RenderHelper memory helper = RenderHelper(pixel, start, fromBytes(dungeon.layout), "", 0, 0, 0); // Struct to save memory for render calls so we don't get 'stack too deep' in our drawChunk() function parts = string(abi.encodePacked( parts, chunkDungeon(dungeon, helper), // Break dungeon walls into chunks and render each section drawEntities(x, y, entityData, dungeon, helper), '</svg>')); return parts; } function drawNameplate(string memory parts, string memory name) internal pure returns (string memory) { // Draw a nameplate w/ map title at the top of the map. // Calculate length of string uint256 nameLength = uint256(bytes(name).length); uint256 fontSize; uint256 multiplier; if(nameLength <= 25) { fontSize = 5; multiplier = 3; } else { fontSize = 4; multiplier = 2; nameLength += 7; // Hack because we can't use fractions for our multiplier } // Draw black border behind nameplates parts = string( abi.encodePacked( parts, '<g transform="scale (5 5)"><rect x="', // Scale nameplate by 5x (transform for 100->500) toString((100 - ((nameLength+3)*multiplier)) / 2), // assume letters are 3 'pixels', add 3 letters worth of spacing (1.5 per side) '" y="-1" width="', toString((nameLength+3)*multiplier), '" height="9" stroke-width="0.3" stroke="black" fill="#FFA800" />' )); // Draw text on top of nameplate parts = string( abi.encodePacked( parts, '<text x="50" y="5.5" width="', toString(nameLength * 3), '" font-family="monospace" font-size="', toString(fontSize), '" text-anchor="middle">', name, '</text></g>' )); return(parts); } function chunkDungeon(IDungeons.Dungeon memory dungeon, RenderHelper memory helper) internal view returns (string memory) { // Loop through and figure out how many rectangles we'll need (so we can calculate array size) for(uint256 y = 0; y < dungeon.size; y++) { helper.lastStart = helper.counter; string memory rowParts; for(uint256 x = 0; x < dungeon.size; x++) { if(getBit(helper.layout, helper.counter) == 1 && helper.counter > 0 && getBit(helper.layout, helper.counter-1) == 0) { // Last tile was a wall, current tile is floor. Need a new rect. helper.numRects++; // Draw rect with last known X and width of currentX - lastX. rowParts = drawTile(rowParts, helper.start + (helper.lastStart % dungeon.size)*helper.pixel, helper.start + (helper.lastStart / dungeon.size)*helper.pixel, (helper.counter - helper.lastStart)*helper.pixel, helper.pixel, colors[dungeon.environment * 4 + 1]); } else if(getBit(helper.layout, helper.counter) == 0 && helper.counter > 0 && getBit(helper.layout, helper.counter-1) == 1) { // Last tile was a floor, start tracking X so we can get a width helper.lastStart = helper.counter; } helper.counter++; } // If the last tile on a row is a wall, we need a new rect if(getBit(helper.layout, helper.counter-1) == 0) { helper.numRects++; rowParts = drawTile(rowParts, helper.start + (helper.lastStart % dungeon.size)*helper.pixel, helper.start + (helper.lastStart / dungeon.size)*helper.pixel, (helper.counter - helper.lastStart)*helper.pixel, helper.pixel, colors[dungeon.environment * 4 + 1]); } helper.parts = string(abi.encodePacked(helper.parts, rowParts)); rowParts = ""; // Reset for the next row } return helper.parts; } function drawEntities(uint8[] memory x, uint8[] memory y, uint8[] memory entityData, IDungeons.Dungeon memory dungeon, RenderHelper memory helper) internal view returns (string memory) { // Draw each entity as a pixel on the map string memory parts; for(uint256 i = 0; i < entityData.length; i++) { parts = drawTile(parts, helper.start + (x[i] % dungeon.size)*helper.pixel, helper.start + y[i]*helper.pixel, helper.pixel, helper.pixel, colors[dungeon.environment * 4 + 2 + entityData[i]]); } return parts; } function drawTile(string memory row, uint256 x, uint256 y, uint256 width, uint256 pixel, string memory color) internal pure returns(string memory) { row = string( abi.encodePacked( row, '<rect x="', toString(x), '" y="', toString(y), '" width="', toString(width), '" height="', toString(pixel), '" fill="#', color, '" />' )); return(row); } function getWidth(uint256 size) internal pure returns(uint256, uint256) { uint256 pixel = 500 / (size + 3*2); // Each 'pixel' should be equal widths and take into account dungeon size + allocate padding (3 pixels) on both sides uint256 start = (500 - pixel*size) / 2; // Remove the width and divide by two to get the midpoint where we should start return(start, pixel); } /** * @dev - Assembles a tokenURI for output. Normally we would do this in dungeons.sol but needed to save memory */ function tokenURI(uint256 tokenId, IDungeons.Dungeon memory dungeon, uint256[] memory entities) public view returns(string memory) { string memory output; // Generate dungeon output = this.draw(dungeon, dungeon.entities.x, dungeon.entities.y, dungeon.entities.entityType); string memory size = string(abi.encodePacked(toString(dungeon.size), 'x', toString(dungeon.size))); // Base64 Encode svg and output string memory json = Base64.encode(bytes(string( abi.encodePacked('{"name": "Crypts and Caverns #', toString(tokenId), '", "description": "Crypts and Caverns is an onchain map generator that produces an infinite set of dungeons. Enemies, treasure, etc intentionally omitted for others to interpret. Feel free to use Crypts and Caverns in any way you want.", "attributes": [ {"trait_type": "name", "value": "', dungeon.dungeonName, '"}, {"trait_type": "size", "value": "', size, '"}, {"trait_type": "environment", "value": "', environmentName[dungeon.environment], '"}, {"trait_type": "doors", "value": "', toString(entities[1]), '"}, {"trait_type": "points of interest", "value": "', toString(entities[0]), '"}, {"trait_type": "affinity", "value": "', dungeon.affinity, '"}, {"trait_type": "legendary", "value": "', dungeon.legendary == 1 ? 'Yes' : 'No', '"}, {"trait_type": "structure", "value": "', dungeon.structure == 0 ? 'Crypt' : 'Cavern', '"}],"image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } /* Bitwise Helper Functions */ function getBit(uint256[] memory map, uint256 position) internal pure returns(uint256) { // Returns whether a bit is set or off at a given position in our map (credit: @cjpais) (uint256 quotient, uint256 remainder) = getDivided(position, 256); require(position <= 255 + (quotient * 256)); return (map[quotient] >> (255 - remainder)) & 1; } function getDivided(uint256 numerator, uint256 denominator) public pure returns (uint256 quotient, uint256 remainder) { require(denominator > 0); quotient = numerator / denominator; remainder = numerator - denominator * quotient; } function getNumIntsRequired(bytes memory data) public pure returns (uint256) { // Calculate the number of ints needed to contain the number of bytes in data require(data.length > 0); (uint256 quotient, uint256 remainder) = getDivided(data.length, 32); if (remainder > 0) return quotient + 1; return quotient; } function fromBytes(bytes memory encodedMap) internal pure returns (uint256[] memory) { // Converts a bytes array to a map (two uint256) uint256 num = getNumIntsRequired(encodedMap); uint256[] memory result = new uint256[](num); uint256 offset = 0; uint256 x; for (uint256 i = 0; i < num; i++) { assembly { x := mload(add(encodedMap, add(0x20, offset))) mstore(add(result, add(0x20, offset)), x) } offset += 0x20; } return result; } } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
// SPDX-License-Identifier: GPL-3.0 /// @title Interface for Crypts and Caverns /***************************************************** 0000000 0000000 0001100 Crypts and Caverns 0001100 0001100 9000 generative on-chain dungeons 0001100 0003300 0003300 *****************************************************/ pragma solidity ^0.8.0; interface IDungeons { struct Dungeon { uint8 size; uint8 environment; uint8 structure; // crypt or cavern uint8 legendary; bytes layout; EntityData entities; string affinity; string dungeonName; } struct EntityData { uint8[] x; uint8[] y; uint8[] entityType; } function claim(uint256 tokenId) external payable; function claimMany(uint256[] memory tokenArray) external payable; function ownerClaim(uint256 tokenId) external payable; function mint() external payable; function openClaim() external; function withdraw(address payable recipient, uint256 amount) external; function tokenURI(uint256 tokenId) external view returns (string memory); function getLayout(uint256 tokenId) external view returns (bytes memory); function getSize(uint256 tokenId) external view returns (uint8); function getEntities(uint256 tokenId) external view returns (uint8[] memory, uint8[] memory, uint8[] memory); function getEnvironment(uint256 tokenId) external view returns (uint8); function getName(uint256 tokenId) external view returns (string memory); function getNumPoints(uint256 tokenId) external view returns (uint256); function getNumDoors(uint256 tokenId) external view returns (uint256); function getSvg(uint256 tokenId) external view returns (string memory); }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": false } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"uint8","name":"size","type":"uint8"},{"internalType":"uint8","name":"environment","type":"uint8"},{"internalType":"uint8","name":"structure","type":"uint8"},{"internalType":"uint8","name":"legendary","type":"uint8"},{"internalType":"bytes","name":"layout","type":"bytes"},{"components":[{"internalType":"uint8[]","name":"x","type":"uint8[]"},{"internalType":"uint8[]","name":"y","type":"uint8[]"},{"internalType":"uint8[]","name":"entityType","type":"uint8[]"}],"internalType":"struct IDungeons.EntityData","name":"entities","type":"tuple"},{"internalType":"string","name":"affinity","type":"string"},{"internalType":"string","name":"dungeonName","type":"string"}],"internalType":"struct IDungeons.Dungeon","name":"dungeon","type":"tuple"},{"internalType":"uint8[]","name":"x","type":"uint8[]"},{"internalType":"uint8[]","name":"y","type":"uint8[]"},{"internalType":"uint8[]","name":"entityData","type":"uint8[]"}],"name":"draw","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"getDivided","outputs":[{"internalType":"uint256","name":"quotient","type":"uint256"},{"internalType":"uint256","name":"remainder","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"getNumIntsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint8","name":"size","type":"uint8"},{"internalType":"uint8","name":"environment","type":"uint8"},{"internalType":"uint8","name":"structure","type":"uint8"},{"internalType":"uint8","name":"legendary","type":"uint8"},{"internalType":"bytes","name":"layout","type":"bytes"},{"components":[{"internalType":"uint8[]","name":"x","type":"uint8[]"},{"internalType":"uint8[]","name":"y","type":"uint8[]"},{"internalType":"uint8[]","name":"entityType","type":"uint8[]"}],"internalType":"struct IDungeons.EntityData","name":"entities","type":"tuple"},{"internalType":"string","name":"affinity","type":"string"},{"internalType":"string","name":"dungeonName","type":"string"}],"internalType":"struct IDungeons.Dungeon","name":"dungeon","type":"tuple"},{"internalType":"uint256[]","name":"entities","type":"uint256[]"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60066103808181526546334438393960d01b6103a081905260809182526103c08381526531363046303960d01b6103e05260a0526104008381526504641414130360d41b6104205260c052610440838152650c0c104c8e5160d21b6104605260e0526104808381526539363745363760d01b6104a0819052610100919091526104c08481526104e092909252610120919091526105008381526533433241314160d01b61052052610140526105408381526530303636363960d01b610560819052610160919091526105808481526532463539304560d01b6105a052610180526105c08481526504139384330360d41b6105e0526101a0526106008481526538303246314160d01b6106208190526101c0919091526106408581526504335353330360d41b610660526101e05261068085815265199b1919982360d11b6106a052610200526106c0858152651b9a1a1c999b60d11b6106e0526102205261070085815261072091909152610240526107408481526504646413830360d41b61076052610260526107808481526107a091909152610280526107c08381526506060686466760d31b6107e0526102a052610800838152610820919091526102c0526108408281526546394235363960d01b610860526102e0526108808281526533343044303760d01b6108a052610300526108c08281526535443035303360d01b6108e052610320526109008281526504237353730360d41b61092052610340526109806040526109409182526504646313830360d41b61096052610360919091526200025090600090601862000360565b506040805161010081018252600c60c082018181526b446573657274204f6173697360a01b60e08401528252825180840184528181526b53746f6e652054656d706c6560a01b60208281019190915280840191909152835180850185528281526b466f72657374205275696e7360a01b818301528385015283518085018552600d81526c04d6f756e7461696e204465657609c1b81830152606084015283518085018552600f81526e0556e6465727761746572204b65657608c1b81830152608084015283518085019094529083526b456d626572277320476c6f7760a01b9083015260a08101919091526200034b906018906006620003b7565b503480156200035957600080fd5b506200054b565b8260188101928215620003a5579160200282015b82811115620003a5578251805162000394918491602090910190620003fc565b509160200191906001019062000374565b50620003b392915062000487565b5090565b8260068101928215620003a5579160200282015b82811115620003a55782518051620003eb918491602090910190620003fc565b5091602001919060010190620003cb565b8280546200040a9062000504565b90600052602060002090601f0160209004810192826200042e576000855562000479565b82601f106200044957805160ff191683800117855562000479565b8280016001018555821562000479579182015b82811115620004795782518255916020019190600101906200045c565b50620003b3929150620004a8565b80821115620003b35760006200049e8282620004bf565b5060010162000487565b5b80821115620003b35760008155600101620004a9565b508054620004cd9062000504565b6000825580601f10620004e1575062000501565b601f016020900490600052602060002090810190620005019190620004a8565b50565b6002810460018216806200051957607f821691505b602082108114156200052f576200052f62000535565b50919050565b634e487b7160e01b600052602260045260246000fd5b6125f2806200055b6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063194d02d71461005157806319db2b2f1461007b57806329010f431461009b578063a662e0f4146100ae575b600080fd5b61006461005f366004611400565b6100ce565b60405161007292919061225e565b60405180910390f35b61008e610089366004611385565b610107565b60405161007291906121f2565b61008e6100a93660046112c9565b610373565b6100c16100bc366004611261565b61048f565b6040516100729190612250565b600080600083116100de57600080fd5b6100e88385612367565b91506100f48284612391565b6100fe90856123f5565b90509250929050565b60a08201518051602082015160409283015192516329010f4360e01b8152606093849330936329010f4393610142938a939291600401612203565b60006040518083038186803b15801561015a57600080fd5b505afa15801561016e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101969190810190611295565b905060006101aa856000015160ff166104d5565b85516101b89060ff166104d5565b6040516020016101c9929190611fc6565b604051602081830303815290604052905060006103436101e8886104d5565b8760e001518460188a6020015160ff166006811061021657634e487b7160e01b600052603260045260246000fd5b016102488a60018151811061023b57634e487b7160e01b600052603260045260246000fd5b60200260200101516104d5565b61026c8b60008151811061023b57634e487b7160e01b600052603260045260246000fd5b8c60c001518d6060015160ff166001146102a057604051806040016040528060028152602001614e6f60f01b8152506102bd565b6040518060400160405280600381526020016259657360e81b8152505b60408f015160ff16156102ee576040518060400160405280600681526020016521b0bb32b93760d11b81525061030d565b6040518060400160405280600581526020016410dc9e5c1d60da1b8152505b6103168d6105f7565b60405160200161032f9a999897969594939291906120f1565b6040516020818303038152906040526105f7565b90508060405160200161035691906120da565b60408051601f1981840301815291905293505050505b9392505050565b60608060008660200151600461038991906123c6565b60ff16601881106103aa57634e487b7160e01b600052603260045260246000fd5b016040516020016103bb91906120b8565b60405160208183030381529060405290506103da818760e0015161076a565b90506000806103ef886000015160ff16610858565b9150915060006040518060e001604052808381526020018481526020016104198b608001516108a4565b8152602001604051806020016040528060008152508152602001600081526020016000815260200160008152509050836104538a83610951565b6104608a8a8a8e87610ce3565b60405160200161047293929190611f31565b60408051808303601f190181529190529998505050505050505050565b60008082511161049e57600080fd5b6000806104ad845160206100ce565b909250905080156104cc576104c382600161230e565b925050506104d0565b5090505b919050565b6060816104fa57506040805180820190915260018152600360fc1b60208201526104d0565b8160005b8115610524578061050e81612494565b915061051d9050600a83612367565b91506104fe565b6000816001600160401b0381111561054c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610576576020820181803683370190505b5090505b84156105ef5761058b6001836123f5565b9150610598600a866124ba565b6105a390603061230e565b60f81b8183815181106105c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506105e8600a86612367565b945061057a565b949350505050565b8051606090806106175750506040805160208101909152600081526104d0565b6000600361062683600261230e565b6106309190612367565b61063b906004612391565b9050600061064a82602061230e565b6001600160401b0381111561066f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610699576020820181803683370190505b509050600060405180606001604052806040815260200161257d604091399050600181016020830160005b86811015610725576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016106c4565b50600386066001811461073f57600281146107505761075c565b613d3d60f01b60011983015261075c565b603d60f81b6000198301525b505050918152949350505050565b805160609060008060198311610786575060059050600361079b565b5060049050600261079860078461230e565b92505b856107d16002836107ad87600361230e565b6107b79190612391565b6107c29060646123f5565b6107cc9190612367565b6104d5565b6107ea836107e087600361230e565b6107cc9190612391565b6040516020016107fc93929190611fdd565b60408051601f1981840301815291905295508561081d6107cc856003612391565b610826846104d5565b8760405160200161083a9493929190611f60565b60405160208183030381529060405295508593505050505b92915050565b6000808061086784600661230e565b610873906101f4612367565b9050600060026108838684612391565b61088f906101f46123f5565b6108999190612367565b935090915050915091565b606060006108b18361048f565b90506000816001600160401b038111156108db57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610904578160200160208202803683370190505b509050600080805b84811015610946578260200187015191508183602001850152602083610932919061230e565b92508061093e81612494565b91505061090c565b509195945050505050565b606060005b835160ff16811015610cd857608083015160c0840152606060005b855160ff16811015610bba5761098f85604001518660800151610e0d565b60011480156109a2575060008560800151115b80156109c957506109c78560400151600187608001516109c291906123f5565b610e0d565b155b15610b3e5760a085018051906109de82612494565b9052508451865160c0870151610b3792859290916109ff9160ff16906124ba565b610a099190612391565b8760200151610a18919061230e565b8751895160c08a0151610a2e9160ff1690612367565b610a389190612391565b8860200151610a47919061230e565b885160c08a015160808b0151610a5d91906123f5565b610a679190612391565b895160208c0151600090610a7c9060046123c6565b610a8790600161233c565b60ff1660188110610aa857634e487b7160e01b600052603260045260246000fd5b018054610ab490612467565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612467565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050610e88565b9150610b95565b610b5085604001518660800151610e0d565b158015610b61575060008560800151115b8015610b855750610b818560400151600187608001516109c291906123f5565b6001145b15610b9557608085015160c08601525b60808501805190610ba582612494565b90525080610bb281612494565b915050610971565b50610bd48460400151600186608001516109c291906123f5565b610c895760a08401805190610be882612494565b9052508351855160c0860151610c869284929091610c099160ff16906124ba565b610c139190612391565b8660200151610c22919061230e565b8651885160c0890151610c389160ff1690612367565b610c429190612391565b8760200151610c51919061230e565b875160c089015160808a0151610c6791906123f5565b610c719190612391565b885160208b0151600090610a7c9060046123c6565b90505b836060015181604051602001610ca0929190611f19565b60408051601f198184030181529181526060860191909152805160208101909152600090525080610cd081612494565b915050610956565b505060600151919050565b60608060005b8551811015610e0257610dee82856000015187600001518b8581518110610d2057634e487b7160e01b600052603260045260246000fd5b6020026020010151610d3291906124e4565b60ff16610d3f9190612391565b8660200151610d4e919061230e565b86600001518a8581518110610d7357634e487b7160e01b600052603260045260246000fd5b602002602001015160ff16610d889190612391565b8760200151610d97919061230e565b87518a5181906000908d9089908110610dc057634e487b7160e01b600052603260045260246000fd5b60200260200101518c602001516004610dd991906123c6565b610de490600261233c565b610a87919061233c565b915080610dfa81612494565b915050610ce9565b509695505050505050565b6000806000610e1e846101006100ce565b9092509050610e2f82610100612391565b610e3a9060ff61230e565b841115610e4657600080fd5b610e518160ff6123f5565b858381518110610e7157634e487b7160e01b600052603260045260246000fd5b6020026020010151901c6001169250505092915050565b606086610e94876104d5565b610e9d876104d5565b610ea6876104d5565b610eaf876104d5565b86604051602001610ec596959493929190612022565b60408051601f19818403018152919052979650505050505050565b6000610ef3610eee846122a2565b612279565b90508083825260208201905082856020860282011115610f1257600080fd5b60005b85811015610f3e5781610f28888261124b565b8452506020928301929190910190600101610f15565b5050509392505050565b6000610f56610eee846122a2565b90508083825260208201905082856020860282011115610f7557600080fd5b60005b85811015610f3e5781610f8b8882611256565b8452506020928301929190910190600101610f78565b6000610faf610eee846122c5565b905082815260208101848484011115610fc757600080fd5b610fd284828561242b565b509392505050565b6000610fe8610eee846122c5565b90508281526020810184848401111561100057600080fd5b610fd2848285612437565b600082601f83011261101c57600080fd5b81356105ef848260208601610ee0565b600082601f83011261103d57600080fd5b81356105ef848260208601610f48565b600082601f83011261105e57600080fd5b81356105ef848260208601610fa1565b600082601f83011261107f57600080fd5b81516105ef848260208601610fda565b600061010082840312156110a257600080fd5b6110ad610100612279565b905060006110bb8484611256565b82525060206110cc84848301611256565b60208301525060406110e084828501611256565b60408301525060606110f484828501611256565b60608301525060808201356001600160401b0381111561111357600080fd5b61111f8482850161104d565b60808301525060a08201356001600160401b0381111561113e57600080fd5b61114a848285016111ac565b60a08301525060c08201356001600160401b0381111561116957600080fd5b6111758482850161104d565b60c08301525060e08201356001600160401b0381111561119457600080fd5b6111a08482850161104d565b60e08301525092915050565b6000606082840312156111be57600080fd5b6111c86060612279565b905081356001600160401b038111156111e057600080fd5b6111ec8482850161102c565b82525060208201356001600160401b0381111561120857600080fd5b6112148482850161102c565b60208301525060408201356001600160401b0381111561123357600080fd5b61123f8482850161102c565b60408301525092915050565b80356108528161255c565b803561085281612573565b60006020828403121561127357600080fd5b81356001600160401b0381111561128957600080fd5b6105ef8482850161104d565b6000602082840312156112a757600080fd5b81516001600160401b038111156112bd57600080fd5b6105ef8482850161106e565b600080600080608085870312156112df57600080fd5b84356001600160401b038111156112f557600080fd5b6113018782880161108f565b94505060208501356001600160401b0381111561131d57600080fd5b6113298782880161102c565b93505060408501356001600160401b0381111561134557600080fd5b6113518782880161102c565b92505060608501356001600160401b0381111561136d57600080fd5b6113798782880161102c565b91505092959194509250565b60008060006060848603121561139a57600080fd5b60006113a6868661124b565b93505060208401356001600160401b038111156113c257600080fd5b6113ce8682870161108f565b92505060408401356001600160401b038111156113ea57600080fd5b6113f68682870161100b565b9150509250925092565b6000806040838503121561141357600080fd5b600061141f858561124b565b92505060206114308582860161124b565b9150509250929050565b60006114468383611f10565b505060200190565b600061145982612301565b6114638185612305565b935061146e836122ef565b8060005b8381101561149c578151611486888261143a565b9750611491836122ef565b925050600101611472565b509495945050505050565b60006114b282612301565b6114bc8185612305565b93506114c7836122ef565b8060005b8381101561149c5781516114df888261143a565b97506114ea836122ef565b9250506001016114cb565b600061150082612301565b61150a8185612305565b935061151a818560208601612437565b61152381612552565b9093019392505050565b600061153882612301565b61154281856104d0565b9350611552818560208601612437565b9290920192915050565b6000815461156981612467565b61157381866104d0565b945060018216801561158c576001811461159d576115cd565b60ff198316865281860193506115cd565b6115a6856122f5565b60005b838110156115c5578154888201526001909101906020016115a9565b838801955050505b50505092915050565b60006115e36028836104d0565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c8152670ed8985cd94d8d0b60c21b602082015260280192915050565b600061162d600b836104d0565b6a1e17ba32bc3a1f1e17b39f60a91b8152600b0192915050565b6000611654602a836104d0565b7f227d2c207b2274726169745f74797065223a20226c6567656e64617279222c20815269113b30b63ab2911d101160b11b6020820152602a0192915050565b60006116a06009836104d0565b68222066696c6c3d222360b81b815260090192915050565b60006116c661011f836104d0565b7f222c20226465736372697074696f6e223a202243727970747320616e6420436181527f7665726e7320697320616e206f6e636861696e206d61702067656e657261746f60208201527f7220746861742070726f647563657320616e20696e66696e697465207365742060408201527f6f662064756e67656f6e732e20456e656d6965732c2074726561737572652c2060608201527f65746320696e74656e74696f6e616c6c79206f6d697474656420666f72206f7460808201527f6865727320746f20696e746572707265742e204665656c206672656520746f2060a08201527f7573652043727970747320616e642043617665726e7320696e20616e7920776160c08201527f7920796f752077616e742e222c202261747472696275746573223a205b207b2260e08201527f74726169745f74797065223a20226e616d65222c202276616c7565223a20220061010082015261011f0192915050565b6000611831602a836104d0565b7f227d2c207b2274726169745f74797065223a2022737472756374757265222c20815269113b30b63ab2911d101160b11b6020820152602a0192915050565b600061187d6010836104d0565b6f11103c9e91169891103bb4b23a341e9160811b815260100192915050565b60006118a9602c836104d0565b7f227d2c207b2274726169745f74797065223a2022656e7669726f6e6d656e742281526b1610113b30b63ab2911d101160a11b6020820152602c0192915050565b60006118f7600a836104d0565b6911103432b4b3b43a1e9160b11b8152600a0192915050565b600061191d601c836104d0565b7f3c7465787420783d2235302220793d22352e35222077696474683d22000000008152601c0192915050565b60006119566040836104d0565b7f22206865696768743d223922207374726f6b652d77696474683d22302e33222081527f7374726f6b653d22626c61636b222066696c6c3d222346464138303022202f3e602082015260400192915050565b60006119b56004836104d0565b631110179f60e11b815260040192915050565b60006119d56001836104d0565b600f60fb1b815260010192915050565b60006119f26033836104d0565b7f227d2c207b2274726169745f74797065223a2022706f696e7473206f6620696e8152723a32b932b9ba111610113b30b63ab2911d101160691b602082015260330192915050565b6000611a476002836104d0565b61227d60f01b815260020192915050565b6000611a656026836104d0565b7f227d2c207b2274726169745f74797065223a2022646f6f7273222c202276616c8152653ab2911d101160d11b602082015260260192915050565b6000611aad6024836104d0565b7f3c67207472616e73666f726d3d227363616c65202835203529223e3c72656374815263103c1e9160e11b602082015260240192915050565b6000611af360c1836104d0565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323081527f30302f73766722207072657365727665417370656374526174696f3d22784d6960208201527f6e594d696e206d656574222076696577426f783d22302030203530302035303060408201527f222073686170652d72656e646572696e673d226372697370456467657322207460608201527f72616e73666f726d2d6f726967696e3d2263656e746572223e3c72656374207760808201527f696474683d223130302522206865696768743d2231303025222066696c6c3d2260a0820152602360f81b60c082015260c10192915050565b6000611bf4601d836104d0565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d0192915050565b6000611c2d6005836104d0565b6411103c9e9160d91b815260050192915050565b6000611c4e601e836104d0565b7f7b226e616d65223a202243727970747320616e642043617665726e73202300008152601e0192915050565b6000611c876025836104d0565b7f227d2c207b2274726169745f74797065223a202273697a65222c202276616c7581526432911d101160d91b602082015260250192915050565b6000611cce6029836104d0565b7f227d2c207b2274726169745f74797065223a2022616666696e697479222c20228152683b30b63ab2911d101160b91b602082015260290192915050565b6000611d196009836104d0565b681e3932b1ba103c1e9160b91b815260090192915050565b6000611d3e6006836104d0565b651e17b9bb339f60d11b815260060192915050565b6000611d606009836104d0565b6811103bb4b23a341e9160b91b815260090192915050565b6000611d856017836104d0565b7f2220746578742d616e63686f723d226d6964646c65223e000000000000000000815260170192915050565b6000611dbe6025836104d0565b7f2220666f6e742d66616d696c793d226d6f6e6f73706163652220666f6e742d7381526434bd329e9160d91b602082015260250192915050565b8051600090610100840190611e0d8582611f10565b506020830151611e206020860182611f10565b506040830151611e336040860182611f10565b506060830151611e466060860182611f10565b5060808301518482036080860152611e5e82826114f5565b91505060a083015184820360a0860152611e788282611eb5565b91505060c083015184820360c0860152611e9282826114f5565b91505060e083015184820360e0860152611eac82826114f5565b95945050505050565b8051606080845260009190840190611ecd828261144e565b91505060208301518482036020860152611ee7828261144e565b91505060408301518482036040860152611eac828261144e565b611f0a81612422565b82525050565b611f0a81612425565b6000611f25828561152d565b91506105ef828461152d565b6000611f3d828661152d565b9150611f49828561152d565b9150611f55828461152d565b9150611eac82611d31565b6000611f6c828761152d565b9150611f7782611910565b9150611f83828661152d565b9150611f8e82611db1565b9150611f9a828561152d565b9150611fa582611d78565b9150611fb1828461152d565b9150611fbc82611620565b9695505050505050565b6000611fd2828561152d565b9150611f25826119c8565b6000611fe9828661152d565b9150611ff482611aa0565b9150612000828561152d565b915061200b82611870565b9150612017828461152d565b9150611eac82611949565b600061202e828961152d565b915061203982611d0c565b9150612045828861152d565b915061205082611c20565b915061205c828761152d565b915061206782611d53565b9150612073828661152d565b915061207e826118ea565b915061208a828561152d565b915061209582611693565b91506120a1828461152d565b91506120ac826119a8565b98975050505050505050565b60006120c382611ae6565b91506120cf828461155c565b915061036c826119a8565b60006120e582611be7565b915061036c828461152d565b60006120fc82611c41565b9150612108828d61152d565b9150612113826116b8565b915061211f828c61152d565b915061212a82611c7a565b9150612136828b61152d565b91506121418261189c565b915061214d828a61155c565b915061215882611a58565b9150612164828961152d565b915061216f826119e5565b915061217b828861152d565b915061218682611cc1565b9150612192828761152d565b915061219d82611647565b91506121a9828661152d565b91506121b482611824565b91506121c0828561152d565b91506121cb826115d6565b91506121d7828461152d565b91506121e282611a3a565b9c9b505050505050505050505050565b6020808252810161036c81846114f5565b608080825281016122148187611df8565b9050818103602083015261222881866114a7565b9050818103604083015261223c81856114a7565b90508181036060830152611fbc81846114a7565b602081016108528284611f01565b6040810161226c8285611f01565b61036c6020830184611f01565b6040518181016001600160401b038111828210171561229a5761229a61253c565b604052919050565b60006001600160401b038211156122bb576122bb61253c565b5060209081020190565b60006001600160401b038211156122de576122de61253c565b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b600061231982612422565b915061232483612422565b92508219821115612337576123376124fa565b500190565b600061234782612425565b915061235283612425565b92508260ff03821115612337576123376124fa565b600061237282612422565b915061237d83612422565b92508261238c5761238c612510565b500490565b600061239c82612422565b91506123a783612422565b92508160001904831182151516156123c1576123c16124fa565b500290565b60006123d182612425565b91506123dc83612425565b92508160ff04831182151516156123c1576123c16124fa565b600061240082612422565b915061240b83612422565b92508282101561241d5761241d6124fa565b500390565b90565b60ff1690565b82818337506000910152565b60005b8381101561245257818101518382015260200161243a565b83811115612461576000848401525b50505050565b60028104600182168061247b57607f821691505b6020821081141561248e5761248e612526565b50919050565b600061249f82612422565b91506000198214156124b3576124b36124fa565b5060010190565b60006124c582612422565b91506124d083612422565b9250826124df576124df612510565b500690565b60006124ef82612425565b91506124d083612425565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f01601f191690565b61256581612422565b811461257057600080fd5b50565b6125658161242556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a0925f54042f2d355438bbb46bd84e71c234426ce1f21076d2fbcff8683d77d864736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063194d02d71461005157806319db2b2f1461007b57806329010f431461009b578063a662e0f4146100ae575b600080fd5b61006461005f366004611400565b6100ce565b60405161007292919061225e565b60405180910390f35b61008e610089366004611385565b610107565b60405161007291906121f2565b61008e6100a93660046112c9565b610373565b6100c16100bc366004611261565b61048f565b6040516100729190612250565b600080600083116100de57600080fd5b6100e88385612367565b91506100f48284612391565b6100fe90856123f5565b90509250929050565b60a08201518051602082015160409283015192516329010f4360e01b8152606093849330936329010f4393610142938a939291600401612203565b60006040518083038186803b15801561015a57600080fd5b505afa15801561016e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101969190810190611295565b905060006101aa856000015160ff166104d5565b85516101b89060ff166104d5565b6040516020016101c9929190611fc6565b604051602081830303815290604052905060006103436101e8886104d5565b8760e001518460188a6020015160ff166006811061021657634e487b7160e01b600052603260045260246000fd5b016102488a60018151811061023b57634e487b7160e01b600052603260045260246000fd5b60200260200101516104d5565b61026c8b60008151811061023b57634e487b7160e01b600052603260045260246000fd5b8c60c001518d6060015160ff166001146102a057604051806040016040528060028152602001614e6f60f01b8152506102bd565b6040518060400160405280600381526020016259657360e81b8152505b60408f015160ff16156102ee576040518060400160405280600681526020016521b0bb32b93760d11b81525061030d565b6040518060400160405280600581526020016410dc9e5c1d60da1b8152505b6103168d6105f7565b60405160200161032f9a999897969594939291906120f1565b6040516020818303038152906040526105f7565b90508060405160200161035691906120da565b60408051601f1981840301815291905293505050505b9392505050565b60608060008660200151600461038991906123c6565b60ff16601881106103aa57634e487b7160e01b600052603260045260246000fd5b016040516020016103bb91906120b8565b60405160208183030381529060405290506103da818760e0015161076a565b90506000806103ef886000015160ff16610858565b9150915060006040518060e001604052808381526020018481526020016104198b608001516108a4565b8152602001604051806020016040528060008152508152602001600081526020016000815260200160008152509050836104538a83610951565b6104608a8a8a8e87610ce3565b60405160200161047293929190611f31565b60408051808303601f190181529190529998505050505050505050565b60008082511161049e57600080fd5b6000806104ad845160206100ce565b909250905080156104cc576104c382600161230e565b925050506104d0565b5090505b919050565b6060816104fa57506040805180820190915260018152600360fc1b60208201526104d0565b8160005b8115610524578061050e81612494565b915061051d9050600a83612367565b91506104fe565b6000816001600160401b0381111561054c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610576576020820181803683370190505b5090505b84156105ef5761058b6001836123f5565b9150610598600a866124ba565b6105a390603061230e565b60f81b8183815181106105c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506105e8600a86612367565b945061057a565b949350505050565b8051606090806106175750506040805160208101909152600081526104d0565b6000600361062683600261230e565b6106309190612367565b61063b906004612391565b9050600061064a82602061230e565b6001600160401b0381111561066f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610699576020820181803683370190505b509050600060405180606001604052806040815260200161257d604091399050600181016020830160005b86811015610725576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016106c4565b50600386066001811461073f57600281146107505761075c565b613d3d60f01b60011983015261075c565b603d60f81b6000198301525b505050918152949350505050565b805160609060008060198311610786575060059050600361079b565b5060049050600261079860078461230e565b92505b856107d16002836107ad87600361230e565b6107b79190612391565b6107c29060646123f5565b6107cc9190612367565b6104d5565b6107ea836107e087600361230e565b6107cc9190612391565b6040516020016107fc93929190611fdd565b60408051601f1981840301815291905295508561081d6107cc856003612391565b610826846104d5565b8760405160200161083a9493929190611f60565b60405160208183030381529060405295508593505050505b92915050565b6000808061086784600661230e565b610873906101f4612367565b9050600060026108838684612391565b61088f906101f46123f5565b6108999190612367565b935090915050915091565b606060006108b18361048f565b90506000816001600160401b038111156108db57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610904578160200160208202803683370190505b509050600080805b84811015610946578260200187015191508183602001850152602083610932919061230e565b92508061093e81612494565b91505061090c565b509195945050505050565b606060005b835160ff16811015610cd857608083015160c0840152606060005b855160ff16811015610bba5761098f85604001518660800151610e0d565b60011480156109a2575060008560800151115b80156109c957506109c78560400151600187608001516109c291906123f5565b610e0d565b155b15610b3e5760a085018051906109de82612494565b9052508451865160c0870151610b3792859290916109ff9160ff16906124ba565b610a099190612391565b8760200151610a18919061230e565b8751895160c08a0151610a2e9160ff1690612367565b610a389190612391565b8860200151610a47919061230e565b885160c08a015160808b0151610a5d91906123f5565b610a679190612391565b895160208c0151600090610a7c9060046123c6565b610a8790600161233c565b60ff1660188110610aa857634e487b7160e01b600052603260045260246000fd5b018054610ab490612467565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612467565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050610e88565b9150610b95565b610b5085604001518660800151610e0d565b158015610b61575060008560800151115b8015610b855750610b818560400151600187608001516109c291906123f5565b6001145b15610b9557608085015160c08601525b60808501805190610ba582612494565b90525080610bb281612494565b915050610971565b50610bd48460400151600186608001516109c291906123f5565b610c895760a08401805190610be882612494565b9052508351855160c0860151610c869284929091610c099160ff16906124ba565b610c139190612391565b8660200151610c22919061230e565b8651885160c0890151610c389160ff1690612367565b610c429190612391565b8760200151610c51919061230e565b875160c089015160808a0151610c6791906123f5565b610c719190612391565b885160208b0151600090610a7c9060046123c6565b90505b836060015181604051602001610ca0929190611f19565b60408051601f198184030181529181526060860191909152805160208101909152600090525080610cd081612494565b915050610956565b505060600151919050565b60608060005b8551811015610e0257610dee82856000015187600001518b8581518110610d2057634e487b7160e01b600052603260045260246000fd5b6020026020010151610d3291906124e4565b60ff16610d3f9190612391565b8660200151610d4e919061230e565b86600001518a8581518110610d7357634e487b7160e01b600052603260045260246000fd5b602002602001015160ff16610d889190612391565b8760200151610d97919061230e565b87518a5181906000908d9089908110610dc057634e487b7160e01b600052603260045260246000fd5b60200260200101518c602001516004610dd991906123c6565b610de490600261233c565b610a87919061233c565b915080610dfa81612494565b915050610ce9565b509695505050505050565b6000806000610e1e846101006100ce565b9092509050610e2f82610100612391565b610e3a9060ff61230e565b841115610e4657600080fd5b610e518160ff6123f5565b858381518110610e7157634e487b7160e01b600052603260045260246000fd5b6020026020010151901c6001169250505092915050565b606086610e94876104d5565b610e9d876104d5565b610ea6876104d5565b610eaf876104d5565b86604051602001610ec596959493929190612022565b60408051601f19818403018152919052979650505050505050565b6000610ef3610eee846122a2565b612279565b90508083825260208201905082856020860282011115610f1257600080fd5b60005b85811015610f3e5781610f28888261124b565b8452506020928301929190910190600101610f15565b5050509392505050565b6000610f56610eee846122a2565b90508083825260208201905082856020860282011115610f7557600080fd5b60005b85811015610f3e5781610f8b8882611256565b8452506020928301929190910190600101610f78565b6000610faf610eee846122c5565b905082815260208101848484011115610fc757600080fd5b610fd284828561242b565b509392505050565b6000610fe8610eee846122c5565b90508281526020810184848401111561100057600080fd5b610fd2848285612437565b600082601f83011261101c57600080fd5b81356105ef848260208601610ee0565b600082601f83011261103d57600080fd5b81356105ef848260208601610f48565b600082601f83011261105e57600080fd5b81356105ef848260208601610fa1565b600082601f83011261107f57600080fd5b81516105ef848260208601610fda565b600061010082840312156110a257600080fd5b6110ad610100612279565b905060006110bb8484611256565b82525060206110cc84848301611256565b60208301525060406110e084828501611256565b60408301525060606110f484828501611256565b60608301525060808201356001600160401b0381111561111357600080fd5b61111f8482850161104d565b60808301525060a08201356001600160401b0381111561113e57600080fd5b61114a848285016111ac565b60a08301525060c08201356001600160401b0381111561116957600080fd5b6111758482850161104d565b60c08301525060e08201356001600160401b0381111561119457600080fd5b6111a08482850161104d565b60e08301525092915050565b6000606082840312156111be57600080fd5b6111c86060612279565b905081356001600160401b038111156111e057600080fd5b6111ec8482850161102c565b82525060208201356001600160401b0381111561120857600080fd5b6112148482850161102c565b60208301525060408201356001600160401b0381111561123357600080fd5b61123f8482850161102c565b60408301525092915050565b80356108528161255c565b803561085281612573565b60006020828403121561127357600080fd5b81356001600160401b0381111561128957600080fd5b6105ef8482850161104d565b6000602082840312156112a757600080fd5b81516001600160401b038111156112bd57600080fd5b6105ef8482850161106e565b600080600080608085870312156112df57600080fd5b84356001600160401b038111156112f557600080fd5b6113018782880161108f565b94505060208501356001600160401b0381111561131d57600080fd5b6113298782880161102c565b93505060408501356001600160401b0381111561134557600080fd5b6113518782880161102c565b92505060608501356001600160401b0381111561136d57600080fd5b6113798782880161102c565b91505092959194509250565b60008060006060848603121561139a57600080fd5b60006113a6868661124b565b93505060208401356001600160401b038111156113c257600080fd5b6113ce8682870161108f565b92505060408401356001600160401b038111156113ea57600080fd5b6113f68682870161100b565b9150509250925092565b6000806040838503121561141357600080fd5b600061141f858561124b565b92505060206114308582860161124b565b9150509250929050565b60006114468383611f10565b505060200190565b600061145982612301565b6114638185612305565b935061146e836122ef565b8060005b8381101561149c578151611486888261143a565b9750611491836122ef565b925050600101611472565b509495945050505050565b60006114b282612301565b6114bc8185612305565b93506114c7836122ef565b8060005b8381101561149c5781516114df888261143a565b97506114ea836122ef565b9250506001016114cb565b600061150082612301565b61150a8185612305565b935061151a818560208601612437565b61152381612552565b9093019392505050565b600061153882612301565b61154281856104d0565b9350611552818560208601612437565b9290920192915050565b6000815461156981612467565b61157381866104d0565b945060018216801561158c576001811461159d576115cd565b60ff198316865281860193506115cd565b6115a6856122f5565b60005b838110156115c5578154888201526001909101906020016115a9565b838801955050505b50505092915050565b60006115e36028836104d0565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c8152670ed8985cd94d8d0b60c21b602082015260280192915050565b600061162d600b836104d0565b6a1e17ba32bc3a1f1e17b39f60a91b8152600b0192915050565b6000611654602a836104d0565b7f227d2c207b2274726169745f74797065223a20226c6567656e64617279222c20815269113b30b63ab2911d101160b11b6020820152602a0192915050565b60006116a06009836104d0565b68222066696c6c3d222360b81b815260090192915050565b60006116c661011f836104d0565b7f222c20226465736372697074696f6e223a202243727970747320616e6420436181527f7665726e7320697320616e206f6e636861696e206d61702067656e657261746f60208201527f7220746861742070726f647563657320616e20696e66696e697465207365742060408201527f6f662064756e67656f6e732e20456e656d6965732c2074726561737572652c2060608201527f65746320696e74656e74696f6e616c6c79206f6d697474656420666f72206f7460808201527f6865727320746f20696e746572707265742e204665656c206672656520746f2060a08201527f7573652043727970747320616e642043617665726e7320696e20616e7920776160c08201527f7920796f752077616e742e222c202261747472696275746573223a205b207b2260e08201527f74726169745f74797065223a20226e616d65222c202276616c7565223a20220061010082015261011f0192915050565b6000611831602a836104d0565b7f227d2c207b2274726169745f74797065223a2022737472756374757265222c20815269113b30b63ab2911d101160b11b6020820152602a0192915050565b600061187d6010836104d0565b6f11103c9e91169891103bb4b23a341e9160811b815260100192915050565b60006118a9602c836104d0565b7f227d2c207b2274726169745f74797065223a2022656e7669726f6e6d656e742281526b1610113b30b63ab2911d101160a11b6020820152602c0192915050565b60006118f7600a836104d0565b6911103432b4b3b43a1e9160b11b8152600a0192915050565b600061191d601c836104d0565b7f3c7465787420783d2235302220793d22352e35222077696474683d22000000008152601c0192915050565b60006119566040836104d0565b7f22206865696768743d223922207374726f6b652d77696474683d22302e33222081527f7374726f6b653d22626c61636b222066696c6c3d222346464138303022202f3e602082015260400192915050565b60006119b56004836104d0565b631110179f60e11b815260040192915050565b60006119d56001836104d0565b600f60fb1b815260010192915050565b60006119f26033836104d0565b7f227d2c207b2274726169745f74797065223a2022706f696e7473206f6620696e8152723a32b932b9ba111610113b30b63ab2911d101160691b602082015260330192915050565b6000611a476002836104d0565b61227d60f01b815260020192915050565b6000611a656026836104d0565b7f227d2c207b2274726169745f74797065223a2022646f6f7273222c202276616c8152653ab2911d101160d11b602082015260260192915050565b6000611aad6024836104d0565b7f3c67207472616e73666f726d3d227363616c65202835203529223e3c72656374815263103c1e9160e11b602082015260240192915050565b6000611af360c1836104d0565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323081527f30302f73766722207072657365727665417370656374526174696f3d22784d6960208201527f6e594d696e206d656574222076696577426f783d22302030203530302035303060408201527f222073686170652d72656e646572696e673d226372697370456467657322207460608201527f72616e73666f726d2d6f726967696e3d2263656e746572223e3c72656374207760808201527f696474683d223130302522206865696768743d2231303025222066696c6c3d2260a0820152602360f81b60c082015260c10192915050565b6000611bf4601d836104d0565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d0192915050565b6000611c2d6005836104d0565b6411103c9e9160d91b815260050192915050565b6000611c4e601e836104d0565b7f7b226e616d65223a202243727970747320616e642043617665726e73202300008152601e0192915050565b6000611c876025836104d0565b7f227d2c207b2274726169745f74797065223a202273697a65222c202276616c7581526432911d101160d91b602082015260250192915050565b6000611cce6029836104d0565b7f227d2c207b2274726169745f74797065223a2022616666696e697479222c20228152683b30b63ab2911d101160b91b602082015260290192915050565b6000611d196009836104d0565b681e3932b1ba103c1e9160b91b815260090192915050565b6000611d3e6006836104d0565b651e17b9bb339f60d11b815260060192915050565b6000611d606009836104d0565b6811103bb4b23a341e9160b91b815260090192915050565b6000611d856017836104d0565b7f2220746578742d616e63686f723d226d6964646c65223e000000000000000000815260170192915050565b6000611dbe6025836104d0565b7f2220666f6e742d66616d696c793d226d6f6e6f73706163652220666f6e742d7381526434bd329e9160d91b602082015260250192915050565b8051600090610100840190611e0d8582611f10565b506020830151611e206020860182611f10565b506040830151611e336040860182611f10565b506060830151611e466060860182611f10565b5060808301518482036080860152611e5e82826114f5565b91505060a083015184820360a0860152611e788282611eb5565b91505060c083015184820360c0860152611e9282826114f5565b91505060e083015184820360e0860152611eac82826114f5565b95945050505050565b8051606080845260009190840190611ecd828261144e565b91505060208301518482036020860152611ee7828261144e565b91505060408301518482036040860152611eac828261144e565b611f0a81612422565b82525050565b611f0a81612425565b6000611f25828561152d565b91506105ef828461152d565b6000611f3d828661152d565b9150611f49828561152d565b9150611f55828461152d565b9150611eac82611d31565b6000611f6c828761152d565b9150611f7782611910565b9150611f83828661152d565b9150611f8e82611db1565b9150611f9a828561152d565b9150611fa582611d78565b9150611fb1828461152d565b9150611fbc82611620565b9695505050505050565b6000611fd2828561152d565b9150611f25826119c8565b6000611fe9828661152d565b9150611ff482611aa0565b9150612000828561152d565b915061200b82611870565b9150612017828461152d565b9150611eac82611949565b600061202e828961152d565b915061203982611d0c565b9150612045828861152d565b915061205082611c20565b915061205c828761152d565b915061206782611d53565b9150612073828661152d565b915061207e826118ea565b915061208a828561152d565b915061209582611693565b91506120a1828461152d565b91506120ac826119a8565b98975050505050505050565b60006120c382611ae6565b91506120cf828461155c565b915061036c826119a8565b60006120e582611be7565b915061036c828461152d565b60006120fc82611c41565b9150612108828d61152d565b9150612113826116b8565b915061211f828c61152d565b915061212a82611c7a565b9150612136828b61152d565b91506121418261189c565b915061214d828a61155c565b915061215882611a58565b9150612164828961152d565b915061216f826119e5565b915061217b828861152d565b915061218682611cc1565b9150612192828761152d565b915061219d82611647565b91506121a9828661152d565b91506121b482611824565b91506121c0828561152d565b91506121cb826115d6565b91506121d7828461152d565b91506121e282611a3a565b9c9b505050505050505050505050565b6020808252810161036c81846114f5565b608080825281016122148187611df8565b9050818103602083015261222881866114a7565b9050818103604083015261223c81856114a7565b90508181036060830152611fbc81846114a7565b602081016108528284611f01565b6040810161226c8285611f01565b61036c6020830184611f01565b6040518181016001600160401b038111828210171561229a5761229a61253c565b604052919050565b60006001600160401b038211156122bb576122bb61253c565b5060209081020190565b60006001600160401b038211156122de576122de61253c565b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b600061231982612422565b915061232483612422565b92508219821115612337576123376124fa565b500190565b600061234782612425565b915061235283612425565b92508260ff03821115612337576123376124fa565b600061237282612422565b915061237d83612422565b92508261238c5761238c612510565b500490565b600061239c82612422565b91506123a783612422565b92508160001904831182151516156123c1576123c16124fa565b500290565b60006123d182612425565b91506123dc83612425565b92508160ff04831182151516156123c1576123c16124fa565b600061240082612422565b915061240b83612422565b92508282101561241d5761241d6124fa565b500390565b90565b60ff1690565b82818337506000910152565b60005b8381101561245257818101518382015260200161243a565b83811115612461576000848401525b50505050565b60028104600182168061247b57607f821691505b6020821081141561248e5761248e612526565b50919050565b600061249f82612422565b91506000198214156124b3576124b36124fa565b5060010190565b60006124c582612422565b91506124d083612422565b9250826124df576124df612510565b500690565b60006124ef82612425565b91506124d083612425565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f01601f191690565b61256581612422565b811461257057600080fd5b50565b6125658161242556fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a0925f54042f2d355438bbb46bd84e71c234426ce1f21076d2fbcff8683d77d864736f6c63430008000033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.