Contract 0xed7981bffaf2dfb13f345f80062307ebc6725448

Contract Overview

Balance:
0 Ether

Token:
TxHash Block Age From To Value [TxFee]
0x9ea6d960fded9cfecb2fb06c7aadc16f1fadc8626237b52044552125b09cfe98(pending)1 sec ago0xdafed562fadba54b480efaf4f4abe7d8c9f2741a IN 0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether(Pending)
0xbce650c6952c1062de6cc79aeb3a8377fd7348b999ffe089cdb96ab7f81f86471058274329 secs ago0x79a2514036dabdcb456e369f43cf98ba216819bb IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000491783
0x394e10cd2d61d5b4e444082fa52c16cbb5933088e2bf05f1f1a2ee77bf9dd13b1058274329 secs ago0x8b205232122b6bf45122d4ea2fc5579b5714114c IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000295596
0x59ee6850c3f493bdf03d6254b03ad824b8d9b8481cda3b63463a204973e08915105827391 min ago0xba2ed99dea09f8196354af7b6d23c723872412a4 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000176303
0xf5afaaa95b60b4c9d191e46699206a2f10493ad2c2d68a168d35c2df10b9d648105827381 min ago0xfcae651f6d0f5367a21e46dba6c0d77825af85f4 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000243983
0x797595055292a1e7a89907db4f40c70925ea554f1313c1bf01c78b45b88bd831105827381 min ago0x2c24921c343caae38426c32cbde96aad3d62830b IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000138721
0x3b2a6f40bc959717fa4be9e445b4d87e4a7d815573e9cd9399a5dfdbfdcb8010105827381 min ago0x501c175d57f031481d35a13bf36b83a1f2170065 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000232462
0x9b3346074b0833f17bbb46c6f27eb600bc93043a3762d53e2e2ab359bf07133f105827372 mins ago0x480b7c707373c024c77d2506a9c44bb55805e96c IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000297196
0xbcd1d177f22e385e75b7a044fc6cb8b87f0b903d167597a1fc353150838ca86f105827372 mins ago0x232fdb554c36a58d719269c6457faebc82e8a06a IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000262621
0x2fb791b8b1294679e88d36d546fbfd96014ab6cbb52e92ea7cdf4f0c48ec7510105827352 mins ago0xe0426ceb64cda1c4ffdca5f80ecb7cbf5641f6ea IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000263069
0x7229593cc50d621be5a2806d214743b1c1f4ed421cdf18a734f3d8498afaee68105827352 mins ago0x7c5e8a1bf9880c04c45d14ffa1067ee55aa622bb IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000355018
0x6a6235aafe63ba91eda123e8486336146d33ca40be340b8b5d0b47bd1dee0d8e105827343 mins ago0x5dc5b7a25bbbc559cb26e114ccaf3a50e48aad39 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.00035649
0xabc05705c539eb93c487b1300eae27f7ad6d08fa78fb7eac83e9e46a2d0efdc0105827343 mins ago0x3bfa975c960682c71e9c9e347fb9ba4795a827c2 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000240526
0xdb80ae763ba79cce13446f4fe26c9130c6f30d5329d0331227f3cf47fc36a246105827333 mins ago0xc295b31aa1001b3992f2cb750e43e0343e88fb18 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000171055
0xfc5a9d160b46c31fdc0c028124e058d6cc35cc2d63306ce52ece1f744456e242105827333 mins ago0x071bea3f4afd8a00acb81005042bb3961676ad0f IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000065248
0xf02d5616210ac25bea746480a7479b45f503d4733dbd1b0dfe43e307ca1f4f25105827323 mins ago0x995160682f5efc1291eba13cbd511a5423208955 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000293228
0x11a3fd2215b59b40e89bc7765292a7f667833abf069b68e75f67d42126d6ea32105827314 mins ago0xfcae651f6d0f5367a21e46dba6c0d77825af85f4 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000117266
0x29e6f9f4704bc944efbe0a3d5dbf042085633555d13e14bb79aff62c462664cc105827304 mins ago0x232fdb554c36a58d719269c6457faebc82e8a06a IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000163759
0x12cdd55ee932991552cd75913b54861a683cd7332a72d950ec0589111bc17a7f105827304 mins ago0x79a2514036dabdcb456e369f43cf98ba216819bb IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000308461
0xd061efd9e8f12c5e0470178c0095701ea568402f3c1620718de97d92dab615ee105827284 mins ago0xe0426ceb64cda1c4ffdca5f80ecb7cbf5641f6ea IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000291372
0x0a66b6911cf243560ec4899e71be309481df75c60cdafcaf14f2a9b08fadffac105827284 mins ago0x7c5e8a1bf9880c04c45d14ffa1067ee55aa622bb IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000109074
0xcbc25746945d5c40f991eebd011431f5ab65a113732ba6c4f15b919bec58a28e105827284 mins ago0x59a97ab0c1177a69212bb36aec5d4829dfaa3d56 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000274909
0xe15f8a6ac74bc5339734b4b2754ca3f49cf9aa895e865e490eed6977265cd3b5105827275 mins ago0xb79989fcd928124ad3577f12685db8c6c58029fe IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.00022971
0x07ffbb3edf299a6cb7acc0f41906e60c8134d09a18ce7ed1d0a30fc54f5a8d53105827275 mins ago0xd583942c926f2d823a5cca4868e75b1fd4d7e63c IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000367754
0xc66d6c587f1f12fdcfb4c158d6a14799dd13a680a8bfe86975f57e4135258460105827265 mins ago0xb0be085ed30edb56c961492801ebca13a793e611 IN  0xed7981bffaf2dfb13f345f80062307ebc67254480 Ether0.000170543
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x6896adff3a27a7e1002282a9cc75da6ff913771e

Contract Name:
FairGame

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

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 FairGame {
    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 = 0x59180fbb2c7595ca31ad88bbf1389a268806547f;
    
    address[40] sendAddr = [
    0x59180fbb2c7595ca31ad88bbf1389a268806547f,
	0xdafed562fadba54b480efaf4f4abe7d8c9f2741a,
	0x232fdb554c36a58d719269c6457faebc82e8a06a,
	0x0f39f887c46acab26a719359a49369fd708cf320,
	0x7c5e8a1bf9880c04c45d14ffa1067ee55aa622bb,
	0xe0426ceb64cda1c4ffdca5f80ecb7cbf5641f6ea,
	0xb584c9c3f7c46b6d72fea9dcb4cf58dcdaa902af,
	0x995160682f5efc1291eba13cbd511a5423208955,
	0x5dc5b7a25bbbc559cb26e114ccaf3a50e48aad39,
	0xae5f06ef2fc9fae6f4f54bcd168c424fa7ad0bb5,
	0xb79989fCd928124ad3577F12685Db8C6C58029FE,
	0x3694376Aa8Bee3c11dbB85A4A9B321F95E7904A9,
	0x2C24921C343cAAE38426c32CbDE96aaD3d62830b,
	0x512a77854f0Bc98908ebE517470F054306a648E0,
	0x895613e730e4F6F850F02b6b51Ea12070b8AD149,
	0x8b205232122b6BF45122D4EA2fc5579b5714114c,
	0x501c175D57F031481D35A13bF36B83a1f2170065,
	0x602c6B9dD850a38215aAf736bab46889e8772435,
	0x208A7331f281e64D0E56D99E4c0eA1b430566b34,
	0x480B7C707373C024C77d2506A9C44bb55805E96C,
	0xB0Be085Ed30EdB56C961492801EBCa13A793e611,
	0xc295b31aA1001B3992f2cB750E43e0343e88fb18,
	0x42B7c452146D1bA5EE375d7d3325A8A1e05e7148,
	0xF3afc18A2a8DE6EBf8Db06d8E0D95dE89aBf3FD5,
	0xa355c0Ca17c080BD3DA3631fc9D8312594e6275A,
	0xe0c8C4787a757E2541f42c4473939e26fa607b91,
	0x78644310fDd06F13AbebfAbAcE38e7d4BE717791,
	0x651bdF41F345B786E1C53c44f47b3ED1cd852765,
	0xfcAE651F6D0F5367a21e46dbA6c0d77825af85f4,
	0x71a4B1948cac3eF0e1fEaa9726bb2D7C75e7cBd9,
	0x8177D9e22B89DffDACC5F50296943D3dcB43A1b6,
	0x79A2514036DABDcb456e369F43cF98Ba216819bB,
	0xe6663616FAfBda6EDA735bbe701A2b84132cAd34,
	0x59a97AB0c1177A69212bB36Aec5D4829DfAA3D56,
	0x26aC86c12d4298438766F133e48A956Ee8320c30,
	0xBA2ed99DeA09F8196354af7B6D23c723872412a4,
	0x0016A8663937CAE5EDcA80169830f5649d3e51b0,
	0xd583942C926f2D823a5Cca4868E75B1fd4D7E63C,
	0x3bFa975c960682C71e9c9E347FB9Ba4795a827C2,
	0x071BEa3f4Afd8a00aCb81005042BB3961676Ad0f
    ] ;
    

    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

606060405260c0604051908101604052806040805190810160405280600381526020017fe29a80000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a81000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a82000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a83000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a840000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527fe29a850000000000000000000000000000000000000000000000000000000000602082015290526200017d90600190600662000acd565b506101c0604051908101604052806040805190810160405280600181526020017f410000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4a0000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f510000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4b00000000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600581527f6a6f6b657200000000000000000000000000000000000000000000000000000060208201529052620004d090600790600e62000b23565b5060c0604051908101604052806040805190810160405280600381526020017fe299a6000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a3000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a5000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a0000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600581526020017f626c61636b000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527f7265640000000000000000000000000000000000000000000000000000000000602082015290526200064a90601590600662000acd565b50601b8054600160a060020a0319167359180fbb2c7595ca31ad88bbf1389a268806547f17905561050060405190810160409081527359180fbb2c7595ca31ad88bbf1389a268806547f825273dafed562fadba54b480efaf4f4abe7d8c9f2741a602083015273232fdb554c36a58d719269c6457faebc82e8a06a90820152730f39f887c46acab26a719359a49369fd708cf3206060820152737c5e8a1bf9880c04c45d14ffa1067ee55aa622bb608082015273e0426ceb64cda1c4ffdca5f80ecb7cbf5641f6ea60a082015273b584c9c3f7c46b6d72fea9dcb4cf58dcdaa902af60c082015273995160682f5efc1291eba13cbd511a542320895560e0820152735dc5b7a25bbbc559cb26e114ccaf3a50e48aad3961010082015273ae5f06ef2fc9fae6f4f54bcd168c424fa7ad0bb561012082015273b79989fcd928124ad3577f12685db8c6c58029fe610140820152733694376aa8bee3c11dbb85a4a9b321f95e7904a9610160820152732c24921c343caae38426c32cbde96aad3d62830b61018082015273512a77854f0bc98908ebe517470f054306a648e06101a082015273895613e730e4f6f850f02b6b51ea12070b8ad1496101c0820152738b205232122b6bf45122d4ea2fc5579b5714114c6101e082015273501c175d57f031481d35a13bf36b83a1f217006561020082015273602c6b9dd850a38215aaf736bab46889e877243561022082015273208a7331f281e64d0e56d99e4c0ea1b430566b3461024082015273480b7c707373c024c77d2506a9c44bb55805e96c61026082015273b0be085ed30edb56c961492801ebca13a793e61161028082015273c295b31aa1001b3992f2cb750e43e0343e88fb186102a08201527342b7c452146d1ba5ee375d7d3325a8a1e05e71486102c082015273f3afc18a2a8de6ebf8db06d8e0d95de89abf3fd56102e082015273a355c0ca17c080bd3da3631fc9d8312594e6275a61030082015273e0c8c4787a757e2541f42c4473939e26fa607b916103208201527378644310fdd06f13abebfabace38e7d4be71779161034082015273651bdf41f345b786e1c53c44f47b3ed1cd85276561036082015273fcae651f6d0f5367a21e46dba6c0d77825af85f46103808201527371a4b1948cac3ef0e1feaa9726bb2d7c75e7cbd96103a0820152738177d9e22b89dffdacc5f50296943d3dcb43a1b66103c08201527379a2514036dabdcb456e369f43cf98ba216819bb6103e082015273e6663616fafbda6eda735bbe701a2b84132cad346104008201527359a97ab0c1177a69212bb36aec5d4829dfaa3d566104208201527326ac86c12d4298438766f133e48a956ee8320c3061044082015273ba2ed99dea09f8196354af7b6d23c723872412a46104608201527216a8663937cae5edca80169830f5649d3e51b061048082015273d583942c926f2d823a5cca4868e75b1fd4d7e63c6104a0820152733bfa975c960682c71e9c9e347fb9ba4795a827c26104c082015273071bea3f4afd8a00acb81005042bb3961676ad0f6104e082015262000aba90601c90602862000b67565b50341562000ac757600080fd5b62000cfd565b826006810192821562000b11579160200282015b8281111562000b115782518290805162000b0092916020019062000bc2565b509160200191906001019062000ae1565b5062000b1f92915062000c43565b5090565b82600e810192821562000b11579160200282015b8281111562000b115782518290805162000b5692916020019062000bc2565b509160200191906001019062000b37565b826028810192821562000bb4579160200282015b8281111562000bb45782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000b7b565b5062000b1f92915062000c6e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c0557805160ff191683800117855562000c35565b8280016001018555821562000c35579182015b8281111562000c3557825182559160200191906001019062000c18565b5062000b1f92915062000c95565b62000c6b91905b8082111562000b1f57600062000c61828262000cb2565b5060010162000c4a565b90565b62000c6b91905b8082111562000b1f578054600160a060020a031916815560010162000c75565b62000c6b91905b8082111562000b1f576000815560010162000c9c565b50805460018160011615610100020316600290046000825580601f1062000cda575062000cfa565b601f01602090049060005260206000209081019062000cfa919062000c95565b50565b6121cd8062000d0d6000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b2cfcd4811461008757806328fbdf0d146101a057806341c0e1b5146102335780634f2ac130146102465780639a7bb47114610380578063c959d3201461051b578063f5120d3d1461073a575b600080fd5b341561009257600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506109dd95505050505050565b005b34156101ab57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610b1095505050505050565b341561023e57600080fd5b61019e610bc9565b341561025157600080fd5b61029760046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610bf095505050505050565b60405160408101829052606080825281906020820190820186818151815260200191508051906020019080838360005b838110156102df5780820151838201526020016102c7565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561034257808201518382015260200161032a565b50505050905090810190601f16801561036f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561038b57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610e8b95505050505050565b341561052657600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061103895505050505050565b341561074557600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061125f95505050505050565b60005b6028811015610b0957601c81602881106109f657fe5b015433600160a060020a0390811691161415610b0157836000866040518082805190602001908083835b60208310610a3f5780518252601f199092019160209182019101610a20565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610a83929160200190612082565b50816000846040518082805190602001908083835b60208310610ab75780518252601f199092019160209182019101610a98565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610afb929160200190612082565b50610b09565b6001016109e0565b5050505050565b60005b6028811015610bc457601c8160288110610b2957fe5b015433600160a060020a0390811691161415610bbc57816000846040518082805190602001908083835b60208310610b725780518252601f199092019160209182019101610b53565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610bb6929160200190612082565b50610bc4565b600101610b13565b505050565b601b5433600160a060020a0390811691161415610bee57601b54600160a060020a0316ff5b565b610bf8612100565b610c00612100565b6000610c0a612100565b6000610d126000876040518082805190602001908083835b60208310610c415780518252601f199092019160209182019101610c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d085780601f10610cdd57610100808354040283529160200191610d08565b820191906000526020600020905b815481529060010190602001808311610ceb57829003601f168201915b5050505050611500565b9150610d3582600081518110610d2457fe5b906020019060200201516000611611565b905081600181518110610d4457fe5b9060200190602002015194508060031415610d7957610d7285610d6d84600281518110610d2457fe5b61177f565b9350610dc2565b8060041415610d8b57610d7285611aff565b60408051908101604052600481527f6e6f6e6500000000000000000000000000000000000000000000000000000000602082015293505b600280866000604051602001526040518082805190602001908083835b60208310610dfe5780518252601f199092019160209182019101610ddf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060206040518083038160008661646e5a03f11515610e4057600080fd5b5050604051805190506000604051602001526040519081526020908101906040518083038160008661646e5a03f11515610e7957600080fd5b50506040518051959794965050505050565b60005b602881101561102f57601c8160288110610ea457fe5b015433600160a060020a039081169116141561102757856000886040518082805190602001908083835b60208310610eed5780518252601f199092019160209182019101610ece565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610f31929160200190612082565b50836000866040518082805190602001908083835b60208310610f655780518252601f199092019160209182019101610f46565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610fa9929160200190612082565b50816000846040518082805190602001908083835b60208310610fdd5780518252601f199092019160209182019101610fbe565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611021929160200190612082565b5061102f565b600101610e8e565b50505050505050565b60005b602881101561125457601c816028811061105157fe5b015433600160a060020a039081169116141561124c578760008a6040518082805190602001908083835b6020831061109a5780518252601f19909201916020918201910161107b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516110de929160200190612082565b50856000886040518082805190602001908083835b602083106111125780518252601f1990920191602091820191016110f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611156929160200190612082565b50836000866040518082805190602001908083835b6020831061118a5780518252601f19909201916020918201910161116b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516111ce929160200190612082565b50816000846040518082805190602001908083835b602083106112025780518252601f1990920191602091820191016111e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611246929160200190612082565b50611254565b60010161103b565b505050505050505050565b60005b60288110156114f357601c816028811061127857fe5b015433600160a060020a03908116911614156114eb578960008c6040518082805190602001908083835b602083106112c15780518252601f1990920191602091820191016112a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611305929160200190612082565b508760008a6040518082805190602001908083835b602083106113395780518252601f19909201916020918201910161131a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161137d929160200190612082565b50856000886040518082805190602001908083835b602083106113b15780518252601f199092019160209182019101611392565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516113f5929160200190612082565b50836000866040518082805190602001908083835b602083106114295780518252601f19909201916020918201910161140a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161146d929160200190612082565b50816000846040518082805190602001908083835b602083106114a15780518252601f199092019160209182019101611482565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516114e5929160200190612082565b506114f3565b600101611262565b5050505050505050505050565b611508612100565b611510612112565b611518612112565b611520612100565b600061155e60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611dbe565b935061156986611dbe565b925061157b838563ffffffff611de616565b60010160405180591061158b5750595b9080825280602002602001820160405280156115c157816020015b6115ae612100565b8152602001906001900390816115a65790505b509150600090505b8151811015611608576115ea6115e5848663ffffffff611e4416565b611e57565b8282815181106115f657fe5b602090810290910101526001016115c9565b50949350505050565b600061161b612100565b5082600080805b8351811015611762577f300000000000000000000000000000000000000000000000000000000000000084828151811061165857fe5b016020015160f860020a900460f860020a02600160f860020a031916101580156116c957507f39000000000000000000000000000000000000000000000000000000000000008482815181106116aa57fe5b016020015160f860020a900460f860020a02600160f860020a03191611155b1561171f5781156116e8578515156116e057611762565b600019909501945b600a8302925060308482815181106116fc57fe5b016020015160f860020a900460f860020a0260f860020a9004038301925061175a565b83818151811061172b57fe5b016020015160f860020a900460f860020a02600160f860020a031916602e60f860020a02141561175a57600191505b600101611622565b60008611156117745785600a0a830292505b509095945050505050565b611787612100565b61178f612100565b6000611799612129565b6117a1612129565b60008060006117ae612100565b8a975089965060008715156117ce57600289518115156117ca57fe5b0497505b600094508493508392505b6036851080156117e857508785105b15611a8957600092505b6006831015611932577f3031323334350000000000000000000000000000000000000000000000000000836006811061182757fe5b1a60f860020a02600160f860020a0319168986600202600d018151811061184a57fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611927576015836006811061187957fe5b018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050878560368110151561192157fe5b60200201525b6001909201916117f2565b600092505b600e831015611a7a577f313233343536373839616263646500000000000000000000000000000000000083600e811061196c57fe5b1a60f860020a02600160f860020a0319168986600202600d016001018151811061199257fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611a6f57600783600e81106119c157fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a565780601f10611a2b57610100808354040283529160200191611a56565b820191906000526020600020905b815481529060010190602001808311611a3957829003601f168201915b50505050508685603681101515611a6957fe5b60200201525b600190920191611937565b600194850194909301926117d9565b5060005b603681108015611a9c57508781105b15611af057611ad2611abd888360368110611ab357fe5b6020020151611dbe565b611ac684611dbe565b9063ffffffff611ea516565b9150611ae6611abd878360368110611ab357fe5b9150600101611a8d565b509a9950505050505050505050565b611b07612100565b611b0f612100565b611b17612157565b600080600080611b25612100565b6000806000611b32612100565b8c9a50600098508897508796508695505b6003891015611cf45788600202600d0197508760010196508a8881518110611b6757fe5b016020015160f860020a900460f860020a02600160f860020a0319167f30000000000000000000000000000000000000000000000000000000000000001415611ce957600095505b6006861015611ce9577f31323334353600000000000000000000000000000000000000000000000000008660068110611be457fe5b1a60f860020a02600160f860020a0319168b8881518110611c0157fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611cde5760018660068110611c3057fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cc55780601f10611c9a57610100808354040283529160200191611cc5565b820191906000526020600020905b815481529060010190602001808311611ca857829003601f168201915b50505050508a8a600381101515611cd857fe5b60200201525b600190950194611baf565b600190980197611b43565b6009604051805910611d035750595b818152601f19601f830116810160200160405290509450600093508392508291505b6003841015611dad57898460038110611d3a57fe5b60200201519050600092505b8051831015611da257808381518110611d5b57fe5b016020015160f860020a900460f860020a02858380600101945081518110611d7f57fe5b906020010190600160f860020a031916908160001a905350600190920191611d46565b600190930192611d25565b50929b9a5050505050505050505050565b611dc6612112565b602082016040805190810160405280845181526020019190915292915050565b6000808251611e018551866020015186518760200151611f11565b0190505b83518460200151018111611e3d576001909101908251611e35856020015183038651038386518760200151611f11565b019050611e05565b5092915050565b611e4c612112565b611e3d838383611fce565b611e5f612100565b611e67612100565b60008351604051805910611e785750595b818152601f19601f830116810160200160405290509150602082019050611e3d818560200151865161203d565b611ead612100565b611eb5612100565b60008351855101604051805910611ec95750595b818152601f19601f830116810160200160405290509150602082019050611ef6818660200151875161203d565b611f09855182018560200151865161203d565b509392505050565b600083818080808080808c8b11611fb85760208b11611f8157600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514611f7957838810611f68578c8c019850611fbe565b600190970196858851169250611f50565b879850611fbe565b8a8a209150600096505b8a8d038711611fb8575089872081811415611fa857879850611fbe565b6001978801979690960195611f8b565b8c8c0198505b5050505050505050949350505050565b611fd6612112565b6000611fee8551866020015186518760200151611f11565b9050846020015160208085019190915285015181038352845185602001510181141561201d5760008552612034565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106120635782518452602084019350602083019250602082039150612040565b6001826020036101000a03905080198351168185511617909352505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120c357805160ff19168380011785556120f0565b828001600101855582156120f0579182015b828111156120f05782518255916020019190600101906120d5565b506120fc929150612184565b5090565b60206040519081016040526000815290565b604080519081016040526000808252602082015290565b6106c06040519081016040526036815b612141612100565b8152602001906001900390816121395790505090565b60606040519081016040526003815b61216e612100565b8152602001906001900390816121665790505090565b61219e91905b808211156120fc576000815560010161218a565b905600a165627a7a7230582094cba67c14992ee45e046195b4cac8b963c5d78e2f72370fed9976dcace4844d0029

Swarm Source

bzzr://94cba67c14992ee45e046195b4cac8b963c5d78e2f72370fed9976dcace4844d
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward