ERC-721
Overview
Max Total Supply
0 SDC
Holders
135
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SDCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Palmdeamon
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense import "@rari-capital/solmate/src/tokens/ERC721.sol"; import "./metadata.sol"; pragma solidity ^0.8.0; contract Palmdeamon is ERC721, Metadata { address public admin; address public verificationcontract; mapping(uint256 => tdata) public tokendata; struct tdata { uint256 moisture; uint256 temperature; uint256 colorandlocation; string rtimestamp; } constructor(address _admin) ERC721("Seed Capital", "SDC") { admin = _admin; } function tokenURI(uint256 id) public view override returns (string memory) { return generatemetadata( id, tokendata[id].moisture, tokendata[id].temperature, tokendata[id].colorandlocation, tokendata[id].rtimestamp ); } function setverificationcontract(address _verificationcontract) public { require(msg.sender == admin, "only admin can set verificationcontract"); verificationcontract = _verificationcontract; } function setadmin(address newadmin) public { require(msg.sender == admin, "only admin can set admin"); admin = newadmin; } function generatecolorprofile( uint256 profile, string memory firsthex, string memory secondhex, string memory venue, string memory plant, string memory curator ) public { require(msg.sender == admin, "only admin can set colorprofile"); _generatecolorprofile( profile, firsthex, secondhex, venue, plant, curator ); } function mintafterverification( uint256 value1, uint256 value2, uint256 colorpointer, uint256 tokenid, string memory rtimestamp ) public { require( msg.sender == verificationcontract, "minting can only be called from verification contract" ); require( verificationcontract != address(0), "no verification contract set" ); tokendata[tokenid].moisture = value1; tokendata[tokenid].temperature = value2; tokendata[tokenid].colorandlocation = colorpointer; tokendata[tokenid].rtimestamp = rtimestamp; _mint(tx.origin, tokenid); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) /// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC. abstract contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = ownerOf[id]; require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { balanceOf[to]++; } ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = ownerOf[id]; require(ownerOf[id] != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { balanceOf[owner]--; } delete ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } /*/////////////////////////////////////////////////////////////// INTERNAL SAFE MINT LOGIC //////////////////////////////////////////////////////////////*/ function _safeMint(address to, uint256 id) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function _safeMint( address to, uint256 id, bytes memory data ) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) interface ERC721TokenReceiver { function onERC721Received( address operator, address from, uint256 id, bytes calldata data ) external returns (bytes4); }
pragma solidity ^0.8.0; import "./generativesvg.sol"; contract Metadata is GenerativeSvg { function generatemetadata( uint256 id, uint256 moisture, uint256 temperature, uint256 locationcolor, string memory rtimestamp ) public view returns (string memory) { string memory name = generatename(id); string memory description = "Seed Capital - Certificates of Growth"; string memory attributes = generateattributes( cschemes[locationcolor].venue, cschemes[locationcolor].curator ); string memory image = getsvgbase64( moisture, temperature, locationcolor, rtimestamp, id ); return string( abi.encodePacked( "data:text/plain," '{"name":"', name, '", "description":"', description, '", "image": "', image, '",', '"attributes": ', attributes, "}" ) ); } function generatename(uint256 tokenId) internal pure returns (string memory) { return string( abi.encodePacked( "Certificate of Growth ", Strings.toString(tokenId) ) ); } function generateattributes( string memory venue, string memory curator ) internal pure returns (string memory) { return string( abi.encodePacked( "[", '{"trait_type":"Venue",', '"value":"', venue, '"},', '{"trait_type":"Curator",', '"value":"', curator, '"}' "]" ) ); } }
pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Strings.sol"; import "base64-sol/base64.sol"; //mapfunction example moisture: 411,300,1000,3600,5600 mapfactor: 1000 // moisture: 1013, temperature: 20.125, contract GenerativeSvg { using Strings for string; string internal header = "<?xml version='1.0' encoding='UTF-8'?><svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='480px' height='740px' viewBox='0 0 480 740' enable-background='new 0 0 480 740' xml:space='preserve'>"; string internal background = "<rect y='140' fill='#141414' width='480' height='500'/>"; uint256 mapfactor; mapping(uint256 => colorscheme) cschemes; struct colorscheme { string firsthex; string secondhex; string venue; string plant; string curator; } constructor() { cschemes[0].firsthex = "#f63f3c"; cschemes[0].secondhex = "#13b9bc"; cschemes[0].venue = "Art Dubai"; cschemes[0].plant = "Dypsis lutescens"; cschemes[0].curator = "Fingerprints DAO"; cschemes[1].firsthex = "#ffea00"; cschemes[1].secondhex = "#481249"; cschemes[2].firsthex = "#167d5e"; cschemes[2].secondhex = "#5e67b0"; mapfactor = 100; } function mapvalue( uint256 value, uint256 leftMin, uint256 leftMax, uint256 rightMin, uint256 rightMax ) public view returns (uint256) { uint256 leftSpan = leftMax - leftMin; uint256 rightSpan = rightMax - rightMin; uint256 s = (value - leftMin) * mapfactor; uint256 valueScaled = s / uint256(leftSpan); return rightMin + (valueScaled * rightSpan) / mapfactor; } function _generatecolorprofile( uint256 profile, string memory firsthex, string memory secondhex, string memory venue, string memory plant, string memory curator ) internal { cschemes[profile].firsthex = firsthex; cschemes[profile].secondhex = secondhex; cschemes[profile].venue = venue; cschemes[profile].plant = plant; cschemes[profile].curator = curator; } function buildhsl(uint256 temp, uint256 moisture) internal view returns (string memory) { string memory h = Strings.toString( mapvalue(moisture, 70000, 80000, 0, 360) ); string memory l = Strings.toString( mapvalue(temp, 19000, 23000, 50, 100) ); return string(abi.encodePacked("hsl(", h, ",100%,", l, "%)")); //= 'hsl(0, 100%, 50%)'; } function gradienty(uint256 temp) internal view returns (string memory) { return Strings.toString(mapvalue(temp, 19000, 23000, 300, 1000)); } function gradientx(uint256 moisture) internal view returns (string memory) { return Strings.toString(mapvalue(moisture, 70000, 80000, 50, 700)); } function gradientz(uint256 moisture) internal view returns (string memory) { return Strings.toString(mapvalue(moisture, 70000, 80000, 100, 500)); } function lineargradienty(uint256 temp, uint256 locationcolor) internal view returns (string memory) { return string( abi.encodePacked( "<linearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='180.0005' y1='", gradienty(temp), "' x2='180.0005' y2='160.0005'> <stop offset='0' style='stop-color:", cschemes[locationcolor].secondhex, ";stop-opacity:0'/><stop offset='0.5' style='stop-color:", cschemes[locationcolor].secondhex, "'/> <stop offset='1' style='stop-color:", cschemes[locationcolor].secondhex, ";stop-opacity:0'/></linearGradient> <rect y='160' fill='url(#SVGID_1_)' width='360' height='480'/>" ) ); } function lineargradientx(uint256 moisture, uint256 locationcolor) internal view returns (string memory) { return string( abi.encodePacked( "<linearGradient id='SVGID_2_' gradientUnits='userSpaceOnUse' x1='0' y1='400' x2='", gradientx(moisture), "' y2='400'><stop offset='0' style='stop-color:", cschemes[locationcolor].firsthex, ";stop-opacity:0'/><stop offset='0.5' style='stop-color:", cschemes[locationcolor].firsthex, "'/> <stop offset='1' style='stop-color:", cschemes[locationcolor].firsthex, ";stop-opacity:0'/></linearGradient> <rect y='160' fill='url(#SVGID_2_)' width='360' height='480'/>" ) ); } function lineargradientz(uint256 temp, uint256 moisture) internal view returns (string memory) { return string( abi.encodePacked( "<linearGradient id='SVGID_3_' gradientUnits='userSpaceOnUse' x1='220.0225' y1='329.4453' x2='", gradientz(moisture), "' y2='219.445' gradientTransform='matrix(3.6 0 0 3.6 -684.0762 -606)'> <stop offset='0' style='stop-color:", buildhsl(temp, moisture), ";stop-opacity:0'/> <stop offset='1' style='stop-color:", buildhsl(temp, moisture), "'/> </linearGradient> <rect y='220' fill='url(#SVGID_3_)' width='360.001' height='360'/>" ) ); } function returnfixtext() internal pure returns (string memory) { return "<text transform='matrix(1 0 0 1 10 185.2061)' font-family='Arial' font-size='16'>Soil Moisture (x-axis)</text><text transform='matrix(1 0 0 1 10 141.4561)' font-family='Arial' font-size='16'>Time</text><text transform='matrix(1 0 0 1 10 605.2061)' font-family='Arial' font-size='16'>Plant</text><text transform='matrix(1 0 0 1 10 651.4561)' font-family='Arial' font-size='16'>Location</text><text transform='matrix(1 0 0 1 250 185.2061)' font-family='Arial' font-size='16'>Temperature (y-axis)</text><text transform='matrix(1 0 0 1 427.0029 241.4556)' fill='#EBEBEB' font-family='Arial' font-size='16'>terra0</text><text transform='matrix(1 0 0 1 9 80.7349)' fill='#141414' font-family='Times-Roman, Times' font-size='45'>Certificate of Growth </text>"; } function buildpercentage(uint256 percentage) public pure returns (string memory) { return string( abi.encodePacked( Strings.toString((percentage % 100000) / 1000), ",", Strings.toString((percentage % 1000) / 10) ) ); } function xypoint(uint256 moisture, uint256 temperature) internal view returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 ", Strings.toString(mapvalue(moisture, 70000, 80000, 0, 335)), " ", Strings.toString( 580 - (mapvalue(temperature, 19000, 23000, 245, 580) - 245) ), ")' fill='#EBEBEB' font-family='Courier, monospace' font-size='40'>+</text>" ) ); } function buildmoisture(uint256 moisture) internal pure returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 9 205.3359)' fill='#141414' font-family='Courier, monospace' font-size='24'>", buildpercentage(moisture), "%</text>" ) ); } function buildtemperature(uint256 temperature) internal pure returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 249 205.3364)' fill='#141414' font-family='Courier, monospace' font-size='24'>", buildpercentage(temperature), "C</text>" ) ); } function buildlocation(uint256 colorpointer) internal view returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 10 671.5859)'><tspan x='0' y='0' fill='#141414' font-family='Courier, monospace' font-size='24'>", cschemes[colorpointer].venue, "</tspan><tspan x='0' y='20' fill='#141414' font-family='Courier' font-size='24'>", cschemes[colorpointer].curator, "</tspan></text>" ) ); } function buildtokennumber(uint256 tokenid) internal pure returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 412.3906 80)' fill='#141414' font-family='Courier, monospace' font-size='24'>", Strings.toString(tokenid), "</text>" ) ); } function buildbars(uint256 moisture, uint256 temp) internal view returns (string memory) { return string( abi.encodePacked( "<text transform='matrix(1 0 0 1 360 ", Strings.toString( 650 - mapvalue(moisture, 70000, 80000, 250, 390) ), ")' fill='#EBEBEB' font-family='Courier, monospace' font-size='49'>_</text>", "<text transform='matrix(1 0 0 1 390 ", Strings.toString( 650 - mapvalue(temp, 19000, 23000, 250, 390) ), ")' fill='#EBEBEB' font-family='Courier, monospace' font-size='49'>_</text>" ) ); } function returndynamictext( uint256 moisture, uint256 temp, uint256 locationcolor, string memory humantimestamp, uint256 tokenid ) internal view returns (string memory) { return string( abi.encodePacked( buildtemperature(temp), buildmoisture(moisture), buildlocation(locationcolor), "<text transform='matrix(1 0 0 1 10 625.3359)' fill='#141414' font-family='Courier, monospace' font-size='24'>", cschemes[locationcolor].plant, "</text>", buildtokennumber(tokenid), "<text transform='matrix(1 0 0 1 10 161.5859)' fill='#141414' font-family='Courier, monospace' font-size='24'>", humantimestamp, "</text>" ) ); } function generatebars() internal pure returns (string memory) { return string( abi.encodePacked( "<linearGradient id='SVGID_4_' gradientUnits='userSpaceOnUse' x1='405' y1='580' x2='405' y2='220.1191'> <stop offset='0' style='stop-color:#00FF00'/> <stop offset='1' style='stop-color:#C2000B'/> </linearGradient> <rect x='390' y='220.119' fill='url(#SVGID_4_)' width='30' height='359.881'/><linearGradient id='SVGID_5_' gradientUnits='userSpaceOnUse' x1='375' y1='580' x2='375' y2='220.1191'> <stop offset='0' style='stop-color:#141414'/> <stop offset='1' style='stop-color:#00A0C6'/> </linearGradient>", "<path opacity='0.25' fill='none' stroke='#EBEBEB' stroke-width='2' stroke-miterlimit='10' d='M300,220v360 M240,220v360 M180,220 v360 M120,220v360 M60,220v360 M360,520H0 M360,460H0 M360,400H0 M360,340H0 M360,280H0'/><rect x='360' y='260' opacity='0.25' fill='#EBEBEB' width='30' height='120'/><rect x='390' y='240' opacity='0.25' fill='#EBEBEB' width='30' height='160'/>", "<rect x='360' y='220.119' fill='url(#SVGID_5_)' width='30' height='359.881'/>" ) ); } function generatesvg( uint256 moisture, uint256 temp, uint256 locationcolor, string memory humantimestamp, uint256 id ) public view returns (string memory) { return string( abi.encodePacked( header, background, generatebars(), lineargradienty(temp, locationcolor), lineargradientx(moisture, locationcolor), lineargradientz(temp, moisture), "<path fill='#EBEBEB' d='M0,580v160h480V580H0z'/> <path fill='#EBEBEB' d='M0,0v220h480V0H0z'/>", "<path opacity='0.25' fill='none' stroke='#EBEBEB' stroke-width='2' stroke-miterlimit='10' d='M300,220v360 M240,220v360 M180,220v360 M120,220v360 M60,220v360 M360,520H0 M360,460H0 M360,400H0 M360,340H0 M360,280H0'/>", returnfixtext(), returndynamictext( moisture, temp, locationcolor, humantimestamp, id ), xypoint(moisture, temp), buildbars(moisture, temp), "</svg >" ) ); } function getsvgbase64( uint256 moisture, uint256 temperature, uint256 locationcolor, string memory humantimestamp, uint256 id ) public view returns (string memory) { return string( abi.encodePacked( "data:image/svg+xml;base64,", Base64.encode( bytes( generatesvg( moisture, temperature, locationcolor, humantimestamp, id ) ) ) ) ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } }
// 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"buildpercentage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"profile","type":"uint256"},{"internalType":"string","name":"firsthex","type":"string"},{"internalType":"string","name":"secondhex","type":"string"},{"internalType":"string","name":"venue","type":"string"},{"internalType":"string","name":"plant","type":"string"},{"internalType":"string","name":"curator","type":"string"}],"name":"generatecolorprofile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"moisture","type":"uint256"},{"internalType":"uint256","name":"temperature","type":"uint256"},{"internalType":"uint256","name":"locationcolor","type":"uint256"},{"internalType":"string","name":"rtimestamp","type":"string"}],"name":"generatemetadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"moisture","type":"uint256"},{"internalType":"uint256","name":"temp","type":"uint256"},{"internalType":"uint256","name":"locationcolor","type":"uint256"},{"internalType":"string","name":"humantimestamp","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"generatesvg","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"moisture","type":"uint256"},{"internalType":"uint256","name":"temperature","type":"uint256"},{"internalType":"uint256","name":"locationcolor","type":"uint256"},{"internalType":"string","name":"humantimestamp","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getsvgbase64","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"leftMin","type":"uint256"},{"internalType":"uint256","name":"leftMax","type":"uint256"},{"internalType":"uint256","name":"rightMin","type":"uint256"},{"internalType":"uint256","name":"rightMax","type":"uint256"}],"name":"mapvalue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value1","type":"uint256"},{"internalType":"uint256","name":"value2","type":"uint256"},{"internalType":"uint256","name":"colorpointer","type":"uint256"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"rtimestamp","type":"string"}],"name":"mintafterverification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newadmin","type":"address"}],"name":"setadmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_verificationcontract","type":"address"}],"name":"setverificationcontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokendata","outputs":[{"internalType":"uint256","name":"moisture","type":"uint256"},{"internalType":"uint256","name":"temperature","type":"uint256"},{"internalType":"uint256","name":"colorandlocation","type":"uint256"},{"internalType":"string","name":"rtimestamp","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"verificationcontract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260405180610120016040528060f58152602001620064a360f59139600690805190602001906200003692919062000502565b506040518060600160405280603781526020016200659860379139600790805190602001906200006892919062000502565b503480156200007657600080fd5b50604051620065cf380380620065cf83398181016040528101906200009c9190620005c9565b6040518060400160405280600c81526020017f53656564204361706974616c00000000000000000000000000000000000000008152506040518060400160405280600381526020017f534443000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012092919062000502565b5080600190805190602001906200013992919062000502565b5050506040518060400160405280600781526020017f23663633663363000000000000000000000000000000000000000000000000008152506009600080815260200190815260200160002060000190805190602001906200019d92919062000502565b506040518060400160405280600781526020017f2331336239626300000000000000000000000000000000000000000000000000815250600960008081526020019081526020016000206001019080519060200190620001ff92919062000502565b506040518060400160405280600981526020017f41727420447562616900000000000000000000000000000000000000000000008152506009600080815260200190815260200160002060020190805190602001906200026192919062000502565b506040518060400160405280601081526020017f447970736973206c7574657363656e7300000000000000000000000000000000815250600960008081526020019081526020016000206003019080519060200190620002c392919062000502565b506040518060400160405280601081526020017f46696e6765727072696e74732044414f000000000000000000000000000000008152506009600080815260200190815260200160002060040190805190602001906200032592919062000502565b506040518060400160405280600781526020017f2366666561303000000000000000000000000000000000000000000000000000815250600960006001815260200190815260200160002060000190805190602001906200038892919062000502565b506040518060400160405280600781526020017f233438313234390000000000000000000000000000000000000000000000000081525060096000600181526020019081526020016000206001019080519060200190620003eb92919062000502565b506040518060400160405280600781526020017f2331363764356500000000000000000000000000000000000000000000000000815250600960006002815260200190815260200160002060000190805190602001906200044e92919062000502565b506040518060400160405280600781526020017f233565363762300000000000000000000000000000000000000000000000000081525060096000600281526020019081526020016000206001019080519060200190620004b192919062000502565b50606460088190555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620006a8565b828054620005109062000629565b90600052602060002090601f01602090048101928262000534576000855562000580565b82601f106200054f57805160ff191683800117855562000580565b8280016001018555821562000580579182015b828111156200057f57825182559160200191906001019062000562565b5b5090506200058f919062000593565b5090565b5b80821115620005ae57600081600090555060010162000594565b5090565b600081519050620005c3816200068e565b92915050565b600060208284031215620005dc57600080fd5b6000620005ec84828501620005b2565b91505092915050565b6000620006028262000609565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200064257607f821691505b602082108114156200065957620006586200065f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200069981620005f5565b8114620006a557600080fd5b50565b615deb80620006b86000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b88d4fde11610097578063dded49cb11610071578063dded49cb146104a7578063e4939f9d146104c3578063e985e9c5146104e1578063f851a4401461051157610173565b8063b88d4fde1461042b578063c6643c9b14610447578063c87b56dd1461047757610173565b806370a082311461033157806374cfa50a14610361578063864f98b11461039157806395d89b41146103c1578063a22cb465146103df578063b0703efd146103fb57610173565b806323b872dd1161013057806323b872dd1461025e5780633bf717761461027a57806342842e0e14610296578063507d7f42146102b257806357c8081b146102ce5780636352211e1461030157610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f6578063128c5b5614610212578063131a4ad414610242575b600080fd5b610192600480360381019061018d919061293b565b61052f565b60405161019f9190613cbd565b60405180910390f35b6101b06105c1565b6040516101bd9190613cd8565b60405180910390f35b6101e060048036038101906101db919061298d565b61064f565b6040516101ed9190613c0c565b60405180910390f35b610210600480360381019061020b91906128ff565b610682565b005b61022c6004803603810190610227919061298d565b61086b565b6040516102399190613cd8565b60405180910390f35b61025c600480360381019061025791906129b6565b6108da565b005b610278600480360381019061027391906127f9565b610980565b005b610294600480360381019061028f9190612b46565b610d80565b005b6102b060048036038101906102ab91906127f9565b610f2f565b005b6102cc60048036038101906102c79190612794565b611076565b005b6102e860048036038101906102e3919061298d565b61114a565b6040516102f89493929190613e55565b60405180910390f35b61031b6004803603810190610316919061298d565b611202565b6040516103289190613c0c565b60405180910390f35b61034b60048036038101906103469190612794565b611235565b6040516103589190613e3a565b60405180910390f35b61037b60048036038101906103769190612b46565b61124d565b6040516103889190613cd8565b60405180910390f35b6103ab60048036038101906103a69190612ab7565b611409565b6040516103b89190613cd8565b60405180910390f35b6103c961144a565b6040516103d69190613cd8565b60405180910390f35b6103f960048036038101906103f491906128c3565b6114d8565b005b61041560048036038101906104109190612bd5565b6115d5565b6040516104229190613e3a565b60405180910390f35b61044560048036038101906104409190612848565b611656565b005b610461600480360381019061045c9190612ab7565b6117a0565b60405161046e9190613cd8565b60405180910390f35b610491600480360381019061048c919061298d565b611828565b60405161049e9190613cd8565b60405180910390f35b6104c160048036038101906104bc9190612794565b61191e565b005b6104cb6119f2565b6040516104d89190613c0c565b60405180910390f35b6104fb60048036038101906104f691906127bd565b611a18565b6040516105089190613cbd565b60405180910390f35b610519611a47565b6040516105269190613c0c565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058a57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ba5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546105ce9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546105fa9061414b565b80156106475780601f1061061c57610100808354040283529160200191610647565b820191906000526020600020905b81548152906001019060200180831161062a57829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061077a5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b090613dfa565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60606108916103e8620186a08461088291906141f7565b61088c9190613fd6565b611a6d565b6108b3600a6103e8856108a491906141f7565b6108ae9190613fd6565b611a6d565b6040516020016108c49291906136e3565b6040516020818303038152906040529050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190613d9a565b60405180910390fd5b610978868686868686611c1a565b505050505050565b6003600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890613e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613d1a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b2957506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610bba5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613dfa565b60405180910390fd5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613cfa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613d7a565b60405180910390fd5b84600c60008481526020019081526020016000206000018190555083600c60008481526020019081526020016000206001018190555082600c60008481526020019081526020016000206002018190555080600c60008481526020019081526020016000206003019080519060200190610f1d9291906125b8565b50610f283283611cf9565b5050505050565b610f3a838383610980565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611032575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610fbf93929190613c73565b602060405180830381600087803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612964565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613d5a565b60405180910390fd5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613d3a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60205280600052604060002060009150905080600001549080600101549080600201549080600301805461117f9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546111ab9061414b565b80156111f85780601f106111cd576101008083540402835291602001916111f8565b820191906000526020600020905b8154815290600101906020018083116111db57829003601f168201915b5050505050905084565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b6060600061125a87611f0c565b90506000604051806060016040528060258152602001615d5160259139905060006113c160096000888152602001908152602001600020600201805461129f9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546112cb9061414b565b80156113185780601f106112ed57610100808354040283529160200191611318565b820191906000526020600020905b8154815290600101906020018083116112fb57829003601f168201915b505050505060096000898152602001908152602001600020600401805461133e9061414b565b80601f016020809104026020016040519081016040528092919081815260200182805461136a9061414b565b80156113b75780601f1061138c576101008083540402835291602001916113b7565b820191906000526020600020905b81548152906001019060200180831161139a57829003601f168201915b5050505050611f3d565b905060006113d2898989898e611409565b9050838382846040516020016113eb94939291906139e7565b60405160208183030381529060405294505050505095945050505050565b606061142061141b87878787876117a0565b611f69565b6040516020016114309190613bea565b604051602081830303815290604052905095945050505050565b600180546114579061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546114839061414b565b80156114d05780601f106114a5576101008083540402835291602001916114d0565b820191906000526020600020905b8154815290600101906020018083116114b357829003601f168201915b505050505081565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115c99190613cbd565b60405180910390a35050565b60008085856115e49190614061565b9050600084846115f49190614061565b90506000600854888a6116079190614061565b6116119190614007565b9050600083826116219190613fd6565b905060085483826116329190614007565b61163c9190613fd6565b876116479190613f80565b94505050505095945050505050565b611661848484610980565b60008373ffffffffffffffffffffffffffffffffffffffff163b148061175b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016116e89493929190613c27565b602060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a9190612964565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b61179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613d5a565b60405180910390fd5b50505050565b6060600660076117ae612108565b6117b8888861212d565b6117c28a896121a4565b6117cc8a8c61221b565b6117d4612263565b6117e18d8d8d8d8d612286565b6117eb8e8e6122f2565b6117f58f8f61236f565b60405160200161180e9a99989796959493929190613712565b604051602081830303815290604052905095945050505050565b606061191782600c600085815260200190815260200160002060000154600c600086815260200190815260200160002060010154600c600087815260200190815260200160002060020154600c600088815260200190815260200160002060030180546118949061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546118c09061414b565b801561190d5780601f106118e25761010080835404028352916020019161190d565b820191906000526020600020905b8154815290600101906020018083116118f057829003601f168201915b505050505061124d565b9050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613dba565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000821415611ab5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c15565b600082905060005b60008214611ae7578080611ad0906141ae565b915050600a82611ae09190613fd6565b9150611abd565b60008167ffffffffffffffff811115611b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b5b5781602001600182028036833780820191505090505b5090505b60008514611c0e57600182611b749190614061565b9150600a85611b8391906141f7565b6030611b8f9190613f80565b60f81b818381518110611bcb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c079190613fd6565b9450611b5f565b8093505050505b919050565b84600960008881526020019081526020016000206000019080519060200190611c449291906125b8565b5083600960008881526020019081526020016000206001019080519060200190611c6f9291906125b8565b5082600960008881526020019081526020016000206002019080519060200190611c9a9291906125b8565b5081600960008881526020019081526020016000206003019080519060200190611cc59291906125b8565b5080600960008881526020019081526020016000206004019080519060200190611cf09291906125b8565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290613dda565b60405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6060611f1782611a6d565b604051602001611f279190613ad8565b6040516020818303038152906040529050919050565b60608282604051602001611f52929190613a67565b604051602081830303815290604052905092915050565b6060600082511415611f8c57604051806020016040528060008152509050612103565b6000604051806060016040528060408152602001615d766040913990506000600360028551611fbb9190613f80565b611fc59190613fd6565b6004611fd19190614007565b90506000602082611fe29190613f80565b67ffffffffffffffff811115612021577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120535781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156120c2576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612067565b6003895106600181146120dc57600281146120ec576120f7565b613d3d60f01b60028303526120f7565b603d60f81b60018303525b50505050508093505050505b919050565b606060405160200161211990613b6f565b604051602081830303815290604052905090565b6060612138836123ed565b60096000848152602001908152602001600020600101600960008581526020019081526020016000206001016009600086815260200190815260200160002060010160405160200161218d9493929190613831565b604051602081830303815290604052905092915050565b60606121af83612413565b6009600084815260200190815260200160002060000160096000858152602001908152602001600020600001600960008681526020019081526020016000206000016040516020016122049493929190613afa565b604051602081830303815290604052905092915050565b60606122268261243a565b6122308484612461565b61223a8585612461565b60405160200161224c9392919061398a565b604051602081830303815290604052905092915050565b60606040518061032001604052806102ef8152602001615a626102ef9139905090565b6060612291856124d0565b61229a87612501565b6122a386612532565b600960008881526020019081526020016000206003016122c286612587565b876040516020016122d89695949392919061365f565b604051602081830303815290604052905095945050505050565b606061231261230d846201117062013880600061014f6115d5565b611a6d565b61234760f561232b85614a386159d860f56102446115d5565b6123359190614061565b6102446123429190614061565b611a6d565b6040516020016123589291906138a6565b604051602081830303815290604052905092915050565b606061239c61238a84620111706201388060fa6101866115d5565b61028a6123979190614061565b611a6d565b6123c56123b384614a386159d860fa6101866115d5565b61028a6123c09190614061565b611a6d565b6040516020016123d6929190613b9a565b604051602081830303815290604052905092915050565b606061240c61240783614a386159d861012c6103e86115d5565b611a6d565b9050919050565b606061243361242e83620111706201388060326102bc6115d5565b611a6d565b9050919050565b606061245a61245583620111706201388060646101f46115d5565b611a6d565b9050919050565b6060600061248361247e84620111706201388060006101686115d5565b611a6d565b905060006124a261249d86614a386159d8603260646115d5565b611a6d565b905081816040516020016124b7929190613945565b6040516020818303038152906040529250505092915050565b60606124db8261086b565b6040516020016124eb9190613804565b6040516020818303038152906040529050919050565b606061250c8261086b565b60405160200161251c9190613918565b6040516020818303038152906040529050919050565b606060096000838152602001908152602001600020600201600960008481526020019081526020016000206004016040516020016125719291906137bf565b6040516020818303038152906040529050919050565b606061259282611a6d565b6040516020016125a291906138eb565b6040516020818303038152906040529050919050565b8280546125c49061414b565b90600052602060002090601f0160209004810192826125e6576000855561262d565b82601f106125ff57805160ff191683800117855561262d565b8280016001018555821561262d579182015b8281111561262c578251825591602001919060010190612611565b5b50905061263a919061263e565b5090565b5b8082111561265757600081600090555060010161263f565b5090565b600061266e61266984613ec6565b613ea1565b90508281526020810184848401111561268657600080fd5b612691848285614109565b509392505050565b60006126ac6126a784613ef7565b613ea1565b9050828152602081018484840111156126c457600080fd5b6126cf848285614109565b509392505050565b6000813590506126e681615a05565b92915050565b6000813590506126fb81615a1c565b92915050565b60008135905061271081615a33565b92915050565b60008151905061272581615a33565b92915050565b600082601f83011261273c57600080fd5b813561274c84826020860161265b565b91505092915050565b600082601f83011261276657600080fd5b8135612776848260208601612699565b91505092915050565b60008135905061278e81615a4a565b92915050565b6000602082840312156127a657600080fd5b60006127b4848285016126d7565b91505092915050565b600080604083850312156127d057600080fd5b60006127de858286016126d7565b92505060206127ef858286016126d7565b9150509250929050565b60008060006060848603121561280e57600080fd5b600061281c868287016126d7565b935050602061282d868287016126d7565b925050604061283e8682870161277f565b9150509250925092565b6000806000806080858703121561285e57600080fd5b600061286c878288016126d7565b945050602061287d878288016126d7565b935050604061288e8782880161277f565b925050606085013567ffffffffffffffff8111156128ab57600080fd5b6128b78782880161272b565b91505092959194509250565b600080604083850312156128d657600080fd5b60006128e4858286016126d7565b92505060206128f5858286016126ec565b9150509250929050565b6000806040838503121561291257600080fd5b6000612920858286016126d7565b92505060206129318582860161277f565b9150509250929050565b60006020828403121561294d57600080fd5b600061295b84828501612701565b91505092915050565b60006020828403121561297657600080fd5b600061298484828501612716565b91505092915050565b60006020828403121561299f57600080fd5b60006129ad8482850161277f565b91505092915050565b60008060008060008060c087890312156129cf57600080fd5b60006129dd89828a0161277f565b965050602087013567ffffffffffffffff8111156129fa57600080fd5b612a0689828a01612755565b955050604087013567ffffffffffffffff811115612a2357600080fd5b612a2f89828a01612755565b945050606087013567ffffffffffffffff811115612a4c57600080fd5b612a5889828a01612755565b935050608087013567ffffffffffffffff811115612a7557600080fd5b612a8189828a01612755565b92505060a087013567ffffffffffffffff811115612a9e57600080fd5b612aaa89828a01612755565b9150509295509295509295565b600080600080600060a08688031215612acf57600080fd5b6000612add8882890161277f565b9550506020612aee8882890161277f565b9450506040612aff8882890161277f565b935050606086013567ffffffffffffffff811115612b1c57600080fd5b612b2888828901612755565b9250506080612b398882890161277f565b9150509295509295909350565b600080600080600060a08688031215612b5e57600080fd5b6000612b6c8882890161277f565b9550506020612b7d8882890161277f565b9450506040612b8e8882890161277f565b9350506060612b9f8882890161277f565b925050608086013567ffffffffffffffff811115612bbc57600080fd5b612bc888828901612755565b9150509295509295909350565b600080600080600060a08688031215612bed57600080fd5b6000612bfb8882890161277f565b9550506020612c0c8882890161277f565b9450506040612c1d8882890161277f565b9350506060612c2e8882890161277f565b9250506080612c3f8882890161277f565b9150509295509295909350565b612c5581614095565b82525050565b612c64816140a7565b82525050565b6000612c7582613f3d565b612c7f8185613f53565b9350612c8f818560208601614118565b612c98816142e4565b840191505092915050565b6000612cae82613f48565b612cb88185613f64565b9350612cc8818560208601614118565b612cd1816142e4565b840191505092915050565b6000612ce782613f48565b612cf18185613f75565b9350612d01818560208601614118565b80840191505092915050565b60008154612d1a8161414b565b612d248186613f75565b94506001821660008114612d3f5760018114612d5057612d83565b60ff19831686528186019350612d83565b612d5985613f28565b60005b83811015612d7b57815481890152600182019150602081019050612d5c565b838801955050505b50505092915050565b6000612d99606d83613f75565b9150612da4826142f5565b606d82019050919050565b6000612dbc606283613f75565b9150612dc782614390565b606282019050919050565b6000612ddf600f83613f75565b9150612dea8261442b565b600f82019050919050565b6000612e02608083613f75565b9150612e0d82614454565b608082019050919050565b6000612e25602483613f75565b9150612e30826144ef565b602482019050919050565b6000612e48600283613f75565b9150612e538261453e565b600282019050919050565b6000612e6b600883613f75565b9150612e7682614567565b600882019050919050565b6000612e8e600683613f75565b9150612e9982614590565b600682019050919050565b6000612eb1601683613f75565b9150612ebc826145b9565b601682019050919050565b6000612ed4606e83613f75565b9150612edf826145e2565b606e82019050919050565b6000612ef7602f83613f75565b9150612f028261467d565b602f82019050919050565b6000612f1a604f83613f75565b9150612f25826146cc565b604f82019050919050565b6000612f3d60d683613f75565b9150612f4882614741565b60d682019050919050565b6000612f60600183613f75565b9150612f6b8261484e565b600182019050919050565b6000612f83600383613f75565b9150612f8e82614877565b600382019050919050565b6000612fa6602083613f75565b9150612fb1826148a0565b602082019050919050565b6000612fc9605083613f75565b9150612fd4826148c9565b605082019050919050565b6000612fec600883613f75565b9150612ff78261493e565b600882019050919050565b600061300f606d83613f75565b915061301a82614967565b606d82019050919050565b6000613032604a83613f75565b915061303d82614a02565b604a82019050919050565b6000613055606c83613f75565b915061306082614a77565b606c82019050919050565b6000613078603783613f75565b915061308382614b12565b603782019050919050565b600061309b600383613f75565b91506130a682614b61565b600382019050919050565b60006130be603583613f64565b91506130c982614b8a565b604082019050919050565b60006130e1601183613f64565b91506130ec82614bd9565b602082019050919050565b6000613104602783613f64565b915061310f82614c02565b604082019050919050565b6000613127600483613f75565b915061313282614c51565b600482019050919050565b600061314a600283613f75565b915061315582614c7a565b600282019050919050565b600061316d600183613f75565b915061317882614ca3565b600182019050919050565b6000613190604a83613f75565b915061319b82614ccc565b604a82019050919050565b60006131b461017183613f75565b91506131bf82614d41565b61017182019050919050565b60006131d8605883613f75565b91506131e382614f10565b605882019050919050565b60006131fb600783613f75565b915061320682614f85565b600782019050919050565b600061321e605d83613f75565b915061322982614fae565b605d82019050919050565b6000613241600d83613f75565b915061324c82615023565b600d82019050919050565b6000613264600183613f75565b915061326f8261504c565b600182019050919050565b6000613287601983613f75565b915061329282615075565b601982019050919050565b60006132aa600783613f75565b91506132b58261509e565b600782019050919050565b60006132cd601083613f64565b91506132d8826150c7565b602082019050919050565b60006132f0601283613f75565b91506132fb826150f0565b601282019050919050565b6000613313600983613f75565b915061331e82615119565b600982019050919050565b6000613336600183613f75565b915061334182615142565b600182019050919050565b6000613359604383613f75565b91506133648261516b565b604382019050919050565b600061337c606283613f75565b9150613387826151e0565b606282019050919050565b600061339f601683613f75565b91506133aa8261527b565b601682019050919050565b60006133c2602883613f75565b91506133cd826152a4565b602882019050919050565b60006133e5601c83613f64565b91506133f0826152f3565b602082019050919050565b6000613408605d83613f75565b91506134138261531c565b605d82019050919050565b600061342b606b83613f75565b915061343682615391565b606b82019050919050565b600061344e600083613f53565b91506134598261542c565b600082019050919050565b6000613471604d83613f75565b915061347c8261542f565b604d82019050919050565b6000613494601f83613f64565b915061349f826154a4565b602082019050919050565b60006134b7601883613f75565b91506134c2826154cd565b601882019050919050565b60006134da605183613f75565b91506134e5826154f6565b605182019050919050565b60006134fd603883613f75565b91506135088261556b565b603882019050919050565b6000613520601883613f64565b915061352b826155ba565b602082019050919050565b6000613543600e83613f75565b915061354e826155e3565b600e82019050919050565b60006135676101fa83613f75565b91506135728261560c565b6101fa82019050919050565b600061358b602483613f75565b915061359682615877565b602482019050919050565b60006135ae606d83613f75565b91506135b9826158c6565b606d82019050919050565b60006135d1600e83613f64565b91506135dc82615961565b602082019050919050565b60006135f4600e83613f64565b91506135ff8261598a565b602082019050919050565b6000613617600a83613f64565b9150613622826159b3565b602082019050919050565b600061363a601a83613f75565b9150613645826159dc565b601a82019050919050565b613659816140ff565b82525050565b600061366b8289612cdc565b91506136778288612cdc565b91506136838287612cdc565b915061368e826135a1565b915061369a8286612d0d565b91506136a5826131ee565b91506136b18285612cdc565b91506136bc82612d8c565b91506136c88284612cdc565b91506136d3826131ee565b9150819050979650505050505050565b60006136ef8285612cdc565b91506136fa82612f53565b91506137068284612cdc565b91508190509392505050565b600061371e828d612d0d565b915061372a828c612d0d565b9150613736828b612cdc565b9150613742828a612cdc565b915061374e8289612cdc565b915061375a8288612cdc565b9150613765826133fb565b915061377082612f30565b915061377c8287612cdc565b91506137888286612cdc565b91506137948285612cdc565b91506137a08284612cdc565b91506137ab8261329d565b91508190509b9a5050505050505050505050565b60006137ca82612df5565b91506137d68285612d0d565b91506137e182612fbc565b91506137ed8284612d0d565b91506137f882612dd2565b91508190509392505050565b600061380f82612ec7565b915061381b8284612cdc565b915061382682612fdf565b915081905092915050565b600061383c82612f0d565b91506138488287612cdc565b91506138538261334c565b915061385f8286612d0d565b915061386a826134f0565b91506138768285612d0d565b9150613881826133b5565b915061388d8284612d0d565b915061389882612daf565b915081905095945050505050565b60006138b182612f99565b91506138bd8285612cdc565b91506138c882613160565b91506138d48284612cdc565b91506138df82613183565b91508190509392505050565b60006138f682613002565b91506139028284612cdc565b915061390d826131ee565b915081905092915050565b600061392382613048565b915061392f8284612cdc565b915061393a82612e5e565b915081905092915050565b60006139508261311a565b915061395c8285612cdc565b915061396782612e81565b91506139738284612cdc565b915061397e8261313d565b91508190509392505050565b600061399582613211565b91506139a18286612cdc565b91506139ac8261341e565b91506139b88285612cdc565b91506139c38261306b565b91506139cf8284612cdc565b91506139da826131cb565b9150819050949350505050565b60006139f28261327a565b91506139fe8287612cdc565b9150613a09826132e3565b9150613a158286612cdc565b9150613a2082613234565b9150613a2c8285612cdc565b9150613a3782612e3b565b9150613a4282613536565b9150613a4e8284612cdc565b9150613a5982613257565b915081905095945050505050565b6000613a7282613329565b9150613a7d82612ea4565b9150613a8882613306565b9150613a948285612cdc565b9150613a9f82612f76565b9150613aaa826134aa565b9150613ab582613306565b9150613ac18284612cdc565b9150613acc8261308e565b91508190509392505050565b6000613ae382613392565b9150613aef8284612cdc565b915081905092915050565b6000613b05826134cd565b9150613b118287612cdc565b9150613b1c82612eea565b9150613b288286612d0d565b9150613b33826134f0565b9150613b3f8285612d0d565b9150613b4a826133b5565b9150613b568284612d0d565b9150613b618261336f565b915081905095945050505050565b6000613b7a82613559565b9150613b85826131a6565b9150613b9082613464565b9150819050919050565b6000613ba58261357e565b9150613bb18285612cdc565b9150613bbc82613025565b9150613bc782612e18565b9150613bd38284612cdc565b9150613bde82613025565b91508190509392505050565b6000613bf58261362d565b9150613c018284612cdc565b915081905092915050565b6000602082019050613c216000830184612c4c565b92915050565b6000608082019050613c3c6000830187612c4c565b613c496020830186612c4c565b613c566040830185613650565b8181036060830152613c688184612c6a565b905095945050505050565b6000608082019050613c886000830186612c4c565b613c956020830185612c4c565b613ca26040830184613650565b8181036060830152613cb381613441565b9050949350505050565b6000602082019050613cd26000830184612c5b565b92915050565b60006020820190508181036000830152613cf28184612ca3565b905092915050565b60006020820190508181036000830152613d13816130b1565b9050919050565b60006020820190508181036000830152613d33816130d4565b9050919050565b60006020820190508181036000830152613d53816130f7565b9050919050565b60006020820190508181036000830152613d73816132c0565b9050919050565b60006020820190508181036000830152613d93816133d8565b9050919050565b60006020820190508181036000830152613db381613487565b9050919050565b60006020820190508181036000830152613dd381613513565b9050919050565b60006020820190508181036000830152613df3816135c4565b9050919050565b60006020820190508181036000830152613e13816135e7565b9050919050565b60006020820190508181036000830152613e338161360a565b9050919050565b6000602082019050613e4f6000830184613650565b92915050565b6000608082019050613e6a6000830187613650565b613e776020830186613650565b613e846040830185613650565b8181036060830152613e968184612ca3565b905095945050505050565b6000613eab613ebc565b9050613eb7828261417d565b919050565b6000604051905090565b600067ffffffffffffffff821115613ee157613ee06142b5565b5b613eea826142e4565b9050602081019050919050565b600067ffffffffffffffff821115613f1257613f116142b5565b5b613f1b826142e4565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f8b826140ff565b9150613f96836140ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fcb57613fca614228565b5b828201905092915050565b6000613fe1826140ff565b9150613fec836140ff565b925082613ffc57613ffb614257565b5b828204905092915050565b6000614012826140ff565b915061401d836140ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405657614055614228565b5b828202905092915050565b600061406c826140ff565b9150614077836140ff565b92508282101561408a57614089614228565b5b828203905092915050565b60006140a0826140df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561413657808201518184015260208101905061411b565b83811115614145576000848401525b50505050565b6000600282049050600182168061416357607f821691505b6020821081141561417757614176614286565b5b50919050565b614186826142e4565b810181811067ffffffffffffffff821117156141a5576141a46142b5565b5b80604052505050565b60006141b9826140ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141ec576141eb614228565b5b600182019050919050565b6000614202826140ff565b915061420d836140ff565b92508261421d5761421c614257565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203136312e3538353929272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f3b73746f702d6f7061636974793a30272f3e3c2f6c696e65617247726164696560008201527f6e743e203c7265637420793d27313630272066696c6c3d2775726c282353564760208201527f49445f315f29272077696474683d2733363027206865696768743d273438302760408201527f2f3e000000000000000000000000000000000000000000000000000000000000606082015250565b7f3c2f747370616e3e3c2f746578743e0000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203637312e3538353929273e3c747370616e20783d27302720793d27302760208201527f2066696c6c3d27233134313431342720666f6e742d66616d696c793d27436f7560408201527f726965722c206d6f6e6f73706163652720666f6e742d73697a653d273234273e606082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3339302000000000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f253c2f746578743e000000000000000000000000000000000000000000000000600082015250565b7f2c313030252c0000000000000000000000000000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a2256656e7565222c00000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f323439203230352e3333363429272066696c6c3d27233134313431342720666f60208201527f6e742d66616d696c793d27436f75726965722c206d6f6e6f737061636527206660408201527f6f6e742d73697a653d273234273e000000000000000000000000000000000000606082015250565b7f272079323d27343030273e3c73746f7020206f66667365743d2730272073747960008201527f6c653d2773746f702d636f6c6f723a0000000000000000000000000000000000602082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f315f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f273138302e30303035272079313d270000000000000000000000000000000000604082015250565b7f3c70617468206f7061636974793d27302e3235272066696c6c3d276e6f6e652760008201527f207374726f6b653d272345424542454227207374726f6b652d77696474683d2760208201527f3227207374726f6b652d6d697465726c696d69743d2731302720643d274d333060408201527f302c32323076333630204d3234302c32323076333630204d3138302c3232307660608201527f333630204d3132302c32323076333630204d36302c32323076333630204d333660808201527f302c3532304830204d3336302c3436304830204d3336302c3430304830204d3360a08201527f36302c3334304830204d3336302c3238304830272f3e0000000000000000000060c082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d6174726978283120302030203120600082015250565b7f3c2f747370616e3e3c747370616e20783d27302720793d273230272066696c6c60008201527f3d27233134313431342720666f6e742d66616d696c793d27436f75726965722760208201527f20666f6e742d73697a653d273234273e00000000000000000000000000000000604082015250565b7f433c2f746578743e000000000000000000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3431322e3339303620383029272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f29272066696c6c3d27234542454245422720666f6e742d66616d696c793d274360008201527f6f75726965722c206d6f6e6f73706163652720666f6e742d73697a653d27343960208201527f273e5f3c2f746578743e00000000000000000000000000000000000000000000604082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f39203230352e3333353929272066696c6c3d27233134313431342720666f6e7460208201527f2d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f6e60408201527f742d73697a653d273234273e0000000000000000000000000000000000000000606082015250565b7f3b73746f702d6f7061636974793a30272f3e203c73746f7020206f666673657460008201527f3d273127207374796c653d2773746f702d636f6c6f723a000000000000000000602082015250565b7f227d5d0000000000000000000000000000000000000000000000000000000000600082015250565b7f6d696e74696e672063616e206f6e6c792062652063616c6c65642066726f6d2060008201527f766572696669636174696f6e20636f6e74726163740000000000000000000000602082015250565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b7f6f6e6c792061646d696e2063616e2073657420766572696669636174696f6e6360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f68736c2800000000000000000000000000000000000000000000000000000000600082015250565b7f2529000000000000000000000000000000000000000000000000000000000000600082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f29272066696c6c3d27234542454245422720666f6e742d66616d696c793d274360008201527f6f75726965722c206d6f6e6f73706163652720666f6e742d73697a653d27343060208201527f273e2b3c2f746578743e00000000000000000000000000000000000000000000604082015250565b7f3c70617468206f7061636974793d27302e3235272066696c6c3d276e6f6e652760008201527f207374726f6b653d272345424542454227207374726f6b652d77696474683d2760208201527f3227207374726f6b652d6d697465726c696d69743d2731302720643d274d333060408201527f302c32323076333630204d3234302c32323076333630204d3138302c3232302060608201527f76333630204d3132302c32323076333630204d36302c32323076333630204d3360808201527f36302c3532304830204d3336302c3436304830204d3336302c3430304830204d60a08201527f3336302c3334304830204d3336302c3238304830272f3e3c7265637420783d2760c08201527f3336302720793d2732363027206f7061636974793d27302e3235272066696c6c60e08201527f3d2723454245424542272077696474683d27333027206865696768743d2731326101008201527f30272f3e3c7265637420783d273339302720793d2732343027206f70616369746101208201527f793d27302e3235272066696c6c3d2723454245424542272077696474683d27336101408201527f3027206865696768743d27313630272f3e00000000000000000000000000000061016082015250565b7f272f3e203c2f6c696e6561724772616469656e743e203c7265637420793d273260008201527f3230272066696c6c3d2775726c282353564749445f335f29272077696474683d60208201527f273336302e30303127206865696768743d27333630272f3e0000000000000000604082015250565b7f3c2f746578743e00000000000000000000000000000000000000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f335f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f273232302e30323235272079313d273332392e34343533272078323d27000000604082015250565b7f222c2022696d616765223a202200000000000000000000000000000000000000600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a746578742f706c61696e2c7b226e616d65223a2200000000000000600082015250565b7f3c2f737667203e00000000000000000000000000000000000000000000000000600082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600082015250565b7f2276616c7565223a220000000000000000000000000000000000000000000000600082015250565b7f5b00000000000000000000000000000000000000000000000000000000000000600082015250565b7f272078323d273138302e30303035272079323d273136302e30303035273e203c60008201527f73746f7020206f66667365743d273027207374796c653d2773746f702d636f6c60208201527f6f723a0000000000000000000000000000000000000000000000000000000000604082015250565b7f3b73746f702d6f7061636974793a30272f3e3c2f6c696e65617247726164696560008201527f6e743e203c7265637420793d27313630272066696c6c3d2775726c282353564760208201527f49445f325f29272077696474683d2733363027206865696768743d273438302760408201527f2f3e000000000000000000000000000000000000000000000000000000000000606082015250565b7f4365727469666963617465206f662047726f7774682000000000000000000000600082015250565b7f272f3e203c73746f7020206f66667365743d273127207374796c653d2773746f60008201527f702d636f6c6f723a000000000000000000000000000000000000000000000000602082015250565b7f6e6f20766572696669636174696f6e20636f6e74726163742073657400000000600082015250565b7f3c706174682066696c6c3d27234542454245422720643d274d302c353830763160008201527f3630683438305635383048307a272f3e203c706174682066696c6c3d2723454260208201527f454245422720643d274d302c307632323068343830563048307a272f3e000000604082015250565b7f272079323d273231392e34343527206772616469656e745472616e73666f726d60008201527f3d276d617472697828332e362030203020332e36202d3638342e30373632202d60208201527f36303629273e203c73746f7020206f66667365743d273027207374796c653d2760408201527f73746f702d636f6c6f723a000000000000000000000000000000000000000000606082015250565b50565b7f3c7265637420783d273336302720793d273232302e313139272066696c6c3d2760008201527f75726c282353564749445f355f29272077696474683d2733302720686569676860208201527f743d273335392e383831272f3e00000000000000000000000000000000000000604082015250565b7f6f6e6c792061646d696e2063616e2073657420636f6c6f7270726f66696c6500600082015250565b7f7b2274726169745f74797065223a2243757261746f72222c0000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f325f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f2730272079313d27343030272078323d27000000000000000000000000000000604082015250565b7f3b73746f702d6f7061636974793a30272f3e3c73746f7020206f66667365743d60008201527f27302e3527207374796c653d2773746f702d636f6c6f723a0000000000000000602082015250565b7f6f6e6c792061646d696e2063616e207365742061646d696e0000000000000000600082015250565b7f2261747472696275746573223a20000000000000000000000000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f345f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f27343035272079313d27353830272078323d27343035272079323d273232302e60408201527f31313931273e203c73746f7020206f66667365743d273027207374796c653d2760608201527f73746f702d636f6c6f723a23303046463030272f3e203c73746f7020206f666660808201527f7365743d273127207374796c653d2773746f702d636f6c6f723a23433230303060a08201527f42272f3e203c2f6c696e6561724772616469656e743e203c7265637420783d2760c08201527f3339302720793d273232302e313139272066696c6c3d2775726c28235356474960e08201527f445f345f29272077696474683d27333027206865696768743d273335392e38386101008201527f31272f3e3c6c696e6561724772616469656e742069643d2753564749445f355f6101208201527f27206772616469656e74556e6974733d277573657253706163654f6e557365276101408201527f2078313d27333735272079313d27353830272078323d27333735272079323d276101608201527f3232302e31313931273e203c73746f7020206f66667365743d273027207374796101808201527f6c653d2773746f702d636f6c6f723a23313431343134272f3e203c73746f70206101a08201527f206f66667365743d273127207374796c653d2773746f702d636f6c6f723a23306101c08201527f3041304336272f3e203c2f6c696e6561724772616469656e743e0000000000006101e082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3336302000000000000000000000000000000000000000000000000000000000602082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203632352e3333353929272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b615a0e81614095565b8114615a1957600080fd5b50565b615a25816140a7565b8114615a3057600080fd5b50565b615a3c816140b3565b8114615a4757600080fd5b50565b615a53816140ff565b8114615a5e57600080fd5b5056fe3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203138352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e536f696c204d6f6973747572652028782d61786973293c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203134312e34353631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e54696d653c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203630352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e506c616e743c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203635312e34353631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e4c6f636174696f6e3c2f746578743e3c74657874207472616e73666f726d3d276d6174726978283120302030203120323530203138352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e54656d70657261747572652028792d61786973293c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203432372e30303239203234312e3435353629272066696c6c3d27234542454245422720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e7465727261303c2f746578743e3c74657874207472616e73666f726d3d276d6174726978283120302030203120392038302e3733343929272066696c6c3d27233134313431342720666f6e742d66616d696c793d2754696d65732d526f6d616e2c2054696d65732720666f6e742d73697a653d273435273e4365727469666963617465206f662047726f777468203c2f746578743e53656564204361706974616c202d20436572746966696361746573206f662047726f7774684142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122015d04fb23ceba143263e5f5ab7602b7d817623b9d0b78ab070431b2ccb029bf464736f6c634300080400333c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b2720783d273070782720793d27307078272077696474683d27343830707827206865696768743d273734307078272076696577426f783d2730203020343830203734302720656e61626c652d6261636b67726f756e643d276e65772030203020343830203734302720786d6c3a73706163653d277072657365727665273e3c7265637420793d27313430272066696c6c3d2723313431343134272077696474683d2734383027206865696768743d27353030272f3e000000000000000000000000b47494b3d487b82b78af230c8460a12272389755
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b88d4fde11610097578063dded49cb11610071578063dded49cb146104a7578063e4939f9d146104c3578063e985e9c5146104e1578063f851a4401461051157610173565b8063b88d4fde1461042b578063c6643c9b14610447578063c87b56dd1461047757610173565b806370a082311461033157806374cfa50a14610361578063864f98b11461039157806395d89b41146103c1578063a22cb465146103df578063b0703efd146103fb57610173565b806323b872dd1161013057806323b872dd1461025e5780633bf717761461027a57806342842e0e14610296578063507d7f42146102b257806357c8081b146102ce5780636352211e1461030157610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f6578063128c5b5614610212578063131a4ad414610242575b600080fd5b610192600480360381019061018d919061293b565b61052f565b60405161019f9190613cbd565b60405180910390f35b6101b06105c1565b6040516101bd9190613cd8565b60405180910390f35b6101e060048036038101906101db919061298d565b61064f565b6040516101ed9190613c0c565b60405180910390f35b610210600480360381019061020b91906128ff565b610682565b005b61022c6004803603810190610227919061298d565b61086b565b6040516102399190613cd8565b60405180910390f35b61025c600480360381019061025791906129b6565b6108da565b005b610278600480360381019061027391906127f9565b610980565b005b610294600480360381019061028f9190612b46565b610d80565b005b6102b060048036038101906102ab91906127f9565b610f2f565b005b6102cc60048036038101906102c79190612794565b611076565b005b6102e860048036038101906102e3919061298d565b61114a565b6040516102f89493929190613e55565b60405180910390f35b61031b6004803603810190610316919061298d565b611202565b6040516103289190613c0c565b60405180910390f35b61034b60048036038101906103469190612794565b611235565b6040516103589190613e3a565b60405180910390f35b61037b60048036038101906103769190612b46565b61124d565b6040516103889190613cd8565b60405180910390f35b6103ab60048036038101906103a69190612ab7565b611409565b6040516103b89190613cd8565b60405180910390f35b6103c961144a565b6040516103d69190613cd8565b60405180910390f35b6103f960048036038101906103f491906128c3565b6114d8565b005b61041560048036038101906104109190612bd5565b6115d5565b6040516104229190613e3a565b60405180910390f35b61044560048036038101906104409190612848565b611656565b005b610461600480360381019061045c9190612ab7565b6117a0565b60405161046e9190613cd8565b60405180910390f35b610491600480360381019061048c919061298d565b611828565b60405161049e9190613cd8565b60405180910390f35b6104c160048036038101906104bc9190612794565b61191e565b005b6104cb6119f2565b6040516104d89190613c0c565b60405180910390f35b6104fb60048036038101906104f691906127bd565b611a18565b6040516105089190613cbd565b60405180910390f35b610519611a47565b6040516105269190613c0c565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058a57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ba5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546105ce9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546105fa9061414b565b80156106475780601f1061061c57610100808354040283529160200191610647565b820191906000526020600020905b81548152906001019060200180831161062a57829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061077a5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b090613dfa565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60606108916103e8620186a08461088291906141f7565b61088c9190613fd6565b611a6d565b6108b3600a6103e8856108a491906141f7565b6108ae9190613fd6565b611a6d565b6040516020016108c49291906136e3565b6040516020818303038152906040529050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190613d9a565b60405180910390fd5b610978868686868686611c1a565b505050505050565b6003600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890613e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613d1a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b2957506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610bba5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613dfa565b60405180910390fd5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613cfa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613d7a565b60405180910390fd5b84600c60008481526020019081526020016000206000018190555083600c60008481526020019081526020016000206001018190555082600c60008481526020019081526020016000206002018190555080600c60008481526020019081526020016000206003019080519060200190610f1d9291906125b8565b50610f283283611cf9565b5050505050565b610f3a838383610980565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611032575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610fbf93929190613c73565b602060405180830381600087803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612964565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613d5a565b60405180910390fd5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613d3a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60205280600052604060002060009150905080600001549080600101549080600201549080600301805461117f9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546111ab9061414b565b80156111f85780601f106111cd576101008083540402835291602001916111f8565b820191906000526020600020905b8154815290600101906020018083116111db57829003601f168201915b5050505050905084565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b6060600061125a87611f0c565b90506000604051806060016040528060258152602001615d5160259139905060006113c160096000888152602001908152602001600020600201805461129f9061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546112cb9061414b565b80156113185780601f106112ed57610100808354040283529160200191611318565b820191906000526020600020905b8154815290600101906020018083116112fb57829003601f168201915b505050505060096000898152602001908152602001600020600401805461133e9061414b565b80601f016020809104026020016040519081016040528092919081815260200182805461136a9061414b565b80156113b75780601f1061138c576101008083540402835291602001916113b7565b820191906000526020600020905b81548152906001019060200180831161139a57829003601f168201915b5050505050611f3d565b905060006113d2898989898e611409565b9050838382846040516020016113eb94939291906139e7565b60405160208183030381529060405294505050505095945050505050565b606061142061141b87878787876117a0565b611f69565b6040516020016114309190613bea565b604051602081830303815290604052905095945050505050565b600180546114579061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546114839061414b565b80156114d05780601f106114a5576101008083540402835291602001916114d0565b820191906000526020600020905b8154815290600101906020018083116114b357829003601f168201915b505050505081565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115c99190613cbd565b60405180910390a35050565b60008085856115e49190614061565b9050600084846115f49190614061565b90506000600854888a6116079190614061565b6116119190614007565b9050600083826116219190613fd6565b905060085483826116329190614007565b61163c9190613fd6565b876116479190613f80565b94505050505095945050505050565b611661848484610980565b60008373ffffffffffffffffffffffffffffffffffffffff163b148061175b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016116e89493929190613c27565b602060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a9190612964565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b61179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613d5a565b60405180910390fd5b50505050565b6060600660076117ae612108565b6117b8888861212d565b6117c28a896121a4565b6117cc8a8c61221b565b6117d4612263565b6117e18d8d8d8d8d612286565b6117eb8e8e6122f2565b6117f58f8f61236f565b60405160200161180e9a99989796959493929190613712565b604051602081830303815290604052905095945050505050565b606061191782600c600085815260200190815260200160002060000154600c600086815260200190815260200160002060010154600c600087815260200190815260200160002060020154600c600088815260200190815260200160002060030180546118949061414b565b80601f01602080910402602001604051908101604052809291908181526020018280546118c09061414b565b801561190d5780601f106118e25761010080835404028352916020019161190d565b820191906000526020600020905b8154815290600101906020018083116118f057829003601f168201915b505050505061124d565b9050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613dba565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000821415611ab5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c15565b600082905060005b60008214611ae7578080611ad0906141ae565b915050600a82611ae09190613fd6565b9150611abd565b60008167ffffffffffffffff811115611b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b5b5781602001600182028036833780820191505090505b5090505b60008514611c0e57600182611b749190614061565b9150600a85611b8391906141f7565b6030611b8f9190613f80565b60f81b818381518110611bcb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c079190613fd6565b9450611b5f565b8093505050505b919050565b84600960008881526020019081526020016000206000019080519060200190611c449291906125b8565b5083600960008881526020019081526020016000206001019080519060200190611c6f9291906125b8565b5082600960008881526020019081526020016000206002019080519060200190611c9a9291906125b8565b5081600960008881526020019081526020016000206003019080519060200190611cc59291906125b8565b5080600960008881526020019081526020016000206004019080519060200190611cf09291906125b8565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290613dda565b60405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6060611f1782611a6d565b604051602001611f279190613ad8565b6040516020818303038152906040529050919050565b60608282604051602001611f52929190613a67565b604051602081830303815290604052905092915050565b6060600082511415611f8c57604051806020016040528060008152509050612103565b6000604051806060016040528060408152602001615d766040913990506000600360028551611fbb9190613f80565b611fc59190613fd6565b6004611fd19190614007565b90506000602082611fe29190613f80565b67ffffffffffffffff811115612021577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120535781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156120c2576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612067565b6003895106600181146120dc57600281146120ec576120f7565b613d3d60f01b60028303526120f7565b603d60f81b60018303525b50505050508093505050505b919050565b606060405160200161211990613b6f565b604051602081830303815290604052905090565b6060612138836123ed565b60096000848152602001908152602001600020600101600960008581526020019081526020016000206001016009600086815260200190815260200160002060010160405160200161218d9493929190613831565b604051602081830303815290604052905092915050565b60606121af83612413565b6009600084815260200190815260200160002060000160096000858152602001908152602001600020600001600960008681526020019081526020016000206000016040516020016122049493929190613afa565b604051602081830303815290604052905092915050565b60606122268261243a565b6122308484612461565b61223a8585612461565b60405160200161224c9392919061398a565b604051602081830303815290604052905092915050565b60606040518061032001604052806102ef8152602001615a626102ef9139905090565b6060612291856124d0565b61229a87612501565b6122a386612532565b600960008881526020019081526020016000206003016122c286612587565b876040516020016122d89695949392919061365f565b604051602081830303815290604052905095945050505050565b606061231261230d846201117062013880600061014f6115d5565b611a6d565b61234760f561232b85614a386159d860f56102446115d5565b6123359190614061565b6102446123429190614061565b611a6d565b6040516020016123589291906138a6565b604051602081830303815290604052905092915050565b606061239c61238a84620111706201388060fa6101866115d5565b61028a6123979190614061565b611a6d565b6123c56123b384614a386159d860fa6101866115d5565b61028a6123c09190614061565b611a6d565b6040516020016123d6929190613b9a565b604051602081830303815290604052905092915050565b606061240c61240783614a386159d861012c6103e86115d5565b611a6d565b9050919050565b606061243361242e83620111706201388060326102bc6115d5565b611a6d565b9050919050565b606061245a61245583620111706201388060646101f46115d5565b611a6d565b9050919050565b6060600061248361247e84620111706201388060006101686115d5565b611a6d565b905060006124a261249d86614a386159d8603260646115d5565b611a6d565b905081816040516020016124b7929190613945565b6040516020818303038152906040529250505092915050565b60606124db8261086b565b6040516020016124eb9190613804565b6040516020818303038152906040529050919050565b606061250c8261086b565b60405160200161251c9190613918565b6040516020818303038152906040529050919050565b606060096000838152602001908152602001600020600201600960008481526020019081526020016000206004016040516020016125719291906137bf565b6040516020818303038152906040529050919050565b606061259282611a6d565b6040516020016125a291906138eb565b6040516020818303038152906040529050919050565b8280546125c49061414b565b90600052602060002090601f0160209004810192826125e6576000855561262d565b82601f106125ff57805160ff191683800117855561262d565b8280016001018555821561262d579182015b8281111561262c578251825591602001919060010190612611565b5b50905061263a919061263e565b5090565b5b8082111561265757600081600090555060010161263f565b5090565b600061266e61266984613ec6565b613ea1565b90508281526020810184848401111561268657600080fd5b612691848285614109565b509392505050565b60006126ac6126a784613ef7565b613ea1565b9050828152602081018484840111156126c457600080fd5b6126cf848285614109565b509392505050565b6000813590506126e681615a05565b92915050565b6000813590506126fb81615a1c565b92915050565b60008135905061271081615a33565b92915050565b60008151905061272581615a33565b92915050565b600082601f83011261273c57600080fd5b813561274c84826020860161265b565b91505092915050565b600082601f83011261276657600080fd5b8135612776848260208601612699565b91505092915050565b60008135905061278e81615a4a565b92915050565b6000602082840312156127a657600080fd5b60006127b4848285016126d7565b91505092915050565b600080604083850312156127d057600080fd5b60006127de858286016126d7565b92505060206127ef858286016126d7565b9150509250929050565b60008060006060848603121561280e57600080fd5b600061281c868287016126d7565b935050602061282d868287016126d7565b925050604061283e8682870161277f565b9150509250925092565b6000806000806080858703121561285e57600080fd5b600061286c878288016126d7565b945050602061287d878288016126d7565b935050604061288e8782880161277f565b925050606085013567ffffffffffffffff8111156128ab57600080fd5b6128b78782880161272b565b91505092959194509250565b600080604083850312156128d657600080fd5b60006128e4858286016126d7565b92505060206128f5858286016126ec565b9150509250929050565b6000806040838503121561291257600080fd5b6000612920858286016126d7565b92505060206129318582860161277f565b9150509250929050565b60006020828403121561294d57600080fd5b600061295b84828501612701565b91505092915050565b60006020828403121561297657600080fd5b600061298484828501612716565b91505092915050565b60006020828403121561299f57600080fd5b60006129ad8482850161277f565b91505092915050565b60008060008060008060c087890312156129cf57600080fd5b60006129dd89828a0161277f565b965050602087013567ffffffffffffffff8111156129fa57600080fd5b612a0689828a01612755565b955050604087013567ffffffffffffffff811115612a2357600080fd5b612a2f89828a01612755565b945050606087013567ffffffffffffffff811115612a4c57600080fd5b612a5889828a01612755565b935050608087013567ffffffffffffffff811115612a7557600080fd5b612a8189828a01612755565b92505060a087013567ffffffffffffffff811115612a9e57600080fd5b612aaa89828a01612755565b9150509295509295509295565b600080600080600060a08688031215612acf57600080fd5b6000612add8882890161277f565b9550506020612aee8882890161277f565b9450506040612aff8882890161277f565b935050606086013567ffffffffffffffff811115612b1c57600080fd5b612b2888828901612755565b9250506080612b398882890161277f565b9150509295509295909350565b600080600080600060a08688031215612b5e57600080fd5b6000612b6c8882890161277f565b9550506020612b7d8882890161277f565b9450506040612b8e8882890161277f565b9350506060612b9f8882890161277f565b925050608086013567ffffffffffffffff811115612bbc57600080fd5b612bc888828901612755565b9150509295509295909350565b600080600080600060a08688031215612bed57600080fd5b6000612bfb8882890161277f565b9550506020612c0c8882890161277f565b9450506040612c1d8882890161277f565b9350506060612c2e8882890161277f565b9250506080612c3f8882890161277f565b9150509295509295909350565b612c5581614095565b82525050565b612c64816140a7565b82525050565b6000612c7582613f3d565b612c7f8185613f53565b9350612c8f818560208601614118565b612c98816142e4565b840191505092915050565b6000612cae82613f48565b612cb88185613f64565b9350612cc8818560208601614118565b612cd1816142e4565b840191505092915050565b6000612ce782613f48565b612cf18185613f75565b9350612d01818560208601614118565b80840191505092915050565b60008154612d1a8161414b565b612d248186613f75565b94506001821660008114612d3f5760018114612d5057612d83565b60ff19831686528186019350612d83565b612d5985613f28565b60005b83811015612d7b57815481890152600182019150602081019050612d5c565b838801955050505b50505092915050565b6000612d99606d83613f75565b9150612da4826142f5565b606d82019050919050565b6000612dbc606283613f75565b9150612dc782614390565b606282019050919050565b6000612ddf600f83613f75565b9150612dea8261442b565b600f82019050919050565b6000612e02608083613f75565b9150612e0d82614454565b608082019050919050565b6000612e25602483613f75565b9150612e30826144ef565b602482019050919050565b6000612e48600283613f75565b9150612e538261453e565b600282019050919050565b6000612e6b600883613f75565b9150612e7682614567565b600882019050919050565b6000612e8e600683613f75565b9150612e9982614590565b600682019050919050565b6000612eb1601683613f75565b9150612ebc826145b9565b601682019050919050565b6000612ed4606e83613f75565b9150612edf826145e2565b606e82019050919050565b6000612ef7602f83613f75565b9150612f028261467d565b602f82019050919050565b6000612f1a604f83613f75565b9150612f25826146cc565b604f82019050919050565b6000612f3d60d683613f75565b9150612f4882614741565b60d682019050919050565b6000612f60600183613f75565b9150612f6b8261484e565b600182019050919050565b6000612f83600383613f75565b9150612f8e82614877565b600382019050919050565b6000612fa6602083613f75565b9150612fb1826148a0565b602082019050919050565b6000612fc9605083613f75565b9150612fd4826148c9565b605082019050919050565b6000612fec600883613f75565b9150612ff78261493e565b600882019050919050565b600061300f606d83613f75565b915061301a82614967565b606d82019050919050565b6000613032604a83613f75565b915061303d82614a02565b604a82019050919050565b6000613055606c83613f75565b915061306082614a77565b606c82019050919050565b6000613078603783613f75565b915061308382614b12565b603782019050919050565b600061309b600383613f75565b91506130a682614b61565b600382019050919050565b60006130be603583613f64565b91506130c982614b8a565b604082019050919050565b60006130e1601183613f64565b91506130ec82614bd9565b602082019050919050565b6000613104602783613f64565b915061310f82614c02565b604082019050919050565b6000613127600483613f75565b915061313282614c51565b600482019050919050565b600061314a600283613f75565b915061315582614c7a565b600282019050919050565b600061316d600183613f75565b915061317882614ca3565b600182019050919050565b6000613190604a83613f75565b915061319b82614ccc565b604a82019050919050565b60006131b461017183613f75565b91506131bf82614d41565b61017182019050919050565b60006131d8605883613f75565b91506131e382614f10565b605882019050919050565b60006131fb600783613f75565b915061320682614f85565b600782019050919050565b600061321e605d83613f75565b915061322982614fae565b605d82019050919050565b6000613241600d83613f75565b915061324c82615023565b600d82019050919050565b6000613264600183613f75565b915061326f8261504c565b600182019050919050565b6000613287601983613f75565b915061329282615075565b601982019050919050565b60006132aa600783613f75565b91506132b58261509e565b600782019050919050565b60006132cd601083613f64565b91506132d8826150c7565b602082019050919050565b60006132f0601283613f75565b91506132fb826150f0565b601282019050919050565b6000613313600983613f75565b915061331e82615119565b600982019050919050565b6000613336600183613f75565b915061334182615142565b600182019050919050565b6000613359604383613f75565b91506133648261516b565b604382019050919050565b600061337c606283613f75565b9150613387826151e0565b606282019050919050565b600061339f601683613f75565b91506133aa8261527b565b601682019050919050565b60006133c2602883613f75565b91506133cd826152a4565b602882019050919050565b60006133e5601c83613f64565b91506133f0826152f3565b602082019050919050565b6000613408605d83613f75565b91506134138261531c565b605d82019050919050565b600061342b606b83613f75565b915061343682615391565b606b82019050919050565b600061344e600083613f53565b91506134598261542c565b600082019050919050565b6000613471604d83613f75565b915061347c8261542f565b604d82019050919050565b6000613494601f83613f64565b915061349f826154a4565b602082019050919050565b60006134b7601883613f75565b91506134c2826154cd565b601882019050919050565b60006134da605183613f75565b91506134e5826154f6565b605182019050919050565b60006134fd603883613f75565b91506135088261556b565b603882019050919050565b6000613520601883613f64565b915061352b826155ba565b602082019050919050565b6000613543600e83613f75565b915061354e826155e3565b600e82019050919050565b60006135676101fa83613f75565b91506135728261560c565b6101fa82019050919050565b600061358b602483613f75565b915061359682615877565b602482019050919050565b60006135ae606d83613f75565b91506135b9826158c6565b606d82019050919050565b60006135d1600e83613f64565b91506135dc82615961565b602082019050919050565b60006135f4600e83613f64565b91506135ff8261598a565b602082019050919050565b6000613617600a83613f64565b9150613622826159b3565b602082019050919050565b600061363a601a83613f75565b9150613645826159dc565b601a82019050919050565b613659816140ff565b82525050565b600061366b8289612cdc565b91506136778288612cdc565b91506136838287612cdc565b915061368e826135a1565b915061369a8286612d0d565b91506136a5826131ee565b91506136b18285612cdc565b91506136bc82612d8c565b91506136c88284612cdc565b91506136d3826131ee565b9150819050979650505050505050565b60006136ef8285612cdc565b91506136fa82612f53565b91506137068284612cdc565b91508190509392505050565b600061371e828d612d0d565b915061372a828c612d0d565b9150613736828b612cdc565b9150613742828a612cdc565b915061374e8289612cdc565b915061375a8288612cdc565b9150613765826133fb565b915061377082612f30565b915061377c8287612cdc565b91506137888286612cdc565b91506137948285612cdc565b91506137a08284612cdc565b91506137ab8261329d565b91508190509b9a5050505050505050505050565b60006137ca82612df5565b91506137d68285612d0d565b91506137e182612fbc565b91506137ed8284612d0d565b91506137f882612dd2565b91508190509392505050565b600061380f82612ec7565b915061381b8284612cdc565b915061382682612fdf565b915081905092915050565b600061383c82612f0d565b91506138488287612cdc565b91506138538261334c565b915061385f8286612d0d565b915061386a826134f0565b91506138768285612d0d565b9150613881826133b5565b915061388d8284612d0d565b915061389882612daf565b915081905095945050505050565b60006138b182612f99565b91506138bd8285612cdc565b91506138c882613160565b91506138d48284612cdc565b91506138df82613183565b91508190509392505050565b60006138f682613002565b91506139028284612cdc565b915061390d826131ee565b915081905092915050565b600061392382613048565b915061392f8284612cdc565b915061393a82612e5e565b915081905092915050565b60006139508261311a565b915061395c8285612cdc565b915061396782612e81565b91506139738284612cdc565b915061397e8261313d565b91508190509392505050565b600061399582613211565b91506139a18286612cdc565b91506139ac8261341e565b91506139b88285612cdc565b91506139c38261306b565b91506139cf8284612cdc565b91506139da826131cb565b9150819050949350505050565b60006139f28261327a565b91506139fe8287612cdc565b9150613a09826132e3565b9150613a158286612cdc565b9150613a2082613234565b9150613a2c8285612cdc565b9150613a3782612e3b565b9150613a4282613536565b9150613a4e8284612cdc565b9150613a5982613257565b915081905095945050505050565b6000613a7282613329565b9150613a7d82612ea4565b9150613a8882613306565b9150613a948285612cdc565b9150613a9f82612f76565b9150613aaa826134aa565b9150613ab582613306565b9150613ac18284612cdc565b9150613acc8261308e565b91508190509392505050565b6000613ae382613392565b9150613aef8284612cdc565b915081905092915050565b6000613b05826134cd565b9150613b118287612cdc565b9150613b1c82612eea565b9150613b288286612d0d565b9150613b33826134f0565b9150613b3f8285612d0d565b9150613b4a826133b5565b9150613b568284612d0d565b9150613b618261336f565b915081905095945050505050565b6000613b7a82613559565b9150613b85826131a6565b9150613b9082613464565b9150819050919050565b6000613ba58261357e565b9150613bb18285612cdc565b9150613bbc82613025565b9150613bc782612e18565b9150613bd38284612cdc565b9150613bde82613025565b91508190509392505050565b6000613bf58261362d565b9150613c018284612cdc565b915081905092915050565b6000602082019050613c216000830184612c4c565b92915050565b6000608082019050613c3c6000830187612c4c565b613c496020830186612c4c565b613c566040830185613650565b8181036060830152613c688184612c6a565b905095945050505050565b6000608082019050613c886000830186612c4c565b613c956020830185612c4c565b613ca26040830184613650565b8181036060830152613cb381613441565b9050949350505050565b6000602082019050613cd26000830184612c5b565b92915050565b60006020820190508181036000830152613cf28184612ca3565b905092915050565b60006020820190508181036000830152613d13816130b1565b9050919050565b60006020820190508181036000830152613d33816130d4565b9050919050565b60006020820190508181036000830152613d53816130f7565b9050919050565b60006020820190508181036000830152613d73816132c0565b9050919050565b60006020820190508181036000830152613d93816133d8565b9050919050565b60006020820190508181036000830152613db381613487565b9050919050565b60006020820190508181036000830152613dd381613513565b9050919050565b60006020820190508181036000830152613df3816135c4565b9050919050565b60006020820190508181036000830152613e13816135e7565b9050919050565b60006020820190508181036000830152613e338161360a565b9050919050565b6000602082019050613e4f6000830184613650565b92915050565b6000608082019050613e6a6000830187613650565b613e776020830186613650565b613e846040830185613650565b8181036060830152613e968184612ca3565b905095945050505050565b6000613eab613ebc565b9050613eb7828261417d565b919050565b6000604051905090565b600067ffffffffffffffff821115613ee157613ee06142b5565b5b613eea826142e4565b9050602081019050919050565b600067ffffffffffffffff821115613f1257613f116142b5565b5b613f1b826142e4565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f8b826140ff565b9150613f96836140ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fcb57613fca614228565b5b828201905092915050565b6000613fe1826140ff565b9150613fec836140ff565b925082613ffc57613ffb614257565b5b828204905092915050565b6000614012826140ff565b915061401d836140ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405657614055614228565b5b828202905092915050565b600061406c826140ff565b9150614077836140ff565b92508282101561408a57614089614228565b5b828203905092915050565b60006140a0826140df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561413657808201518184015260208101905061411b565b83811115614145576000848401525b50505050565b6000600282049050600182168061416357607f821691505b6020821081141561417757614176614286565b5b50919050565b614186826142e4565b810181811067ffffffffffffffff821117156141a5576141a46142b5565b5b80604052505050565b60006141b9826140ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141ec576141eb614228565b5b600182019050919050565b6000614202826140ff565b915061420d836140ff565b92508261421d5761421c614257565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203136312e3538353929272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f3b73746f702d6f7061636974793a30272f3e3c2f6c696e65617247726164696560008201527f6e743e203c7265637420793d27313630272066696c6c3d2775726c282353564760208201527f49445f315f29272077696474683d2733363027206865696768743d273438302760408201527f2f3e000000000000000000000000000000000000000000000000000000000000606082015250565b7f3c2f747370616e3e3c2f746578743e0000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203637312e3538353929273e3c747370616e20783d27302720793d27302760208201527f2066696c6c3d27233134313431342720666f6e742d66616d696c793d27436f7560408201527f726965722c206d6f6e6f73706163652720666f6e742d73697a653d273234273e606082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3339302000000000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f253c2f746578743e000000000000000000000000000000000000000000000000600082015250565b7f2c313030252c0000000000000000000000000000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a2256656e7565222c00000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f323439203230352e3333363429272066696c6c3d27233134313431342720666f60208201527f6e742d66616d696c793d27436f75726965722c206d6f6e6f737061636527206660408201527f6f6e742d73697a653d273234273e000000000000000000000000000000000000606082015250565b7f272079323d27343030273e3c73746f7020206f66667365743d2730272073747960008201527f6c653d2773746f702d636f6c6f723a0000000000000000000000000000000000602082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f315f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f273138302e30303035272079313d270000000000000000000000000000000000604082015250565b7f3c70617468206f7061636974793d27302e3235272066696c6c3d276e6f6e652760008201527f207374726f6b653d272345424542454227207374726f6b652d77696474683d2760208201527f3227207374726f6b652d6d697465726c696d69743d2731302720643d274d333060408201527f302c32323076333630204d3234302c32323076333630204d3138302c3232307660608201527f333630204d3132302c32323076333630204d36302c32323076333630204d333660808201527f302c3532304830204d3336302c3436304830204d3336302c3430304830204d3360a08201527f36302c3334304830204d3336302c3238304830272f3e0000000000000000000060c082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d6174726978283120302030203120600082015250565b7f3c2f747370616e3e3c747370616e20783d27302720793d273230272066696c6c60008201527f3d27233134313431342720666f6e742d66616d696c793d27436f75726965722760208201527f20666f6e742d73697a653d273234273e00000000000000000000000000000000604082015250565b7f433c2f746578743e000000000000000000000000000000000000000000000000600082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3431322e3339303620383029272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f29272066696c6c3d27234542454245422720666f6e742d66616d696c793d274360008201527f6f75726965722c206d6f6e6f73706163652720666f6e742d73697a653d27343960208201527f273e5f3c2f746578743e00000000000000000000000000000000000000000000604082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f39203230352e3333353929272066696c6c3d27233134313431342720666f6e7460208201527f2d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f6e60408201527f742d73697a653d273234273e0000000000000000000000000000000000000000606082015250565b7f3b73746f702d6f7061636974793a30272f3e203c73746f7020206f666673657460008201527f3d273127207374796c653d2773746f702d636f6c6f723a000000000000000000602082015250565b7f227d5d0000000000000000000000000000000000000000000000000000000000600082015250565b7f6d696e74696e672063616e206f6e6c792062652063616c6c65642066726f6d2060008201527f766572696669636174696f6e20636f6e74726163740000000000000000000000602082015250565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b7f6f6e6c792061646d696e2063616e2073657420766572696669636174696f6e6360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f68736c2800000000000000000000000000000000000000000000000000000000600082015250565b7f2529000000000000000000000000000000000000000000000000000000000000600082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f29272066696c6c3d27234542454245422720666f6e742d66616d696c793d274360008201527f6f75726965722c206d6f6e6f73706163652720666f6e742d73697a653d27343060208201527f273e2b3c2f746578743e00000000000000000000000000000000000000000000604082015250565b7f3c70617468206f7061636974793d27302e3235272066696c6c3d276e6f6e652760008201527f207374726f6b653d272345424542454227207374726f6b652d77696474683d2760208201527f3227207374726f6b652d6d697465726c696d69743d2731302720643d274d333060408201527f302c32323076333630204d3234302c32323076333630204d3138302c3232302060608201527f76333630204d3132302c32323076333630204d36302c32323076333630204d3360808201527f36302c3532304830204d3336302c3436304830204d3336302c3430304830204d60a08201527f3336302c3334304830204d3336302c3238304830272f3e3c7265637420783d2760c08201527f3336302720793d2732363027206f7061636974793d27302e3235272066696c6c60e08201527f3d2723454245424542272077696474683d27333027206865696768743d2731326101008201527f30272f3e3c7265637420783d273339302720793d2732343027206f70616369746101208201527f793d27302e3235272066696c6c3d2723454245424542272077696474683d27336101408201527f3027206865696768743d27313630272f3e00000000000000000000000000000061016082015250565b7f272f3e203c2f6c696e6561724772616469656e743e203c7265637420793d273260008201527f3230272066696c6c3d2775726c282353564749445f335f29272077696474683d60208201527f273336302e30303127206865696768743d27333630272f3e0000000000000000604082015250565b7f3c2f746578743e00000000000000000000000000000000000000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f335f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f273232302e30323235272079313d273332392e34343533272078323d27000000604082015250565b7f222c2022696d616765223a202200000000000000000000000000000000000000600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a746578742f706c61696e2c7b226e616d65223a2200000000000000600082015250565b7f3c2f737667203e00000000000000000000000000000000000000000000000000600082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600082015250565b7f2276616c7565223a220000000000000000000000000000000000000000000000600082015250565b7f5b00000000000000000000000000000000000000000000000000000000000000600082015250565b7f272078323d273138302e30303035272079323d273136302e30303035273e203c60008201527f73746f7020206f66667365743d273027207374796c653d2773746f702d636f6c60208201527f6f723a0000000000000000000000000000000000000000000000000000000000604082015250565b7f3b73746f702d6f7061636974793a30272f3e3c2f6c696e65617247726164696560008201527f6e743e203c7265637420793d27313630272066696c6c3d2775726c282353564760208201527f49445f325f29272077696474683d2733363027206865696768743d273438302760408201527f2f3e000000000000000000000000000000000000000000000000000000000000606082015250565b7f4365727469666963617465206f662047726f7774682000000000000000000000600082015250565b7f272f3e203c73746f7020206f66667365743d273127207374796c653d2773746f60008201527f702d636f6c6f723a000000000000000000000000000000000000000000000000602082015250565b7f6e6f20766572696669636174696f6e20636f6e74726163742073657400000000600082015250565b7f3c706174682066696c6c3d27234542454245422720643d274d302c353830763160008201527f3630683438305635383048307a272f3e203c706174682066696c6c3d2723454260208201527f454245422720643d274d302c307632323068343830563048307a272f3e000000604082015250565b7f272079323d273231392e34343527206772616469656e745472616e73666f726d60008201527f3d276d617472697828332e362030203020332e36202d3638342e30373632202d60208201527f36303629273e203c73746f7020206f66667365743d273027207374796c653d2760408201527f73746f702d636f6c6f723a000000000000000000000000000000000000000000606082015250565b50565b7f3c7265637420783d273336302720793d273232302e313139272066696c6c3d2760008201527f75726c282353564749445f355f29272077696474683d2733302720686569676860208201527f743d273335392e383831272f3e00000000000000000000000000000000000000604082015250565b7f6f6e6c792061646d696e2063616e2073657420636f6c6f7270726f66696c6500600082015250565b7f7b2274726169745f74797065223a2243757261746f72222c0000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f325f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f2730272079313d27343030272078323d27000000000000000000000000000000604082015250565b7f3b73746f702d6f7061636974793a30272f3e3c73746f7020206f66667365743d60008201527f27302e3527207374796c653d2773746f702d636f6c6f723a0000000000000000602082015250565b7f6f6e6c792061646d696e2063616e207365742061646d696e0000000000000000600082015250565b7f2261747472696275746573223a20000000000000000000000000000000000000600082015250565b7f3c6c696e6561724772616469656e742069643d2753564749445f345f2720677260008201527f616469656e74556e6974733d277573657253706163654f6e557365272078313d60208201527f27343035272079313d27353830272078323d27343035272079323d273232302e60408201527f31313931273e203c73746f7020206f66667365743d273027207374796c653d2760608201527f73746f702d636f6c6f723a23303046463030272f3e203c73746f7020206f666660808201527f7365743d273127207374796c653d2773746f702d636f6c6f723a23433230303060a08201527f42272f3e203c2f6c696e6561724772616469656e743e203c7265637420783d2760c08201527f3339302720793d273232302e313139272066696c6c3d2775726c28235356474960e08201527f445f345f29272077696474683d27333027206865696768743d273335392e38386101008201527f31272f3e3c6c696e6561724772616469656e742069643d2753564749445f355f6101208201527f27206772616469656e74556e6974733d277573657253706163654f6e557365276101408201527f2078313d27333735272079313d27353830272078323d27333735272079323d276101608201527f3232302e31313931273e203c73746f7020206f66667365743d273027207374796101808201527f6c653d2773746f702d636f6c6f723a23313431343134272f3e203c73746f70206101a08201527f206f66667365743d273127207374796c653d2773746f702d636f6c6f723a23306101c08201527f3041304336272f3e203c2f6c696e6561724772616469656e743e0000000000006101e082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3336302000000000000000000000000000000000000000000000000000000000602082015250565b7f3c74657874207472616e73666f726d3d276d617472697828312030203020312060008201527f3130203632352e3333353929272066696c6c3d27233134313431342720666f6e60208201527f742d66616d696c793d27436f75726965722c206d6f6e6f73706163652720666f60408201527f6e742d73697a653d273234273e00000000000000000000000000000000000000606082015250565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b615a0e81614095565b8114615a1957600080fd5b50565b615a25816140a7565b8114615a3057600080fd5b50565b615a3c816140b3565b8114615a4757600080fd5b50565b615a53816140ff565b8114615a5e57600080fd5b5056fe3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203138352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e536f696c204d6f6973747572652028782d61786973293c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203134312e34353631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e54696d653c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203630352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e506c616e743c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203130203635312e34353631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e4c6f636174696f6e3c2f746578743e3c74657874207472616e73666f726d3d276d6174726978283120302030203120323530203138352e32303631292720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e54656d70657261747572652028792d61786973293c2f746578743e3c74657874207472616e73666f726d3d276d61747269782831203020302031203432372e30303239203234312e3435353629272066696c6c3d27234542454245422720666f6e742d66616d696c793d27417269616c2720666f6e742d73697a653d273136273e7465727261303c2f746578743e3c74657874207472616e73666f726d3d276d6174726978283120302030203120392038302e3733343929272066696c6c3d27233134313431342720666f6e742d66616d696c793d2754696d65732d526f6d616e2c2054696d65732720666f6e742d73697a653d273435273e4365727469666963617465206f662047726f777468203c2f746578743e53656564204361706974616c202d20436572746966696361746573206f662047726f7774684142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122015d04fb23ceba143263e5f5ab7602b7d817623b9d0b78ab070431b2ccb029bf464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b47494b3d487b82b78af230c8460a12272389755
-----Decoded View---------------
Arg [0] : _admin (address): 0xB47494B3d487b82b78af230c8460a12272389755
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b47494b3d487b82b78af230c8460a12272389755
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.