Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 12170166 | 1192 days ago | IN | Create: AsteroidFeatures | 0 ETH | 0.351494 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract contains unverified libraries: Procedural
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
AsteroidFeatures
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.7.6; import "abdk-libraries-solidity/ABDKMath64x64.sol"; import "./lib/InfluenceSettings.sol"; import "./lib/Procedural.sol"; import "./interfaces/IPlanets.sol"; /** * @dev Contract which generates all standard features of an asteroid including its spectral type and * orbital elements. */ contract AsteroidFeatures { using ABDKMath64x64 for *; using Procedural for bytes32; IPlanets planets; constructor(IPlanets _planets) { planets = _planets; } /** * @dev Returns the asteroid's individual seed * @param _asteroidId Number from 1 to the total supply of asteroids */ function getAsteroidSeed(uint _asteroidId) public pure returns (bytes32) { require(_asteroidId > 0 && _asteroidId <= InfluenceSettings.TOTAL_ASTEROIDS); return InfluenceSettings.MASTER_SEED.derive(_asteroidId); } /** * @dev Generates the asteroid radius in meters * @param _asteroidId Number from 1 to the total supply of asteroids */ function getRadius(uint _asteroidId) public pure returns (uint64) { int128 exponent = int128(-475).fromInt().div(int128(1000).fromInt()); int128 baseRadius = InfluenceSettings.MAX_RADIUS.fromInt(); int128 radiusMod = exponent.mul(_asteroidId.fromUInt().ln()).exp(); int128 radius = baseRadius.mul(radiusMod); return radius.toUInt(); } /** * @dev Generates the asteroid radius in meters * @param _seed The seed returned by getAsteroidSeed */ function getRadiusBySeed(bytes32 _seed) public pure returns (uint64) { bytes32 node = _seed.derive("radius"); int128 base = int128(node.getIntBetween(0, 1000001)); // FIX THIS! int128 exponent = int128(-1).fromInt().div(int128(2).fromInt()); int128 baseRadius = InfluenceSettings.MAX_RADIUS.fromInt(); int128 radiusMod = exponent.mul(base.fromInt().ln()).exp(); int128 radius = baseRadius.mul(radiusMod); return radius.toUInt(); } /** * @dev Utility method to get asteroid spectral type * @param _asteroidId Number from 1 to the total supply of asteroids */ function getSpectralType(uint _asteroidId) public pure returns (uint) { return getSpectralTypeBySeed(getAsteroidSeed(_asteroidId)); } /** @dev Utility method to get asteroid spectral type * @param _seed The seed returned by getAsteroidSeed */ function getSpectralTypeBySeed(bytes32 _seed) public pure returns (uint) { uint region = getRegion(_seed); if (region == 0) { return getMainBeltType(_seed); } else { return getTrojanType(_seed); } } /** * @dev Utility method to get asteroid orbital elements * @param _asteroidId Number from 1 to the total supply of asteroids */ function getOrbitalElements(uint _asteroidId) public view returns (uint[6] memory orbitalElements) { return getOrbitalElementsBySeed(getAsteroidSeed(_asteroidId)); } /** * @dev Utility method to get asteroid orbital elements * @param _seed The seed returned by getAsteroidSeed */ function getOrbitalElementsBySeed(bytes32 _seed) public view returns (uint[6] memory orbitalElements) { uint region = getRegion(_seed); if (region == 0) { uint spectralType = getMainBeltType(_seed); orbitalElements = getMainBeltElements(_seed, spectralType); } else { orbitalElements = getTrojanElements(_seed); } return orbitalElements; } /** * @dev Gets the region (Main belt or Trojan) for the asteroid * @param _seed The seed returned by getAsteroidSeed */ function getRegion(bytes32 _seed) internal pure returns (uint) { bytes32 node = _seed.derive("region"); uint roll = uint(node.getIntBetween(0, 101)); if (roll >= 20) { return 0; } else { return 1; } } /** * @dev Generates the spectral type of a main belt asteroid * @param _seed The seed returned by getAsteroidSeed */ function getMainBeltType(bytes32 _seed) internal pure returns (uint) { uint16[11] memory ratios = [ 6500, 125, 250, 500, 250, 125, 1000, 500, 125, 500, 125 ]; bytes32 node =_seed.derive("spectral"); int64 roll = node.getIntBetween(1, 10001); uint asteroidCount = 0; for (uint i = 0; i < ratios.length; i++) { asteroidCount += ratios[i]; if (uint(roll) <= asteroidCount) { return i; } } return uint(ratios.length - 1); } /** * @dev Generates orbital elements for main belt asteroids * @param _seed The seed returned by getAsteroidSeed */ function getMainBeltElements(bytes32 _seed, uint _spectralType) internal pure returns (uint[6] memory) { bytes32 node; // Define min / max semi-major axis for each spectral type and generate for asteroid int128[11] memory minAxis = [ int128(800), 1200, 2900, 800, 1200, 2400, 800, 1200, 2400, 1200, 2900 ]; int128[11] memory maxAxis = [ int128(3100), 2250, 3100, 2600, 2350, 3000, 2400, 2250, 2750, 2300, 3100 ]; node = _seed.derive("axis"); uint axis = uint(node.getNormalIntBetween(minAxis[uint(_spectralType)], maxAxis[uint(_spectralType)])); // Generate eccentricity between 0 and 0.4 node = _seed.derive("eccentricity"); uint ecc = uint(node.getNormalIntBetween(0, 400)); // Generate inclination between 0 and 35 deg node = _seed.derive("inclination"); uint inc = uint(node.getDecayingIntBelow(4001)); // Get rotational elements for main belt uint[3] memory rotElements = getMainBeltRotationalElements(_seed); return [ axis, ecc, inc, rotElements[0], rotElements[1], rotElements[2] ]; } /** * @dev Generates the rotational elements for main belt asteroids * @param _seed The seed returned from getAsteroidSeed */ function getMainBeltRotationalElements(bytes32 _seed) internal pure returns (uint[3] memory) { bytes32 node; // Generate ascending node between 0 and 360 deg node = _seed.derive("ascending"); uint lan = uint(node.getIntBetween(0, 36000)); // Generate argument of periapsis between 0 and 360 deg node = _seed.derive("periapsis"); uint peri = uint(node.getIntBetween(0, 36000)); // Generate mean anomaly at epoch between 0 and 360 deg node = _seed.derive("anomaly"); uint anom = uint(node.getIntBetween(0, 36000)); return [ lan, peri, anom ]; } /** * @dev Generates the spectral type for Trojan belt asteroids * @param _seed The seed returned by getAsteroidSeed */ function getTrojanType(bytes32 _seed) internal pure returns (uint) { uint16[11] memory ratios = [ 2750, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 5750 ]; bytes32 node = _seed.derive("spectral"); int64 roll = node.getIntBetween(1, 10001); uint asteroidCount = 0; for (uint i = 0; i < ratios.length; i++) { asteroidCount += ratios[i]; if (uint(roll) <= asteroidCount) { return i; } } return uint(ratios.length - 1); } /** * @dev Generates a set of orbital elements for a trojan asteroid based on the parent planet * @param _seed The seed returned by getAsteroidSeed */ function getTrojanElements(bytes32 _seed) internal view returns (uint[6] memory) { bytes32 node; // Get details for the planet we're using as parent uint16[6] memory planet = planets.getPlanetWithTrojanAsteroids(); // Semi-major axis must be identical to result in the same oribtal period uint axis = planet[0]; // Eccentricity can vary by up to 12.5% node = _seed.derive("eccentricity"); uint ecc = uint(node.getNormalIntBetween(0, 125)); // Inclination can vary up to 35 deg node = _seed.derive("inclination"); uint inc = planet[2] + uint(node.getDecayingIntBelow(4001)); uint[3] memory rotElements = getTrojanRotationalElements(_seed, planet[3], planet[4], planet[5]); return [ axis, ecc, inc, rotElements[0], rotElements[1], rotElements[2] ]; } /** * @dev Since we're roughly approximating Trojan orbits (in reality they orbit the Lagrange point as well as * the star) we're going to vary orbits related to the parent. This is achieved by varying the sum of * the longitude of ascending node, argument of periapsis, and mean anomaly at epoch. * @param _seed The seed returned from getAsteroidSeed * @param _l Planet's longitude of ascending node * @param _p Planet's argument of periapsis * @param _a Planet's mean anomaly at epch */ function getTrojanRotationalElements( bytes32 _seed, uint _l, uint _p, uint _a ) internal pure returns (uint[3] memory) { bytes32 node; node = _seed.derive("lagrange"); uint lagrangeShift = 4500 + 22500 * uint(node.getIntBetween(0, 2)) + uint(node.getNormalIntBetween(0, 4501)); uint planetSum = _l + _p + _a + lagrangeShift; // Longitude of ascending node can vary node = _seed.derive("ascending"); uint lan = uint(node.getIntBetween(0, 36000)); // Argument of periapsis can vary node = _seed.derive("periapsis"); uint peri = uint(node.getIntBetween(0, 36000)); // Mean anomaly at epoch must get the asteroid in proper alignment with planetSum uint anom = (planetSum % 36000) + 36000 - ((lan + peri) % 36000); anom = anom % 36000; return [ lan, peri, anom ]; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.7.6; interface IPlanets { function getElements(uint _planet) external pure returns (uint16[6] memory elements); function getType(uint _planet) external pure returns (uint8); function getRadius(uint _planet) external pure returns (uint32); function getPlanetWithTrojanAsteroids() external pure returns (uint16[6] memory); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.0; library InfluenceSettings { // Game constants bytes32 public constant MASTER_SEED = "influence"; uint32 public constant MAX_RADIUS = 375142; // in meters uint32 public constant START_TIMESTAMP = 1609459200; // Zero date timestamp for orbits uint public constant TOTAL_ASTEROIDS = 250000; }
// SPDX-License-Identifier: UNLICENSED // Portions licensed under NovakDistribute license (ref LICENSE file) pragma solidity ^0.7.0; import "abdk-libraries-solidity/ABDKMath64x64.sol"; library Procedural { using ABDKMath64x64 for *; /** * @dev Mix string data into a hash and return a new one. */ function derive(bytes32 _self, string memory _entropy) public pure returns (bytes32) { return sha256(abi.encodePacked(_self, _entropy)); } /** * @dev Mix signed int data into a hash and return a new one. */ function derive(bytes32 _self, int256 _entropy) public pure returns (bytes32) { return sha256(abi.encodePacked(_self, _entropy)); } /** * @dev Mix unsigned int data into a hash and return a new one. */ function derive(bytes32 _self, uint _entropy) public pure returns (bytes32) { return sha256(abi.encodePacked(_self, _entropy)); } /** * @dev Returns the base pseudorandom hash for the given RandNode. Does another round of hashing * in case an un-encoded string was passed. */ function getHash(bytes32 _self) public pure returns (bytes32) { return sha256(abi.encodePacked(_self)); } /** * @dev Get an int128 full of random bits. */ function getInt128(bytes32 _self) public pure returns (int128) { return int128(int256(getHash(_self))); } /** * @dev Get a 64.64 fixed point (see ABDK math) where: 0 <= return value < 1 */ function getReal(bytes32 _self) public pure returns (int128) { int128 fixedOne = int128(1 << 64); return getInt128(_self).abs() % fixedOne; } /** * @dev Get an integer between low, inclusive, and high, exclusive. Represented as a normal int, not a real. */ function getIntBetween(bytes32 _self, int128 _low, int128 _high) public pure returns (int64) { _low = _low.fromInt(); _high = _high.fromInt(); int128 range = _high.sub(_low); int128 result = getReal(_self).mul(range).add(_low); return result.toInt(); } /** * @dev Returns a normal int (roughly) normally distributed value between low and high */ function getNormalIntBetween(bytes32 _self, int128 _low, int128 _high) public pure returns (int64) { int128 accumulator = 0; for (uint i = 0; i < 5; i++) { accumulator += getIntBetween(derive(_self, i), _low, _high); } return accumulator.fromInt().div(5.fromUInt()).toInt(); } /** * @dev "Folds" a normal int distribution in half to generate an approx decay function * Only takes a high value (exclusive) as the simplistic approximation relies on low being zero * Returns a normal int, not a real */ function getDecayingIntBelow(bytes32 _self, uint _high) public pure returns (int64) { require(_high < uint(1 << 64)); int64 normalInt = getNormalIntBetween(_self, 0, int128(_high * 2 - 1)); int128 adjusted = int128(normalInt) - int128(_high); return adjusted.fromInt().abs().toInt(); } }
// SPDX-License-Identifier: BSD-4-Clause /* * ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting. * Author: Mikhail Vladimirov <[email protected]> */ pragma solidity ^0.5.0 || ^0.6.0 || ^0.7.0; /** * Smart contract library of mathematical functions operating with signed * 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is * basically a simple fraction whose numerator is signed 128-bit integer and * denominator is 2^64. As long as denominator is always the same, there is no * need to store it, thus in Solidity signed 64.64-bit fixed point numbers are * represented by int128 type holding only the numerator. */ library ABDKMath64x64 { /* * Minimum value signed 64.64-bit fixed point number may have. */ int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; /* * Maximum value signed 64.64-bit fixed point number may have. */ int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Convert signed 256-bit integer number into signed 64.64-bit fixed point * number. Revert on overflow. * * @param x signed 256-bit integer number * @return signed 64.64-bit fixed point number */ function fromInt (int256 x) internal pure returns (int128) { require (x >= -0x8000000000000000 && x <= 0x7FFFFFFFFFFFFFFF); return int128 (x << 64); } /** * Convert signed 64.64 fixed point number into signed 64-bit integer number * rounding down. * * @param x signed 64.64-bit fixed point number * @return signed 64-bit integer number */ function toInt (int128 x) internal pure returns (int64) { return int64 (x >> 64); } /** * Convert unsigned 256-bit integer number into signed 64.64-bit fixed point * number. Revert on overflow. * * @param x unsigned 256-bit integer number * @return signed 64.64-bit fixed point number */ function fromUInt (uint256 x) internal pure returns (int128) { require (x <= 0x7FFFFFFFFFFFFFFF); return int128 (x << 64); } /** * Convert signed 64.64 fixed point number into unsigned 64-bit integer * number rounding down. Revert on underflow. * * @param x signed 64.64-bit fixed point number * @return unsigned 64-bit integer number */ function toUInt (int128 x) internal pure returns (uint64) { require (x >= 0); return uint64 (x >> 64); } /** * Convert signed 128.128 fixed point number into signed 64.64-bit fixed point * number rounding down. Revert on overflow. * * @param x signed 128.128-bin fixed point number * @return signed 64.64-bit fixed point number */ function from128x128 (int256 x) internal pure returns (int128) { int256 result = x >> 64; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Convert signed 64.64 fixed point number into signed 128.128 fixed point * number. * * @param x signed 64.64-bit fixed point number * @return signed 128.128 fixed point number */ function to128x128 (int128 x) internal pure returns (int256) { return int256 (x) << 64; } /** * Calculate x + y. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function add (int128 x, int128 y) internal pure returns (int128) { int256 result = int256(x) + y; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x - y. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function sub (int128 x, int128 y) internal pure returns (int128) { int256 result = int256(x) - y; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x * y rounding down. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function mul (int128 x, int128 y) internal pure returns (int128) { int256 result = int256(x) * y >> 64; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x * y rounding towards zero, where x is signed 64.64 fixed point * number and y is signed 256-bit integer number. Revert on overflow. * * @param x signed 64.64 fixed point number * @param y signed 256-bit integer number * @return signed 256-bit integer number */ function muli (int128 x, int256 y) internal pure returns (int256) { if (x == MIN_64x64) { require (y >= -0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF && y <= 0x1000000000000000000000000000000000000000000000000); return -y << 63; } else { bool negativeResult = false; if (x < 0) { x = -x; negativeResult = true; } if (y < 0) { y = -y; // We rely on overflow behavior here negativeResult = !negativeResult; } uint256 absoluteResult = mulu (x, uint256 (y)); if (negativeResult) { require (absoluteResult <= 0x8000000000000000000000000000000000000000000000000000000000000000); return -int256 (absoluteResult); // We rely on overflow behavior here } else { require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return int256 (absoluteResult); } } } /** * Calculate x * y rounding down, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64 fixed point number * @param y unsigned 256-bit integer number * @return unsigned 256-bit integer number */ function mulu (int128 x, uint256 y) internal pure returns (uint256) { if (y == 0) return 0; require (x >= 0); uint256 lo = (uint256 (x) * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) >> 64; uint256 hi = uint256 (x) * (y >> 128); require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); hi <<= 64; require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - lo); return hi + lo; } /** * Calculate x / y rounding towards zero. Revert on overflow or when y is * zero. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function div (int128 x, int128 y) internal pure returns (int128) { require (y != 0); int256 result = (int256 (x) << 64) / y; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x / y rounding towards zero, where x and y are signed 256-bit * integer numbers. Revert on overflow or when y is zero. * * @param x signed 256-bit integer number * @param y signed 256-bit integer number * @return signed 64.64-bit fixed point number */ function divi (int256 x, int256 y) internal pure returns (int128) { require (y != 0); bool negativeResult = false; if (x < 0) { x = -x; // We rely on overflow behavior here negativeResult = true; } if (y < 0) { y = -y; // We rely on overflow behavior here negativeResult = !negativeResult; } uint128 absoluteResult = divuu (uint256 (x), uint256 (y)); if (negativeResult) { require (absoluteResult <= 0x80000000000000000000000000000000); return -int128 (absoluteResult); // We rely on overflow behavior here } else { require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return int128 (absoluteResult); // We rely on overflow behavior here } } /** * Calculate x / y rounding towards zero, where x and y are unsigned 256-bit * integer numbers. Revert on overflow or when y is zero. * * @param x unsigned 256-bit integer number * @param y unsigned 256-bit integer number * @return signed 64.64-bit fixed point number */ function divu (uint256 x, uint256 y) internal pure returns (int128) { require (y != 0); uint128 result = divuu (x, y); require (result <= uint128 (MAX_64x64)); return int128 (result); } /** * Calculate -x. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function neg (int128 x) internal pure returns (int128) { require (x != MIN_64x64); return -x; } /** * Calculate |x|. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function abs (int128 x) internal pure returns (int128) { require (x != MIN_64x64); return x < 0 ? -x : x; } /** * Calculate 1 / x rounding towards zero. Revert on overflow or when x is * zero. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function inv (int128 x) internal pure returns (int128) { require (x != 0); int256 result = int256 (0x100000000000000000000000000000000) / x; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate arithmetics average of x and y, i.e. (x + y) / 2 rounding down. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function avg (int128 x, int128 y) internal pure returns (int128) { return int128 ((int256 (x) + int256 (y)) >> 1); } /** * Calculate geometric average of x and y, i.e. sqrt (x * y) rounding down. * Revert on overflow or in case x * y is negative. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function gavg (int128 x, int128 y) internal pure returns (int128) { int256 m = int256 (x) * int256 (y); require (m >= 0); require (m < 0x4000000000000000000000000000000000000000000000000000000000000000); return int128 (sqrtu (uint256 (m))); } /** * Calculate x^y assuming 0^0 is 1, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y uint256 value * @return signed 64.64-bit fixed point number */ function pow (int128 x, uint256 y) internal pure returns (int128) { uint256 absoluteResult; bool negativeResult = false; if (x >= 0) { absoluteResult = powu (uint256 (x) << 63, y); } else { // We rely on overflow behavior here absoluteResult = powu (uint256 (uint128 (-x)) << 63, y); negativeResult = y & 1 > 0; } absoluteResult >>= 63; if (negativeResult) { require (absoluteResult <= 0x80000000000000000000000000000000); return -int128 (absoluteResult); // We rely on overflow behavior here } else { require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return int128 (absoluteResult); // We rely on overflow behavior here } } /** * Calculate sqrt (x) rounding down. Revert if x < 0. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function sqrt (int128 x) internal pure returns (int128) { require (x >= 0); return int128 (sqrtu (uint256 (x) << 64)); } /** * Calculate binary logarithm of x. Revert if x <= 0. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function log_2 (int128 x) internal pure returns (int128) { require (x > 0); int256 msb = 0; int256 xc = x; if (xc >= 0x10000000000000000) { xc >>= 64; msb += 64; } if (xc >= 0x100000000) { xc >>= 32; msb += 32; } if (xc >= 0x10000) { xc >>= 16; msb += 16; } if (xc >= 0x100) { xc >>= 8; msb += 8; } if (xc >= 0x10) { xc >>= 4; msb += 4; } if (xc >= 0x4) { xc >>= 2; msb += 2; } if (xc >= 0x2) msb += 1; // No need to shift xc anymore int256 result = msb - 64 << 64; uint256 ux = uint256 (x) << uint256 (127 - msb); for (int256 bit = 0x8000000000000000; bit > 0; bit >>= 1) { ux *= ux; uint256 b = ux >> 255; ux >>= 127 + b; result += bit * int256 (b); } return int128 (result); } /** * Calculate natural logarithm of x. Revert if x <= 0. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function ln (int128 x) internal pure returns (int128) { require (x > 0); return int128 ( uint256 (log_2 (x)) * 0xB17217F7D1CF79ABC9E3B39803F2F6AF >> 128); } /** * Calculate binary exponent of x. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function exp_2 (int128 x) internal pure returns (int128) { require (x < 0x400000000000000000); // Overflow if (x < -0x400000000000000000) return 0; // Underflow uint256 result = 0x80000000000000000000000000000000; if (x & 0x8000000000000000 > 0) result = result * 0x16A09E667F3BCC908B2FB1366EA957D3E >> 128; if (x & 0x4000000000000000 > 0) result = result * 0x1306FE0A31B7152DE8D5A46305C85EDEC >> 128; if (x & 0x2000000000000000 > 0) result = result * 0x1172B83C7D517ADCDF7C8C50EB14A791F >> 128; if (x & 0x1000000000000000 > 0) result = result * 0x10B5586CF9890F6298B92B71842A98363 >> 128; if (x & 0x800000000000000 > 0) result = result * 0x1059B0D31585743AE7C548EB68CA417FD >> 128; if (x & 0x400000000000000 > 0) result = result * 0x102C9A3E778060EE6F7CACA4F7A29BDE8 >> 128; if (x & 0x200000000000000 > 0) result = result * 0x10163DA9FB33356D84A66AE336DCDFA3F >> 128; if (x & 0x100000000000000 > 0) result = result * 0x100B1AFA5ABCBED6129AB13EC11DC9543 >> 128; if (x & 0x80000000000000 > 0) result = result * 0x10058C86DA1C09EA1FF19D294CF2F679B >> 128; if (x & 0x40000000000000 > 0) result = result * 0x1002C605E2E8CEC506D21BFC89A23A00F >> 128; if (x & 0x20000000000000 > 0) result = result * 0x100162F3904051FA128BCA9C55C31E5DF >> 128; if (x & 0x10000000000000 > 0) result = result * 0x1000B175EFFDC76BA38E31671CA939725 >> 128; if (x & 0x8000000000000 > 0) result = result * 0x100058BA01FB9F96D6CACD4B180917C3D >> 128; if (x & 0x4000000000000 > 0) result = result * 0x10002C5CC37DA9491D0985C348C68E7B3 >> 128; if (x & 0x2000000000000 > 0) result = result * 0x1000162E525EE054754457D5995292026 >> 128; if (x & 0x1000000000000 > 0) result = result * 0x10000B17255775C040618BF4A4ADE83FC >> 128; if (x & 0x800000000000 > 0) result = result * 0x1000058B91B5BC9AE2EED81E9B7D4CFAB >> 128; if (x & 0x400000000000 > 0) result = result * 0x100002C5C89D5EC6CA4D7C8ACC017B7C9 >> 128; if (x & 0x200000000000 > 0) result = result * 0x10000162E43F4F831060E02D839A9D16D >> 128; if (x & 0x100000000000 > 0) result = result * 0x100000B1721BCFC99D9F890EA06911763 >> 128; if (x & 0x80000000000 > 0) result = result * 0x10000058B90CF1E6D97F9CA14DBCC1628 >> 128; if (x & 0x40000000000 > 0) result = result * 0x1000002C5C863B73F016468F6BAC5CA2B >> 128; if (x & 0x20000000000 > 0) result = result * 0x100000162E430E5A18F6119E3C02282A5 >> 128; if (x & 0x10000000000 > 0) result = result * 0x1000000B1721835514B86E6D96EFD1BFE >> 128; if (x & 0x8000000000 > 0) result = result * 0x100000058B90C0B48C6BE5DF846C5B2EF >> 128; if (x & 0x4000000000 > 0) result = result * 0x10000002C5C8601CC6B9E94213C72737A >> 128; if (x & 0x2000000000 > 0) result = result * 0x1000000162E42FFF037DF38AA2B219F06 >> 128; if (x & 0x1000000000 > 0) result = result * 0x10000000B17217FBA9C739AA5819F44F9 >> 128; if (x & 0x800000000 > 0) result = result * 0x1000000058B90BFCDEE5ACD3C1CEDC823 >> 128; if (x & 0x400000000 > 0) result = result * 0x100000002C5C85FE31F35A6A30DA1BE50 >> 128; if (x & 0x200000000 > 0) result = result * 0x10000000162E42FF0999CE3541B9FFFCF >> 128; if (x & 0x100000000 > 0) result = result * 0x100000000B17217F80F4EF5AADDA45554 >> 128; if (x & 0x80000000 > 0) result = result * 0x10000000058B90BFBF8479BD5A81B51AD >> 128; if (x & 0x40000000 > 0) result = result * 0x1000000002C5C85FDF84BD62AE30A74CC >> 128; if (x & 0x20000000 > 0) result = result * 0x100000000162E42FEFB2FED257559BDAA >> 128; if (x & 0x10000000 > 0) result = result * 0x1000000000B17217F7D5A7716BBA4A9AE >> 128; if (x & 0x8000000 > 0) result = result * 0x100000000058B90BFBE9DDBAC5E109CCE >> 128; if (x & 0x4000000 > 0) result = result * 0x10000000002C5C85FDF4B15DE6F17EB0D >> 128; if (x & 0x2000000 > 0) result = result * 0x1000000000162E42FEFA494F1478FDE05 >> 128; if (x & 0x1000000 > 0) result = result * 0x10000000000B17217F7D20CF927C8E94C >> 128; if (x & 0x800000 > 0) result = result * 0x1000000000058B90BFBE8F71CB4E4B33D >> 128; if (x & 0x400000 > 0) result = result * 0x100000000002C5C85FDF477B662B26945 >> 128; if (x & 0x200000 > 0) result = result * 0x10000000000162E42FEFA3AE53369388C >> 128; if (x & 0x100000 > 0) result = result * 0x100000000000B17217F7D1D351A389D40 >> 128; if (x & 0x80000 > 0) result = result * 0x10000000000058B90BFBE8E8B2D3D4EDE >> 128; if (x & 0x40000 > 0) result = result * 0x1000000000002C5C85FDF4741BEA6E77E >> 128; if (x & 0x20000 > 0) result = result * 0x100000000000162E42FEFA39FE95583C2 >> 128; if (x & 0x10000 > 0) result = result * 0x1000000000000B17217F7D1CFB72B45E1 >> 128; if (x & 0x8000 > 0) result = result * 0x100000000000058B90BFBE8E7CC35C3F0 >> 128; if (x & 0x4000 > 0) result = result * 0x10000000000002C5C85FDF473E242EA38 >> 128; if (x & 0x2000 > 0) result = result * 0x1000000000000162E42FEFA39F02B772C >> 128; if (x & 0x1000 > 0) result = result * 0x10000000000000B17217F7D1CF7D83C1A >> 128; if (x & 0x800 > 0) result = result * 0x1000000000000058B90BFBE8E7BDCBE2E >> 128; if (x & 0x400 > 0) result = result * 0x100000000000002C5C85FDF473DEA871F >> 128; if (x & 0x200 > 0) result = result * 0x10000000000000162E42FEFA39EF44D91 >> 128; if (x & 0x100 > 0) result = result * 0x100000000000000B17217F7D1CF79E949 >> 128; if (x & 0x80 > 0) result = result * 0x10000000000000058B90BFBE8E7BCE544 >> 128; if (x & 0x40 > 0) result = result * 0x1000000000000002C5C85FDF473DE6ECA >> 128; if (x & 0x20 > 0) result = result * 0x100000000000000162E42FEFA39EF366F >> 128; if (x & 0x10 > 0) result = result * 0x1000000000000000B17217F7D1CF79AFA >> 128; if (x & 0x8 > 0) result = result * 0x100000000000000058B90BFBE8E7BCD6D >> 128; if (x & 0x4 > 0) result = result * 0x10000000000000002C5C85FDF473DE6B2 >> 128; if (x & 0x2 > 0) result = result * 0x1000000000000000162E42FEFA39EF358 >> 128; if (x & 0x1 > 0) result = result * 0x10000000000000000B17217F7D1CF79AB >> 128; result >>= uint256 (63 - (x >> 64)); require (result <= uint256 (MAX_64x64)); return int128 (result); } /** * Calculate natural exponent of x. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function exp (int128 x) internal pure returns (int128) { require (x < 0x400000000000000000); // Overflow if (x < -0x400000000000000000) return 0; // Underflow return exp_2 ( int128 (int256 (x) * 0x171547652B82FE1777D0FFDA0D23A7D12 >> 128)); } /** * Calculate x / y rounding towards zero, where x and y are unsigned 256-bit * integer numbers. Revert on overflow or when y is zero. * * @param x unsigned 256-bit integer number * @param y unsigned 256-bit integer number * @return unsigned 64.64-bit fixed point number */ function divuu (uint256 x, uint256 y) private pure returns (uint128) { require (y != 0); uint256 result; if (x <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) result = (x << 64) / y; else { uint256 msb = 192; uint256 xc = x >> 192; if (xc >= 0x100000000) { xc >>= 32; msb += 32; } if (xc >= 0x10000) { xc >>= 16; msb += 16; } if (xc >= 0x100) { xc >>= 8; msb += 8; } if (xc >= 0x10) { xc >>= 4; msb += 4; } if (xc >= 0x4) { xc >>= 2; msb += 2; } if (xc >= 0x2) msb += 1; // No need to shift xc anymore result = (x << 255 - msb) / ((y - 1 >> msb - 191) + 1); require (result <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); uint256 hi = result * (y >> 128); uint256 lo = result * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); uint256 xh = x >> 192; uint256 xl = x << 64; if (xl < lo) xh -= 1; xl -= lo; // We rely on overflow behavior here lo = hi << 128; if (xl < lo) xh -= 1; xl -= lo; // We rely on overflow behavior here assert (xh == hi >> 128); result += xl / y; } require (result <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return uint128 (result); } /** * Calculate x^y assuming 0^0 is 1, where x is unsigned 129.127 fixed point * number and y is unsigned 256-bit integer number. Revert on overflow. * * @param x unsigned 129.127-bit fixed point number * @param y uint256 value * @return unsigned 129.127-bit fixed point number */ function powu (uint256 x, uint256 y) private pure returns (uint256) { if (y == 0) return 0x80000000000000000000000000000000; else if (x == 0) return 0; else { int256 msb = 0; uint256 xc = x; if (xc >= 0x100000000000000000000000000000000) { xc >>= 128; msb += 128; } if (xc >= 0x10000000000000000) { xc >>= 64; msb += 64; } if (xc >= 0x100000000) { xc >>= 32; msb += 32; } if (xc >= 0x10000) { xc >>= 16; msb += 16; } if (xc >= 0x100) { xc >>= 8; msb += 8; } if (xc >= 0x10) { xc >>= 4; msb += 4; } if (xc >= 0x4) { xc >>= 2; msb += 2; } if (xc >= 0x2) msb += 1; // No need to shift xc anymore int256 xe = msb - 127; if (xe > 0) x >>= uint256 (xe); else x <<= uint256 (-xe); uint256 result = 0x80000000000000000000000000000000; int256 re = 0; while (y > 0) { if (y & 1 > 0) { result = result * x; y -= 1; re += xe; if (result >= 0x8000000000000000000000000000000000000000000000000000000000000000) { result >>= 128; re += 1; } else result >>= 127; if (re < -127) return 0; // Underflow require (re < 128); // Overflow } else { x = x * x; y >>= 1; xe <<= 1; if (x >= 0x8000000000000000000000000000000000000000000000000000000000000000) { x >>= 128; xe += 1; } else x >>= 127; if (xe < -127) return 0; // Underflow require (xe < 128); // Overflow } } if (re > 0) result <<= uint256 (re); else if (re < 0) result >>= uint256 (-re); return result; } } /** * Calculate sqrt (x) rounding down, where x is unsigned 256-bit integer * number. * * @param x unsigned 256-bit integer number * @return unsigned 128-bit integer number */ function sqrtu (uint256 x) private pure returns (uint128) { if (x == 0) return 0; else { uint256 xx = x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; // Seven iterations should be enough uint256 r1 = x / r; return uint128 (r < r1 ? r : r1); } } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": { "/Users/clexmond/projects/influence/influence-dapp/contracts/lib/Procedural.sol": { "Procedural": "0xa06f481a2b8cb004ac50701e375ea9022d33Eef3" } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IPlanets","name":"_planets","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_asteroidId","type":"uint256"}],"name":"getAsteroidSeed","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_asteroidId","type":"uint256"}],"name":"getOrbitalElements","outputs":[{"internalType":"uint256[6]","name":"orbitalElements","type":"uint256[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_seed","type":"bytes32"}],"name":"getOrbitalElementsBySeed","outputs":[{"internalType":"uint256[6]","name":"orbitalElements","type":"uint256[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_asteroidId","type":"uint256"}],"name":"getRadius","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_seed","type":"bytes32"}],"name":"getRadiusBySeed","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_asteroidId","type":"uint256"}],"name":"getSpectralType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_seed","type":"bytes32"}],"name":"getSpectralTypeBySeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516132453803806132458339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506131b1806100946000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063cf2c11b11161005b578063cf2c11b11461015c578063d5cee3441461019e578063efa0337c14610208578063f4c10f1b146102725761007d565b80636b082eed14610082578063825a013e146100ce578063c901eb9414610110575b600080fd5b6100ae6004803603602081101561009857600080fd5b81019080803590602001909291905050506102b4565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6100fa600480360360208110156100e457600080fd5b8101908080359060200190929190505050610386565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061045e565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6101886004803603602081101561017257600080fd5b81019080803590602001909291905050506106a4565b6040518082815260200191505060405180910390f35b6101ca600480360360208110156101b457600080fd5b81019080803590602001909291905050506106be565b6040518082600660200280838360005b838110156101f55780820151818401526020810190506101da565b5050505090500191505060405180910390f35b6102346004803603602081101561021e57600080fd5b81019080803590602001909291905050506106de565b6040518082600660200280838360005b8381101561025f578082015181840152602081019050610244565b5050505090500191505060405180910390f35b61029e6004803603602081101561028857600080fd5b810190808035906020019092919050505061072d565b6040518082815260200191505060405180910390f35b6000806103056102c86103e8600f0b610767565b6102f47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe25600f0b610767565b600f0b6107b690919063ffffffff16565b9050600061031b6205b96663ffffffff16610767565b9050600061035361034b61033961033188610839565b600f0b61085c565b85600f0b61089690919063ffffffff16565b600f0b610901565b9050600061036d8284600f0b61089690919063ffffffff16565b905061037b81600f0b61097a565b945050505050919050565b6000808211801561039a57506203d0908211155b6103a357600080fd5b7f696e666c75656e6365000000000000000000000000000000000000000000000073a06f481a2b8cb004ac50701e375ea9022d33eef36312dbaacc9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561041c57600080fd5b505af4158015610430573d6000803e3d6000fd5b505050506040513d602081101561044657600080fd5b81019080805190602001909291905050509050919050565b6000808273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260068152602001807f72616469757300000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156104eb57600080fd5b505af41580156104ff573d6000803e3d6000fd5b505050506040513d602081101561051557600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000620f42416040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561058f57600080fd5b505af41580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b810190808051906020019092919050505060070b9050600061061e6105e16002600f0b610767565b61060d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f0b610767565b600f0b6107b690919063ffffffff16565b905060006106346205b96663ffffffff16610767565b9050600061066f61066761065561064d87600f0b610767565b600f0b61085c565b85600f0b61089690919063ffffffff16565b600f0b610901565b905060006106898284600f0b61089690919063ffffffff16565b905061069781600f0b61097a565b9650505050505050919050565b60006106b76106b283610386565b61072d565b9050919050565b6106c6613137565b6106d76106d283610386565b6106de565b9050919050565b6106e6613137565b60006106f18361099b565b9050600081141561071b57600061070784610b29565b90506107138482610d7e565b925050610727565b61072483611378565b91505b50919050565b6000806107398361099b565b905060008114156107555761074d83610b29565b915050610762565b61075e836117e9565b9150505b919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffff800000000000000082121580156107a15750677fffffffffffffff8213155b6107aa57600080fd5b604082901b9050919050565b60008082600f0b14156107c857600080fd5b600082600f0b604085600f0b901b816107dd57fe5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561082657506f7fffffffffffffffffffffffffffffff600f0b8113155b61082f57600080fd5b8091505092915050565b6000677fffffffffffffff82111561085057600080fd5b604082901b9050919050565b60008082600f0b1361086d57600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af61088984611a3c565b600f0b02901c9050919050565b600080604083600f0b85600f0b02901d90507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b81121580156108ee57506f7fffffffffffffffffffffffffffffff600f0b8113155b6108f757600080fd5b8091505092915050565b60006840000000000000000082600f0b1261091b57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b121561094f5760009050610975565b6109726080700171547652b82fe1777d0ffda0d23a7d1284600f0b02901d611b60565b90505b919050565b60008082600f0b121561098c57600080fd5b604082600f0b901d9050919050565b6000808273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260068152602001807f726567696f6e00000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610a2857600080fd5b505af4158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b089091600060656040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610aca57600080fd5b505af4158015610ade573d6000803e3d6000fd5b505050506040513d6020811015610af457600080fd5b810190808051906020019092919050505060070b905060148110610b1d57600092505050610b24565b6001925050505b919050565b60008060405180610160016040528061196461ffff168152602001607d61ffff16815260200160fa61ffff1681526020016101f461ffff16815260200160fa61ffff168152602001607d61ffff1681526020016103e861ffff1681526020016101f461ffff168152602001607d61ffff1681526020016101f461ffff168152602001607d61ffff16815250905060008373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f737065637472616c0000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610c4257600080fd5b505af4158015610c56573d6000803e3d6000fd5b505050506040513d6020811015610c6c57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b08909160016127116040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610ce557600080fd5b505af4158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b810190808051906020019092919050505090506000805b600b811015610d6c578481600b8110610d3b57fe5b602002015161ffff1682019150818360070b11610d5f578095505050505050610d79565b8080600101915050610d26565b506001600b039450505050505b919050565b610d86613137565b600080604051806101600160405280610320600f0b600f0b81526020016104b0600f0b8152602001610b54600f0b8152602001610320600f0b81526020016104b0600f0b8152602001610960600f0b8152602001610320600f0b81526020016104b0600f0b8152602001610960600f0b81526020016104b0600f0b8152602001610b54600f0b81525090506000604051806101600160405280610c1c600f0b600f0b81526020016108ca600f0b8152602001610c1c600f0b8152602001610a28600f0b815260200161092e600f0b8152602001610bb8600f0b8152602001610960600f0b81526020016108ca600f0b8152602001610abe600f0b81526020016108fc600f0b8152602001610c1c600f0b81525090508573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260048152602001807f61786973000000000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610f2557600080fd5b505af4158015610f39573d6000803e3d6000fd5b505050506040513d6020811015610f4f57600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c990918589600b8110610f8d57fe5b6020020151858a600b8110610f9e57fe5b60200201516040518463ffffffff1660e01b81526004018084815260200183600f0b815260200182600f0b8152602001935050505060206040518083038186803b158015610feb57600080fd5b505af4158015610fff573d6000803e3d6000fd5b505050506040513d602081101561101557600080fd5b810190808051906020019092919050505060070b90508673a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600c8152602001807f656363656e7472696369747900000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156110b557600080fd5b505af41580156110c9573d6000803e3d6000fd5b505050506040513d60208110156110df57600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c9909160006101906040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561115857600080fd5b505af415801561116c573d6000803e3d6000fd5b505050506040513d602081101561118257600080fd5b810190808051906020019092919050505060070b90508773a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600b8152602001807f696e636c696e6174696f6e0000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561122257600080fd5b505af4158015611236573d6000803e3d6000fd5b505050506040513d602081101561124c57600080fd5b8101908080519060200190929190505050945060008573a06f481a2b8cb004ac50701e375ea9022d33eef3633d1a39b69091610fa16040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156112bc57600080fd5b505af41580156112d0573d6000803e3d6000fd5b505050506040513d60208110156112e657600080fd5b810190808051906020019092919050505060070b905060006113078a612760565b90506040518060c001604052808581526020018481526020018381526020018260006003811061133357fe5b602002015181526020018260016003811061134a57fe5b602002015181526020018260026003811061136157fe5b602002015181525097505050505050505092915050565b611380613137565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a0306dc6040518163ffffffff1660e01b815260040160c06040518083038186803b1580156113e957600080fd5b505afa1580156113fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060c081101561142257600080fd5b8101908091905050905060008160006006811061143b57fe5b602002015161ffff1690508473a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600c8152602001807f656363656e7472696369747900000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156114d057600080fd5b505af41580156114e4573d6000803e3d6000fd5b505050506040513d60208110156114fa57600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c990916000607d6040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561157257600080fd5b505af4158015611586573d6000803e3d6000fd5b505050506040513d602081101561159c57600080fd5b810190808051906020019092919050505060070b90508573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600b8152602001807f696e636c696e6174696f6e0000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561163c57600080fd5b505af4158015611650573d6000803e3d6000fd5b505050506040513d602081101561166657600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef3633d1a39b69091610fa16040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156116d657600080fd5b505af41580156116ea573d6000803e3d6000fd5b505050506040513d602081101561170057600080fd5b810190808051906020019092919050505060070b8460026006811061172157fe5b602002015161ffff16019050600061177a888660036006811061174057fe5b602002015161ffff168760046006811061175657fe5b602002015161ffff168860056006811061176c57fe5b602002015161ffff16612bd7565b90506040518060c00160405280858152602001848152602001838152602001826000600381106117a657fe5b60200201518152602001826001600381106117bd57fe5b60200201518152602001826002600381106117d457fe5b60200201518152509650505050505050919050565b600080604051806101600160405280610abe61ffff168152602001600061ffff1681526020016105dc61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200161167661ffff16815250905060008373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f737065637472616c0000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561190057600080fd5b505af4158015611914573d6000803e3d6000fd5b505050506040513d602081101561192a57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b08909160016127116040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b1580156119a357600080fd5b505af41580156119b7573d6000803e3d6000fd5b505050506040513d60208110156119cd57600080fd5b810190808051906020019092919050505090506000805b600b811015611a2a578481600b81106119f957fe5b602002015161ffff1682019150818360070b11611a1d578095505050505050611a37565b80806001019150506119e4565b506001600b039450505050505b919050565b60008082600f0b13611a4d57600080fd5b60008083600f0b9050680100000000000000008112611a7457604081901d90506040820191505b6401000000008112611a8e57602081901d90506020820191505b620100008112611aa657601081901d90506010820191505b6101008112611abd57600881901d90506008820191505b60108112611ad357600481901d90506004820191505b60048112611ae957600281901d90506002820191505b60028112611af8576001820191505b60006040808403901b9050600083607f0386600f0b901b9050600067800000000000000090505b6000811315611b53578182029150600060ff83901c905080607f0183901c92508082028401935050600181901d9050611b1f565b5081945050505050919050565b60006840000000000000000082600f0b12611b7a57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215611bae576000905061275b565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315611bf457608070016a09e667f3bcc908b2fb1366ea957d3e8202901c90505b60006740000000000000008416600f0b1315611c255760807001306fe0a31b7152de8d5a46305c85edec8202901c90505b60006720000000000000008416600f0b1315611c565760807001172b83c7d517adcdf7c8c50eb14a791f8202901c90505b60006710000000000000008416600f0b1315611c8757608070010b5586cf9890f6298b92b71842a983638202901c90505b60006708000000000000008416600f0b1315611cb85760807001059b0d31585743ae7c548eb68ca417fd8202901c90505b60006704000000000000008416600f0b1315611ce9576080700102c9a3e778060ee6f7caca4f7a29bde88202901c90505b60006702000000000000008416600f0b1315611d1a57608070010163da9fb33356d84a66ae336dcdfa3f8202901c90505b60006701000000000000008416600f0b1315611d4b576080700100b1afa5abcbed6129ab13ec11dc95438202901c90505b600066800000000000008416600f0b1315611d7b57608070010058c86da1c09ea1ff19d294cf2f679b8202901c90505b600066400000000000008416600f0b1315611dab5760807001002c605e2e8cec506d21bfc89a23a00f8202901c90505b600066200000000000008416600f0b1315611ddb576080700100162f3904051fa128bca9c55c31e5df8202901c90505b600066100000000000008416600f0b1315611e0b5760807001000b175effdc76ba38e31671ca9397258202901c90505b600066080000000000008416600f0b1315611e3b576080700100058ba01fb9f96d6cacd4b180917c3d8202901c90505b600066040000000000008416600f0b1315611e6b57608070010002c5cc37da9491d0985c348c68e7b38202901c90505b600066020000000000008416600f0b1315611e9b5760807001000162e525ee054754457d59952920268202901c90505b600066010000000000008416600f0b1315611ecb57608070010000b17255775c040618bf4a4ade83fc8202901c90505b6000658000000000008416600f0b1315611efa5760807001000058b91b5bc9ae2eed81e9b7d4cfab8202901c90505b6000654000000000008416600f0b1315611f29576080700100002c5c89d5ec6ca4d7c8acc017b7c98202901c90505b6000652000000000008416600f0b1315611f5857608070010000162e43f4f831060e02d839a9d16d8202901c90505b6000651000000000008416600f0b1315611f87576080700100000b1721bcfc99d9f890ea069117638202901c90505b6000650800000000008416600f0b1315611fb657608070010000058b90cf1e6d97f9ca14dbcc16288202901c90505b6000650400000000008416600f0b1315611fe55760807001000002c5c863b73f016468f6bac5ca2b8202901c90505b6000650200000000008416600f0b1315612014576080700100000162e430e5a18f6119e3c02282a58202901c90505b6000650100000000008416600f0b13156120435760807001000000b1721835514b86e6d96efd1bfe8202901c90505b60006480000000008416600f0b1315612071576080700100000058b90c0b48c6be5df846c5b2ef8202901c90505b60006440000000008416600f0b131561209f57608070010000002c5c8601cc6b9e94213c72737a8202901c90505b60006420000000008416600f0b13156120cd5760807001000000162e42fff037df38aa2b219f068202901c90505b60006410000000008416600f0b13156120fb57608070010000000b17217fba9c739aa5819f44f98202901c90505b60006408000000008416600f0b13156121295760807001000000058b90bfcdee5acd3c1cedc8238202901c90505b60006404000000008416600f0b1315612157576080700100000002c5c85fe31f35a6a30da1be508202901c90505b60006402000000008416600f0b131561218557608070010000000162e42ff0999ce3541b9fffcf8202901c90505b60006401000000008416600f0b13156121b3576080700100000000b17217f80f4ef5aadda455548202901c90505b600063800000008416600f0b13156121e057608070010000000058b90bfbf8479bd5a81b51ad8202901c90505b600063400000008416600f0b131561220d5760807001000000002c5c85fdf84bd62ae30a74cc8202901c90505b600063200000008416600f0b131561223a576080700100000000162e42fefb2fed257559bdaa8202901c90505b600063100000008416600f0b13156122675760807001000000000b17217f7d5a7716bba4a9ae8202901c90505b600063080000008416600f0b1315612294576080700100000000058b90bfbe9ddbac5e109cce8202901c90505b600063040000008416600f0b13156122c157608070010000000002c5c85fdf4b15de6f17eb0d8202901c90505b600063020000008416600f0b13156122ee5760807001000000000162e42fefa494f1478fde058202901c90505b600063010000008416600f0b131561231b57608070010000000000b17217f7d20cf927c8e94c8202901c90505b6000628000008416600f0b13156123475760807001000000000058b90bfbe8f71cb4e4b33d8202901c90505b6000624000008416600f0b1315612373576080700100000000002c5c85fdf477b662b269458202901c90505b6000622000008416600f0b131561239f57608070010000000000162e42fefa3ae53369388c8202901c90505b6000621000008416600f0b13156123cb576080700100000000000b17217f7d1d351a389d408202901c90505b6000620800008416600f0b13156123f757608070010000000000058b90bfbe8e8b2d3d4ede8202901c90505b6000620400008416600f0b13156124235760807001000000000002c5c85fdf4741bea6e77e8202901c90505b6000620200008416600f0b131561244f576080700100000000000162e42fefa39fe95583c28202901c90505b6000620100008416600f0b131561247b5760807001000000000000b17217f7d1cfb72b45e18202901c90505b60006180008416600f0b13156124a6576080700100000000000058b90bfbe8e7cc35c3f08202901c90505b60006140008416600f0b13156124d157608070010000000000002c5c85fdf473e242ea388202901c90505b60006120008416600f0b13156124fc5760807001000000000000162e42fefa39f02b772c8202901c90505b60006110008416600f0b131561252757608070010000000000000b17217f7d1cf7d83c1a8202901c90505b60006108008416600f0b13156125525760807001000000000000058b90bfbe8e7bdcbe2e8202901c90505b60006104008416600f0b131561257d576080700100000000000002c5c85fdf473dea871f8202901c90505b60006102008416600f0b13156125a857608070010000000000000162e42fefa39ef44d918202901c90505b60006101008416600f0b13156125d3576080700100000000000000b17217f7d1cf79e9498202901c90505b600060808416600f0b13156125fd57608070010000000000000058b90bfbe8e7bce5448202901c90505b600060408416600f0b13156126275760807001000000000000002c5c85fdf473de6eca8202901c90505b600060208416600f0b1315612651576080700100000000000000162e42fefa39ef366f8202901c90505b600060108416600f0b131561267b5760807001000000000000000b17217f7d1cf79afa8202901c90505b600060088416600f0b13156126a5576080700100000000000000058b90bfbe8e7bcd6d8202901c90505b600060048416600f0b13156126cf57608070010000000000000002c5c85fdf473de6b28202901c90505b600060028416600f0b13156126f95760807001000000000000000162e42fefa39ef3588202901c90505b600060018416600f0b131561272357608070010000000000000000b17217f7d1cf79ab8202901c90505b604083600f0b901d603f03600f0b81901c90506f7fffffffffffffffffffffffffffffff600f0b81111561275657600080fd5b809150505b919050565b612768613159565b60008273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f617363656e64696e6700000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156127f457600080fd5b505af4158015612808573d6000803e3d6000fd5b505050506040513d602081101561281e57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561289757600080fd5b505af41580156128ab573d6000803e3d6000fd5b505050506040513d60208110156128c157600080fd5b810190808051906020019092919050505060070b90508373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f70657269617073697300000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561296157600080fd5b505af4158015612975573d6000803e3d6000fd5b505050506040513d602081101561298b57600080fd5b8101908080519060200190929190505050915060008273a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a0457600080fd5b505af4158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b810190808051906020019092919050505060070b90508473a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260078152602001807f616e6f6d616c79000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612ace57600080fd5b505af4158015612ae2573d6000803e3d6000fd5b505050506040513d6020811015612af857600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612b7157600080fd5b505af4158015612b85573d6000803e3d6000fd5b505050506040513d6020811015612b9b57600080fd5b810190808051906020019092919050505060070b9050604051806060016040528084815260200183815260200182815250945050505050919050565b612bdf613159565b60008573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f6c616772616e67650000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612c6b57600080fd5b505af4158015612c7f573d6000803e3d6000fd5b505050506040513d6020811015612c9557600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c9909160006111956040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612d0e57600080fd5b505af4158015612d22573d6000803e3d6000fd5b505050506040513d6020811015612d3857600080fd5b810190808051906020019092919050505060070b8273a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b089091600060026040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612daf57600080fd5b505af4158015612dc3573d6000803e3d6000fd5b505050506040513d6020811015612dd957600080fd5b810190808051906020019092919050505060070b6157e4026111940101905060008185878901010190508773a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f617363656e64696e6700000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612e8d57600080fd5b505af4158015612ea1573d6000803e3d6000fd5b505050506040513d6020811015612eb757600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612f3057600080fd5b505af4158015612f44573d6000803e3d6000fd5b505050506040513d6020811015612f5a57600080fd5b810190808051906020019092919050505060070b90508873a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f70657269617073697300000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612ffa57600080fd5b505af415801561300e573d6000803e3d6000fd5b505050506040513d602081101561302457600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561309d57600080fd5b505af41580156130b1573d6000803e3d6000fd5b505050506040513d60208110156130c757600080fd5b810190808051906020019092919050505060070b90506000618ca0828401816130ec57fe5b06618ca08086816130f957fe5b0601039050618ca0818161310957fe5b0690506040518060600160405280848152602001838152602001828152509650505050505050949350505050565b6040518060c00160405280600690602082028036833780820191505090505090565b604051806060016040528060039060208202803683378082019150509050509056fea2646970667358221220f7becee230bdb81335980cf8c4ddc6b3d38cd4a59dd96663cf5cee91a5bba71764736f6c63430007060033000000000000000000000000f8f39f4699b2fd2cee3782e2d98f6681bb6111c4
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063cf2c11b11161005b578063cf2c11b11461015c578063d5cee3441461019e578063efa0337c14610208578063f4c10f1b146102725761007d565b80636b082eed14610082578063825a013e146100ce578063c901eb9414610110575b600080fd5b6100ae6004803603602081101561009857600080fd5b81019080803590602001909291905050506102b4565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6100fa600480360360208110156100e457600080fd5b8101908080359060200190929190505050610386565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061045e565b604051808267ffffffffffffffff16815260200191505060405180910390f35b6101886004803603602081101561017257600080fd5b81019080803590602001909291905050506106a4565b6040518082815260200191505060405180910390f35b6101ca600480360360208110156101b457600080fd5b81019080803590602001909291905050506106be565b6040518082600660200280838360005b838110156101f55780820151818401526020810190506101da565b5050505090500191505060405180910390f35b6102346004803603602081101561021e57600080fd5b81019080803590602001909291905050506106de565b6040518082600660200280838360005b8381101561025f578082015181840152602081019050610244565b5050505090500191505060405180910390f35b61029e6004803603602081101561028857600080fd5b810190808035906020019092919050505061072d565b6040518082815260200191505060405180910390f35b6000806103056102c86103e8600f0b610767565b6102f47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe25600f0b610767565b600f0b6107b690919063ffffffff16565b9050600061031b6205b96663ffffffff16610767565b9050600061035361034b61033961033188610839565b600f0b61085c565b85600f0b61089690919063ffffffff16565b600f0b610901565b9050600061036d8284600f0b61089690919063ffffffff16565b905061037b81600f0b61097a565b945050505050919050565b6000808211801561039a57506203d0908211155b6103a357600080fd5b7f696e666c75656e6365000000000000000000000000000000000000000000000073a06f481a2b8cb004ac50701e375ea9022d33eef36312dbaacc9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561041c57600080fd5b505af4158015610430573d6000803e3d6000fd5b505050506040513d602081101561044657600080fd5b81019080805190602001909291905050509050919050565b6000808273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260068152602001807f72616469757300000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156104eb57600080fd5b505af41580156104ff573d6000803e3d6000fd5b505050506040513d602081101561051557600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000620f42416040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561058f57600080fd5b505af41580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b810190808051906020019092919050505060070b9050600061061e6105e16002600f0b610767565b61060d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f0b610767565b600f0b6107b690919063ffffffff16565b905060006106346205b96663ffffffff16610767565b9050600061066f61066761065561064d87600f0b610767565b600f0b61085c565b85600f0b61089690919063ffffffff16565b600f0b610901565b905060006106898284600f0b61089690919063ffffffff16565b905061069781600f0b61097a565b9650505050505050919050565b60006106b76106b283610386565b61072d565b9050919050565b6106c6613137565b6106d76106d283610386565b6106de565b9050919050565b6106e6613137565b60006106f18361099b565b9050600081141561071b57600061070784610b29565b90506107138482610d7e565b925050610727565b61072483611378565b91505b50919050565b6000806107398361099b565b905060008114156107555761074d83610b29565b915050610762565b61075e836117e9565b9150505b919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffff800000000000000082121580156107a15750677fffffffffffffff8213155b6107aa57600080fd5b604082901b9050919050565b60008082600f0b14156107c857600080fd5b600082600f0b604085600f0b901b816107dd57fe5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561082657506f7fffffffffffffffffffffffffffffff600f0b8113155b61082f57600080fd5b8091505092915050565b6000677fffffffffffffff82111561085057600080fd5b604082901b9050919050565b60008082600f0b1361086d57600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af61088984611a3c565b600f0b02901c9050919050565b600080604083600f0b85600f0b02901d90507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b81121580156108ee57506f7fffffffffffffffffffffffffffffff600f0b8113155b6108f757600080fd5b8091505092915050565b60006840000000000000000082600f0b1261091b57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b121561094f5760009050610975565b6109726080700171547652b82fe1777d0ffda0d23a7d1284600f0b02901d611b60565b90505b919050565b60008082600f0b121561098c57600080fd5b604082600f0b901d9050919050565b6000808273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260068152602001807f726567696f6e00000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610a2857600080fd5b505af4158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b089091600060656040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610aca57600080fd5b505af4158015610ade573d6000803e3d6000fd5b505050506040513d6020811015610af457600080fd5b810190808051906020019092919050505060070b905060148110610b1d57600092505050610b24565b6001925050505b919050565b60008060405180610160016040528061196461ffff168152602001607d61ffff16815260200160fa61ffff1681526020016101f461ffff16815260200160fa61ffff168152602001607d61ffff1681526020016103e861ffff1681526020016101f461ffff168152602001607d61ffff1681526020016101f461ffff168152602001607d61ffff16815250905060008373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f737065637472616c0000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610c4257600080fd5b505af4158015610c56573d6000803e3d6000fd5b505050506040513d6020811015610c6c57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b08909160016127116040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610ce557600080fd5b505af4158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b810190808051906020019092919050505090506000805b600b811015610d6c578481600b8110610d3b57fe5b602002015161ffff1682019150818360070b11610d5f578095505050505050610d79565b8080600101915050610d26565b506001600b039450505050505b919050565b610d86613137565b600080604051806101600160405280610320600f0b600f0b81526020016104b0600f0b8152602001610b54600f0b8152602001610320600f0b81526020016104b0600f0b8152602001610960600f0b8152602001610320600f0b81526020016104b0600f0b8152602001610960600f0b81526020016104b0600f0b8152602001610b54600f0b81525090506000604051806101600160405280610c1c600f0b600f0b81526020016108ca600f0b8152602001610c1c600f0b8152602001610a28600f0b815260200161092e600f0b8152602001610bb8600f0b8152602001610960600f0b81526020016108ca600f0b8152602001610abe600f0b81526020016108fc600f0b8152602001610c1c600f0b81525090508573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260048152602001807f61786973000000000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015610f2557600080fd5b505af4158015610f39573d6000803e3d6000fd5b505050506040513d6020811015610f4f57600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c990918589600b8110610f8d57fe5b6020020151858a600b8110610f9e57fe5b60200201516040518463ffffffff1660e01b81526004018084815260200183600f0b815260200182600f0b8152602001935050505060206040518083038186803b158015610feb57600080fd5b505af4158015610fff573d6000803e3d6000fd5b505050506040513d602081101561101557600080fd5b810190808051906020019092919050505060070b90508673a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600c8152602001807f656363656e7472696369747900000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156110b557600080fd5b505af41580156110c9573d6000803e3d6000fd5b505050506040513d60208110156110df57600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c9909160006101906040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561115857600080fd5b505af415801561116c573d6000803e3d6000fd5b505050506040513d602081101561118257600080fd5b810190808051906020019092919050505060070b90508773a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600b8152602001807f696e636c696e6174696f6e0000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561122257600080fd5b505af4158015611236573d6000803e3d6000fd5b505050506040513d602081101561124c57600080fd5b8101908080519060200190929190505050945060008573a06f481a2b8cb004ac50701e375ea9022d33eef3633d1a39b69091610fa16040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156112bc57600080fd5b505af41580156112d0573d6000803e3d6000fd5b505050506040513d60208110156112e657600080fd5b810190808051906020019092919050505060070b905060006113078a612760565b90506040518060c001604052808581526020018481526020018381526020018260006003811061133357fe5b602002015181526020018260016003811061134a57fe5b602002015181526020018260026003811061136157fe5b602002015181525097505050505050505092915050565b611380613137565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a0306dc6040518163ffffffff1660e01b815260040160c06040518083038186803b1580156113e957600080fd5b505afa1580156113fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060c081101561142257600080fd5b8101908091905050905060008160006006811061143b57fe5b602002015161ffff1690508473a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600c8152602001807f656363656e7472696369747900000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156114d057600080fd5b505af41580156114e4573d6000803e3d6000fd5b505050506040513d60208110156114fa57600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c990916000607d6040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561157257600080fd5b505af4158015611586573d6000803e3d6000fd5b505050506040513d602081101561159c57600080fd5b810190808051906020019092919050505060070b90508573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b815260040180828152602001806020018281038252600b8152602001807f696e636c696e6174696f6e0000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561163c57600080fd5b505af4158015611650573d6000803e3d6000fd5b505050506040513d602081101561166657600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef3633d1a39b69091610fa16040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156116d657600080fd5b505af41580156116ea573d6000803e3d6000fd5b505050506040513d602081101561170057600080fd5b810190808051906020019092919050505060070b8460026006811061172157fe5b602002015161ffff16019050600061177a888660036006811061174057fe5b602002015161ffff168760046006811061175657fe5b602002015161ffff168860056006811061176c57fe5b602002015161ffff16612bd7565b90506040518060c00160405280858152602001848152602001838152602001826000600381106117a657fe5b60200201518152602001826001600381106117bd57fe5b60200201518152602001826002600381106117d457fe5b60200201518152509650505050505050919050565b600080604051806101600160405280610abe61ffff168152602001600061ffff1681526020016105dc61ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff168152602001600061ffff16815260200161167661ffff16815250905060008373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f737065637472616c0000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561190057600080fd5b505af4158015611914573d6000803e3d6000fd5b505050506040513d602081101561192a57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b08909160016127116040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b1580156119a357600080fd5b505af41580156119b7573d6000803e3d6000fd5b505050506040513d60208110156119cd57600080fd5b810190808051906020019092919050505090506000805b600b811015611a2a578481600b81106119f957fe5b602002015161ffff1682019150818360070b11611a1d578095505050505050611a37565b80806001019150506119e4565b506001600b039450505050505b919050565b60008082600f0b13611a4d57600080fd5b60008083600f0b9050680100000000000000008112611a7457604081901d90506040820191505b6401000000008112611a8e57602081901d90506020820191505b620100008112611aa657601081901d90506010820191505b6101008112611abd57600881901d90506008820191505b60108112611ad357600481901d90506004820191505b60048112611ae957600281901d90506002820191505b60028112611af8576001820191505b60006040808403901b9050600083607f0386600f0b901b9050600067800000000000000090505b6000811315611b53578182029150600060ff83901c905080607f0183901c92508082028401935050600181901d9050611b1f565b5081945050505050919050565b60006840000000000000000082600f0b12611b7a57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215611bae576000905061275b565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315611bf457608070016a09e667f3bcc908b2fb1366ea957d3e8202901c90505b60006740000000000000008416600f0b1315611c255760807001306fe0a31b7152de8d5a46305c85edec8202901c90505b60006720000000000000008416600f0b1315611c565760807001172b83c7d517adcdf7c8c50eb14a791f8202901c90505b60006710000000000000008416600f0b1315611c8757608070010b5586cf9890f6298b92b71842a983638202901c90505b60006708000000000000008416600f0b1315611cb85760807001059b0d31585743ae7c548eb68ca417fd8202901c90505b60006704000000000000008416600f0b1315611ce9576080700102c9a3e778060ee6f7caca4f7a29bde88202901c90505b60006702000000000000008416600f0b1315611d1a57608070010163da9fb33356d84a66ae336dcdfa3f8202901c90505b60006701000000000000008416600f0b1315611d4b576080700100b1afa5abcbed6129ab13ec11dc95438202901c90505b600066800000000000008416600f0b1315611d7b57608070010058c86da1c09ea1ff19d294cf2f679b8202901c90505b600066400000000000008416600f0b1315611dab5760807001002c605e2e8cec506d21bfc89a23a00f8202901c90505b600066200000000000008416600f0b1315611ddb576080700100162f3904051fa128bca9c55c31e5df8202901c90505b600066100000000000008416600f0b1315611e0b5760807001000b175effdc76ba38e31671ca9397258202901c90505b600066080000000000008416600f0b1315611e3b576080700100058ba01fb9f96d6cacd4b180917c3d8202901c90505b600066040000000000008416600f0b1315611e6b57608070010002c5cc37da9491d0985c348c68e7b38202901c90505b600066020000000000008416600f0b1315611e9b5760807001000162e525ee054754457d59952920268202901c90505b600066010000000000008416600f0b1315611ecb57608070010000b17255775c040618bf4a4ade83fc8202901c90505b6000658000000000008416600f0b1315611efa5760807001000058b91b5bc9ae2eed81e9b7d4cfab8202901c90505b6000654000000000008416600f0b1315611f29576080700100002c5c89d5ec6ca4d7c8acc017b7c98202901c90505b6000652000000000008416600f0b1315611f5857608070010000162e43f4f831060e02d839a9d16d8202901c90505b6000651000000000008416600f0b1315611f87576080700100000b1721bcfc99d9f890ea069117638202901c90505b6000650800000000008416600f0b1315611fb657608070010000058b90cf1e6d97f9ca14dbcc16288202901c90505b6000650400000000008416600f0b1315611fe55760807001000002c5c863b73f016468f6bac5ca2b8202901c90505b6000650200000000008416600f0b1315612014576080700100000162e430e5a18f6119e3c02282a58202901c90505b6000650100000000008416600f0b13156120435760807001000000b1721835514b86e6d96efd1bfe8202901c90505b60006480000000008416600f0b1315612071576080700100000058b90c0b48c6be5df846c5b2ef8202901c90505b60006440000000008416600f0b131561209f57608070010000002c5c8601cc6b9e94213c72737a8202901c90505b60006420000000008416600f0b13156120cd5760807001000000162e42fff037df38aa2b219f068202901c90505b60006410000000008416600f0b13156120fb57608070010000000b17217fba9c739aa5819f44f98202901c90505b60006408000000008416600f0b13156121295760807001000000058b90bfcdee5acd3c1cedc8238202901c90505b60006404000000008416600f0b1315612157576080700100000002c5c85fe31f35a6a30da1be508202901c90505b60006402000000008416600f0b131561218557608070010000000162e42ff0999ce3541b9fffcf8202901c90505b60006401000000008416600f0b13156121b3576080700100000000b17217f80f4ef5aadda455548202901c90505b600063800000008416600f0b13156121e057608070010000000058b90bfbf8479bd5a81b51ad8202901c90505b600063400000008416600f0b131561220d5760807001000000002c5c85fdf84bd62ae30a74cc8202901c90505b600063200000008416600f0b131561223a576080700100000000162e42fefb2fed257559bdaa8202901c90505b600063100000008416600f0b13156122675760807001000000000b17217f7d5a7716bba4a9ae8202901c90505b600063080000008416600f0b1315612294576080700100000000058b90bfbe9ddbac5e109cce8202901c90505b600063040000008416600f0b13156122c157608070010000000002c5c85fdf4b15de6f17eb0d8202901c90505b600063020000008416600f0b13156122ee5760807001000000000162e42fefa494f1478fde058202901c90505b600063010000008416600f0b131561231b57608070010000000000b17217f7d20cf927c8e94c8202901c90505b6000628000008416600f0b13156123475760807001000000000058b90bfbe8f71cb4e4b33d8202901c90505b6000624000008416600f0b1315612373576080700100000000002c5c85fdf477b662b269458202901c90505b6000622000008416600f0b131561239f57608070010000000000162e42fefa3ae53369388c8202901c90505b6000621000008416600f0b13156123cb576080700100000000000b17217f7d1d351a389d408202901c90505b6000620800008416600f0b13156123f757608070010000000000058b90bfbe8e8b2d3d4ede8202901c90505b6000620400008416600f0b13156124235760807001000000000002c5c85fdf4741bea6e77e8202901c90505b6000620200008416600f0b131561244f576080700100000000000162e42fefa39fe95583c28202901c90505b6000620100008416600f0b131561247b5760807001000000000000b17217f7d1cfb72b45e18202901c90505b60006180008416600f0b13156124a6576080700100000000000058b90bfbe8e7cc35c3f08202901c90505b60006140008416600f0b13156124d157608070010000000000002c5c85fdf473e242ea388202901c90505b60006120008416600f0b13156124fc5760807001000000000000162e42fefa39f02b772c8202901c90505b60006110008416600f0b131561252757608070010000000000000b17217f7d1cf7d83c1a8202901c90505b60006108008416600f0b13156125525760807001000000000000058b90bfbe8e7bdcbe2e8202901c90505b60006104008416600f0b131561257d576080700100000000000002c5c85fdf473dea871f8202901c90505b60006102008416600f0b13156125a857608070010000000000000162e42fefa39ef44d918202901c90505b60006101008416600f0b13156125d3576080700100000000000000b17217f7d1cf79e9498202901c90505b600060808416600f0b13156125fd57608070010000000000000058b90bfbe8e7bce5448202901c90505b600060408416600f0b13156126275760807001000000000000002c5c85fdf473de6eca8202901c90505b600060208416600f0b1315612651576080700100000000000000162e42fefa39ef366f8202901c90505b600060108416600f0b131561267b5760807001000000000000000b17217f7d1cf79afa8202901c90505b600060088416600f0b13156126a5576080700100000000000000058b90bfbe8e7bcd6d8202901c90505b600060048416600f0b13156126cf57608070010000000000000002c5c85fdf473de6b28202901c90505b600060028416600f0b13156126f95760807001000000000000000162e42fefa39ef3588202901c90505b600060018416600f0b131561272357608070010000000000000000b17217f7d1cf79ab8202901c90505b604083600f0b901d603f03600f0b81901c90506f7fffffffffffffffffffffffffffffff600f0b81111561275657600080fd5b809150505b919050565b612768613159565b60008273a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f617363656e64696e6700000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b1580156127f457600080fd5b505af4158015612808573d6000803e3d6000fd5b505050506040513d602081101561281e57600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561289757600080fd5b505af41580156128ab573d6000803e3d6000fd5b505050506040513d60208110156128c157600080fd5b810190808051906020019092919050505060070b90508373a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f70657269617073697300000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b15801561296157600080fd5b505af4158015612975573d6000803e3d6000fd5b505050506040513d602081101561298b57600080fd5b8101908080519060200190929190505050915060008273a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a0457600080fd5b505af4158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b810190808051906020019092919050505060070b90508473a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260078152602001807f616e6f6d616c79000000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612ace57600080fd5b505af4158015612ae2573d6000803e3d6000fd5b505050506040513d6020811015612af857600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612b7157600080fd5b505af4158015612b85573d6000803e3d6000fd5b505050506040513d6020811015612b9b57600080fd5b810190808051906020019092919050505060070b9050604051806060016040528084815260200183815260200182815250945050505050919050565b612bdf613159565b60008573a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260088152602001807f6c616772616e67650000000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612c6b57600080fd5b505af4158015612c7f573d6000803e3d6000fd5b505050506040513d6020811015612c9557600080fd5b8101908080519060200190929190505050905060008173a06f481a2b8cb004ac50701e375ea9022d33eef36397b862c9909160006111956040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612d0e57600080fd5b505af4158015612d22573d6000803e3d6000fd5b505050506040513d6020811015612d3857600080fd5b810190808051906020019092919050505060070b8273a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b089091600060026040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612daf57600080fd5b505af4158015612dc3573d6000803e3d6000fd5b505050506040513d6020811015612dd957600080fd5b810190808051906020019092919050505060070b6157e4026111940101905060008185878901010190508773a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f617363656e64696e6700000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612e8d57600080fd5b505af4158015612ea1573d6000803e3d6000fd5b505050506040513d6020811015612eb757600080fd5b8101908080519060200190929190505050925060008373a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612f3057600080fd5b505af4158015612f44573d6000803e3d6000fd5b505050506040513d6020811015612f5a57600080fd5b810190808051906020019092919050505060070b90508873a06f481a2b8cb004ac50701e375ea9022d33eef36376d875c590916040518263ffffffff1660e01b81526004018082815260200180602001828103825260098152602001807f70657269617073697300000000000000000000000000000000000000000000008152506020019250505060206040518083038186803b158015612ffa57600080fd5b505af415801561300e573d6000803e3d6000fd5b505050506040513d602081101561302457600080fd5b8101908080519060200190929190505050935060008473a06f481a2b8cb004ac50701e375ea9022d33eef363d6457b0890916000618ca06040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561309d57600080fd5b505af41580156130b1573d6000803e3d6000fd5b505050506040513d60208110156130c757600080fd5b810190808051906020019092919050505060070b90506000618ca0828401816130ec57fe5b06618ca08086816130f957fe5b0601039050618ca0818161310957fe5b0690506040518060600160405280848152602001838152602001828152509650505050505050949350505050565b6040518060c00160405280600690602082028036833780820191505090505090565b604051806060016040528060039060208202803683378082019150509050509056fea2646970667358221220f7becee230bdb81335980cf8c4ddc6b3d38cd4a59dd96663cf5cee91a5bba71764736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8f39f4699b2fd2cee3782e2d98f6681bb6111c4
-----Decoded View---------------
Arg [0] : _planets (address): 0xF8F39f4699b2FD2CEE3782E2D98F6681bB6111c4
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8f39f4699b2fd2cee3782e2d98f6681bb6111c4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.