Sponsored:   VC, TLDR and CoinBene Funded "TEMCO: Bitcoin Network (RSK) Suppy Chain! Whitelist KYC Starts Now!!"
Contract Overview
Balance: 0.968591272309085369 Ether
Ether Value: $93.09 (@ $96.11/ETH)
Transactions: 1751 txns
Token Tracker: FairDAPP - Bank Simulator - Fomo (FBankFomo)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xbc817a495f0114755da5305c5aa84fc5ca7ebabdat txn 0xddd9e6b13c634d81a991a3567b2da53fb30877d7621b3c9f3a5de8ba6ae0f1d2
 Latest 25 transactions from a total of 1751 transactions

TxHash Age From To Value [TxFee]
0x07865d31448f193b44d3d699807a4db958333ee3579b6e5d2b3bce005daef42f18 days 17 hrs ago0x6a87dd44fb782ee9b09b203ac6ad412b8c146797  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00029703
0x42845fa9f52eb0fcd21716beff7d5e86c424da57875ab95a44204324d4349d7724 days 3 hrs ago0x818e12fd7d2e808a4a793f5fdc3430f80538d650  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000181856
0x5caa78d1a68defd8913f33b51fe00bf51d772331240a87977839114b657ac22f24 days 3 hrs ago0x818e12fd7d2e808a4a793f5fdc3430f80538d650  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000181856
0xf5855c22f56699f4bd8dfcaf7ef4646451f4dbccb1e2ebf5cc3776b11982262139 days 18 hrs ago0x868b90e2a1017f14fbee4b9a7921a39624413b22  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000167012
0xeab7cfc0f28e945b00aaf9b49e2db146604374489e8ad40fb376f577c0e3f26e40 days 2 hrs ago0x20920c6df10c08ff92d74143a86a330185a726bf  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000208765
0x15572711aa7324f44a3e48421c3653f7e9597e1c828e1dd3272a4165386efb6540 days 3 hrs ago0x818e12fd7d2e808a4a793f5fdc3430f80538d650  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000419952
0xd3569deda303b9669e647466b2adf07c9f47588f3dd682ab4922c141be10304d41 days 4 hrs ago0x6e06469a45fb778efc3d487fdab89850a916ddf0  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000457613385
0xd019b260ec00c02c05cf66e4631b147455f9810f5c344e72226cffb73d478d7a50 days 6 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00029948
0x2f07aad234360faeeb71ee0ca09eb5b263290c1255fdcabd6024e87a009d6db252 days 23 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000355248
0x80c90dbe20202a4c4415366e8056e6754f3dce5dfb2c7edbbc519c5406dfadfc53 days 4 hrs ago0x22f14cb872871a37b1d981b342b865f8a31fbaf9  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00044349
0x4af61b007140e8511ccb58fad45c60e21223c14277b74f3bb0e9d9e239ddb19753 days 7 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0x26936b691450a838b6df4965b58f2c53a9139d290.001 Ether0.003788952
0xbf6aeea43ab7be657bb353caacbcfdbd085f708642d5668fdafca92530682ca253 days 14 hrs ago0x22f14cb872871a37b1d981b342b865f8a31fbaf9  IN   0x26936b691450a838b6df4965b58f2c53a9139d290.01 Ether0.009862124
0xdafd937eea1205b404e457cb94d191361077b4ee1af92370e00e2492846305d153 days 21 hrs ago0x6275f6fc1fd1460b328fa32a068ea8e5e8686a90  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00017049
0x4344b503c3cdf7dabe5d8aa5347b60a99c0402d9bcebb7e0410b29540b07f36454 days 3 hrs ago0x0659836869772cf479cfcedb659ce6099560b1e5  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00022203
0x297829832032b7df8396b0b342d44fbc462a193e94402a98f8b18a4a1f080d8354 days 8 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00044406
0x4f9c23b43a98f63e7f9359d6ed6f1e5dd2ea730c24b7df5c8811d44567cf726254 days 13 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x26936b691450a838b6df4965b58f2c53a9139d290.001 Ether0.004263084
0x421430af307a72cc21ab045014bab2e04177968cfb134b2e14c01e9ea01225de54 days 15 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000399654
0x7821ed4987049670594c9988ebfa866ab457d2d54650231a98ae7bbb8189d85f54 days 16 hrs ago0x070f3492cd778cfc3dbad6d25bfb3bcbb498298b  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000961688
0x214a557dec2c129e0062f83f1a18c413cd2a4f513023a7bb1721076fdb358ee254 days 16 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000310842
0xd151ddbfbe0f89a8e3290d1b590d75c799460f9316e34dcbb3fa6130b3bafe9f54 days 16 hrs ago0x9c45a3d852a91ac06b42778524b255330e5deb31  IN   0x26936b691450a838b6df4965b58f2c53a9139d290.001 Ether0.002643486026
0x599ee8c5b78e363ca5214664c8722a4ceb9bc82072903b7ce6edacffd18de95c54 days 16 hrs ago0x0659836869772cf479cfcedb659ce6099560b1e5  IN   0x26936b691450a838b6df4965b58f2c53a9139d290.028 Ether0.002315335
0xf5b42db9e71809d3f7084b713a5f5a8b5b9bdf3924c111196625ff0f6077d1e654 days 16 hrs ago0x0659836869772cf479cfcedb659ce6099560b1e5  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.0002753172
0xdd2fcfc92be74948934928b36d1731efe734322972e2aad516f351511a1af7cc54 days 17 hrs ago0xef764bac8a438e7e498c2e5fccf0f174c3e3f8db  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000475248
0x932b5e9cce1c2b8668217fb3a5e982703bcacb9653f42c32f8f9a6cc9b5a76c754 days 17 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.00071864
0xcada23ba566da837374e3d88db580fef36716aa33af4c6caaa2883a2fee37e1b54 days 17 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x26936b691450a838b6df4965b58f2c53a9139d290 Ether0.000399654
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x07865d31448f193b44d3d699807a4db958333ee3579b6e5d2b3bce005daef42f679705518 days 17 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x6a87dd44fb782ee9b09b203ac6ad412b8c1467970.024158849746685168 Ether
0xf5855c22f56699f4bd8dfcaf7ef4646451f4dbccb1e2ebf5cc3776b119822621666884839 days 18 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x868b90e2a1017f14fbee4b9a7921a39624413b220.523065908692008792 Ether
0xeab7cfc0f28e945b00aaf9b49e2db146604374489e8ad40fb376f577c0e3f26e666675440 days 2 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x20920c6df10c08ff92d74143a86a330185a726bf0.088 Ether
0xd3569deda303b9669e647466b2adf07c9f47588f3dd682ab4922c141be10304d666016441 days 4 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x6e06469a45fb778efc3d487fdab89850a916ddf02.069500897800959142 Ether
0x2f07aad234360faeeb71ee0ca09eb5b263290c1255fdcabd6024e87a009d6db2658831552 days 23 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.008315743490048766 Ether
0x80c90dbe20202a4c4415366e8056e6754f3dce5dfb2c7edbbc519c5406dfadfc658709153 days 4 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x22f14cb872871a37b1d981b342b865f8a31fbaf90.009248908698009752 Ether
0x4af61b007140e8511ccb58fad45c60e21223c14277b74f3bb0e9d9e239ddb197658625453 days 7 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x53a39eef083c4a91e36145176cc9f52be29b72880.00002 Ether
0x4af61b007140e8511ccb58fad45c60e21223c14277b74f3bb0e9d9e239ddb197658625453 days 7 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290xab3c379ab712b2671db021b6baf32c8d9b5361310.00001 Ether
0xbf6aeea43ab7be657bb353caacbcfdbd085f708642d5668fdafca92530682ca2658442753 days 14 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x53a39eef083c4a91e36145176cc9f52be29b72880.0002 Ether
0xbf6aeea43ab7be657bb353caacbcfdbd085f708642d5668fdafca92530682ca2658442753 days 14 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x47169f78750be1e6ec2deb2974458ac4f87517140.0001 Ether
0x4344b503c3cdf7dabe5d8aa5347b60a99c0402d9bcebb7e0410b29540b07f364658124154 days 3 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x0659836869772cf479cfcedb659ce6099560b1e50.059012349620227576 Ether
0x297829832032b7df8396b0b342d44fbc462a193e94402a98f8b18a4a1f080d83657995754 days 8 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x1dff003e16e93823cdb91e20bfd1d31ad05b62240.002107583915008127 Ether
0x4f9c23b43a98f63e7f9359d6ed6f1e5dd2ea730c24b7df5c8811d44567cf7262657854454 days 13 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x53a39eef083c4a91e36145176cc9f52be29b72880.00002 Ether
0x4f9c23b43a98f63e7f9359d6ed6f1e5dd2ea730c24b7df5c8811d44567cf7262657854454 days 13 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x2f52362c266c1df356a2313f79e4be4e7de281cc0.00001 Ether
0x421430af307a72cc21ab045014bab2e04177968cfb134b2e14c01e9ea01225de657802554 days 15 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x11dcb85916423c46f70552ddb220e2583d2a830f0.810629593932339939 Ether
0x7821ed4987049670594c9988ebfa866ab457d2d54650231a98ae7bbb8189d85f657795054 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x070f3492cd778cfc3dbad6d25bfb3bcbb498298b1.382732749683856915 Ether
0x214a557dec2c129e0062f83f1a18c413cd2a4f513023a7bb1721076fdb358ee2657787754 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290xe5b81a1b5c457fb2687e5ed9eb5894eec22bc4740.092643382163695993 Ether
0xd151ddbfbe0f89a8e3290d1b590d75c799460f9316e34dcbb3fa6130b3bafe9f657778054 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x53a39eef083c4a91e36145176cc9f52be29b72880.00002 Ether
0xd151ddbfbe0f89a8e3290d1b590d75c799460f9316e34dcbb3fa6130b3bafe9f657778054 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x9c45a3d852a91ac06b42778524b255330e5deb310.00001 Ether
0x599ee8c5b78e363ca5214664c8722a4ceb9bc82072903b7ce6edacffd18de95c657777954 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x53a39eef083c4a91e36145176cc9f52be29b72880.00056 Ether
0x599ee8c5b78e363ca5214664c8722a4ceb9bc82072903b7ce6edacffd18de95c657777954 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x9c45a3d852a91ac06b42778524b255330e5deb310.00028 Ether
0xf5b42db9e71809d3f7084b713a5f5a8b5b9bdf3924c111196625ff0f6077d1e6657773254 days 16 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x0659836869772cf479cfcedb659ce6099560b1e50.001096401482211259 Ether
0xdd2fcfc92be74948934928b36d1731efe734322972e2aad516f351511a1af7cc657756054 days 17 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290xef764bac8a438e7e498c2e5fccf0f174c3e3f8db0.109640148221125988 Ether
0x932b5e9cce1c2b8668217fb3a5e982703bcacb9653f42c32f8f9a6cc9b5a76c7657752754 days 17 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x1dff003e16e93823cdb91e20bfd1d31ad05b62240.54820074110562994 Ether
0xcada23ba566da837374e3d88db580fef36716aa33af4c6caaa2883a2fee37e1b657752554 days 17 hrs ago0x26936b691450a838b6df4965b58f2c53a9139d290x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.219280296442251976 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: FairBankFomo
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.25;

/**
 *
 *  https://fairdapp.com/bankfomo/  https://fairdapp.com/bankfomo/   https://fairdapp.com/bankfomo/
 *   
 *       _______     _       ______  _______ ______ ______  
 *      (_______)   (_)     (______)(_______|_____ (_____ \ 
 *       _____ _____ _  ____ _     _ _______ _____) )____) )
 *      |  ___|____ | |/ ___) |   | |  ___  |  ____/  ____/ 
 *      | |   / ___ | | |   | |__/ /| |   | | |    | |      
 *      |_|   \_____|_|_|   |_____/ |_|   |_|_|    |_|      
 *                                                     
 *               ______              _                              
 *              (____  \            | |                             
 *               ____)  )_____ ____ | |  _                          
 *              |  __  ((____ |  _ \| |_/ )                         
 *              | |__)  ) ___ | | | |  _ (                          
 *              |______/\_____|_| |_|_| \_)                         
 *                                                    
 * 				  _______                
 * 				 (_______)               
 * 				  _____ ___  ____   ___  
 * 				 |  ___) _ \|    \ / _ \ 
 * 				 | |  | |_| | | | | |_| |
 * 				 |_|   \___/|_|_|_|\___/
 *   
 *  Warning:
 *     
 *  FairDAPP – Bank Fomo is a re-release of the original game FairDAPP - Bank Simulator.
 *  This version ties into the FairExchange and has about 3x more aggressive scaling. 
 *  This contract may only be used internally for study purposes and all could be 
 *  lost by sending anything to this contract address. 
 *  All users are prohibited to interact with this contract if this 
 *  contract is in conflict with user’s local regulations or laws.
 * 
 *  -Original Contract built by the FairDAPP Community
 *  -Code Audited by 8Bit & Etherguy (formula calculations are excluded from the audit)
 *  
 *  -The resetTime and reduceTime functions have an on and off switch which the developer owner can control.
 *  -No one can change anything else once the contract has been deployed.
 *  
 *  -The contract is fully solvent in any event (assuming there are no bugs).
 *  -ie. The contract will always payout what it owes. 
 *
**/


contract ERC721{
    
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function approve(address _to, uint256 _tokenId) public;
    function takeOwnership(uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract FairBankFomo is ERC721{
    using SafeMath for uint256;
       
    address public developerAddr = 0xbC817A495f0114755Da5305c5AA84fc5ca7ebaBd;
    address public fairProfitContract = 0x53a39eeF083c4A91e36145176Cc9f52bE29B7288;

    string public name = "FairDAPP - Bank Simulator - Fomo";
    string public symbol = "FBankFomo";
    
    uint256 public stageDuration = 3600;
    uint256 public standardProtectRatio = 57;
    bool public modifyCountdown = false;
    uint256 public startTime = 1539997200;
    uint256 public cardTime = 1539993600;
    
    uint256 public rId = 1;
    uint256 public sId = 1;
    
    mapping (uint256 => FBankdatasets.Round) public round;
    mapping (uint256 => mapping (uint256 => FBankdatasets.Stage)) public stage;
    
    mapping (address => bool) public player;
    mapping (address => uint256[]) public playerGoodsList;
    mapping (address => uint256[]) public playerWithdrawList;
    
    /**
     * Anti clone protection.
     * Do not clone this contract without permission even if you manage to break the conceal. 
     * The concealed code contains core calculations necessary for this contract to function, read line 1058. 
     * This contract can be licensed for a fee, contact us instead of cloning!
     */ 
    FairBankCompute constant private bankCompute = FairBankCompute(0xdd033Ff7e98792694F6b358DaEB065d4FF01Bd5A);
    
    FBankdatasets.Goods[] public goodsList;
    
    FBankdatasets.Card[6] public cardList;
    mapping (uint256 => address) public cardIndexToApproved;
    
    modifier isDeveloperAddr() {
        require(msg.sender == developerAddr, "Permission denied");
        _;
    }
    
    modifier startTimeVerify() {
        require(now >= startTime); 
        _;
    }
    
    modifier cardTimeVerify() {
        require(now >= cardTime); 
        _;
    }
    
    modifier modifyCountdownVerify() {
        require(modifyCountdown == true, "this feature is not turned on or has been turned off"); 
        require(now >= stage[rId][sId].start, "Can only use the addtime/reduce time functions when game has started");  
        _;
    }
     
    modifier senderVerify() {
        require (msg.sender == tx.origin, "sender does not meet the rules");
        if(!player[msg.sender])
            player[msg.sender] = true;
        _;
    }
    
    /**
     * Don't toy or spam the contract, it may raise the gas cost for everyone else.
     * The scientists will take anything below 0.001 ETH sent to the contract.
     * Also added antiwhale settings. 	 
     * Thank you for your donation.
     */
    modifier buyVerify() {
          
        if(msg.value < 1000000000000000){
            developerAddr.send(msg.value);
        }else{
            require(msg.value >= 1000000000000000, "minimum amount is 0.001 ether");
            
            if(sId < 25)
                require(tx.gasprice <= 25000000000);
                
            if(sId < 25)
                require(msg.value <= 10 ether);
         _;
        }
    }
    
    modifier withdrawVerify() {
        require(playerGoodsList[msg.sender].length > 0, "user has not purchased the product or has completed the withdrawal");
        _;
    }
    
    modifier stepSizeVerify(uint256 _stepSize) {
        require(_stepSize <= 1000000, "step size must not exceed 1000000");
        _;
    }
    
    constructor()
        public
    {
        round[rId].start = startTime;
        stage[rId][sId].start = startTime;
        uint256 i;
        while(i < cardList.length){
            cardList[i].playerAddress = fairProfitContract;
            cardList[i].amount = 1 ether; 
            i++;
        }
    }
    
    function openModifyCountdown()
        senderVerify()
        isDeveloperAddr()
        public
    {
        require(modifyCountdown == false, "Time service is already open");
        
        modifyCountdown = true;
        
    }
    
    function closeModifyCountdown()
        senderVerify()
        isDeveloperAddr()
        public
    {
        require(modifyCountdown == true, "Time service is already open");
        
        modifyCountdown = false;
        
    }
    
    function purchaseCard(uint256 _cId)
        cardTimeVerify()
        senderVerify()
        payable
        public
    {
        
        address _player = msg.sender;
        uint256 _amount = msg.value;
        uint256 _purchasePrice = cardList[_cId].amount.mul(110) / 100;
        
        require(
            cardList[_cId].playerAddress != address(0) 
            && cardList[_cId].playerAddress != _player 
            && _amount >= _purchasePrice, 
            "Failed purchase"
        );
        
        if(cardIndexToApproved[_cId] != address(0)){
            cardIndexToApproved[_cId].send(
                cardList[_cId].amount.mul(105) / 100
                );
            delete cardIndexToApproved[_cId];
        }else
            cardList[_cId].playerAddress.send(
                cardList[_cId].amount.mul(105) / 100
                );
        
        fairProfitContract.send(cardList[_cId].amount.mul(5) / 100);
        if(_amount > _purchasePrice)
            _player.send(_amount.sub(_purchasePrice));
            
        cardList[_cId].amount = _purchasePrice;
        cardList[_cId].playerAddress = _player;
        
    }
    
    /**
     * Fallback function to handle ethereum that was send straight to the contract
     * Unfortunately we cannot use a referral address this way.
     */
    function()
        startTimeVerify()
        senderVerify()
        buyVerify()
        payable
        public
    {
        buyAnalysis(100, standardProtectRatio);
    }

    function buy(uint256 _stepSize, uint256 _protectRatio)
        startTimeVerify()
        senderVerify()
        buyVerify()
        stepSizeVerify(_stepSize)
        public
        payable
    {
        buyAnalysis(
            _stepSize <= 0 ? 100 : _stepSize, 
            _protectRatio <= 100 ? _protectRatio : standardProtectRatio
            );
    }
    
    /**
     * Standard withdraw function.
     */
    function withdraw()
        startTimeVerify()
        senderVerify()
        withdrawVerify()
        public
    {
        
        address _player = msg.sender;
        uint256[] memory _playerGoodsList = playerGoodsList[_player];
        uint256 length = _playerGoodsList.length;
        uint256 _totalAmount;
        uint256 _amount;
        uint256 _withdrawSid;
        uint256 _reachAmount;
        bool _finish;
        uint256 i;
        
        delete playerGoodsList[_player];
        while(i < length){
            
            (_amount, _withdrawSid, _reachAmount, _finish) = getEarningsAmountByGoodsIndex(_playerGoodsList[i]);
            
            if(_finish == true){
                playerWithdrawList[_player].push(_playerGoodsList[i]);
            }else{
                goodsList[_playerGoodsList[i]].withdrawSid = _withdrawSid;
                goodsList[_playerGoodsList[i]].reachAmount = _reachAmount;
                playerGoodsList[_player].push(_playerGoodsList[i]);
            }
            
            _totalAmount = _totalAmount.add(_amount);
            i++;
        }
        _player.transfer(_totalAmount);
    }
     
     /**
     * Backup withdraw function in case gas is too high to use standard withdraw.
     */
    function withdrawByGid(uint256 _gId)
        startTimeVerify()
        senderVerify()
        withdrawVerify()
        public
    {
        address _player = msg.sender;
        uint256 _amount;
        uint256 _withdrawSid;
        uint256 _reachAmount;
        bool _finish;
        
        (_amount, _withdrawSid, _reachAmount, _finish) = getEarningsAmountByGoodsIndex(_gId);
            
        if(_finish == true){
            
            for(uint256 i = 0; i < playerGoodsList[_player].length; i++){
                if(playerGoodsList[_player][i] == _gId)
                    break;
            }
            require(i < playerGoodsList[_player].length, "gid is wrong");
            
            playerWithdrawList[_player].push(_gId);
            playerGoodsList[_player][i] = playerGoodsList[_player][playerGoodsList[_player].length - 1];
            playerGoodsList[_player].length--;
        }else{
            goodsList[_gId].withdrawSid = _withdrawSid;
            goodsList[_gId].reachAmount = _reachAmount;
        }
        
        _player.transfer(_amount);
    }
    
    function resetTime()
        modifyCountdownVerify()
        senderVerify()
        public
        payable
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _amount = msg.value;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _costAmount = _targetAmount.mul(20) / 100;
        
        if(_costAmount > 3 ether)
            _costAmount = 3 ether;
        require(_amount >= _costAmount, "Not enough price");
        
        stage[_rId][_sId].start = now;
        
        cardList[5].playerAddress.send(_costAmount / 2);
        developerAddr.send(_costAmount / 2);
        
        if(_amount > _costAmount)
            msg.sender.send(_amount.sub(_costAmount));
        
    }
    
    function reduceTime()
        modifyCountdownVerify()
        senderVerify()
        public
        payable
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _amount = msg.value;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ?
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _costAmount = _targetAmount.mul(30) / 100;
        
        if(_costAmount > 3 ether)
            _costAmount = 3 ether;
        require(_amount >= _costAmount, "Not enough price");
        
        stage[_rId][_sId].start = now - stageDuration + 900;
        
        cardList[5].playerAddress.send(_costAmount / 2);
        developerAddr.send(_costAmount / 2);
        
        if(_amount > _costAmount)
            msg.sender.send(_amount.sub(_costAmount));
        
    }
    
    /**
     * Core logic to analyse buy behaviour. 
     */
    function buyAnalysis(uint256 _stepSize, uint256 _protectRatio)
        private
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _stageTargetBalance = 
            stage[_rId][_sId].amount > 0 ? 
            _targetAmount.sub(stage[_rId][_sId].amount) : _targetAmount;
        
        if(now > stage[_rId][_sId].start.add(stageDuration) 
            && _targetAmount > stage[_rId][_sId].amount
        ){
            
            endRound(_rId, _sId);
            
            _rId = rId;
            _sId = sId;
            stage[_rId][_sId].start = now;
            
            _targetExpectedAmount = getStageTargetAmount(_sId);
            _targetAmount = 
                stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
                _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
            _stageTargetBalance = 
                stage[_rId][_sId].amount > 0 ? 
                _targetAmount.sub(stage[_rId][_sId].amount) : _targetAmount;
        }
        if(_stageTargetBalance > msg.value)
            buyDataRecord(
                _rId, 
                _sId, 
                _targetAmount, 
                msg.value, 
                _stepSize, 
                _protectRatio
                );
        else
            multiStake(
                msg.value, 
                _stepSize, 
                _protectRatio, 
                _targetAmount, 
                _stageTargetBalance
                );
        /* This is a backstop check to ensure that the contract will always be solvent.
        It would reject any stakes with a protection ratio that the contract may not be able to repay.
        This backstop should never be needed under current settings. */
        require(
            (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ) > 0, "data error"
        );    
        bankerFeeDataRecord(msg.value, _protectRatio);    
    }
    
    function multiStake(uint256 _amount, uint256 _stepSize, uint256 _protectRatio, uint256 _targetAmount, uint256 _stageTargetBalance)
        private
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _crossStageNum = 1;
        uint256 _protectTotalAmount;
        uint256 _dividendTotalAmount;
            
        while(true){

            if(_crossStageNum == 1){
                playerDataRecord(
                    _rId, 
                    _sId, 
                    _amount, 
                    _stageTargetBalance, 
                    _stepSize, 
                    _protectRatio, 
                    _crossStageNum
                    );
                round[_rId].amount = round[_rId].amount.add(_amount);
                round[_rId].protectAmount = round[_rId].protectAmount.add(
                    _amount.mul(_protectRatio.mul(88)) / 10000);    
            }
                
            buyStageDataRecord(
                _rId, 
                _sId, 
                _targetAmount, 
                _stageTargetBalance, 
                _sId.
                add(_stepSize), 
                _protectRatio
                );
            _dividendTotalAmount = _dividendTotalAmount.add(stage[_rId][_sId].dividendAmount);
            _protectTotalAmount = _protectTotalAmount.add(stage[_rId][_sId].protectAmount);
            
            _sId++;
            _amount = _amount.sub(_stageTargetBalance);
            _targetAmount = 
                stage[_rId][_sId].dividendAmount <= getStageTargetAmount(_sId) ? 
                getStageTargetAmount(_sId) : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
            _stageTargetBalance = _targetAmount;
            _crossStageNum++;
            if(_stageTargetBalance >= _amount){
                buyStageDataRecord(
                    _rId, 
                    _sId, 
                    _targetAmount, 
                    _amount, 
                    _sId.add(_stepSize), 
                    _protectRatio
                    );
                playerDataRecord(
                    _rId, 
                    _sId, 
                    0, 
                    _amount, 
                    _stepSize, 
                    _protectRatio, 
                    _crossStageNum
                    );
                    
                if(_targetAmount == _amount)
                    _sId++;
                    
                stage[_rId][_sId].start = now;
                sId = _sId;
                
                round[_rId].protectAmount = round[_rId].protectAmount.sub(_protectTotalAmount);
                round[_rId].dividendAmount = round[_rId].dividendAmount.add(_dividendTotalAmount);
                break;
            }
        }
    }
    
    /**
     * Records all data.
     */
    function buyDataRecord(uint256 _rId, uint256 _sId, uint256 _targetAmount, uint256 _amount, uint256 _stepSize, uint256 _protectRatio)
        private
    {
        uint256 _expectEndSid = _sId.add(_stepSize);
        uint256 _protectAmount = _amount.mul(_protectRatio.mul(88)) / 10000;
        
        round[_rId].amount = round[_rId].amount.add(_amount);
        round[_rId].protectAmount = round[_rId].protectAmount.add(_protectAmount);
        
        stage[_rId][_sId].amount = stage[_rId][_sId].amount.add(_amount);
        stage[_rId][_expectEndSid].protectAmount = stage[_rId][_expectEndSid].protectAmount.add(_protectAmount);
        stage[_rId][_expectEndSid].dividendAmount = 
            stage[_rId][_expectEndSid].dividendAmount.add(
                computeEarningsAmount(_sId, 
                _amount, 
                _targetAmount, 
                _expectEndSid, 
                100 - _protectRatio
                )
                );
                
        FBankdatasets.Goods memory _goods;
        _goods.rId = _rId;
        _goods.startSid = _sId;
        _goods.amount = _amount;
        _goods.endSid = _expectEndSid;
        _goods.protectRatio = _protectRatio;
        playerGoodsList[msg.sender].push(goodsList.push(_goods) - 1);
    }
    
    /**
     * Records the stage data.
     */
    function buyStageDataRecord(uint256 _rId, uint256 _sId, uint256 _targetAmount, uint256 _amount, uint256 _expectEndSid, uint256 _protectRatio)
        private
    {
        uint256 _protectAmount = _amount.mul(_protectRatio.mul(88)) / 10000;
        
        if(_targetAmount != _amount)
            stage[_rId][_sId].amount = stage[_rId][_sId].amount.add(_amount);
        stage[_rId][_expectEndSid].protectAmount = stage[_rId][_expectEndSid].protectAmount.add(_protectAmount);
        stage[_rId][_expectEndSid].dividendAmount = 
            stage[_rId][_expectEndSid].dividendAmount.add(
                computeEarningsAmount(
                    _sId, 
                    _amount, 
                    _targetAmount, 
                    _expectEndSid, 
                    100 - _protectRatio
                    )
                );
    }
    
    /**
     * Records the player data.
     */
    function playerDataRecord(uint256 _rId, uint256 _sId, uint256 _totalAmount, uint256 _stageBuyAmount, uint256 _stepSize, uint256 _protectRatio, uint256 _crossStageNum)
        private
    {    
        if(_crossStageNum <= 1){
            FBankdatasets.Goods memory _goods;
            _goods.rId = _rId;
            _goods.startSid = _sId;
            _goods.amount = _totalAmount;
            _goods.stepSize = _stepSize;
            _goods.protectRatio = _protectRatio;
            if(_crossStageNum == 1)
                _goods.startAmount = _stageBuyAmount;
            playerGoodsList[msg.sender].push(goodsList.push(_goods) - 1);
        }
        else{
            uint256 _goodsIndex = goodsList.length - 1;
            goodsList[_goodsIndex].endAmount = _stageBuyAmount;
            goodsList[_goodsIndex].endSid = _sId;
        }
        
    }
    
    function bankerFeeDataRecord(uint256 _amount, uint256 _protectRatio)
        private
    {
        round[rId].jackpotAmount = round[rId].jackpotAmount.add(_amount.mul(9).div(100));

        uint256 _cardAmount = _amount / 100;
        if(_protectRatio == 0)
            cardList[0].playerAddress.send(_cardAmount);
        else if(_protectRatio > 0 && _protectRatio < 57)
            cardList[1].playerAddress.send(_cardAmount);   
        else if(_protectRatio == 57)
            cardList[2].playerAddress.send(_cardAmount);   
        else if(_protectRatio > 57 && _protectRatio < 100)
            cardList[3].playerAddress.send(_cardAmount);   
        else if(_protectRatio == 100)
            cardList[4].playerAddress.send(_cardAmount);   
        
        fairProfitContract.send(_amount.div(50));
    }
    
    function endRound(uint256 _rId, uint256 _sId)
        private
    {
        round[_rId].end = now;
        round[_rId].ended = true;
        round[_rId].endSid = _sId;
        
        if(stage[_rId][_sId].amount > 0)
            round[_rId + 1].jackpotAmount = (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ).mul(20).div(100);
        else
            round[_rId + 1].jackpotAmount = (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            );
        
        round[_rId + 1].start = now;
        rId++;
        sId = 1;
    }
    
    function getStageTargetAmount(uint256 _sId)
        public
        view
        returns(uint256)
    {
        return bankCompute.getStageTargetAmount(_sId);
    }
    
    function computeEarningsAmount(uint256 _sId, uint256 _amount, uint256 _currentTargetAmount, uint256 _expectEndSid, uint256 _ratio)
        public
        view
        returns(uint256)
    {
        return bankCompute.computeEarningsAmount(_sId, _amount, _currentTargetAmount, _expectEndSid, _ratio);
    }
    
    function getEarningsAmountByGoodsIndex(uint256 _goodsIndex)
        public
        view
        returns(uint256, uint256, uint256, bool)
    {
        FBankdatasets.Goods memory _goods = goodsList[_goodsIndex];
        uint256 _sId = sId;
        uint256 _amount;
        uint256 _targetExpectedAmount;
        uint256 _targetAmount;
        if(_goods.stepSize == 0){
            if(round[_goods.rId].ended == true){
                if(round[_goods.rId].endSid > _goods.endSid){
                    _targetExpectedAmount = getStageTargetAmount(_goods.startSid);
                    _targetAmount = 
                        stage[_goods.rId][_goods.startSid].dividendAmount <= _targetExpectedAmount ? 
                        _targetExpectedAmount : stage[_goods.rId][_goods.startSid].dividendAmount;
                    _targetAmount = _targetAmount.mul(100) / 88;
                    _amount = computeEarningsAmount(
                        _goods.startSid, 
                        _goods.amount, 
                        _targetAmount, 
                        _goods.endSid, 
                        100 - _goods.protectRatio
                        );
                    
                }else
                    _amount = _goods.amount.mul(_goods.protectRatio.mul(88)) / 10000;
                    
                if(round[_goods.rId].endSid == _goods.startSid)
                    _amount = _amount.add(
                        _goods.amount.mul(
                            getRoundJackpot(_goods.rId)
                            ).div(stage[_goods.rId][_goods.startSid].amount)
                            );
                
                return (_amount, 0, 0, true);
            }else{
                if(_sId > _goods.endSid){
                    _targetExpectedAmount = getStageTargetAmount(_goods.startSid);
                    _targetAmount = 
                        stage[_goods.rId][_goods.startSid].dividendAmount <= _targetExpectedAmount ?
                        _targetExpectedAmount : stage[_goods.rId][_goods.startSid].dividendAmount;
                    _targetAmount = _targetAmount.mul(100) / 88;
                    _amount = computeEarningsAmount(
                        _goods.startSid, 
                        _goods.amount, 
                        _targetAmount, 
                        _goods.endSid, 
                        100 - _goods.protectRatio
                        );
                }else
                    return (0, 0, 0, false);
            }
            return (_amount, 0, 0, true);
            
        }else{
            
            uint256 _startSid = _goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid;
            uint256 _ratio = 100 - _goods.protectRatio;
            uint256 _reachAmount = _goods.reachAmount;
            if(round[_goods.rId].ended == true){
                
                while(true){
                    
                    if(_startSid - (_goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid) > 100){
                        return (_amount, _startSid, _reachAmount, false);
                    }
                    
                    if(round[_goods.rId].endSid > _startSid.add(_goods.stepSize)){
                        _targetExpectedAmount = getStageTargetAmount(_startSid);
                        _targetAmount = 
                            stage[_goods.rId][_startSid].dividendAmount <= _targetExpectedAmount ? 
                            _targetExpectedAmount : stage[_goods.rId][_startSid].dividendAmount;
                        _targetAmount = _targetAmount.mul(100) / 88;
                        if(_startSid == _goods.endSid){
                            _amount = _amount.add(
                                computeEarningsAmount(
                                    _startSid, 
                                    _goods.endAmount, 
                                    _targetAmount, 
                                    _startSid.add(_goods.stepSize), 
                                    _ratio
                                    )
                                );
                            return (_amount, _goods.endSid, 0, true);
                        }
                        _amount = _amount.add(
                            computeEarningsAmount(
                                _startSid, 
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount, 
                                _targetAmount, 
                                _startSid.add(_goods.stepSize), 
                                _ratio
                                )
                            );
                        _reachAmount = 
                            _reachAmount.add(
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount
                            );
                    }else{
                        
                        _amount = _amount.add(
                            (_goods.amount.sub(_reachAmount))
                            .mul(_goods.protectRatio.mul(88)) / 10000
                            );
                        
                        if(round[_goods.rId].endSid == _goods.endSid)
                            _amount = _amount.add(
                                _goods.endAmount.mul(getRoundJackpot(_goods.rId))
                                .div(stage[_goods.rId][_goods.endSid].amount)
                                );
                        
                        return (_amount, _goods.endSid, 0, true);
                    }
                    
                    _startSid++;
                }
                
            }else{
                while(true){
                    
                    if(_startSid - (_goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid) > 100){
                        return (_amount, _startSid, _reachAmount, false);
                    }
                    
                    if(_sId > _startSid.add(_goods.stepSize)){
                        _targetExpectedAmount = getStageTargetAmount(_startSid);
                        _targetAmount = 
                            stage[_goods.rId][_startSid].dividendAmount <= _targetExpectedAmount ? 
                            _targetExpectedAmount : stage[_goods.rId][_startSid].dividendAmount;
                        _targetAmount = _targetAmount.mul(100) / 88;
                        if(_startSid == _goods.endSid){
                            _amount = _amount.add(
                                computeEarningsAmount(
                                    _startSid, 
                                    _goods.endAmount, 
                                    _targetAmount, 
                                    _startSid.add(_goods.stepSize), 
                                    _ratio
                                    )
                                );
                            return (_amount, _goods.endSid, 0, true);
                        }
                        _amount = _amount.add(
                            computeEarningsAmount(
                                _startSid, 
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount, 
                                _targetAmount, 
                                _startSid.add(_goods.stepSize), 
                                _ratio
                                )
                            );
                        _reachAmount = 
                            _reachAmount.add(
                                _startSid == _goods.startSid ? 
                                _goods.startAmount : _targetAmount
                            );
                    }else    
                        return (_amount, _startSid, _reachAmount, false);
                    
                    _startSid++;
                }
            }
        }
    }
    
    function getRoundJackpot(uint256 _rId)
        public
        view
        returns(uint256)
    {
        return (
            (
                round[_rId].jackpotAmount
                .add(round[_rId].amount.mul(88) / 100))
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ).mul(80).div(100);
    }
    
    function getHeadInfo()
        public
        view
        returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256)
    {
        uint256 _targetExpectedAmount = getStageTargetAmount(sId);
        
        return
            (
                rId,
                sId,
                startTime,
                stage[rId][sId].start.add(stageDuration),
                stage[rId][sId].amount,
                (
                    stage[rId][sId].dividendAmount <= _targetExpectedAmount ? 
                    _targetExpectedAmount : stage[rId][sId].dividendAmount
                ).mul(100) / 88,
                round[rId].jackpotAmount.add(round[rId].amount.mul(88) / 100)
                .sub(round[rId].protectAmount)
                .sub(round[rId].dividendAmount)
            );
    }
    
    function getPlayerGoodList(address _player)
        public
        view
        returns(uint256[])
    {
        return playerGoodsList[_player];
    }

    function totalSupply() 
        public 
        view 
        returns (uint256 total)
    {
        return cardList.length;
    }
    
    function balanceOf(address _owner) 
        public 
        view 
        returns (uint256 balance)
    {
        uint256 _length = cardList.length;
        uint256 _count;
        for(uint256 i = 0; i < _length; i++){
            if(cardList[i].playerAddress == _owner)
                _count++;
        }
        
        return _count;
    }
    
    function ownerOf(uint256 _tokenId) 
        public 
        view 
        returns (address owner)
    {
        require(cardList.length > _tokenId, "tokenId error");
        owner = cardList[_tokenId].playerAddress;
        require(owner != address(0), "No owner");
    }
    
    function approve(address _to, uint256 _tokenId)
        senderVerify()
        public
    {
        require (player[_to], "Not a registered user");
        require (msg.sender == cardList[_tokenId].playerAddress, "The card does not belong to you");
        require (cardList.length > _tokenId, "tokenId error");
        require (cardIndexToApproved[_tokenId] == address(0), "Approved");
        
        cardIndexToApproved[_tokenId] = _to;
        
        emit Approval(msg.sender, _to, _tokenId);
    }
    
    function takeOwnership(uint256 _tokenId)
        senderVerify()
        public
    {
        address _newOwner = msg.sender;
        address _oldOwner = cardList[_tokenId].playerAddress;
        
        require(_newOwner != address(0), "Address error");
        require(_newOwner == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _newOwner;
        delete cardIndexToApproved[_tokenId];
        
        emit Transfer(_oldOwner, _newOwner, _tokenId);
    }
    
    function transfer(address _to, uint256 _tokenId) 
        senderVerify()
        public
    {
        require (msg.sender == cardList[_tokenId].playerAddress, "The card does not belong to you");
        require(_to != address(0), "Address error");
        require(_to == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _to;
        
        if(cardIndexToApproved[_tokenId] != address(0))
            delete cardIndexToApproved[_tokenId];
        
        emit Transfer(msg.sender, _to, _tokenId);
    }
    
    function transferFrom(address _from, address _to, uint256 _tokenId)
        senderVerify()
        public
    {
        require (_from == cardList[_tokenId].playerAddress, "Owner error");
        require(_to != address(0), "Address error");
        require(_to == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _to;
        delete cardIndexToApproved[_tokenId];
        
        emit Transfer(_from, _to, _tokenId);
    }
    
}

library FBankdatasets {
    
    struct Round {
        uint256 start;
        uint256 end;
        bool ended;
        uint256 endSid;
        uint256 amount;
        uint256 protectAmount;
        uint256 dividendAmount;
        uint256 jackpotAmount;
    }
    
    struct Stage {
        uint256 start;
        uint256 amount;
        uint256 protectAmount;
        uint256 dividendAmount;
    }
    
    struct Goods {
        uint256 rId;
        uint256 startSid;
        uint256 endSid;
        uint256 withdrawSid;
        uint256 amount;
        uint256 startAmount;
        uint256 endAmount;
        uint256 reachAmount;
        uint256 stepSize;
        uint256 protectRatio;
    }
    
    struct Card {
        address playerAddress;
        uint256 amount;
    }
}

/**
 * Anti clone protection.
 * Do not clone this contract without permission even if you manage to break the conceal. 
 * The concealed code contains core calculations necessary for this contract to function. 
 * This contract can be licensed for a fee, contact us instead of cloning!
 */ 
interface FairBankCompute {
    function getStageTargetAmount(uint256 _sId) external view returns(uint256);
    function computeEarningsAmount(uint256 _sId, uint256 _amount, uint256 _currentTargetAmount, uint256 _expectEndSid, uint256 _ratio) external view returns(uint256);
}

/**
 * @title SafeMath v0.1.9
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    
    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
    
    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }
    
    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }
    
    /**
     * @dev gives square root of given x.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y) 
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y) 
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }
    
    /**
     * @dev gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }
    
    /**
     * @dev x to the power of y 
     */
    function pwr(uint256 x, uint256 y)
        internal 
        pure 
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else 
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"}],"name":"getPlayerGoodList","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"playerWithdrawList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"goodsList","outputs":[{"name":"rId","type":"uint256"},{"name":"startSid","type":"uint256"},{"name":"endSid","type":"uint256"},{"name":"withdrawSid","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"startAmount","type":"uint256"},{"name":"endAmount","type":"uint256"},{"name":"reachAmount","type":"uint256"},{"name":"stepSize","type":"uint256"},{"name":"protectRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeModifyCountdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"developerAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"stage","outputs":[{"name":"start","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"protectAmount","type":"uint256"},{"name":"dividendAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round","outputs":[{"name":"start","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"endSid","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"protectAmount","type":"uint256"},{"name":"dividendAmount","type":"uint256"},{"name":"jackpotAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cardIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"player","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"standardProtectRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resetTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_goodsIndex","type":"uint256"}],"name":"getEarningsAmountByGoodsIndex","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sId","type":"uint256"},{"name":"_amount","type":"uint256"},{"name":"_currentTargetAmount","type":"uint256"},{"name":"_expectEndSid","type":"uint256"},{"name":"_ratio","type":"uint256"}],"name":"computeEarningsAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fairProfitContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rId","type":"uint256"}],"name":"getRoundJackpot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cId","type":"uint256"}],"name":"purchaseCard","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stageDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gId","type":"uint256"}],"name":"withdrawByGid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"modifyCountdown","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"playerGoodsList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cardTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHeadInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stepSize","type":"uint256"},{"name":"_protectRatio","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_sId","type":"uint256"}],"name":"getStageTargetAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cardList","outputs":[{"name":"playerAddress","type":"address"},{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"openModifyCountdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reduceTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60008054600160a060020a031990811673bc817a495f0114755da5305c5aa84fc5ca7ebabd17909155600180549091167353a39eef083c4a91e36145176cc9f52be29b728817905560c0604052602060808190527f4661697244415050202d2042616e6b2053696d756c61746f72202d20466f6d6f60a0908152620000889160029190620001bf565b506040805180820190915260098082527f4642616e6b466f6d6f00000000000000000000000000000000000000000000006020909201918252620000cf91600391620001bf565b50610e1060045560396005556006805460ff19169055635bca7e10600755635bca700060085560016009819055600a553480156200010c57600080fd5b50600754600980546000908152600b6020908152604080832085905592548252600c8152828220600a5483529052908120919091555b6006811015620001b857600154600160a060020a0316601182600681106200016657fe5b600202018054600160a060020a031916600160a060020a0392909216919091179055670de0b6b3a7640000601182600681106200019f57fe5b6002020160010181905550808060010191505062000142565b5062000264565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020257805160ff191683800117855562000232565b8280016001018555821562000232579182015b828111156200023257825182559160200191906001019062000215565b506200024092915062000244565b5090565b6200026191905b808211156200024057600081556001016200024b565b90565b6147f180620002746000396000f3006080604052600436106101ed5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461035e578063095ea7b3146103e8578063180392301461040c57806318160ddd1461047d57806323b872dd146104a457806323df93c1146104ce57806328d27f09146104f25780632d6ddfda1461055a57806333b6baf51461056f57806334aed7a0146105a057806334d5f37b146105e1578063394baa0b1461063a5780633ccfd60b146106525780634c54e1b514610667578063501976461461069c57806358761920146106b15780636352211e146106c657806365a114f1146106de578063678bbf24146106e657806370a082311461072657806378c9f9cf1461074757806378e979251461076b5780637c8edcfc1461078057806395d89b411461079557806398f04128146107aa578063a54447aa146107c2578063a9059cbb146107cd578063aafb088e146107f1578063b2e6ceeb14610806578063b604ed1b1461081e578063bed47ed814610836578063c5d3ce1e1461084b578063ce2b785414610860578063d1a392eb14610884578063d571dbac14610899578063d6febde8146108e6578063d9daa497146108f4578063d9f035aa1461090c578063ef8c2c5814610947578063f60436cd1461095c575b6007544210156101fc57600080fd5b333214610241576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff16151561027557336000908152600d60205260409020805460ff191660011790555b66038d7ea4c680003410156102b35760008054604051600160a060020a03909116913480156108fc02929091818181858888f193505050505061035c565b66038d7ea4c68000341015610312576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b6019600a54101561032f576405d21dba003a111561032f57600080fd5b6019600a54101561034f57678ac7230489e8000034111561034f57600080fd5b61035c6064600554610964565b005b34801561036a57600080fd5b50610373610c9d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ad578181015183820152602001610395565b50505050905090810190601f1680156103da5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103f457600080fd5b5061035c600160a060020a0360043516602435610d28565b34801561041857600080fd5b5061042d600160a060020a0360043516610fb7565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610469578181015183820152602001610451565b505050509050019250505060405180910390f35b34801561048957600080fd5b50610492611024565b60408051918252519081900360200190f35b3480156104b057600080fd5b5061035c600160a060020a036004358116906024351660443561102a565b3480156104da57600080fd5b50610492600160a060020a0360043516602435611278565b3480156104fe57600080fd5b5061050a6004356112a8565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b34801561056657600080fd5b5061035c61130a565b34801561057b57600080fd5b50610584611450565b60408051600160a060020a039092168252519081900360200190f35b3480156105ac57600080fd5b506105bb60043560243561145f565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105ed57600080fd5b506105f9600435611491565b604080519889526020890197909752941515878701526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561064657600080fd5b506105846004356114d8565b34801561065e57600080fd5b5061035c6114f3565b34801561067357600080fd5b50610688600160a060020a036004351661186f565b604080519115158252519081900360200190f35b3480156106a857600080fd5b50610492611884565b3480156106bd57600080fd5b5061049261188a565b3480156106d257600080fd5b50610584600435611890565b61035c61195e565b3480156106f257600080fd5b506106fe600435611cfa565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561073257600080fd5b50610492600160a060020a0360043516612480565b34801561075357600080fd5b506104926004356024356044356064356084356124d1565b34801561077757600080fd5b50610492612593565b34801561078c57600080fd5b50610584612599565b3480156107a157600080fd5b506103736125a8565b3480156107b657600080fd5b50610492600435612603565b61035c600435612654565b3480156107d957600080fd5b5061035c600160a060020a036004351660243561298e565b3480156107fd57600080fd5b50610492612bf3565b34801561081257600080fd5b5061035c600435612bf9565b34801561082a57600080fd5b5061035c600435612df0565b34801561084257600080fd5b5061049261316a565b34801561085757600080fd5b50610688613170565b34801561086c57600080fd5b50610492600160a060020a0360043516602435613179565b34801561089057600080fd5b50610492613194565b3480156108a557600080fd5b506108ae61319a565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61035c6004356024356132ee565b34801561090057600080fd5b50610492600435613505565b34801561091857600080fd5b506109246004356135af565b60408051600160a060020a03909316835260208301919091528051918290030190f35b34801561095357600080fd5b5061035c6135d8565b61035c61371d565b600954600a546000808061097784613505565b6000868152600c602090815260408083208884529091529020600301549093508310156109c0576000858152600c602090815260408083208784529091529020600301546109c2565b825b915060586109d783606463ffffffff613a2f16565b8115156109e057fe5b6000878152600c6020908152604080832089845290915281206001015492909104935010610a0e5781610a3c565b6000858152600c60209081526040808320878452909152902060010154610a3c90839063ffffffff613a6516565b6004546000878152600c60209081526040808320898452909152902054919250610a6c919063ffffffff613a7716565b42118015610a9557506000858152600c6020908152604080832087845290915290206001015482115b15610b9c57610aa48585613a86565b600954600a546000828152600c6020908152604080832084845290915290204290559095509350610ad484613505565b6000868152600c60209081526040808320888452909152902060030154909350831015610b1d576000858152600c60209081526040808320878452909152902060030154610b1f565b825b91506058610b3483606463ffffffff613a2f16565b811515610b3d57fe5b6000878152600c6020908152604080832089845290915281206001015492909104935010610b6b5781610b99565b6000858152600c60209081526040808320878452909152902060010154610b9990839063ffffffff613a6516565b90505b34811115610bb757610bb2858584348b8b613bd4565b610bc4565b610bc43488888585613f2e565b6000858152600b6020526040812060068101546005820154600490920154610c3592610c29918290606490610c0090605863ffffffff613a2f16565b811515610c0957fe5b60008d8152600b602052604090206007015491900463ffffffff613a7716565b9063ffffffff613a6516565b11610c8a576040805160e560020a62461bcd02815260206004820152600a60248201527f64617461206572726f7200000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c9434876141c2565b50505050505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b505050505081565b333214610d6d576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff161515610da157336000908152600d60205260409020805460ff191660011790555b600160a060020a0382166000908152600d602052604090205460ff161515610e13576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f742061207265676973746572656420757365720000000000000000000000604482015290519081900360640190fd5b60118160068110610e2057fe5b6002020154600160a060020a03163314610e84576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b60068110610edc576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601d6020526040902054600160a060020a031615610f49576040805160e560020a62461bcd02815260206004820152600860248201527f417070726f766564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601d60209081526040918290208054600160a060020a038616600160a060020a0319909116811790915582513381529182015280820183905290517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360600190a15050565b600160a060020a0381166000908152600e602090815260409182902080548351818402810184019094528084526060939283018282801561101757602002820191906000526020600020905b815481526020019060010190808311611003575b505050505090505b919050565b60065b90565b33321461106f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff1615156110a357336000908152600d60205260409020805460ff191660011790555b601181600681106110b057fe5b6002020154600160a060020a03848116911614611117576040805160e560020a62461bcd02815260206004820152600b60248201527f4f776e6572206572726f72000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611177576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601d6020526040902054600160a060020a038381169116146111e8576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81601182600681106111f657fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000838152601d602090815260409182902080549093169092558051868416815292851691830191909152818101839052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600f6020528160005260406000208181548110151561129357fe5b90600052602060002001600091509150505481565b60108054829081106112b657fe5b90600052602060002090600a0201600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015490508a565b33321461134f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff16151561138357336000908152600d60205260409020805460ff191660011790555b600054600160a060020a031633146113e5576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60065460ff161515600114611444576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6006805460ff19169055565b600054600160a060020a031681565b600c60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701549596949560ff9094169492939192909188565b601d60205260009081526040902054600160a060020a031681565b600060606000806000806000806000600754421015151561151357600080fd5b333214611558576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff16151561158c57336000908152600d60205260409020805460ff191660011790555b336000908152600e60205260408120541161163d576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b336000818152600e60209081526040918290208054835181840281018401909452808452939c5091929083018282801561169657602002820191906000526020600020905b815481526020019060010190808311611682575b50508351600160a060020a038e166000908152600e60205260408120959d50909b506116c794935091506146f29050565b8681101561182d576116ef88828151811015156116e057fe5b90602001906020020151611cfa565b929750909550935091506001821515141561174d57600160a060020a0389166000908152600f60205260409020885189908390811061172a57fe5b602090810290910181015182546001810184556000938452919092200155611813565b836010898381518110151561175e57fe5b602090810290910101518154811061177257fe5b90600052602060002090600a020160030181905550826010898381518110151561179857fe5b60209081029091010151815481106117ac57fe5b90600052602060002090600a020160070181905550600e60008a600160a060020a0316600160a060020a0316815260200190815260200160002088828151811015156117f457fe5b6020908102909101810151825460018101845560009384529190922001555b611823868663ffffffff613a7716565b95506001016116c7565b604051600160a060020a038a169087156108fc029088906000818181858888f19350505050158015611863573d6000803e3d6000fd5b50505050505050505050565b600d6020526000908152604090205460ff1681565b60095481565b60055481565b6000600682106118ea576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b601182600681106118f757fe5b6002020154600160a060020a0316905080151561101f576040805160e560020a62461bcd02815260206004820152600860248201527f4e6f206f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6006546000908190819081908190819060ff1615156001146119f0576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b6009546000908152600c60209081526040808320600a548452909152902054421015611ab3576040805160e560020a62461bcd028152602060048201526044602482018190527f43616e206f6e6c7920757365207468652061646474696d652f72656475636520908201527f74696d652066756e6374696f6e73207768656e2067616d65206861732073746160648201527f7274656400000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b333214611af8576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff161515611b2c57336000908152600d60205260409020805460ff191660011790555b6009549550600a549450349350611b4285613505565b6000878152600c60209081526040808320898452909152902060030154909350831015611b8b576000868152600c60209081526040808320888452909152902060030154611b8d565b825b91506058611ba283606463ffffffff613a2f16565b811515611bab57fe5b0491506064611bc183601463ffffffff613a2f16565b811515611bca57fe5b0490506729a2241af62c0000811115611be857506729a2241af62c00005b80841015611c40576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b6000868152600c602090815260408083208884529091529020429055601160055b60029081029190910154604051600160a060020a0390911691830480156108fc02916000818181858888f1505060008054604051600160a060020a0390911694506002860480156108fc029450925090818181858888f193505050505080841115611cf257336108fc611cda868463ffffffff613a6516565b6040518115909202916000818181858888f150505050505b505050505050565b600080600080611d08614713565b600080600080600080600060108d815481101515611d2257fe5b90600052602060002090600a020161014060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820154815250509750600a549650876101000151600014156120445787516000908152600b602052604090206002015460ff16151560011415611f7b5760408089015189516000908152600b60205291909120600301541115611ea257611e048860200151613505565b88516000908152600c60209081526040808320828d01518452909152902060030154909550851015611e575787516000908152600c60209081526040808320828c01518452909152902060030154611e59565b845b93506058611e6e85606463ffffffff613a2f16565b811515611e7757fe5b049350611e9b88602001518960800151868b604001518c61012001516064036124d1565b9550611edf565b612710611ed2611ec160588b6101200151613a2f90919063ffffffff16565b60808b01519063ffffffff613a2f16565b811515611edb57fe5b0495505b60208089015189516000908152600b9092526040909120600301541415611f665787516000908152600c60209081526040808320828c015184529091529020600101548851611f6391611f5691611f4a90611f3990612603565b60808d01519063ffffffff613a2f16565b9063ffffffff61431216565b879063ffffffff613a7716565b95505b949a5060009950899850600197508a94612471565b876040015187111561203257611f948860200151613505565b88516000908152600c60209081526040808320828d01518452909152902060030154909550851015611fe75787516000908152600c60209081526040808320828c01518452909152902060030154611fe9565b845b93506058611ffe85606463ffffffff613a2f16565b81151561200757fe5b04935061202b88602001518960800151868b604001518c61012001516064036124d1565b9550611f66565b60009b508b9a508a9950899850612471565b60608801511561205857876060015161205e565b87602001515b61012089015160e08a01518a516000908152600b60205260409020600201549295506064919091039350915060ff1615156001141561231f575b606488606001516000146120b05788606001516120b6565b88602001515b840311156120d05785838260009b509b509b509b50612471565b6101008801516120e790849063ffffffff613a7716565b88516000908152600b602052604090206003015411156122325761210a83613505565b88516000908152600c602090815260408083208784529091529020600301549095508510156121575787516000908152600c60209081526040808320868452909152902060030154612159565b845b9350605861216e85606463ffffffff613a2f16565b81151561217757fe5b04935087604001518314156121cb576121b1611f56848a60c00151876121ab8d610100015189613a7790919063ffffffff16565b876124d1565b6040890151909c509a5060009950600198508b9550612471565b612202611f56848a6020015186146121e357866121e9565b8a60a001515b876121ab8d610100015189613a7790919063ffffffff16565b955061222b88602001518414612218578461221e565b8860a001515b829063ffffffff613a7716565b9050612314565b61228d61271061227561225460588c6101200151613a2f90919063ffffffff16565b60808c0151612269908663ffffffff613a6516565b9063ffffffff613a2f16565b81151561227e57fe5b8891900463ffffffff613a7716565b6040808a01518a516000908152600b602052919091206003015491975014156122fa5787516000908152600c60209081526040808320818c0151845290915290206001015488516121b191611f5691611f4a906122e990612603565b60c08d01519063ffffffff613a2f16565b858860400151600060018191509b509b509b509b50612471565b600190920191612098565b6064886060015160001461233757886060015161233d565b88602001515b840311156123575785838260009b509b509b509b50612471565b61010088015161236e90849063ffffffff613a7716565b8711156124545761237e83613505565b88516000908152600c602090815260408083208784529091529020600301549095508510156123cb5787516000908152600c602090815260408083208684529091529020600301546123cd565b845b935060586123e285606463ffffffff613a2f16565b8115156123eb57fe5b049350876040015183141561241f576121b1611f56848a60c00151876121ab8d610100015189613a7790919063ffffffff16565b612437611f56848a6020015186146121e357866121e9565b955061244d88602001518414612218578461221e565b9050612466565b85838260009b509b509b509b50612471565b60019092019161231f565b50505050505050509193509193565b6000600681805b828110156124c957600160a060020a038516601182600681106124a657fe5b6002020154600160a060020a031614156124c1576001909101905b600101612487565b509392505050565b604080517f78c9f9cf0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064810184905260848101839052905160009173dd033ff7e98792694f6b358daeb065d4ff01bd5a916378c9f9cf9160a48082019260209290919082900301818787803b15801561255d57600080fd5b505af1158015612571573d6000803e3d6000fd5b505050506040513d602081101561258757600080fd5b50519695505050505050565b60075481565b600154600160a060020a031681565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d205780601f10610cf557610100808354040283529160200191610d20565b6000818152600b602052604081206006810154600582015460049092015461264e92606492611f4a926050926122699291610c29919082908890610c0090605863ffffffff613a2f16565b92915050565b6000806000600854421015151561266a57600080fd5b3332146126af576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff1615156126e357336000908152600d60205260409020805460ff191660011790555b3392503491506064612713606e601187600681106126fd57fe5b6002020160010154613a2f90919063ffffffff16565b81151561271c57fe5b04905060006011856006811061272e57fe5b6002020154600160a060020a03161480159061276d5750600160a060020a0383166011856006811061275c57fe5b6002020154600160a060020a031614155b80156127795750808210155b15156127cf576040805160e560020a62461bcd02815260206004820152600f60248201527f4661696c65642070757263686173650000000000000000000000000000000000604482015290519081900360640190fd5b6000848152601d6020526040902054600160a060020a031615612861576000848152601d6020526040902054600160a060020a03166108fc606461281b6069601189600681106126fd57fe5b81151561282457fe5b049081150290604051600060405180830381858888f15050506000868152601d602052604090208054600160a060020a0319169055506128b89050565b6011846006811061286e57fe5b6002020154600160a060020a03166108fc60646128936069601189600681106126fd57fe5b81151561289c57fe5b049081150290604051600060405180830381858888f150505050505b600154600160a060020a03166108fc60646128db6005601189600681106126fd57fe5b8115156128e457fe5b049081150290604051600060405180830381858888f19350505050508082111561293d57600160a060020a0383166108fc612925848463ffffffff613a6516565b6040518115909202916000818181858888f150505050505b806011856006811061294b57fe5b60020201600101819055508260118560068110151561296657fe5b600202018054600160a060020a031916600160a060020a039290921691909117905550505050565b3332146129d3576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff161515612a0757336000908152600d60205260409020805460ff191660011790555b60118160068110612a1457fe5b6002020154600160a060020a03163314612a78576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b600160a060020a0382161515612ad8576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601d6020526040902054600160a060020a03838116911614612b49576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b8160118260068110612b5757fe5b600202018054600160a060020a031916600160a060020a039283161790556000828152601d60205260409020541615612ba7576000818152601d602052604090208054600160a060020a03191690555b60408051338152600160a060020a038416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60045481565b600080333214612c41576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff161515612c7557336000908152600d60205260409020805460ff191660011790555b33915060118360068110612c8557fe5b6002020154600160a060020a03908116915082161515612cef576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152601d6020526040902054600160a060020a03838116911614612d60576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b8160118460068110612d6e57fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000858152601d602090815260409182902080549093169092558051848416815292851691830191909152818101859052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b6000806000806000806007544210151515612e0a57600080fd5b333214612e4f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff161515612e8357336000908152600d60205260409020805460ff191660011790555b336000908152600e602052604081205411612f34576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b339550612f4087611cfa565b92975090955093509150600182151514156130df575060005b600160a060020a0386166000908152600e6020526040902054811015612fbe57600160a060020a0386166000908152600e60205260409020805488919083908110612fa057fe5b90600052602060002001541415612fb657612fbe565b600101612f59565b600160a060020a0386166000908152600e6020526040902054811061302d576040805160e560020a62461bcd02815260206004820152600c60248201527f6769642069732077726f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000818152600f602090815260408083208054600181018255908452828420018b9055928252600e9052208054600019810190811061307257fe5b6000918252602080832090910154600160a060020a0389168352600e90915260409091208054839081106130a257fe5b6000918252602080832090910192909255600160a060020a0388168152600e909152604090208054906130d9906000198301614767565b5061312a565b836010888154811015156130ef57fe5b90600052602060002090600a0201600301819055508260108881548110151561311457fe5b90600052602060002090600a0201600701819055505b604051600160a060020a0387169086156108fc029087906000818181858888f19350505050158015613160573d6000803e3d6000fd5b5050505050505050565b600a5481565b60065460ff1681565b600e6020528160005260406000208181548110151561129357fe5b60085481565b6000806000806000806000806131b1600a54613505565b600954600a546007546004546000848152600c602090815260408083208684529091529020549495509293919290916131ef9163ffffffff613a7716565b6009546000908152600c60209081526040808320600a5484529091529020600181015460039091015460589061325d90606490891015613250576009546000908152600c60209081526040808320600a548452909152902060030154612269565b889063ffffffff613a2f16565b81151561326657fe5b6009546000908152600b602052604090206006810154600582015460049092015493909204926132d79291610c299182906064906132ab90605863ffffffff613a2f16565b8115156132b457fe5b6009546000908152600b602052604090206007015491900463ffffffff613a7716565b959e949d50929b5090995097509550909350915050565b6007544210156132fd57600080fd5b333214613342576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff16151561337657336000908152600d60205260409020805460ff191660011790555b66038d7ea4c680003410156133b45760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050613501565b66038d7ea4c68000341015613413576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b6019600a541015613430576405d21dba003a111561343057600080fd5b6019600a54101561345057678ac7230489e8000034111561345057600080fd5b81620f42408111156134d2576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6134ff60008411156134e457836134e7565b60645b60648411156134f8576005546134fa565b835b610964565b505b5050565b600073dd033ff7e98792694f6b358daeb065d4ff01bd5a600160a060020a031663d9daa497836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561357d57600080fd5b505af1158015613591573d6000803e3d6000fd5b505050506040513d60208110156135a757600080fd5b505192915050565b601181600681106135bc57fe5b600202018054600190910154600160a060020a03909116915082565b33321461361d576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff16151561365157336000908152600d60205260409020805460ff191660011790555b600054600160a060020a031633146136b3576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60065460ff161561370e576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6006805460ff19166001179055565b6006546000908190819081908190819060ff1615156001146137af576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b6009546000908152600c60209081526040808320600a548452909152902054421015613872576040805160e560020a62461bcd028152602060048201526044602482018190527f43616e206f6e6c7920757365207468652061646474696d652f72656475636520908201527f74696d652066756e6374696f6e73207768656e2067616d65206861732073746160648201527f7274656400000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b3332146138b7576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206147a6833981519152604482015290519081900360640190fd5b336000908152600d602052604090205460ff1615156138eb57336000908152600d60205260409020805460ff191660011790555b6009549550600a54945034935061390185613505565b6000878152600c6020908152604080832089845290915290206003015490935083101561394a576000868152600c6020908152604080832088845290915290206003015461394c565b825b9150605861396183606463ffffffff613a2f16565b81151561396a57fe5b049150606461398083601e63ffffffff613a2f16565b81151561398957fe5b0490506729a2241af62c00008111156139a757506729a2241af62c00005b808410156139ff576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b6004546000878152600c602090815260408083208984529091529020429190910361038401905560116005611c61565b600080831515613a425760009150613a5e565b50828202828482811515613a5257fe5b0414613a5a57fe5b8091505b5092915050565b600082821115613a7157fe5b50900390565b600082820183811015613a5a57fe5b6000828152600b602090815260408083204260018083019190915560028201805460ff1916821790556003909101859055600c8352818420858552909252822001541115613b34576000828152600b6020526040902060068101546005820154600490920154613b1992606492611f4a926014926122699291610c29919082908890610c0090605863ffffffff613a2f16565b600183016000908152600b6020526040902060070155613bb0565b6000828152600b6020526040902060068101546005820154600490920154613b9992610c29918290606490613b7090605863ffffffff613a2f16565b811515613b7957fe5b6000898152600b602052604090206007015491900463ffffffff613a7716565b600183016000908152600b60205260409020600701555b5060019081016000908152600b602052604090204290556009805482019055600a55565b600080613bdf614713565b613bef888663ffffffff613a7716565b9250612710613c0861325086605863ffffffff613a2f16565b811515613c1157fe5b60008b8152600b60205260409020600401549190049250613c38908763ffffffff613a7716565b60008a8152600b60205260409020600481019190915560050154613c62908363ffffffff613a7716565b60008a8152600b6020908152604080832060050193909355600c81528282208b835290522060010154613c9b908763ffffffff613a7716565b60008a8152600c602090815260408083208c8452909152808220600101929092558481522060020154613cce9083613a77565b60008a8152600c60209081526040808320878452909152902060020155613d28613cff89888a8760648a90036124d1565b60008b8152600c602090815260408083208884529091529020600301549063ffffffff613a7716565b60008a8152600c602090815260408083208784528252808320600301939093559a8352828b01998a52608083019788528282019485526101208301958652338152600e8b5290812060108054600181810183559184528451600a82027f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6728101919091559b517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6738d015595517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6748c015560608401517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6758c015597517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6768b015560a08301517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6778b015560c08301517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6788b015560e08301517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6798b0155610100909201517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67a8a015593517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67b9098019790975550855493840186559481529490942001919091555050565b600954600a5460016000805b8260011415613fe957613f5285858c898d8d89614346565b6000858152600b6020526040902060040154613f74908b63ffffffff613a7716565b6000868152600b6020526040902060040155613fd6612710613fad613fa08b605863ffffffff613a2f16565b8d9063ffffffff613a2f16565b811515613fb657fe5b6000888152600b602052604090206005015491900463ffffffff613a7716565b6000868152600b60205260409020600501555b61400685858989614000838f63ffffffff613a7716565b8d6145be565b6000858152600c6020908152604080832087845290915290206003015461403490829063ffffffff613a7716565b6000868152600c6020908152604080832088845290915290206002015490915061406590839063ffffffff613a7716565b600190940193915061407d8a8763ffffffff613a6516565b995061408884613505565b6000868152600c6020908152604080832088845290915290206003015411156140cd576000858152600c602090815260408083208784529091529020600301546140d6565b6140d684613505565b965060586140eb88606463ffffffff613a2f16565b8115156140f457fe5b0496508695506001909201918986106141bd5761411e8585898d614000838f63ffffffff613a7716565b61412e858560008d8d8d89614346565b8987141561413d576001909301925b6000858152600c602090815260408083208784528252808320429055600a879055878352600b90915290206005015461417c908363ffffffff613a6516565b6000868152600b602052604090206005810191909155600601546141a6908263ffffffff613a7716565b6000868152600b6020526040902060060155611863565b613f3a565b60006141fe6141dd6064611f4a86600963ffffffff613a2f16565b6009546000908152600b60205260409020600701549063ffffffff613a7716565b6009546000908152600b6020526040902060070155506064820481151561425557601160005b6002020154604051600160a060020a039091169082156108fc029083906000818181858888f19350505050506142d6565b6000821180156142655750603982105b156142735760116001614224565b81603914156142855760116002614224565b6039821180156142955750606482105b156142a35760116003614224565b81606414156142d657601954604051600160a060020a03909116906108fc8315029083906000818181858888f150505050505b600154600160a060020a03166108fc6142f685603263ffffffff61431216565b6040518115909202916000818181858888f15050505050505050565b60008080831161431e57fe5b828481151561432957fe5b049050828481151561433757fe5b068184020184141515613a5a57fe5b61434e614713565b60006001831161456157888252602082018890526080820187905261010082018590526101208201849052600183141561438a5760a082018690525b336000908152600e6020908152604080832060108054600181810183559186528751600a82027f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672810191909155888601517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae673820155938801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67485015560608801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67585015560808801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67685015560a08801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67785015560c08801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67885015560e08801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6798501556101008801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67a8501556101208801517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67b90940193909355815490810182559084529190922001556145b3565b506010805460001981019187918390811061457857fe5b90600052602060002090600a0201600601819055508760108281548110151561459d57fe5b90600052602060002090600a0201600201819055505b505050505050505050565b60006127106145e46145d784605863ffffffff613a2f16565b869063ffffffff613a2f16565b8115156145ed57fe5b049050848414614642576000878152600c60209081526040808320898452909152902060010154614624908563ffffffff613a7716565b6000888152600c602090815260408083208a84529091529020600101555b6000878152600c6020908152604080832086845290915290206002015461466f908263ffffffff613a7716565b6000888152600c602090815260408083208784529091529020600201556146c96146a08786888760648890036124d1565b6000898152600c602090815260408083208884529091529020600301549063ffffffff613a7716565b6000978852600c60209081526040808a20958a5294905292909620600301919091555050505050565b50805460008255906000526020600020908101906147109190614787565b50565b61014060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8154818355818111156134ff576000838152602090206134ff9181019083015b61102791905b808211156147a1576000815560010161478d565b5090560073656e64657220646f6573206e6f74206d656574207468652072756c65730000a165627a7a723058201ae128c157b14d781cd591015f61c45135599a7723710655ba9b2b850558cf4f0029

   Swarm Source:
bzzr://1ae128c157b14d781cd591015f61c45135599a7723710655ba9b2b850558cf4f

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.