Latest 25 transactions from a total of 51764 transactions

TxHash Age From To Value [TxFee]
0xed2464305113a7bd02164159de37b61bf3d72a81f989ec45b0816910d49fe7a6 21 secs ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000328021
0x4cdb5040a9a023df25cdb68a28a16f87dda2c6ec8c48b36f9d978b7b45082dd4 53 secs ago0x1157ff05d5ef30d2d17020e9191d126e6e33576a  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000418818
0xa8ad1c199fa650c981c775e4b105aa2ad140322e2eec7ceac2988145e94090021 min ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000095506
0xc035164058dd37843b6f7b22feceb9532f0eca88cab10ad2bda7d53a183752c41 min ago0x96772b180cad2fbe3c7c8dc25601570f5158a909  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000333342
0xe510e5b46fd9808880594f4ededeb8ff52f11cbc2ed8b7eacb3caee6d91f36862 mins ago0xc311738b6d5705340f4cff9544b32d7354ec1a61  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000193079
0x809c67f3ca8148108955bb0d62a34884324d0d1cf4d1f32dc3cc055bb6ee73332 mins ago0x518aefe954ccd650b56814ec6d22323927b64f89  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000346498
0xcc98830f0d4172ee446c0435b55cb0650c60d587b14287a67cb515e8bfb900af3 mins ago0xd943f2192fe706f1348fbf650c73437182eaed8e  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000264247
0x4b674c45117b593caea3d74e2f366795903f79fcb86f190d36b0b94a70edcaf43 mins ago0xeda0f6cd8284b6517f467cf1a30ad92b5edd19e6  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000192951
0x1943c615d916676b293730c5b1ce56ae72bae4b7c51513d925438d1210ea41433 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000328021
0xc5032cd29a7472ee03239303a52ff0534760709ed3e6ed5b485891701021aa624 mins ago0x20cf8a7f07a99a190bc9e2224e2319a0188df479  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000304335
0x2cf7ec78a1e349d2f104075238037b0a8052226c3edfda408cead8d3498286694 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000194231
0x78377876c276351a236539453c6d6562ff43b13002a17e9208ccbd96f3cb858a4 mins ago0x1157ff05d5ef30d2d17020e9191d126e6e33576a  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000122932
0x06ea977597dc940030382152bf633e0f16d1a2f5752fe84e5e103b10f5c832175 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000053728
0x0ef28cbc51ade49bce270c35ced0680c95421954970687cf5f68949be39f45b06 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000165862
0x3fb41657bfc9ab3cfdbe078220c3d053890d1aad44af61ee92b1d53e7fac7fcf6 mins ago0x96772b180cad2fbe3c7c8dc25601570f5158a909  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000262135
0x7a8a2844e72d3ec480f600041c5f2bd055fd1467b73c8d90504eea5b17f828d96 mins ago0xc311738b6d5705340f4cff9544b32d7354ec1a61  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000326485
0xfc536f9d4381edaf3edceeaad697bd625d69dae42ef0604446d8d40229a60b847 mins ago0xd943f2192fe706f1348fbf650c73437182eaed8e  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000264247
0x1b840b01f4223b2e23752ada90da65c2690867c2a1140335ba2e3717437b898b7 mins ago0x20cf8a7f07a99a190bc9e2224e2319a0188df479  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000282723
0x15a498cbab1cb82a17991643f877a230f731b1d588c4443e99fb311ac612fee18 mins ago0xeda0f6cd8284b6517f467cf1a30ad92b5edd19e6  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.00016471
0xb6c164caf704fc012cd37a2541d4d91ab7724ef28bfb8e048f712353c22d40d48 mins ago0x96772b180cad2fbe3c7c8dc25601570f5158a909  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000163558
0x844466181955698e2496842c3a9d28258037dd17a07f05fc522f4528c9d2eb329 mins ago0xeda0f6cd8284b6517f467cf1a30ad92b5edd19e6  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000122548
0x4461755ecf164b2a5a69b8b98ff91d4504fa9dbbeefbca4e18e9dcf9d6c4624c9 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000313906
0x8a25b1df0dfb6f6f072e2ec0a31c67a56fe78685d87da973c33472331313122910 mins ago0xd943f2192fe706f1348fbf650c73437182eaed8e  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000180051
0xd258182105744c72bc447e5b0c7897b676195eb952f9c7fe6e1ce377f922a6e510 mins ago0x829011c0958640f79bc65bb09a6e100f7a371b50  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000236393
0xfe9ec2ee6e9c958b8fda331867483ff17e1e82e565e4e89f1d4ce881d4a8587210 mins ago0xeda0f6cd8284b6517f467cf1a30ad92b5edd19e6  IN   0xf51438cb9d3e3e70a2ca6b3f55503aa96c71884d0 Ether0.000235241
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: FairGame1
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.19;

library strings {
    struct slice {
        uint _len;
        uint _ptr;
    }

    function memcpy(uint dest, uint src, uint len) private pure {
        // Copy word-length chunks while possible
        for(; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    /*
     * @dev Returns a slice containing the entire string.
     * @param self The string to make a slice from.
     * @return A newly allocated slice containing the entire string.
     */
    function toSlice(string memory self) internal pure returns (slice memory) {
        uint ptr;
        assembly {
            ptr := add(self, 0x20)
        }
        return slice(bytes(self).length, ptr);
    }

    /*
     * @dev Returns the length of a null-terminated bytes32 string.
     * @param self The value to find the length of.
     * @return The length of the string, from 0 to 32.
     */
    function len(bytes32 self) internal pure returns (uint) {
        uint ret;
        if (self == 0)
            return 0;
        if (self & 0xffffffffffffffffffffffffffffffff == 0) {
            ret += 16;
            self = bytes32(uint(self) / 0x100000000000000000000000000000000);
        }
        if (self & 0xffffffffffffffff == 0) {
            ret += 8;
            self = bytes32(uint(self) / 0x10000000000000000);
        }
        if (self & 0xffffffff == 0) {
            ret += 4;
            self = bytes32(uint(self) / 0x100000000);
        }
        if (self & 0xffff == 0) {
            ret += 2;
            self = bytes32(uint(self) / 0x10000);
        }
        if (self & 0xff == 0) {
            ret += 1;
        }
        return 32 - ret;
    }

    /*
     * @dev Returns a slice containing the entire bytes32, interpreted as a
     *      null-terminated utf-8 string.
     * @param self The bytes32 value to convert to a slice.
     * @return A new slice containing the value of the input argument up to the
     *         first null.
     */
    function toSliceB32(bytes32 self) internal pure returns (slice memory ret) {
        // Allocate space for `self` in memory, copy it there, and point ret at it
        assembly {
            let ptr := mload(0x40)
            mstore(0x40, add(ptr, 0x20))
            mstore(ptr, self)
            mstore(add(ret, 0x20), ptr)
        }
        ret._len = len(self);
    }

    /*
     * @dev Returns a new slice containing the same data as the current slice.
     * @param self The slice to copy.
     * @return A new slice containing the same data as `self`.
     */
    function copy(slice memory self) internal pure returns (slice memory) {
        return slice(self._len, self._ptr);
    }

    /*
     * @dev Copies a slice to a new string.
     * @param self The slice to copy.
     * @return A newly allocated string containing the slice's text.
     */
    function toString(slice memory self) internal pure returns (string memory) {
        string memory ret = new string(self._len);
        uint retptr;
        assembly { retptr := add(ret, 32) }

        memcpy(retptr, self._ptr, self._len);
        return ret;
    }

    /*
     * @dev Returns the length in runes of the slice. Note that this operation
     *      takes time proportional to the length of the slice; avoid using it
     *      in loops, and call `slice.empty()` if you only need to know whether
     *      the slice is empty or not.
     * @param self The slice to operate on.
     * @return The length of the slice in runes.
     */
    function len(slice memory self) internal pure returns (uint l) {
        // Starting at ptr-31 means the LSB will be the byte we care about
        uint ptr = self._ptr - 31;
        uint end = ptr + self._len;
        for (l = 0; ptr < end; l++) {
            uint8 b;
            assembly { b := and(mload(ptr), 0xFF) }
            if (b < 0x80) {
                ptr += 1;
            } else if(b < 0xE0) {
                ptr += 2;
            } else if(b < 0xF0) {
                ptr += 3;
            } else if(b < 0xF8) {
                ptr += 4;
            } else if(b < 0xFC) {
                ptr += 5;
            } else {
                ptr += 6;
            }
        }
    }

    /*
     * @dev Returns true if the slice is empty (has a length of 0).
     * @param self The slice to operate on.
     * @return True if the slice is empty, False otherwise.
     */
    function empty(slice memory self) internal pure returns (bool) {
        return self._len == 0;
    }

    /*
     * @dev Returns a positive number if `other` comes lexicographically after
     *      `self`, a negative number if it comes before, or zero if the
     *      contents of the two slices are equal. Comparison is done per-rune,
     *      on unicode codepoints.
     * @param self The first slice to compare.
     * @param other The second slice to compare.
     * @return The result of the comparison.
     */
    function compare(slice memory self, slice memory other) internal pure returns (int) {
        uint shortest = self._len;
        if (other._len < self._len)
            shortest = other._len;

        uint selfptr = self._ptr;
        uint otherptr = other._ptr;
        for (uint idx = 0; idx < shortest; idx += 32) {
            uint a;
            uint b;
            assembly {
                a := mload(selfptr)
                b := mload(otherptr)
            }
            if (a != b) {
                // Mask out irrelevant bytes and check again
                uint256 mask = uint256(-1); // 0xffff...
                if(shortest < 32) {
                  mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);
                }
                uint256 diff = (a & mask) - (b & mask);
                if (diff != 0)
                    return int(diff);
            }
            selfptr += 32;
            otherptr += 32;
        }
        return int(self._len) - int(other._len);
    }

    /*
     * @dev Returns true if the two slices contain the same text.
     * @param self The first slice to compare.
     * @param self The second slice to compare.
     * @return True if the slices are equal, false otherwise.
     */
    function equals(slice memory self, slice memory other) internal pure returns (bool) {
        return compare(self, other) == 0;
    }

    /*
     * @dev Extracts the first rune in the slice into `rune`, advancing the
     *      slice to point to the next rune and returning `self`.
     * @param self The slice to operate on.
     * @param rune The slice that will contain the first rune.
     * @return `rune`.
     */
    function nextRune(slice memory self, slice memory rune) internal pure returns (slice memory) {
        rune._ptr = self._ptr;

        if (self._len == 0) {
            rune._len = 0;
            return rune;
        }

        uint l;
        uint b;
        // Load the first byte of the rune into the LSBs of b
        assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }
        if (b < 0x80) {
            l = 1;
        } else if(b < 0xE0) {
            l = 2;
        } else if(b < 0xF0) {
            l = 3;
        } else {
            l = 4;
        }

        // Check for truncated codepoints
        if (l > self._len) {
            rune._len = self._len;
            self._ptr += self._len;
            self._len = 0;
            return rune;
        }

        self._ptr += l;
        self._len -= l;
        rune._len = l;
        return rune;
    }

    /*
     * @dev Returns the first rune in the slice, advancing the slice to point
     *      to the next rune.
     * @param self The slice to operate on.
     * @return A slice containing only the first rune from `self`.
     */
    function nextRune(slice memory self) internal pure returns (slice memory ret) {
        nextRune(self, ret);
    }

    /*
     * @dev Returns the number of the first codepoint in the slice.
     * @param self The slice to operate on.
     * @return The number of the first codepoint in the slice.
     */
    function ord(slice memory self) internal pure returns (uint ret) {
        if (self._len == 0) {
            return 0;
        }

        uint word;
        uint length;
        uint divisor = 2 ** 248;

        // Load the rune into the MSBs of b
        assembly { word:= mload(mload(add(self, 32))) }
        uint b = word / divisor;
        if (b < 0x80) {
            ret = b;
            length = 1;
        } else if(b < 0xE0) {
            ret = b & 0x1F;
            length = 2;
        } else if(b < 0xF0) {
            ret = b & 0x0F;
            length = 3;
        } else {
            ret = b & 0x07;
            length = 4;
        }

        // Check for truncated codepoints
        if (length > self._len) {
            return 0;
        }

        for (uint i = 1; i < length; i++) {
            divisor = divisor / 256;
            b = (word / divisor) & 0xFF;
            if (b & 0xC0 != 0x80) {
                // Invalid UTF-8 sequence
                return 0;
            }
            ret = (ret * 64) | (b & 0x3F);
        }

        return ret;
    }

    /*
     * @dev Returns the keccak-256 hash of the slice.
     * @param self The slice to hash.
     * @return The hash of the slice.
     */
    function keccak(slice memory self) internal pure returns (bytes32 ret) {
        assembly {
            ret := keccak256(mload(add(self, 32)), mload(self))
        }
    }

    /*
     * @dev Returns true if `self` starts with `needle`.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return True if the slice starts with the provided text, false otherwise.
     */
    function startsWith(slice memory self, slice memory needle) internal pure returns (bool) {
        if (self._len < needle._len) {
            return false;
        }

        if (self._ptr == needle._ptr) {
            return true;
        }

        bool equal;
        assembly {
            let length := mload(needle)
            let selfptr := mload(add(self, 0x20))
            let needleptr := mload(add(needle, 0x20))
            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
        }
        return equal;
    }

    /*
     * @dev If `self` starts with `needle`, `needle` is removed from the
     *      beginning of `self`. Otherwise, `self` is unmodified.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return `self`
     */
    function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) {
        if (self._len < needle._len) {
            return self;
        }

        bool equal = true;
        if (self._ptr != needle._ptr) {
            assembly {
                let length := mload(needle)
                let selfptr := mload(add(self, 0x20))
                let needleptr := mload(add(needle, 0x20))
                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
            }
        }

        if (equal) {
            self._len -= needle._len;
            self._ptr += needle._len;
        }

        return self;
    }

    /*
     * @dev Returns true if the slice ends with `needle`.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return True if the slice starts with the provided text, false otherwise.
     */
    function endsWith(slice memory self, slice memory needle) internal pure returns (bool) {
        if (self._len < needle._len) {
            return false;
        }

        uint selfptr = self._ptr + self._len - needle._len;

        if (selfptr == needle._ptr) {
            return true;
        }

        bool equal;
        assembly {
            let length := mload(needle)
            let needleptr := mload(add(needle, 0x20))
            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
        }

        return equal;
    }

    /*
     * @dev If `self` ends with `needle`, `needle` is removed from the
     *      end of `self`. Otherwise, `self` is unmodified.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return `self`
     */
    function until(slice memory self, slice memory needle) internal pure returns (slice memory) {
        if (self._len < needle._len) {
            return self;
        }

        uint selfptr = self._ptr + self._len - needle._len;
        bool equal = true;
        if (selfptr != needle._ptr) {
            assembly {
                let length := mload(needle)
                let needleptr := mload(add(needle, 0x20))
                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
            }
        }

        if (equal) {
            self._len -= needle._len;
        }

        return self;
    }

    // Returns the memory address of the first byte of the first occurrence of
    // `needle` in `self`, or the first byte after `self` if not found.
    function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {
        uint ptr = selfptr;
        uint idx;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));

                bytes32 needledata;
                assembly { needledata := and(mload(needleptr), mask) }

                uint end = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly { ptrdata := and(mload(ptr), mask) }

                while (ptrdata != needledata) {
                    if (ptr >= end)
                        return selfptr + selflen;
                    ptr++;
                    assembly { ptrdata := and(mload(ptr), mask) }
                }
                return ptr;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly { hash := keccak256(needleptr, needlelen) }

                for (idx = 0; idx <= selflen - needlelen; idx++) {
                    bytes32 testHash;
                    assembly { testHash := keccak256(ptr, needlelen) }
                    if (hash == testHash)
                        return ptr;
                    ptr += 1;
                }
            }
        }
        return selfptr + selflen;
    }

    // Returns the memory address of the first byte after the last occurrence of
    // `needle` in `self`, or the address of `self` if not found.
    function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {
        uint ptr;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));

                bytes32 needledata;
                assembly { needledata := and(mload(needleptr), mask) }

                ptr = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly { ptrdata := and(mload(ptr), mask) }

                while (ptrdata != needledata) {
                    if (ptr <= selfptr)
                        return selfptr;
                    ptr--;
                    assembly { ptrdata := and(mload(ptr), mask) }
                }
                return ptr + needlelen;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly { hash := keccak256(needleptr, needlelen) }
                ptr = selfptr + (selflen - needlelen);
                while (ptr >= selfptr) {
                    bytes32 testHash;
                    assembly { testHash := keccak256(ptr, needlelen) }
                    if (hash == testHash)
                        return ptr + needlelen;
                    ptr -= 1;
                }
            }
        }
        return selfptr;
    }

    /*
     * @dev Modifies `self` to contain everything from the first occurrence of
     *      `needle` to the end of the slice. `self` is set to the empty slice
     *      if `needle` is not found.
     * @param self The slice to search and modify.
     * @param needle The text to search for.
     * @return `self`.
     */
    function find(slice memory self, slice memory needle) internal pure returns (slice memory) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);
        self._len -= ptr - self._ptr;
        self._ptr = ptr;
        return self;
    }

    /*
     * @dev Modifies `self` to contain the part of the string from the start of
     *      `self` to the end of the first occurrence of `needle`. If `needle`
     *      is not found, `self` is set to the empty slice.
     * @param self The slice to search and modify.
     * @param needle The text to search for.
     * @return `self`.
     */
    function rfind(slice memory self, slice memory needle) internal pure returns (slice memory) {
        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);
        self._len = ptr - self._ptr;
        return self;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and `token` to everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and `token` is set to the entirety of `self`.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @param token An output parameter to which the first token is written.
     * @return `token`.
     */
    function split(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);
        token._ptr = self._ptr;
        token._len = ptr - self._ptr;
        if (ptr == self._ptr + self._len) {
            // Not found
            self._len = 0;
        } else {
            self._len -= token._len + needle._len;
            self._ptr = ptr + needle._len;
        }
        return token;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and returning everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and the entirety of `self` is returned.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @return The part of `self` up to the first occurrence of `delim`.
     */
    function split(slice memory self, slice memory needle) internal pure returns (slice memory token) {
        split(self, needle, token);
    }

    /*
     * @dev Splits the slice, setting `self` to everything before the last
     *      occurrence of `needle`, and `token` to everything after it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and `token` is set to the entirety of `self`.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @param token An output parameter to which the first token is written.
     * @return `token`.
     */
    function rsplit(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {
        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);
        token._ptr = ptr;
        token._len = self._len - (ptr - self._ptr);
        if (ptr == self._ptr) {
            // Not found
            self._len = 0;
        } else {
            self._len -= token._len + needle._len;
        }
        return token;
    }

    /*
     * @dev Splits the slice, setting `self` to everything before the last
     *      occurrence of `needle`, and returning everything after it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and the entirety of `self` is returned.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @return The part of `self` after the last occurrence of `delim`.
     */
    function rsplit(slice memory self, slice memory needle) internal pure returns (slice memory token) {
        rsplit(self, needle, token);
    }

    /*
     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.
     * @param self The slice to search.
     * @param needle The text to search for in `self`.
     * @return The number of occurrences of `needle` found in `self`.
     */
    function count(slice memory self, slice memory needle) internal pure returns (uint cnt) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;
        while (ptr <= self._ptr + self._len) {
            cnt++;
            ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len;
        }
    }

    /*
     * @dev Returns True if `self` contains `needle`.
     * @param self The slice to search.
     * @param needle The text to search for in `self`.
     * @return True if `needle` is found in `self`, false otherwise.
     */
    function contains(slice memory self, slice memory needle) internal pure returns (bool) {
        return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;
    }

    /*
     * @dev Returns a newly allocated string containing the concatenation of
     *      `self` and `other`.
     * @param self The first slice to concatenate.
     * @param other The second slice to concatenate.
     * @return The concatenation of the two strings.
     */
    function concat(slice memory self, slice memory other) internal pure returns (string memory) {
        string memory ret = new string(self._len + other._len);
        uint retptr;
        assembly { retptr := add(ret, 32) }
        memcpy(retptr, self._ptr, self._len);
        memcpy(retptr + self._len, other._ptr, other._len);
        return ret;
    }

    /*
     * @dev Joins an array of slices, using `self` as a delimiter, returning a
     *      newly allocated string.
     * @param self The delimiter to use.
     * @param parts A list of slices to join.
     * @return A newly allocated string containing all the slices in `parts`,
     *         joined with `self`.
     */
    function join(slice memory self, slice[] memory parts) internal pure returns (string memory) {
        if (parts.length == 0)
            return "";

        uint length = self._len * (parts.length - 1);
        for(uint i = 0; i < parts.length; i++)
            length += parts[i]._len;

        string memory ret = new string(length);
        uint retptr;
        assembly { retptr := add(ret, 32) }

        for(i = 0; i < parts.length; i++) {
            memcpy(retptr, parts[i]._ptr, parts[i]._len);
            retptr += parts[i]._len;
            if (i < parts.length - 1) {
                memcpy(retptr, self._ptr, self._len);
                retptr += self._len;
            }
        }

        return ret;
    }
}

//fairgame
contract FairGame1 {
    using strings for *;
    
    //game results
    mapping(string => string) results;
    
    //show mapping
    bytes6 constant dice_value = '123456';
    string[6] dice_value_show = ['⚀','⚁','⚂','⚃','⚄','⚅'];
    
    bytes14 constant poker_value = '123456789abcde';
    string [14] poker_value_show = ['A','2','3','4','5','6','7','8','9','10','J','Q','K','joker'];
    
    bytes6 constant poker_type = '012345';
    string[6] poker_type_show = ['♦','♣','♥','♠','black','red'];
    
    address owner = 0xCf44413f4E6A7180ffbf0129819F14a3f55E8724;
    
    address[10] sendAddr = [
    0x3B8359CA99737Ea85b300D047299E49b8830cd08,
    0x20cF8a7f07A99a190Bc9E2224E2319A0188DF479,
    0x518aEfe954cCd650B56814EC6D22323927b64F89,
    0x96772B180CAd2FBE3c7C8DC25601570f5158A909,
    0xED1b7753C61D7182d3996b3FBD1e3057b8e7481C,
    0xc311738B6d5705340F4cFf9544b32D7354EC1A61,
    0xEdA0f6Cd8284B6517f467cf1a30ad92b5eDd19E6,
    0x1157Ff05D5ef30D2D17020E9191d126e6E33576A,
    0xD943F2192FE706F1348fBf650C73437182eaED8E,
    0x829011c0958640F79Bc65Bb09a6e100F7A371b50
    ] ;
    

    function AddSeedArray1(string a,string b) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                return;
            }
        }
    }
    function AddSeedArray2(string a,string b,string c,string d) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                return;
            }
        }
    }
    function AddSeedArray3(string a,string b,string c,string d,string e,string f) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                return;
            }
        }
    }
    function AddSeedArray4(string a,string b,string c,string d,string e,string f,string g,string h) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                results[g] =h;
                return;
            }
        }
    }
    function AddSeedArray5(string a,string b,string c,string d,string e,string f,string g,string h,string i,string j) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                results[g] =h;
                results[i] =j;
                return;
            }
        }
    }

    
    //seedToDice⚀⚁⚂⚃⚄⚅
    function Seed2Dice(string seed) internal constant returns(string)
    {
        bytes memory _seedBytes = bytes(seed);
        string[3] memory _stringArray;
        uint i = 0;
        uint j = 0;
        uint k = 0;
        uint a = 0;
        for(i=0;i<_stringArray.length;i++){
            j = 13 + i*2;
            k = j+1;
            if(_seedBytes[j] == '0'){
                for(a=0;a<dice_value.length;a++){
                    if(_seedBytes[k] == dice_value[a]){
                        _stringArray[i] = dice_value_show[a];
                    }
                }
            }
        }
        
        bytes memory _newValue = bytes(new string(_stringArray.length*3));
        
        uint m=0;
        uint n=0;
        uint o=0;
        for(m=0;m<_stringArray.length;m++){
            bytes memory _tmpBytes = bytes(_stringArray[m]);
            for(n=0;n<_tmpBytes.length;n++){
                _newValue[o++] = _tmpBytes[n];
            }
        }
        
        return string(_newValue);
    }
    
    function Seed2Poker(string seed,uint cardnum) internal constant returns(string)
    {
        bytes memory _seedBytes = bytes(seed);
        uint _seedlen = cardnum;
        if(_seedlen == 0){
            _seedlen = _seedBytes.length/2;
        }
        string[54] memory _stringArray;
        string[54] memory _stringArray2;
        uint i = 0;
        uint h = 0;
        uint a = 0;
        for(i=0;i<_stringArray.length && i<_seedlen;i++){
            
            for(a=0;a<poker_type.length;a++){
                if(_seedBytes[13 + i*2] == poker_type[a]){
                    _stringArray[h] = poker_type_show[a];
                }
            }
            
            for(a=0;a<poker_value.length;a++){
                if(_seedBytes[13 + i*2+1] == poker_value[a]){
                    _stringArray2[h] = poker_value_show[a];
                }
            }
            h++;
        }
        
        string memory s;
        uint m=0;
        for(m=0;m<_stringArray.length && m<_seedlen;m++){
            s = s.toSlice().concat(_stringArray[m].toSlice());
            s = s.toSlice().concat(_stringArray2[m].toSlice());
        }
        return s;
        
    }
    
    function parseInt(string _a, uint _b) internal pure returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }

    function splitSeed(string seed)internal pure returns(string[] seeds){
        var delim = ",".toSlice();
        var s = seed.toSlice();
        var _seed = new string[](s.count(delim) + 1);
        for(uint i = 0; i < _seed.length; i++) {
            _seed[i] = s.split(delim).toString();
        }
        return _seed;
    }

    //verify hash value
    function VerifyHash(string hash) public constant returns (string seed,string result,bytes32 hash_calc)
    {
        var _seed = splitSeed(results[hash]);
        var gameid = parseInt(_seed[0],0);
        seed = _seed[1];
        if(gameid == 3){
            result = Seed2Poker(seed,parseInt(_seed[2],0));
        }
        else if(gameid == 4){
            result = Seed2Dice(seed);
        }else{
            result = "none";
        }
        hash_calc =  sha256(sha256(seed));
    }
    
    //self kill contract
    function kill()  public{
        if(msg.sender == owner){
            selfdestruct(owner);
        }
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"}],"name":"AddSeedArray2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"}],"name":"AddSeedArray1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"string"}],"name":"VerifyHash","outputs":[{"name":"seed","type":"string"},{"name":"result","type":"string"},{"name":"hash_calc","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"}],"name":"AddSeedArray3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"},{"name":"g","type":"string"},{"name":"h","type":"string"}],"name":"AddSeedArray4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"},{"name":"g","type":"string"},{"name":"h","type":"string"},{"name":"i","type":"string"},{"name":"j","type":"string"}],"name":"AddSeedArray5","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

  Contract Creation Code Switch To Opcodes View
606060405260c0604051908101604052806040805190810160405280600381526020017fe29a80000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a81000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a82000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a83000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a840000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527fe29a850000000000000000000000000000000000000000000000000000000000602082015290526200017d906001906006620007a4565b506101c0604051908101604052806040805190810160405280600181526020017f410000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4a0000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f510000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4b00000000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600581527f6a6f6b657200000000000000000000000000000000000000000000000000000060208201529052620004d090600790600e620007fa565b5060c0604051908101604052806040805190810160405280600381526020017fe299a6000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a3000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a5000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a0000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600581526020017f626c61636b000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527f7265640000000000000000000000000000000000000000000000000000000000602082015290526200064a906015906006620007a4565b50601b8054600160a060020a03191673cf44413f4e6a7180ffbf0129819f14a3f55e87241790556101406040519081016040908152733b8359ca99737ea85b300d047299e49b8830cd0882527320cf8a7f07a99a190bc9e2224e2319a0188df479602083015273518aefe954ccd650b56814ec6d22323927b64f89908201527396772b180cad2fbe3c7c8dc25601570f5158a909606082015273ed1b7753c61d7182d3996b3fbd1e3057b8e7481c608082015273c311738b6d5705340f4cff9544b32d7354ec1a6160a082015273eda0f6cd8284b6517f467cf1a30ad92b5edd19e660c0820152731157ff05d5ef30d2d17020e9191d126e6e33576a60e082015273d943f2192fe706f1348fbf650c73437182eaed8e61010082015273829011c0958640f79bc65bb09a6e100f7a371b506101208201526200079190601c90600a6200083e565b5034156200079e57600080fd5b620009d4565b8260068101928215620007e8579160200282015b82811115620007e857825182908051620007d792916020019062000899565b5091602001919060010190620007b8565b50620007f69291506200091a565b5090565b82600e8101928215620007e8579160200282015b82811115620007e8578251829080516200082d92916020019062000899565b50916020019190600101906200080e565b82600a81019282156200088b579160200282015b828111156200088b5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000852565b50620007f692915062000945565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008dc57805160ff19168380011785556200090c565b828001600101855582156200090c579182015b828111156200090c578251825591602001919060010190620008ef565b50620007f69291506200096c565b6200094291905b80821115620007f657600062000938828262000989565b5060010162000921565b90565b6200094291905b80821115620007f6578054600160a060020a03191681556001016200094c565b6200094291905b80821115620007f6576000815560010162000973565b50805460018160011615610100020316600290046000825580601f10620009b15750620009d1565b601f016020900490600052602060002090810190620009d191906200096c565b50565b6121cd80620009e46000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b2cfcd4811461008757806328fbdf0d146101a057806341c0e1b5146102335780634f2ac130146102465780639a7bb47114610380578063c959d3201461051b578063f5120d3d1461073a575b600080fd5b341561009257600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506109dd95505050505050565b005b34156101ab57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610b1095505050505050565b341561023e57600080fd5b61019e610bc9565b341561025157600080fd5b61029760046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610bf095505050505050565b60405160408101829052606080825281906020820190820186818151815260200191508051906020019080838360005b838110156102df5780820151838201526020016102c7565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561034257808201518382015260200161032a565b50505050905090810190601f16801561036f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561038b57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610e8b95505050505050565b341561052657600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061103895505050505050565b341561074557600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061125f95505050505050565b60005b600a811015610b0957601c81600a81106109f657fe5b015433600160a060020a0390811691161415610b0157836000866040518082805190602001908083835b60208310610a3f5780518252601f199092019160209182019101610a20565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610a83929160200190612082565b50816000846040518082805190602001908083835b60208310610ab75780518252601f199092019160209182019101610a98565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610afb929160200190612082565b50610b09565b6001016109e0565b5050505050565b60005b600a811015610bc457601c81600a8110610b2957fe5b015433600160a060020a0390811691161415610bbc57816000846040518082805190602001908083835b60208310610b725780518252601f199092019160209182019101610b53565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610bb6929160200190612082565b50610bc4565b600101610b13565b505050565b601b5433600160a060020a0390811691161415610bee57601b54600160a060020a0316ff5b565b610bf8612100565b610c00612100565b6000610c0a612100565b6000610d126000876040518082805190602001908083835b60208310610c415780518252601f199092019160209182019101610c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d085780601f10610cdd57610100808354040283529160200191610d08565b820191906000526020600020905b815481529060010190602001808311610ceb57829003601f168201915b5050505050611500565b9150610d3582600081518110610d2457fe5b906020019060200201516000611611565b905081600181518110610d4457fe5b9060200190602002015194508060031415610d7957610d7285610d6d84600281518110610d2457fe5b61177f565b9350610dc2565b8060041415610d8b57610d7285611aff565b60408051908101604052600481527f6e6f6e6500000000000000000000000000000000000000000000000000000000602082015293505b600280866000604051602001526040518082805190602001908083835b60208310610dfe5780518252601f199092019160209182019101610ddf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060206040518083038160008661646e5a03f11515610e4057600080fd5b5050604051805190506000604051602001526040519081526020908101906040518083038160008661646e5a03f11515610e7957600080fd5b50506040518051959794965050505050565b60005b600a81101561102f57601c81600a8110610ea457fe5b015433600160a060020a039081169116141561102757856000886040518082805190602001908083835b60208310610eed5780518252601f199092019160209182019101610ece565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610f31929160200190612082565b50836000866040518082805190602001908083835b60208310610f655780518252601f199092019160209182019101610f46565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610fa9929160200190612082565b50816000846040518082805190602001908083835b60208310610fdd5780518252601f199092019160209182019101610fbe565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611021929160200190612082565b5061102f565b600101610e8e565b50505050505050565b60005b600a81101561125457601c81600a811061105157fe5b015433600160a060020a039081169116141561124c578760008a6040518082805190602001908083835b6020831061109a5780518252601f19909201916020918201910161107b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516110de929160200190612082565b50856000886040518082805190602001908083835b602083106111125780518252601f1990920191602091820191016110f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611156929160200190612082565b50836000866040518082805190602001908083835b6020831061118a5780518252601f19909201916020918201910161116b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516111ce929160200190612082565b50816000846040518082805190602001908083835b602083106112025780518252601f1990920191602091820191016111e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611246929160200190612082565b50611254565b60010161103b565b505050505050505050565b60005b600a8110156114f357601c81600a811061127857fe5b015433600160a060020a03908116911614156114eb578960008c6040518082805190602001908083835b602083106112c15780518252601f1990920191602091820191016112a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611305929160200190612082565b508760008a6040518082805190602001908083835b602083106113395780518252601f19909201916020918201910161131a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161137d929160200190612082565b50856000886040518082805190602001908083835b602083106113b15780518252601f199092019160209182019101611392565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516113f5929160200190612082565b50836000866040518082805190602001908083835b602083106114295780518252601f19909201916020918201910161140a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161146d929160200190612082565b50816000846040518082805190602001908083835b602083106114a15780518252601f199092019160209182019101611482565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516114e5929160200190612082565b506114f3565b600101611262565b5050505050505050505050565b611508612100565b611510612112565b611518612112565b611520612100565b600061155e60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611dbe565b935061156986611dbe565b925061157b838563ffffffff611de616565b60010160405180591061158b5750595b9080825280602002602001820160405280156115c157816020015b6115ae612100565b8152602001906001900390816115a65790505b509150600090505b8151811015611608576115ea6115e5848663ffffffff611e4416565b611e57565b8282815181106115f657fe5b602090810290910101526001016115c9565b50949350505050565b600061161b612100565b5082600080805b8351811015611762577f300000000000000000000000000000000000000000000000000000000000000084828151811061165857fe5b016020015160f860020a900460f860020a02600160f860020a031916101580156116c957507f39000000000000000000000000000000000000000000000000000000000000008482815181106116aa57fe5b016020015160f860020a900460f860020a02600160f860020a03191611155b1561171f5781156116e8578515156116e057611762565b600019909501945b600a8302925060308482815181106116fc57fe5b016020015160f860020a900460f860020a0260f860020a9004038301925061175a565b83818151811061172b57fe5b016020015160f860020a900460f860020a02600160f860020a031916602e60f860020a02141561175a57600191505b600101611622565b60008611156117745785600a0a830292505b509095945050505050565b611787612100565b61178f612100565b6000611799612129565b6117a1612129565b60008060006117ae612100565b8a975089965060008715156117ce57600289518115156117ca57fe5b0497505b600094508493508392505b6036851080156117e857508785105b15611a8957600092505b6006831015611932577f3031323334350000000000000000000000000000000000000000000000000000836006811061182757fe5b1a60f860020a02600160f860020a0319168986600202600d018151811061184a57fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611927576015836006811061187957fe5b018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050878560368110151561192157fe5b60200201525b6001909201916117f2565b600092505b600e831015611a7a577f313233343536373839616263646500000000000000000000000000000000000083600e811061196c57fe5b1a60f860020a02600160f860020a0319168986600202600d016001018151811061199257fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611a6f57600783600e81106119c157fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a565780601f10611a2b57610100808354040283529160200191611a56565b820191906000526020600020905b815481529060010190602001808311611a3957829003601f168201915b50505050508685603681101515611a6957fe5b60200201525b600190920191611937565b600194850194909301926117d9565b5060005b603681108015611a9c57508781105b15611af057611ad2611abd888360368110611ab357fe5b6020020151611dbe565b611ac684611dbe565b9063ffffffff611ea516565b9150611ae6611abd878360368110611ab357fe5b9150600101611a8d565b509a9950505050505050505050565b611b07612100565b611b0f612100565b611b17612157565b600080600080611b25612100565b6000806000611b32612100565b8c9a50600098508897508796508695505b6003891015611cf45788600202600d0197508760010196508a8881518110611b6757fe5b016020015160f860020a900460f860020a02600160f860020a0319167f30000000000000000000000000000000000000000000000000000000000000001415611ce957600095505b6006861015611ce9577f31323334353600000000000000000000000000000000000000000000000000008660068110611be457fe5b1a60f860020a02600160f860020a0319168b8881518110611c0157fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611cde5760018660068110611c3057fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cc55780601f10611c9a57610100808354040283529160200191611cc5565b820191906000526020600020905b815481529060010190602001808311611ca857829003601f168201915b50505050508a8a600381101515611cd857fe5b60200201525b600190950194611baf565b600190980197611b43565b6009604051805910611d035750595b818152601f19601f830116810160200160405290509450600093508392508291505b6003841015611dad57898460038110611d3a57fe5b60200201519050600092505b8051831015611da257808381518110611d5b57fe5b016020015160f860020a900460f860020a02858380600101945081518110611d7f57fe5b906020010190600160f860020a031916908160001a905350600190920191611d46565b600190930192611d25565b50929b9a5050505050505050505050565b611dc6612112565b602082016040805190810160405280845181526020019190915292915050565b6000808251611e018551866020015186518760200151611f11565b0190505b83518460200151018111611e3d576001909101908251611e35856020015183038651038386518760200151611f11565b019050611e05565b5092915050565b611e4c612112565b611e3d838383611fce565b611e5f612100565b611e67612100565b60008351604051805910611e785750595b818152601f19601f830116810160200160405290509150602082019050611e3d818560200151865161203d565b611ead612100565b611eb5612100565b60008351855101604051805910611ec95750595b818152601f19601f830116810160200160405290509150602082019050611ef6818660200151875161203d565b611f09855182018560200151865161203d565b509392505050565b600083818080808080808c8b11611fb85760208b11611f8157600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514611f7957838810611f68578c8c019850611fbe565b600190970196858851169250611f50565b879850611fbe565b8a8a209150600096505b8a8d038711611fb8575089872081811415611fa857879850611fbe565b6001978801979690960195611f8b565b8c8c0198505b5050505050505050949350505050565b611fd6612112565b6000611fee8551866020015186518760200151611f11565b9050846020015160208085019190915285015181038352845185602001510181141561201d5760008552612034565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106120635782518452602084019350602083019250602082039150612040565b6001826020036101000a03905080198351168185511617909352505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120c357805160ff19168380011785556120f0565b828001600101855582156120f0579182015b828111156120f05782518255916020019190600101906120d5565b506120fc929150612184565b5090565b60206040519081016040526000815290565b604080519081016040526000808252602082015290565b6106c06040519081016040526036815b612141612100565b8152602001906001900390816121395790505090565b60606040519081016040526003815b61216e612100565b8152602001906001900390816121665790505090565b61219e91905b808211156120fc576000815560010161218a565b905600a165627a7a7230582041f723a09e98c37ee9d3d433eba2ae7ffeac6eb60bf2dd8eea67cd6ab4064b500029

   Swarm Source:
bzzr://41f723a09e98c37ee9d3d433eba2ae7ffeac6eb60bf2dd8eea67cd6ab4064b50

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward