Contract Overview
Balance: 43.794997051750035776 Ether
Transactions: 82 txns
 Latest 25 transactions from a total of 82 transactions

TxHash Age From To Value [TxFee]
0xee9dd240accd3bc5653a154f0c2b6b1059845cedce82207f8bbe9aaf4ddda971100 days 18 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.001028376
0x68a114bf620c8dbb889f71a1f589956dce85d4e37d391a933e1e9d26010db9c7100 days 18 hrs ago0xab73e01ba3a8009d682726b752c11b1e9722f059  IN   0x15e286e54c635d51ce6693b5c916db9880efd2801.25 Ether0.007853054
0xd01d03f853047cdd2efd2f382a9d29fb75ba5467af73b5590500c30fb78c3cca101 days 6 hrs ago0x27a802367b2fa41bb7a49f1276a29bd0718b4c18  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000087129
0xa21e1ad223037cb9b52eb69a01b1e4e94cafcc5736310ff6720294104ffa5d24101 days 6 hrs ago0x2597afe84661669e590016e51f8fb0059d1ad63e  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000083876
0x460d17da9b6f2d37e965056be105edd4d324e107cb159b373c745a5bb82dd55d101 days 6 hrs ago0x1ea7ce1282583308d6f2f2f7ba768dff7e047202  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000034309
0xf54e8c797470372311e524dc109f6ffca083f8eced203a5d8d2f6f08dae2148f101 days 9 hrs ago0x1ea7ce1282583308d6f2f2f7ba768dff7e047202  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000247522
0xe7bba9317faa2034f177638b9978008f2f03bf0c894bb4065eabbeac15300272101 days 9 hrs ago0xab73e01ba3a8009d682726b752c11b1e9722f059  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000510723
0x5fb7b72494f23c5c0e09542a3ebf6565b3c8cf1133360a18ce3ce1d81008815d101 days 9 hrs ago0x1ea7ce1282583308d6f2f2f7ba768dff7e047202  IN   0x15e286e54c635d51ce6693b5c916db9880efd2801 Ether0.000371348
0xaa6f32de24fa14e5ba00d29f810eea775f542fa7c7b79871812bf9a0547338a8101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000548944
0x9c4aae4ade6738a420757dbef2cb9a5dd5d9e04ee33366f227c71a4d2ee0c6e3101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.25 Ether0.004062672
0x2329e1bf0b21b77af79b3ee686cd35ced1de269366719f4ce51a0fb63bd45b0d101 days 10 hrs ago0xab73e01ba3a8009d682726b752c11b1e9722f059  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.001531935
0xa440b26d0967db81dfb14f510dcdda8764c61f6bd2d1a012538f37bb2c43c61d101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.2 Ether0.009423765
0x9a872b4286f91a00f4dccaa94a2a1dfcd42e03a7d90ba25b82036ef91b77c761101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2804.124 Ether0.00641186
0x3d2a22d84fd171874f6c890c76e8dee6337037836eef467e0fc0678104c9cfb5101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000514635
0x2b4d65b6223be36dad48c8845e21b902a780ea0799371c503553456fea9f6ba5101 days 10 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2803 Ether0.002793087
0x19130e2a200e0ca37da8f80323b84f5845d91ab5d3834a6e8600017d8b6cfee5101 days 10 hrs ago0xab73e01ba3a8009d682726b752c11b1e9722f059  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000830478
0x25529d6928732d0bb637903165cae894888e551c635a4b04d4e8839f446ec3cb101 days 11 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.6 Ether0.004062672
0xc3b5b045b2823e75bb2f8d151e1fd9eb995ccb5e19b5116f3b35be5808556164101 days 12 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.000308781
0x9b6efb13605c50aa739a3b405a41d4ba4bc0179b5d15296e87bf4506404d2541101 days 12 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2801.4 Ether0.003583755
0xca92f7dd91753d5ef5bb87bb21548c176263919b429da3d3f4f708e89c3582f3101 days 12 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0x15e286e54c635d51ce6693b5c916db9880efd2804 Ether0.005586174
0xeceb2500475255edc6d4205a7719ebe9b7306895b9f9e39187069743bc1c95c7101 days 12 hrs ago0x2edfbd1bd4bcab2a1fd24efd4724d1344c82bb36  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.8 Ether0.002540045
0x7e15c3629b55868fccfa19bec537246d87996d88a3efec3b1dfa7780958dd874101 days 17 hrs ago0x84eaa9a6a8e42696790289480314e2fca8f38581  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800 Ether0.00123729
0xb3afb21c06be836091507dc61ede017bf44103d1b915b67ecc6c1beda3d092b0101 days 17 hrs ago0x84eaa9a6a8e42696790289480314e2fca8f38581  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.2 Ether0.002540045
0x2f0031840a40eec01ebdfec92064da638cd175ceae4f09b0887d9f9e47f77f7e101 days 20 hrs ago0x1ea7ce1282583308d6f2f2f7ba768dff7e047202  IN   0x15e286e54c635d51ce6693b5c916db9880efd2800.4 Ether0.000387339
0x64ea3a7f9548337097749e55e8c561f988ca5cd1dde3232bdfea66c42429d0a3102 days 28 mins ago0x494952f01a30547d269aaf147e6226f940f5b041  IN   0x15e286e54c635d51ce6693b5c916db9880efd2802 Ether0.007620135
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 19 Internal Transactions

ParentTxHash Block Age From To Value
0xee9dd240accd3bc5653a154f0c2b6b1059845cedce82207f8bbe9aaf4ddda9714403219100 days 18 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.065299726932146003 Ether
0xd01d03f853047cdd2efd2f382a9d29fb75ba5467af73b5590500c30fb78c3cca4399854101 days 6 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x27a802367b2fa41bb7a49f1276a29bd0718b4c180.352920630615050051 Ether
0xa21e1ad223037cb9b52eb69a01b1e4e94cafcc5736310ff6720294104ffa5d244399853101 days 6 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x2597afe84661669e590016e51f8fb0059d1ad63e1.315501712008197093 Ether
0x460d17da9b6f2d37e965056be105edd4d324e107cb159b373c745a5bb82dd55d4399849101 days 6 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x1ea7ce1282583308d6f2f2f7ba768dff7e0472020.045124102394344721 Ether
0xe7bba9317faa2034f177638b9978008f2f03bf0c894bb4065eabbeac153002724399182101 days 9 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800xab73e01ba3a8009d682726b752c11b1e9722f0590.02536057504270535 Ether
0xaa6f32de24fa14e5ba00d29f810eea775f542fa7c7b79871812bf9a0547338a84398931101 days 10 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa61.408396501390725204 Ether
0x2329e1bf0b21b77af79b3ee686cd35ced1de269366719f4ce51a0fb63bd45b0d4398923101 days 10 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800xab73e01ba3a8009d682726b752c11b1e9722f0590.744227253320736601 Ether
0x3d2a22d84fd171874f6c890c76e8dee6337037836eef467e0fc0678104c9cfb54398893101 days 10 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.981093433937259244 Ether
0x19130e2a200e0ca37da8f80323b84f5845d91ab5d3834a6e8600017d8b6cfee54398882101 days 10 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800xab73e01ba3a8009d682726b752c11b1e9722f0590.662478857162206392 Ether
0xc3b5b045b2823e75bb2f8d151e1fd9eb995ccb5e19b5116f3b35be58085561644398432101 days 12 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa61.276952324577020448 Ether
0x22bb6146befc97a3698dc2f78aff3829a9ca6f824918fb18b6525f0c7a5adef94394342102 days 5 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.23116608500799343 Ether
0x93e1393bc8d4707cc7d4d20549804c400444f424527be774f674b52da31036cc4393634102 days 8 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.169499814845872484 Ether
0xe1ae90164fd6d36067aaa40008cc3b4a2631b104b4813585bd340c222991df5c4391746102 days 15 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.028625130230140233 Ether
0x91f2801ce9d3d295c34f3f632c736576d202c7941fdb2939ef8c4ae8a46d2a9e4391363102 days 17 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x6629c7199ecc6764383dfb98b229ac8c540fc76f0.098639551169522441 Ether
0x82e66adf221102857c98ae990cb7c41d18d437cdcfe56ff2c13502868a96830a4391280102 days 17 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.612129445493105715 Ether
0xedb69b502415dc93f14eafa1c6bfb312ec4d84d57963c96ed0c94c72ae9b3a774382059104 days 4 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.133087750087965297 Ether
0x7455e49175d789f01cfc8d4f4dcea25981150a10b4ba420cb4df60c165a5c4774382009104 days 4 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.247796170247510185 Ether
0x18a55def7f543ee260cae1041cc1078e8756a34200151e31c5c336925152b35d4348895109 days 7 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x27a802367b2fa41bb7a49f1276a29bd0718b4c185.473866549324454273 Ether
0x60a3a4dfc55d07d9b0a2f7a6a8787d6620e33d38ae8734cd63fa358fbe7c41274348869109 days 7 hrs ago0x15e286e54c635d51ce6693b5c916db9880efd2800x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.777337334463009059 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: OneHundredthMonkey
Compiler Version: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

////////////////////////
//ONE HUNDREDTH MONKEY//
////////////////////////

pragma solidity ^0.4.25;

library SafeMath {

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "the SafeMath multiplication check failed");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "the SafeMath division check failed");
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "the SafeMath subtraction check failed");
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "the SafeMath addition check failed");
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "the SafeMath modulo check failed");
        return a % b;
    }
}

contract OneHundredthMonkey {

    using SafeMath for uint256;

    ///////////
    //STORAGE//
    ///////////

    //ADMIN
    uint256 public adminBalance;
    address public adminBank;
    address[] public admins;
    mapping (address => bool) public isAdmin;

    //GLOBAL
    bool public gameActive = false;
    bool public earlyResolveACalled = false;
    bool public earlyResolveBCalled = false;
    uint256 public miniGamesPerRound = 100; //@dev lower for testing
    uint256 public miniGamesPerCycle = 1000; //@dev lower for testing
    uint256 public miniGamePotRate = 25; //25%
    uint256 public progressivePotRate = 25; //25%
    uint256 public roundDivRate = 20; //20%
    uint256 public miniGameDivRate = 10; //10%
    uint256 public referralRate = 10; //10%
    uint256 public miniGameAirdropRate = 5; //5%
    uint256 public adminFeeRate = 5; //5%
    uint256 public roundPotRate = 48; //48% of progressive pot
    uint256 internal precisionFactor = 18;
    uint256 public seedAreward = 25000000000000000;
    uint256 public seedBreward = 25000000000000000;
    mapping (uint256 => bool) public miniGameSeedAawarded;
    mapping (uint256 => bool) public miniGameSeedBawarded;

    //RNG
    uint256 internal RNGblockDelay = 1;
    uint256 public salt = 0; //@dev change to internal after testing
    bytes32 public hashA; //@dev change to internal after testing
    bytes32 public hashB; //@dev change to internal after testing

    //MINIGAME TRACKING
    bool public miniGameProcessing;
    uint256 public miniGameCount;
    uint256 public miniGameProcessingBegun;
    mapping (uint256 => bool) public miniGamePrizeClaimed;
    mapping (uint256 => bool) public miniGameAirdropClaimed;
    mapping (uint256 => uint256) public miniGameStartTime;
    mapping (uint256 => uint256) public miniGameEndTime;
    mapping (uint256 => uint256) public miniGameTokens;
    mapping (uint256 => uint256) public miniGameTokensLeft;
    mapping (uint256 => uint256) public miniGameTokensActive;
    mapping (uint256 => uint256) public miniGameTokenRangeMin;
    mapping (uint256 => uint256) public miniGameTokenRangeMax;
    mapping (uint256 => uint256) public miniGamePrizeNumber;
    mapping (uint256 => uint256) public miniGameAirdropNumber;
    mapping (uint256 => uint256) public miniGamePrizePot;
    mapping (uint256 => uint256) public miniGameAirdropPot;
    mapping (uint256 => uint256) public miniGameDivs;
    mapping (uint256 => uint256) public miniGameDivsClaimed;
    mapping (uint256 => address) public miniGamePrizeWinner;
    mapping (uint256 => address) public miniGameAirdropWinner;

    //ROUND TRACKING
    uint256 public roundCount;
    mapping (uint256 => bool) public roundPrizeClaimed;
    mapping (uint256 => bool) public roundPrizeTokenRangeIdentified;
    mapping (uint256 => uint256) public roundStartTime;
    mapping (uint256 => uint256) public roundEndTime;
    mapping (uint256 => uint256) public roundTokens;
    mapping (uint256 => uint256) public roundTokensActive;
    mapping (uint256 => uint256) public roundTokenRangeMin;
    mapping (uint256 => uint256) public roundTokenRangeMax;
    mapping (uint256 => uint256) public roundPrizeNumber;
    mapping (uint256 => uint256) public roundPrizePot;
    mapping (uint256 => uint256) public roundDivs;
    mapping (uint256 => uint256) public roundDivsClaimed;
    mapping (uint256 => uint256) public roundPrizeInMinigame;
    mapping (uint256 => address) public roundPrizeWinner;

    //CYCLE TRACKING
    bool public cycleOver = false;
    bool public cylcePrizeClaimed;
    bool public cyclePrizeTokenRangeIdentified;
    uint256 public totalVolume;
    uint256 public totalBuys;
    uint256 public tokenSupply;
    uint256 public cycleActiveTokens;
    uint256 public cycleCount;
    uint256 public cycleEnded;
    uint256 public cycleProgressivePot;
    uint256 public cyclePrizeWinningNumber;
    uint256 public cyclePrizeInMinigame;
    uint256 public cyclePrizeInRound;
    uint256 public cycleStartTime;
    address public cyclePrizeWinner;

    //TOKEN TRACKING
    uint256 public tokenPrice = 0.001 ether;
    uint256 public tokenPriceIncrement = 0.0005 ether;
    uint256 public minTokensPerMiniGame = 10000; //between 1x and 2x this amount of tokens generated each minigame

    //USER TRACKING PUBLIC
    mapping (address => uint256) public userTokens;
    mapping (address => uint256) public userBalance;
    mapping (address => mapping (uint256 => uint256)) public userMiniGameTokens;
    mapping (address => mapping (uint256 => uint256)) public userRoundTokens;

    //USER TRACKING INTERNAL
    //@dev change back to internal after testing
    address[] public uniqueAddress;
    mapping (address => bool) public knownUsers;
    mapping (address => bool) public userCycleChecked;
    mapping (address => uint256) public userLastMiniGameInteractedWith;
    mapping (address => uint256) public userLastRoundInteractedWith;
    mapping (address => uint256) public userLastMiniGameChecked;
    mapping (address => uint256) public userLastRoundChecked;
    mapping (address => mapping (uint256 => uint256)) public userShareMiniGame;
    mapping (address => mapping (uint256 => uint256)) public userDivsMiniGameTotal;
    mapping (address => mapping (uint256 => uint256)) public userDivsMiniGameClaimed;
    mapping (address => mapping (uint256 => uint256)) public userDivsMiniGameUnclaimed;
    mapping (address => mapping (uint256 => uint256)) public userShareRound;
    mapping (address => mapping (uint256 => uint256)) public userDivsRoundTotal;
    mapping (address => mapping (uint256 => uint256)) public userDivsRoundClaimed;
    mapping (address => mapping (uint256 => uint256)) public userDivsRoundUnclaimed;
    mapping (address => mapping (uint256 => uint256[])) public userMiniGameTokensMin;
    mapping (address => mapping (uint256 => uint256[])) public userMiniGameTokensMax;


    ///////////////
    //CONSTRUCTOR//
    ///////////////

    constructor(address _adminBank, address _adminTwo, address _adminThree) public {
        //set dev bank address and admins
        adminBank = _adminBank;
        admins.push(msg.sender);
        isAdmin[msg.sender] = true;
        admins.push(_adminTwo);
        isAdmin[_adminTwo] = true;
        admins.push(_adminThree);
        isAdmin[_adminThree] = true;
    }


    /////////////
    //MODIFIERS//
    /////////////

    modifier onlyAdmins() {
        require (isAdmin[msg.sender] == true, "you must be an admin");
        _;
    }

    modifier onlyHumans() {
        require (msg.sender == tx.origin || msg.sender == adminBank, "only approved contracts allowed");
        _;
      }

    modifier gameOpen() {
        require (gameActive == true, "the game must be open");
        if (miniGameProcessing == true) {
            require (block.number > miniGameProcessingBegun + RNGblockDelay, "the round is still processing. try again soon");
        }
        _;
    }


    //////////
    //EVENTS//
    //////////

    event adminWithdrew(
        uint256 _amount,
        address indexed _caller,
        string _message
    );

    event cycleStarted(
        address indexed _caller,
        string _message
    );

    event adminAdded(
        address indexed _caller,
        address indexed _newAdmin,
        string _message
    );

    event resolvedEarly(
        address indexed _caller,
        uint256 _pot,
        string _message
    );

    event processingRestarted(
        address indexed _caller,
        string _message
    );

    event contractDestroyed(
        address indexed _caller,
        uint256 _balance,
        string _message
    );

    event userBought(
        address indexed _user,
        uint256 _tokensBought,
        uint256 indexed _miniGameID,
        string _message
    );

    event userReinvested(
        address indexed _user,
        uint256 _amount,
        string _message
    );

    event userWithdrew(
        address indexed _user,
        uint256 _amount,
        string _message
    );

    event processingStarted(
        address indexed _caller,
        uint256 indexed _miniGameID,
        uint256 _blockNumber,
        string _message
    );

    event processingFinished(
        address indexed _caller,
        uint256 indexed _miniGameID,
        uint256 _blockNumber,
        string _message
    );

    event newMinigameStarted(
        uint256 indexed _miniGameID,
        uint256 _newTokens,
        string _message
    );

    event miniGamePrizeAwarded(
        uint256 indexed _miniGameID,
        uint256 _winningNumber,
        uint256 _prize,
        string _message
    );

    event miniGameAirdropAwarded(
        uint256 indexed _miniGameID,
        uint256 _winningNumber,
        uint256 _prize,
        string _message
    );

    event roundPrizeAwarded(
        uint256 indexed _roundID,
        uint256 _winningNumber,
        uint256 _prize,
        string _message
    );

    event cyclePrizeAwarded(
        uint256 _winningNumber,
        uint256 _prize,
        string _message
    );


    ///////////////////
    //ADMIN FUNCTIONS//
    ///////////////////

    function adminWithdraw() external onlyAdmins() onlyHumans(){
        uint256 balance = adminBalance;
        adminBalance = 0;
        adminBank.transfer(balance);

        emit adminWithdrew(balance, msg.sender, "an admin just withdrew");
    }

    function startCycle() external onlyAdmins() onlyHumans() {
        require (gameActive == false && cycleCount == 0, "the cycle has already been started");

        gameActive = true;
        cycleStart();
        roundStart();
        miniGameStart();

        emit cycleStarted(msg.sender, "a new cycle just started");

    }

    //this function begins resolving the round in the event that the game has stalled
    //can only be called once. can be restarted with restartMiniGame if 256 blocks pass
    function earlyResolveA() external onlyAdmins() onlyHumans() gameOpen() {
        require (now > miniGameStartTime[miniGameCount] + 604800 && miniGameProcessing == false, "earlyResolveA cannot be called yet"); //1 week
        require (miniGamePrizePot[miniGameCount].sub(seedAreward).sub(seedBreward) >= 0);

        gameActive = false;
        earlyResolveACalled = true;
        generateSeedA();
    }

    //this function comlpetes the resolution and ends the game
    function earlyResolveB() external onlyAdmins() onlyHumans() {
        require (earlyResolveACalled == true && earlyResolveBCalled == false && miniGameProcessing == true && block.number > miniGameProcessingBegun + RNGblockDelay, "earlyResolveB cannot be called yet");

        earlyResolveBCalled = true;
        resolveCycle();

        emit resolvedEarly(msg.sender, cycleProgressivePot, "the cycle was resolved early");
    }

    //resets the first seed in case the processing is not completed within 256 blocks
    function restartMiniGame() external onlyAdmins() onlyHumans() {
        require (miniGameProcessing == true && block.number > miniGameProcessingBegun + 256, "restartMiniGame cannot be called yet");

        generateSeedA();

        emit processingRestarted(msg.sender, "mini-game processing was restarted");
    }

    //admins can close the contract no sooner than 90 days after a full cycle completes
    //users need to withdraw funds before this date or risk losing them
    function zeroOut() external onlyAdmins() onlyHumans() {
        require (now >= cycleEnded + 90 days && cycleOver == true, "too early to close the contract");

        //event emited before selfdestruct
        emit contractDestroyed(msg.sender, address(this).balance, "contract destroyed");

        selfdestruct(adminBank);
      }


    //////////////////
    //USER FUNCTIONS//
    //////////////////

    function () external payable onlyHumans() gameOpen() {
        //funds sent directly to contract will trigger buy
        //no refferal on fallback
        buyInternal(msg.value, 0x0);
    }

    function buy(address _referral) public payable onlyHumans() gameOpen() {
        buyInternal(msg.value, _referral);
    }

    function reinvest(uint256 _amount, address _referral) external onlyHumans() gameOpen() {
        //update userBalance at beginning of function in case user has new funds to reinvest
        updateUserBalance(msg.sender);

        require (_amount <= userBalance[msg.sender], "insufficient balance");
        require (_amount >= tokenPrice, "you must buy at least one token");

        //take funds from user persistent storage and buy
        userBalance[msg.sender] = userBalance[msg.sender].sub(_amount);

        buyInternal(_amount, _referral);

        emit userReinvested(msg.sender, _amount, "a user reinvested");
    }

    function withdraw() external onlyHumans() {
        //update userBalance at beginning of function in case user has new funds to reinvest
        updateUserBalance(msg.sender);

        require (userBalance[msg.sender] > 0, "no balance to withdraw");
        require (userBalance[msg.sender] <= address(this).balance, "you cannot withdraw more than the contract holds");

        //update user accounting and transfer
        uint256 toTransfer = userBalance[msg.sender];
        userBalance[msg.sender] = 0;
        msg.sender.transfer(toTransfer);

        emit userWithdrew(msg.sender, toTransfer, "a user withdrew");
    }


    //////////////////
    //VIEW FUNCTIONS//
    //////////////////

    //helper function to return contract balance
    function contractBalance() external view returns(uint256 _contractBalance) {
        return address(this).balance;
    }

    //check for user divs available
    function checkUserDivsAvailable(address _user) external view returns(uint256 _userDivsAvailable) {
        return userBalance[_user] + checkDivsMgView(_user) + checkDivsRndView(_user) + checkPrizesView(_user);
    }

    //user chance of winning minigame prize or airdrop
    function userOddsMiniGame(address _user) external view returns(uint256) {
        //returns percentage precise to two decimal places (eg 1428 == 14.28% odds)
        return userMiniGameTokens[_user][miniGameCount].mul(10 ** 5).div(miniGameTokensActive[miniGameCount]).add(5).div(10);
    }

    //user chance of winning round prize or airdrop
    function userOddsRound(address _user) external view returns(uint256) {
        //returns percentage precise to two decimal places (eg 1428 == 14.28% odds)
        return userRoundTokens[_user][roundCount].mul(10 ** 5).div(roundTokensActive[roundCount]).add(5).div(10);
    }

    //user chance of winning cycle prize
    function userOddsCycle(address _user) external view returns(uint256) {
        //returns percentage precise to two decimal places (eg 1428 == 14.28% odds)
        return userTokens[_user].mul(10 ** 5).div(cycleActiveTokens).add(5).div(10);
    }

    //helper function for minigame data
    function miniGameInfo() external view returns(
        uint256 _id,
        uint256 _miniGameTokens,
        uint256 _miniGameTokensLeft,
        uint256 _miniGamePrizePot,
        uint256 _miniGameAirdropPot,
        uint256 _miniGameStartTime
        ) {

        return (
            miniGameCount,
            miniGameTokens[miniGameCount],
            miniGameTokensLeft[miniGameCount],
            miniGamePrizePot[miniGameCount],
            miniGameAirdropPot[miniGameCount],
            miniGameStartTime[miniGameCount]
        );
    }

    //helper function for round data
    function roundInfo() external view returns(
        uint256 _id,
        uint256 _roundPrize,
        uint256 _roundStart
        ) {

        return (
            roundCount,
            cycleProgressivePot / 2,
            roundStartTime[roundCount]
        );
    }

    //helper function for contract data
    function contractInfo() external view returns(
        uint256 _balance,
        uint256 _volume,
        uint256 _totalBuys,
        uint256 _totalUsers,
        uint256 _tokenSupply,
        uint256 _tokenPrice
        ) {

        return (
            address(this).balance,
            totalVolume,
            totalBuys,
            uniqueAddress.length,
            tokenSupply,
            tokenPrice
        );
    }

    //cycle data
    function cycleInfo() external view returns(
        bool _cycleComplete,
        uint256 _currentRound,
        uint256 _currentMinigame,
        uint256 _tokenSupply,
        uint256 _progressivePot,
        bool _prizeClaimed,
        uint256 _winningNumber
        ) {
        bool isActive;
        if (miniGameCount < 1000) {
            isActive = true;
            } else {
                isActive = false;
            }

        return (
            isActive,
            roundCount,
            miniGameCount,
            tokenSupply,
            cycleProgressivePot,
            cylcePrizeClaimed,
            cyclePrizeWinningNumber
        );
    }


    //////////////////////
    //INTERNAL FUNCTIONS//
    //////////////////////

    function buyInternal(uint256 _amount, address _referral) internal {
        require (_amount >= tokenPrice, "you must buy at least one token");
        require (userMiniGameTokensMin[msg.sender][miniGameCount].length < 10, "you are buying too often in this round"); //sets up bounded loop

        //update divs here to prevent overwriting userLastRoundInteractedWith
        if (userLastRoundInteractedWith[msg.sender] < roundCount || userLastMiniGameInteractedWith[msg.sender] < miniGameCount) {
            updateUserBalance(msg.sender);
        }

        //if this is the first tx after processing period is over, call generateSeedB
        if (miniGameProcessing == true && block.number > miniGameProcessingBegun + RNGblockDelay) {
            generateSeedB();
        }

        //track user
        if (knownUsers[msg.sender] == false) {
            uniqueAddress.push(msg.sender);
            knownUsers[msg.sender] = true;
        }

        //assign tokens
        uint256 tokensPurchased;
        uint256 ethSpent = _amount;
        uint256 valueOfRemainingTokens = miniGameTokensLeft[miniGameCount].mul(tokenPrice);

        //if round tokens are all sold, push difference to user balance and call generateSeedA
        if (ethSpent >= valueOfRemainingTokens) {
            uint256 incomingValue = ethSpent;
            ethSpent = valueOfRemainingTokens;
            tokensPurchased = miniGameTokensLeft[miniGameCount];
            miniGameTokensLeft[miniGameCount] = 0;
            uint256 ethCredit = incomingValue.sub(ethSpent);
            userBalance[msg.sender] += ethCredit;
            generateSeedA();
        } else {
            tokensPurchased = ethSpent.div(tokenPrice);
        }

        //update user token accounting
        userTokens[msg.sender] += tokensPurchased;
        userMiniGameTokens[msg.sender][miniGameCount] += tokensPurchased;
        userRoundTokens[msg.sender][roundCount] += tokensPurchased;
        //add min ranges and save in user accounting
        userMiniGameTokensMin[msg.sender][miniGameCount].push(cycleActiveTokens + 1);
        userMiniGameTokensMax[msg.sender][miniGameCount].push(cycleActiveTokens + tokensPurchased);
        //log last eligible rounds for withdraw checking
        userLastMiniGameInteractedWith[msg.sender] = miniGameCount;
        userLastRoundInteractedWith[msg.sender] = roundCount;

        uint256 referralShare = (ethSpent.mul(referralRate)).div(100);
        //check referral
            if (_referral != 0x0000000000000000000000000000000000000000 && _referral != msg.sender) {
          // assign refferal
          userBalance[_referral] += referralShare;
        } else if (_referral == 0x0000000000000000000000000000000000000000 || _referral == msg.sender){
            //if no referral used, add to progessive pot
            cycleProgressivePot += referralShare;
        }

        //divide amount by various percentages and distribute
        uint256 adminShare = (ethSpent.mul(adminFeeRate)).div(100);
        adminBalance += adminShare;

        uint256 mgDivs = (ethSpent.mul(miniGameDivRate)).div(100);
        miniGameDivs[miniGameCount] += mgDivs;

        uint256 roundDivShare = ethSpent.mul(roundDivRate).div(100);
        roundDivs[roundCount] += roundDivShare;

        uint256 miniGamePrize = ethSpent.mul(miniGamePotRate).div(100);
        miniGamePrizePot[miniGameCount] += miniGamePrize;

        uint256 miniGameAirdrop = ethSpent.mul(miniGameAirdropRate).div(100);
        miniGameAirdropPot[miniGameCount] += miniGameAirdrop;

        uint256 cyclePot = ethSpent.mul(progressivePotRate).div(100);
        cycleProgressivePot += cyclePot;

        //update global token accounting
        if (miniGameTokensLeft[miniGameCount] > 0) {
            miniGameTokensLeft[miniGameCount] = miniGameTokensLeft[miniGameCount].sub(tokensPurchased);
        }
        cycleActiveTokens += tokensPurchased;
        roundTokensActive[roundCount] += tokensPurchased;
        miniGameTokensActive[miniGameCount] += tokensPurchased;
        totalVolume += ethSpent;
        totalBuys++;

        //update user balance, if necessary. done here to keep ensure updateUserBalance never has to search through multiple minigames
        updateUserBalance(msg.sender);

        emit userBought(msg.sender, tokensPurchased, miniGameCount, "a user just bought tokens");
    }

    function checkDivs(address _user) internal {
        //set up local shorthand
        uint256 _mg = userLastMiniGameInteractedWith[_user];
        uint256 _rnd = userLastRoundInteractedWith[_user];

        //calculate minigame divs
        userShareMiniGame[_user][_mg] = userMiniGameTokens[_user][_mg].mul(10 ** (precisionFactor + 1)).div(miniGameTokens[_mg] + 5).div(10);
        userDivsMiniGameTotal[_user][_mg] = miniGameDivs[_mg].mul(userShareMiniGame[_user][_mg]).div(10 ** precisionFactor);
        userDivsMiniGameUnclaimed[_user][_mg] = userDivsMiniGameTotal[_user][_mg].sub(userDivsMiniGameClaimed[_user][_mg]);
        //add to user balance
        if (userDivsMiniGameUnclaimed[_user][_mg] > 0) {
            //sanity check
            assert(userDivsMiniGameUnclaimed[_user][_mg] <= miniGameDivs[_mg]);
            assert(userDivsMiniGameUnclaimed[_user][_mg] <= address(this).balance);
            //update user accounting
            userDivsMiniGameClaimed[_user][_mg] = userDivsMiniGameTotal[_user][_mg];
            uint256 shareTempMg = userDivsMiniGameUnclaimed[_user][_mg];
            userDivsMiniGameUnclaimed[_user][_mg] = 0;
            userBalance[_user] += shareTempMg;
            miniGameDivsClaimed[_mg] += shareTempMg;
            }
        //calculate round divs
        userShareRound[_user][_rnd] = userRoundTokens[_user][_rnd].mul(10 ** (precisionFactor + 1)).div(roundTokensActive[_rnd] + 5).div(10);
        userDivsRoundTotal[_user][_rnd] = roundDivs[_rnd].mul(userShareRound[_user][_rnd]).div(10 ** precisionFactor);
        userDivsRoundUnclaimed[_user][_rnd] = userDivsRoundTotal[_user][_rnd].sub(userDivsRoundClaimed[_user][_rnd]);
        //add to user balance
        if (userDivsRoundUnclaimed[_user][_rnd] > 0) {
            //sanity check
            assert(userDivsRoundUnclaimed[_user][_rnd] <= roundDivs[_rnd]);
            assert(userDivsRoundUnclaimed[_user][_rnd] <= address(this).balance);
            //update user accounting
            userDivsRoundClaimed[_user][_rnd] = userDivsRoundTotal[_user][_rnd];
            uint256 shareTempRnd = userDivsRoundUnclaimed[_user][_rnd];
            userDivsRoundUnclaimed[_user][_rnd] = 0;
            userBalance[_user] += shareTempRnd;
            roundDivsClaimed[_rnd] += shareTempRnd;
        }
    }

    function checkPrizes(address _user) internal {
        //push cycle prizes to persistent storage
        if (cycleOver == true && userCycleChecked[_user] == false) {
            //get minigame cycle prize was in
            uint256 mg = cyclePrizeInMinigame;
            //check if user won cycle prize
            if (cylcePrizeClaimed == false && userMiniGameTokensMax[_user][mg].length > 0) {
                //check if user won minigame
                //loop iterations bounded to a max of 10 on buy()
                for (uint256 i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                    if (cyclePrizeWinningNumber >= userMiniGameTokensMin[_user][mg][i] && cyclePrizeWinningNumber <= userMiniGameTokensMax[_user][mg][i]) {
                        userBalance[_user] += cycleProgressivePot;
                        cylcePrizeClaimed = true;
                        cyclePrizeWinner = msg.sender;
                        break;
                    }
                }
            }
            userCycleChecked[_user] = true;
        }
        //push round prizes to persistent storage
        if (roundPrizeClaimed[userLastRoundInteractedWith[_user]] == false && roundPrizeTokenRangeIdentified[userLastRoundInteractedWith[_user]]) {
            //get minigame round prize was in
            uint256 rnd = userLastRoundInteractedWith[_user];
            uint256 mgp = roundPrizeInMinigame[rnd];
            //check if user won round prize
            for (i = 0; i < userMiniGameTokensMin[_user][mgp].length; i++) {
                if (roundPrizeNumber[rnd] >= userMiniGameTokensMin[_user][mgp][i] && roundPrizeNumber[rnd] <= userMiniGameTokensMax[_user][mgp][i]) {
                    userBalance[_user] += roundPrizePot[mgp];
                    roundPrizeClaimed[rnd] = true;
                    roundPrizeWinner[rnd] = msg.sender;
                    break;
                }
            }
            userLastRoundChecked[_user] = userLastRoundInteractedWith[_user];
        }
        //push minigame prizes to persistent storage
        if (userLastMiniGameChecked[_user] < userLastMiniGameInteractedWith[_user] && miniGameCount > userLastMiniGameInteractedWith[_user]) {
            //check if user won minigame
            mg = userLastMiniGameInteractedWith[_user];
            for (i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                if (miniGamePrizeNumber[mg] >= userMiniGameTokensMin[_user][mg][i] && miniGamePrizeNumber[mg] <= userMiniGameTokensMax[_user][mg][i]) {
                    userBalance[_user] += miniGamePrizePot[mg];
                    miniGamePrizeClaimed[mg] = true;
                    miniGamePrizeWinner[mg] = msg.sender;
                    break;
                }
            }
            //check if user won airdrop
            for (i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                if (miniGameAirdropNumber[mg] >= userMiniGameTokensMin[_user][mg][i] && miniGameAirdropNumber[mg] <= userMiniGameTokensMax[_user][mg][i]) {
                    userBalance[_user] += miniGameAirdropPot[mg];
                    miniGameAirdropClaimed[mg] = true;
                    miniGameAirdropWinner[mg] = msg.sender;
                    break;
                }
            }
            //update last mini game checked
            userLastMiniGameChecked[_user] = userLastMiniGameInteractedWith[_user];
        }
    }

    function updateUserBalance(address _user) internal {
        checkDivs(_user);
        checkPrizes(_user);
    }

    function miniGameStart() internal {
        require (cycleOver == false, "the cycle cannot be over");

        miniGameCount++;
        miniGameStartTime[miniGameCount] = now;
        //set up special case for correct token range on first minigame
        if (tokenSupply != 0) {
            miniGameTokenRangeMin[miniGameCount] = tokenSupply + 1;
        } else {
            miniGameTokenRangeMin[miniGameCount] = 0;
        }
        //genreate tokens and update accounting
        miniGameTokens[miniGameCount] = generateTokens();
        miniGameTokensLeft[miniGameCount] = miniGameTokens[miniGameCount];
        miniGameTokenRangeMax[miniGameCount] = tokenSupply;
        //increment token price after 1st minigame
        if (miniGameCount > 1) {
            tokenPrice += tokenPriceIncrement;
        }
        //award prizes and start new round if current round is complete
        if (miniGameCount % miniGamesPerRound == 0 && miniGameCount > 1) {
            awardRoundPrize();
            roundStart();
            tokenPrice = 0.001 ether + 0.0005 ether * roundCount.sub(1);
        }
        //award prize if cycle is complete
        if (miniGameCount % (miniGamesPerCycle + 1) == 0 && miniGameCount > 1) {
            awardCyclePrize();
        }

        emit newMinigameStarted(miniGameCount, miniGameTokens[miniGameCount], "new minigame started");
    }

    function roundStart() internal {
        require (cycleOver == false, "the cycle cannot be over");

        roundCount++;
        roundStartTime[roundCount] = now;
        //set up special case for correct token range on first round
        if (tokenSupply != 0) {
            roundTokenRangeMin[roundCount] = miniGameTokenRangeMax[miniGameCount.sub(1)] + 1;
        } else {
            roundTokenRangeMin[roundCount] = 0;
        }
        //log max only when round is complete
        if (roundCount >= 2) {
            roundTokenRangeMax[roundCount.sub(1)] = miniGameTokenRangeMax[miniGameCount.sub(1)];
            roundTokens[roundCount.sub(1)] = tokenSupply.sub(roundTokenRangeMin[roundCount.sub(1)]);
        }
    }

    function cycleStart() internal {
        require (cycleOver == false, "the cycle cannot be over");

        cycleCount++;
        cycleStartTime = now;
    }

    function generateTokens() internal returns(uint256 _tokens) {
        bytes32 hash = keccak256(abi.encodePacked(salt, hashA, hashB));
        uint256 randTokens = uint256(hash).mod(minTokensPerMiniGame);
        uint256 newMinGameTokens = randTokens + minTokensPerMiniGame;
        tokenSupply += newMinGameTokens;
        salt++;

        return newMinGameTokens;
    }

    function generateSeedA() internal {
        require (miniGameProcessing == false || miniGameProcessing == true && block.number > miniGameProcessingBegun + 256, "seed A cannot be regenerated right now");
        require (miniGameTokensLeft[miniGameCount] == 0 || earlyResolveACalled == true, "active tokens remain in this minigame");

        miniGameProcessing = true;
        miniGameProcessingBegun = block.number;
        //generate seed
        hashA = blockhash(miniGameProcessingBegun - 1);
        //log end times
        if (miniGameCount > 1) {
            miniGameEndTime[miniGameCount] = now;
        }
        if (miniGameCount % miniGamesPerRound == 0) {
            roundEndTime[roundCount] = now;
        }
        //award processing bounty
        if (miniGameSeedAawarded[miniGameCount] == false) {
            userBalance[msg.sender] += seedAreward;
            miniGameSeedAawarded[miniGameCount] = true;
        }
        salt++;

        emit processingStarted(msg.sender, miniGameCount, block.number, "processing started");
    }

    function generateSeedB() internal {
        //gererate seed
        hashB = blockhash(miniGameProcessingBegun + RNGblockDelay);
        //awared prizes
        awardMiniGamePrize();
        awardMiniGameAirdrop();
        //award processing bounty
        if (miniGameSeedBawarded[miniGameCount] == false) {
            userBalance[msg.sender] += seedBreward;
            miniGameSeedBawarded[miniGameCount] = true;
        }
        //start next minigame
        miniGameStart();
        miniGameProcessing = false;
        salt++;

        emit processingFinished(msg.sender, miniGameCount, block.number, "processing finished");
    }

    function awardMiniGamePrize() internal {
        bytes32 hash = keccak256(abi.encodePacked(salt, hashA, hashB));
        uint256 winningNumber = uint256(hash).mod(miniGameTokens[miniGameCount].sub(miniGameTokensLeft[miniGameCount]));
        miniGamePrizeNumber[miniGameCount] = winningNumber + miniGameTokenRangeMin[miniGameCount];
        miniGamePrizePot[miniGameCount] = miniGamePrizePot[miniGameCount].sub(seedAreward).sub(seedBreward);
        salt++;

        emit miniGamePrizeAwarded(miniGameCount, winningNumber, miniGamePrizePot[miniGameCount], "minigame prize awarded");
    }

    function awardMiniGameAirdrop() internal {
        bytes32 hash = keccak256(abi.encodePacked(salt, hashA, hashB));
        uint256 winningNumber = uint256(hash).mod(miniGameTokens[miniGameCount].sub(miniGameTokensLeft[miniGameCount]));
        miniGameAirdropNumber[miniGameCount] = winningNumber + miniGameTokenRangeMin[miniGameCount];
        salt++;

        emit miniGameAirdropAwarded(miniGameCount, winningNumber, miniGameAirdropPot[miniGameCount], "minigame airdrop awarded");
    }

    function awardRoundPrize() internal {
        bytes32 hash = keccak256(abi.encodePacked(salt, hashA, hashB));
        //@dev ensure this dymanic
        uint256 currentRoundTokens = miniGameTokenRangeMax[miniGameCount.sub(1)].sub(roundTokenRangeMin[roundCount]);
        uint256 winningNumber = uint256(hash).mod(currentRoundTokens);
        roundPrizeNumber[roundCount] = winningNumber + roundTokenRangeMin[roundCount];
        //calculate round prize here
        uint256 roundPrize = cycleProgressivePot.mul(roundPotRate).div(100);
            uint256 adminShare = cycleProgressivePot.mul(4).div(100);
            adminBalance += adminShare;
        roundPrizePot[roundCount] = roundPrize;
        cycleProgressivePot = roundPrize;
        narrowRoundPrize(roundCount);
        salt++;

        emit roundPrizeAwarded(roundCount, winningNumber, roundPrize, "round prize awarded");
    }

    function awardCyclePrize() internal {
        bytes32 hash = keccak256(abi.encodePacked(salt, hashA, hashB));
        uint256 winningNumber = uint256(hash).mod(miniGameTokenRangeMax[miniGameCount - 1]);
        cyclePrizeWinningNumber = winningNumber;
        gameActive = false;
        cycleEnded = now;
        cycleOver = true;
        narrowCyclePrize();
        salt++;

        emit cyclePrizeAwarded(winningNumber, cycleProgressivePot, "cycle prize awarded");
    }

    function resolveCycle() internal {
        //generate hashB here in instead of calling generateSeedB
        hashB = blockhash(miniGameProcessingBegun + RNGblockDelay);
        //award prizes
        awardMiniGamePrize();
        awardMiniGameAirdrop();
        awardRoundPrize();
        awardCyclePrize();
        //close game
        miniGameProcessing = false;
        gameActive = false;
    }

    //narrows down the token range of a round to a specific miniGame
    //reduces the search space on user prize updates
    function narrowRoundPrize(uint256 _ID) internal returns(uint256 _miniGameID) {
        //set up local accounting
        uint256 miniGameRangeMin;
        uint256 miniGameRangeMax;
        if (_ID == 1) {
            miniGameRangeMin = 1;
            miniGameRangeMax = miniGamesPerRound;
        } else if (_ID >= 2) {
            miniGameRangeMin = _ID.mul(miniGamesPerRound);
            miniGameRangeMax = miniGameRangeMin + miniGamesPerRound - 1;
        }
        //loop through each minigame to check prize number
        //log globaly so this only needs to be called once per prize
        for (uint256 i = miniGameRangeMin; i <= miniGameRangeMax; i++) {
            if (roundPrizeNumber[_ID] >= miniGameTokenRangeMin[i] && roundPrizeNumber[_ID] <= miniGameTokenRangeMax[i]) {
            roundPrizeInMinigame[_ID] = i;
            roundPrizeTokenRangeIdentified[_ID] = true;
            return roundPrizeInMinigame[_ID];
            break;
            }
        }
    }

    //narrows down the token range of a round to a specific miniGame
    //reduces the search space on user prize updates
    function narrowCyclePrize() internal returns(uint256 _miniGameID) {
        //first identify round
        for (uint256 i = 1; i <= roundCount; i++) {
          if (cyclePrizeWinningNumber >= roundTokenRangeMin[i] && cyclePrizeWinningNumber <= roundTokenRangeMax[i]) {
            cyclePrizeInRound = i;
            break;
          }
        }
        //set up minigame local accounting
        uint256 miniGameRangeMin;
        uint256 miniGameRangeMax;
        uint256 _ID = cyclePrizeInRound;
        if (_ID == 1) {
            miniGameRangeMin = 1;
            miniGameRangeMax = miniGamesPerRound;
        } else if (_ID >= 2) {
            miniGameRangeMin = _ID.mul(miniGamesPerRound);
            miniGameRangeMax = miniGameRangeMin + miniGamesPerRound - 1;
        }
        //loop through each minigame to check prize number
        //log globaly so this only needs to be called once per prize
        for (i = miniGameRangeMin; i <= miniGameRangeMax; i++) {
            if (cyclePrizeWinningNumber >= miniGameTokenRangeMin[i] && cyclePrizeWinningNumber <= miniGameTokenRangeMax[i]) {
                cyclePrizeInMinigame = i;
                cyclePrizeTokenRangeIdentified = true;
                return cyclePrizeInMinigame;
                break;
            }
        }
    }

    //helper function for up to date front end balances without state change
    function checkDivsMgView(address _user) internal view returns(uint256 _divs) {
        //set up local shorthand
        uint256 _mg = userLastMiniGameChecked[_user];
        uint256 mgShare = userShareMiniGame[_user][_mg];
        uint256 mgTotal = userDivsMiniGameTotal[_user][_mg];
        uint256 mgUnclaimed = userDivsMiniGameUnclaimed[_user][_mg];
        //calculate minigame divs
        mgShare = userMiniGameTokens[_user][_mg].mul(10 ** (precisionFactor + 1)).div(miniGameTokens[_mg] + 5).div(10);
        mgTotal = miniGameDivs[_mg].mul(mgShare).div(10 ** precisionFactor);
        mgUnclaimed = mgTotal.sub(userDivsMiniGameClaimed[_user][_mg]);

        return mgUnclaimed;
    }

    //helper function for up to date front end balances without state change
    function checkDivsRndView(address _user) internal view returns(uint256 _divs) {
        //set up local shorthand
        uint256 _rnd = userLastRoundChecked[_user];
        uint256 rndShare = userShareRound[_user][_rnd];
        uint256 rndTotal = userDivsRoundTotal[_user][_rnd];
        uint256 rndUnclaimed = userDivsRoundUnclaimed[_user][_rnd];
        //calculate round divs
        rndShare = userRoundTokens[_user][_rnd].mul(10 ** (precisionFactor + 1)).div(roundTokensActive[_rnd] + 5).div(10);
        rndTotal = roundDivs[_rnd].mul(rndShare).div(10 ** precisionFactor);
        rndUnclaimed = rndTotal.sub(userDivsRoundClaimed[_user][_rnd]);

        return rndUnclaimed;
    }

    //helper function for up to date front end balances without state change
    function checkPrizesView(address _user) internal view returns(uint256 _prizes) {
        //local accounting
        uint256 prizeValue;
        //push cycle prizes to persistent storage
        if (cycleOver == true && userCycleChecked[_user] == false) {
            //get minigame cycle prize was in
            uint256 mg;
            if (cyclePrizeTokenRangeIdentified == true) {
                mg = cyclePrizeInMinigame;
            } else {
                narrowCyclePrizeView();
                mg = cyclePrizeInMinigame;
            }
            //check if user won cycle prize
            if (cylcePrizeClaimed == false && userMiniGameTokensMax[_user][mg].length > 0) {
                //check if user won minigame
                //loop iterations bounded to a max of 10 on buy()
                for (uint256 i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                    if (cyclePrizeWinningNumber >= userMiniGameTokensMin[_user][mg][i] && cyclePrizeWinningNumber <= userMiniGameTokensMax[_user][mg][i]) {
                        prizeValue += cycleProgressivePot;
                        break;
                    }
                }
            }
        }
        //push round prizes to persistent storage
        if (userLastRoundChecked[_user] < userLastRoundInteractedWith[_user] && roundCount > userLastRoundInteractedWith[_user]) {
            //get minigame round prize was in
            uint256 mgp;
            uint256 _ID = userLastRoundChecked[_user];
            if (roundPrizeTokenRangeIdentified[_ID] == true) {
                mgp = roundPrizeInMinigame[_ID];
            } else {
                narrowRoundPrizeView(_ID);
                mgp = roundPrizeInMinigame[_ID];
            }
            //check if user won round prize
            for (i = 0; i < userMiniGameTokensMin[_user][mgp].length; i++) {
                if (roundPrizeNumber[_ID] >= userMiniGameTokensMin[_user][mgp][i] && roundPrizeNumber[_ID] <= userMiniGameTokensMax[_user][mgp][i]) {
                    prizeValue += roundPrizePot[mgp];
                    break;
                }
            }
        }
        //push minigame prizes to persistent storage
        if (userLastMiniGameChecked[_user] < userLastMiniGameInteractedWith[_user] && miniGameCount > userLastMiniGameInteractedWith[_user]) {
            //check if user won minigame
            mg = userLastMiniGameInteractedWith[_user];
            for (i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                if (miniGamePrizeNumber[mg] >= userMiniGameTokensMin[_user][mg][i] && miniGamePrizeNumber[mg] <= userMiniGameTokensMax[_user][mg][i]) {
                    prizeValue += miniGamePrizePot[mg];
                    break;
                }
            }
            //check if user won airdrop
            for (i = 0; i < userMiniGameTokensMin[_user][mg].length; i++) {
                if (miniGameAirdropNumber[mg] >= userMiniGameTokensMin[_user][mg][i] && miniGameAirdropNumber[mg] <= userMiniGameTokensMax[_user][mg][i]) {
                    prizeValue += miniGameAirdropPot[mg];
                    break;
                }
            }
        }
        return prizeValue;
    }

    //helper function for up to date front end balances without state change
    function narrowRoundPrizeView(uint256 _ID) internal view returns(uint256 _miniGameID) {
        //set up local accounting
        uint256 winningNumber = roundPrizeNumber[_ID];
        uint256 miniGameRangeMin;
        uint256 miniGameRangeMax;
        if (_ID == 1) {
            miniGameRangeMin = 1;
            miniGameRangeMax = miniGamesPerRound;
        } else if (_ID >= 2) {
            miniGameRangeMin = _ID.mul(miniGamesPerRound);
            miniGameRangeMax = miniGameRangeMin + miniGamesPerRound - 1;
        }
        //loop through each minigame to check prize number
        //log globaly so this only needs to be called once per prize
        for (uint256 i = miniGameRangeMin; i <= miniGameRangeMax; i++) {
            if (winningNumber >= miniGameTokenRangeMin[i] && winningNumber <= miniGameTokenRangeMax[i]) {
                return i;
                break;
            }
        }
    }

    //helper function for up to date front end balances without state change
    function narrowCyclePrizeView() internal view returns(uint256 _miniGameID) {
        //set up local accounting
        uint256 winningNumber = cyclePrizeWinningNumber;
        uint256 rnd;
        //first identify round
        for (uint256 i = 1; i <= roundCount; i++) {
            if (winningNumber >= roundTokenRangeMin[i] && winningNumber <= roundTokenRangeMax[i]) {
                rnd = i;
                break;
            }
        }
        //set up minigame local accounting
        uint256 miniGameRangeMin;
            uint256 miniGameRangeMax;
            uint256 _ID = rnd;
            if (_ID == 1) {
                miniGameRangeMin = 1;
                miniGameRangeMax = miniGamesPerRound;
            } else if (_ID >= 2) {
                miniGameRangeMin = _ID.mul(miniGamesPerRound);
                miniGameRangeMax = miniGameRangeMin + miniGamesPerRound - 1;
            }
            //loop through each minigame to check prize number
            //log globaly so this only needs to be called once per prize
        for (i = miniGameRangeMin; i <= miniGameRangeMax; i++) {
            if (winningNumber >= miniGameTokenRangeMin[i] && winningNumber <= miniGameTokenRangeMax[i]) {
                return i;
                break;
            }
        }
    }

    //max enterable value:
     function getValueOfRemainingTokens () public view returns(uint){
      return miniGameTokensLeft[miniGameCount].mul(tokenPrice);
     }
   //initial tokens for minigame:
    function getValueOfInitialTokens() public view returns(uint){
      return miniGameTokens[miniGameCount].mul(tokenPrice);
    }
    //mini-game:
    function getCurrentMinigamePrizePot() public view returns(uint){
      return miniGamePrizePot[miniGameCount];
    }
    //round:
    function getCurrentRoundPrizePot() public view returns(uint){
      return roundPrizePot[roundCount];
    }

}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsMiniGameTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPriceIncrement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleEnded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGamesPerCycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"earlyResolveACalled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsRoundTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsMiniGameUnclaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleActiveTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundPrizePot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"seedBreward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roundCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGamePrizeClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userLastMiniGameInteractedWith","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"admins","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameAirdropPot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractInfo","outputs":[{"name":"_balance","type":"uint256"},{"name":"_volume","type":"uint256"},{"name":"_totalBuys","type":"uint256"},{"name":"_totalUsers","type":"uint256"},{"name":"_tokenSupply","type":"uint256"},{"name":"_tokenPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsRoundUnclaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getValueOfInitialTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userLastMiniGameChecked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cyclePrizeWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cylcePrizeClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minTokensPerMiniGame","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundDivs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundTokensActive","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cyclePrizeWinningNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userShareMiniGame","outputs":[{"name":"","type":"uint256"}],"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":"userCycleChecked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"userOddsRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userLastRoundChecked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGameInfo","outputs":[{"name":"_id","type":"uint256"},{"name":"_miniGameTokens","type":"uint256"},{"name":"_miniGameTokensLeft","type":"uint256"},{"name":"_miniGamePrizePot","type":"uint256"},{"name":"_miniGameAirdropPot","type":"uint256"},{"name":"_miniGameStartTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"uniqueAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"userOddsMiniGame","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameSeedAawarded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashA","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"seedAreward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsRoundClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startCycle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cycleInfo","outputs":[{"name":"_cycleComplete","type":"bool"},{"name":"_currentRound","type":"uint256"},{"name":"_currentMinigame","type":"uint256"},{"name":"_tokenSupply","type":"uint256"},{"name":"_progressivePot","type":"uint256"},{"name":"_prizeClaimed","type":"bool"},{"name":"_winningNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGameCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGamesPerRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"userMiniGameTokensMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roundPotRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminBank","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameSeedBawarded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundDivsClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"checkUserDivsAvailable","outputs":[{"name":"_userDivsAvailable","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleProgressivePot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userDivsMiniGameClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizePot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userMiniGameTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBuys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userShareRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"userMiniGameTokensMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"zeroOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizeClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameDivs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameTokensLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"earlyResolveA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentMinigamePrizePot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundTokenRangeMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameTokenRangeMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractBalance","outputs":[{"name":"_contractBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminFeeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGamePrizePot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGamePrizeWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getValueOfRemainingTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameDivsClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userLastRoundInteractedWith","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cyclePrizeTokenRangeIdentified","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameTokensActive","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"earlyResolveBCalled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameAirdropNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizeInMinigame","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cyclePrizeInRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizeWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"progressivePotRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"salt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameAirdropClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_referral","type":"address"}],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameAirdropWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGamePrizeNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizeNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roundInfo","outputs":[{"name":"_id","type":"uint256"},{"name":"_roundPrize","type":"uint256"},{"name":"_roundStart","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roundDivRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGameProcessingBegun","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"earlyResolveB","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"restartMiniGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"miniGameAirdropRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cycleOver","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"miniGameTokenRangeMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userRoundTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cyclePrizeInMinigame","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashB","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundPrizeTokenRangeIdentified","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGameProcessing","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"userOddsCycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniGamePotRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameActive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referral","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"adminWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"miniGameDivRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"roundTokenRangeMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"knownUsers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_adminBank","type":"address"},{"name":"_adminTwo","type":"address"},{"name":"_adminThree","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_message","type":"string"}],"name":"adminWithdrew","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_message","type":"string"}],"name":"cycleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":true,"name":"_newAdmin","type":"address"},{"indexed":false,"name":"_message","type":"string"}],"name":"adminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_pot","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"resolvedEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_message","type":"string"}],"name":"processingRestarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"contractDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"},{"indexed":false,"name":"_tokensBought","type":"uint256"},{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"userBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"userReinvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"userWithdrew","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_blockNumber","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"processingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_caller","type":"address"},{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_blockNumber","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"processingFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_newTokens","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"newMinigameStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_winningNumber","type":"uint256"},{"indexed":false,"name":"_prize","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"miniGamePrizeAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_miniGameID","type":"uint256"},{"indexed":false,"name":"_winningNumber","type":"uint256"},{"indexed":false,"name":"_prize","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"miniGameAirdropAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_roundID","type":"uint256"},{"indexed":false,"name":"_winningNumber","type":"uint256"},{"indexed":false,"name":"_prize","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"roundPrizeAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_winningNumber","type":"uint256"},{"indexed":false,"name":"_prize","type":"uint256"},{"indexed":false,"name":"_message","type":"string"}],"name":"cyclePrizeAwarded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526004805462ffffff19169055606460059081556103e86006556019600781905560085560146009819055600a808055600b55600c829055600d919091556030600e556012600f556658d15e176280006010819055601155600190556000601555603b805460ff1916905566038d7ea4c680006048556601c6bf52634000604955612710604a5534801561009657600080fd5b5060405160608062005e1483398101604090815281516020808401519383015160018054600160a060020a03948516600160a060020a03199182161782556002805480840182557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace908101805484163390811790915560009081526003909652878620805460ff19908116861790915582548086018455820180549a89169a85168b17905598865287862080548a168517905581548085019092550180549590931694168417909155918152919091208054909216179055615c96806200017e6000396000f30060806040526004361061055d5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630100fa9e81146106825780630103c92b146106b8578063031ce895146106d9578063096dfff0146106ee5780630a734284146107035780630b0246c7146107185780630bd2042d146107415780631056f3e71461076557806310b7a86d14610789578063126fb2a31461079e578063127ec78e146107b3578063127f0b3f146107c857806313001b6f146107dd57806313e79cfc146107f557806314bfd6d01461081657806315c2d4ad1461084a57806315c43aaf1461086257806317da4e61146108aa57806319a0d492146108ce5780631a049abe146108e35780631e8c9cc0146109045780632092f7841461091957806320a065ce1461093157806320d83f3114610946578063249023531461095b57806324d7806c14610973578063263b93de14610994578063316fda0f146109ac57806331ffb9fb146109c1578063335e536c146109d65780633b779511146109eb5780633ccfd60b14610a0f5780633d3ce09814610a245780633e9f0d5214610a45578063452a05a414610a66578063474a898b14610a875780634ca8af7114610a9c5780634e60321d14610ab45780634f05a69f14610ad5578063518344ed14610aed57806354b21c1114610b0257806354dc66fa14610b17578063562cad2314610b3b57806358553baa14610b50578063585ba4fa14610ba1578063591236f514610bb65780635cf16f9c14610bcb5780635d9a0b2714610bf25780635e49e82f14610c075780635f81a57c14610c1c57806362d857d814610c3157806363d89ba414610c4957806364ca55d014610c61578063674fa9c914610c8257806367a134ba14610c9757806367b8222714610cbb578063684f664114610cd35780636c7f3f1714610cf757806372f2163514610d0c5780637348a6b114610d30578063761cbcb814610d485780637824407f14610d6f57806379cf3a7a14610d845780637b8ad54014610d995780637ff9b59614610db15780638220e71d14610dc657806382765ba814610dde578063840cb2ee14610df6578063850c1a0c14610e0e57806385cc63ec14610e2357806388c0979a14610e3857806388faeedf14610e505780638b7afe2e14610e685780638cece52714610e7d5780638d7d646a14610e9257806393af08a614610eaa5780639858befb14610ec25780639c7336fe14610ed75780639e960e0614610eec578063a053ce1f14610f04578063a20fe5c814610f19578063a4ee8b6314610f3a578063a932ff1314610f52578063aba5398614610f67578063ac98f60014610f7f578063acf4995214610f94578063ad57777c14610fac578063b753739a14610fc4578063b8a2167914610fd9578063be5b336914610ff1578063bfa0b13314611006578063c137a60f1461101b578063c161269d14611033578063c3eed29a1461104b578063c5d0f7ed1461106f578063c8aa8d8714611087578063c9a17e461461109f578063cace12e6146110b7578063cb7be539146110ea578063cc9345db146110ff578063d13a7efd14611114578063d16617ae14611129578063d3a021601461113e578063d3bc11fb14611153578063d70b6f2314611168578063d81c59ad14611180578063dd48e347146111a4578063df45d88e146111b9578063e13d8cfc146111ce578063e43cf7a8146111e6578063e537ceb9146111fb578063e77807761461121c578063ed498fa814611231578063f020044f14611252578063f088d54714611267578063f18d20be1461127b578063f49102da14611290578063fa827e2e146112a5578063fb5dfc9f146112bd578063fcf9f5f8146112d5575b333214806105755750600154600160a060020a031633145b15156105b9576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff161515600114610606576040805160e560020a62461bcd0281526020600482015260156024820152600080516020615bcb833981519152604482015290519081900360640190fd5b60185460ff1615156001141561067557601454601a54014311610675576040805160e560020a62461bcd02815260206004820152602d6024820152600080516020615c0b8339815191526044820152600080516020615c2b833981519152606482015290519081900360840190fd5b6106803460006112f6565b005b34801561068e57600080fd5b506106a6600160a060020a0360043516602435611a66565b60408051918252519081900360200190f35b3480156106c457600080fd5b506106a6600160a060020a0360043516611a83565b3480156106e557600080fd5b506106a6611a95565b3480156106fa57600080fd5b506106a6611a9b565b34801561070f57600080fd5b506106a6611aa1565b34801561072457600080fd5b5061072d611aa7565b604080519115158252519081900360200190f35b34801561074d57600080fd5b506106a6600160a060020a0360043516602435611ab5565b34801561077157600080fd5b506106a6600160a060020a0360043516602435611ad2565b34801561079557600080fd5b506106a6611aef565b3480156107aa57600080fd5b506106a6611af5565b3480156107bf57600080fd5b506106a6611b0a565b3480156107d457600080fd5b506106a6611b10565b3480156107e957600080fd5b5061072d600435611b16565b34801561080157600080fd5b506106a6600160a060020a0360043516611b2b565b34801561082257600080fd5b5061082e600435611b3d565b60408051600160a060020a039092168252519081900360200190f35b34801561085657600080fd5b506106a6600435611b65565b34801561086e57600080fd5b50610877611b77565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156108b657600080fd5b506106a6600160a060020a0360043516602435611b8b565b3480156108da57600080fd5b506106a6611ba8565b3480156108ef57600080fd5b506106a6600160a060020a0360043516611bd4565b34801561091057600080fd5b5061082e611be6565b34801561092557600080fd5b506106a6600435611bf5565b34801561093d57600080fd5b5061072d611c07565b34801561095257600080fd5b506106a6611c15565b34801561096757600080fd5b506106a6600435611c1b565b34801561097f57600080fd5b5061072d600160a060020a0360043516611c2d565b3480156109a057600080fd5b506106a6600435611c42565b3480156109b857600080fd5b506106a6611c54565b3480156109cd57600080fd5b506106a6611c5a565b3480156109e257600080fd5b506106a6611c60565b3480156109f757600080fd5b506106a6600160a060020a0360043516602435611c66565b348015610a1b57600080fd5b50610680611c83565b348015610a3057600080fd5b5061072d600160a060020a0360043516611e8c565b348015610a5157600080fd5b506106a6600160a060020a0360043516611ea1565b348015610a7257600080fd5b506106a6600160a060020a0360043516611f0a565b348015610a9357600080fd5b50610877611f1c565b348015610aa857600080fd5b5061082e600435611f5c565b348015610ac057600080fd5b506106a6600160a060020a0360043516611f6a565b348015610ae157600080fd5b5061072d600435611fc1565b348015610af957600080fd5b506106a6611fd6565b348015610b0e57600080fd5b506106a6611fdc565b348015610b2357600080fd5b506106a6600160a060020a0360043516602435611fe2565b348015610b4757600080fd5b50610680611fff565b348015610b5c57600080fd5b50610b656121b6565b60408051971515885260208801969096528686019490945260608601929092526080850152151560a084015260c0830152519081900360e00190f35b348015610bad57600080fd5b506106a661220a565b348015610bc257600080fd5b506106a6612210565b348015610bd757600080fd5b506106a6600160a060020a0360043516602435604435612216565b348015610bfe57600080fd5b506106a6612253565b348015610c1357600080fd5b5061082e612259565b348015610c2857600080fd5b506106a6612268565b348015610c3d57600080fd5b5061072d60043561226e565b348015610c5557600080fd5b506106a6600435612283565b348015610c6d57600080fd5b506106a6600160a060020a0360043516612295565b348015610c8e57600080fd5b506106a66122d5565b348015610ca357600080fd5b506106a6600160a060020a03600435166024356122db565b348015610cc757600080fd5b506106a66004356122f8565b348015610cdf57600080fd5b506106a6600160a060020a036004351660243561230a565b348015610d0357600080fd5b506106a6612327565b348015610d1857600080fd5b506106a6600160a060020a036004351660243561232d565b348015610d3c57600080fd5b506106a660043561234a565b348015610d5457600080fd5b506106a6600160a060020a036004351660243560443561235c565b348015610d7b57600080fd5b506106a6612383565b348015610d9057600080fd5b50610680612389565b348015610da557600080fd5b5061072d60043561252b565b348015610dbd57600080fd5b506106a6612540565b348015610dd257600080fd5b506106a6600435612546565b348015610dea57600080fd5b506106a6600435612558565b348015610e0257600080fd5b506106a660043561256a565b348015610e1a57600080fd5b5061068061257b565b348015610e2f57600080fd5b506106a66127f0565b348015610e4457600080fd5b506106a6600435612805565b348015610e5c57600080fd5b506106a6600435612817565b348015610e7457600080fd5b506106a6612829565b348015610e8957600080fd5b506106a661282e565b348015610e9e57600080fd5b506106a6600435612834565b348015610eb657600080fd5b5061082e600435612846565b348015610ece57600080fd5b506106a6612861565b348015610ee357600080fd5b506106a6612867565b348015610ef857600080fd5b506106a660043561288d565b348015610f1057600080fd5b506106a661289f565b348015610f2557600080fd5b506106a6600160a060020a03600435166128a5565b348015610f4657600080fd5b506106a66004356128b7565b348015610f5e57600080fd5b5061072d6128c9565b348015610f7357600080fd5b506106a66004356128d8565b348015610f8b57600080fd5b5061072d6128ea565b348015610fa057600080fd5b506106a66004356128f9565b348015610fb857600080fd5b506106a660043561290b565b348015610fd057600080fd5b506106a661291d565b348015610fe557600080fd5b5061082e600435612923565b348015610ffd57600080fd5b506106a661293e565b34801561101257600080fd5b506106a6612944565b34801561102757600080fd5b506106a660043561294a565b34801561103f57600080fd5b5061072d60043561295c565b34801561105757600080fd5b50610680600435600160a060020a0360243516612971565b34801561107b57600080fd5b5061082e600435612bfa565b34801561109357600080fd5b506106a6600435612c15565b3480156110ab57600080fd5b506106a6600435612c27565b3480156110c357600080fd5b506110cc612c39565b60408051938452602084019290925282820152519081900360600190f35b3480156110f657600080fd5b506106a6612c6e565b34801561110b57600080fd5b506106a6612c74565b34801561112057600080fd5b50610680612c7a565b34801561113557600080fd5b50610680612e7c565b34801561114a57600080fd5b506106a6613044565b34801561115f57600080fd5b5061072d61304a565b34801561117457600080fd5b506106a6600435613053565b34801561118c57600080fd5b506106a6600160a060020a0360043516602435613065565b3480156111b057600080fd5b506106a6613082565b3480156111c557600080fd5b506106a6613088565b3480156111da57600080fd5b5061072d60043561308e565b3480156111f257600080fd5b5061072d6130a3565b34801561120757600080fd5b506106a6600160a060020a03600435166130ac565b34801561122857600080fd5b506106a66130ed565b34801561123d57600080fd5b506106a6600160a060020a03600435166130f3565b34801561125e57600080fd5b5061072d613105565b610680600160a060020a036004351661310e565b34801561128757600080fd5b50610680613233565b34801561129c57600080fd5b506106a6613399565b3480156112b157600080fd5b506106a660043561339f565b3480156112c957600080fd5b506106a66004356133b1565b3480156112e157600080fd5b5061072d600160a060020a03600435166133c3565b6000806000806000806000806000806000806048548e10151515611364576040805160e560020a62461bcd02815260206004820152601f60248201527f796f75206d75737420627579206174206c65617374206f6e6520746f6b656e00604482015290519081900360640190fd5b336000908152605e602090815260408083206019548452909152902054600a116113fe576040805160e560020a62461bcd02815260206004820152602660248201527f796f752061726520627579696e6720746f6f206f6674656e20696e207468697360448201527f20726f756e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b602c5433600090815260536020526040902054108061142d575060195433600090815260526020526040902054105b1561143b5761143b336133d8565b60185460ff16151560011480156114575750601454601a540143115b15611464576114646133ea565b3360009081526050602052604090205460ff1615156114e557604f805460018181019092557fa2e8f972dc9f7d0b76177bb8be102e6bec069ee42c61080745e8825470e80c6c01805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556000908152605060205260409020805460ff191690911790555b60485460195460009081526020805260409020548f9c5061150b9163ffffffff6134dc16565b9950898b10611566576019546000908152602080526040812080549190559b5098998a99909850611542898b63ffffffff61358616565b336000908152604c60205260409020805482019055975061156161360c565b61157d565b60485461157a908c9063ffffffff61388316565b9b505b8b604b600033600160a060020a0316600160a060020a03168152602001908152602001600020600082825401925050819055508b604d600033600160a060020a0316600160a060020a0316815260200190815260200160002060006019548152602001908152602001600020600082825401925050819055508b604e600033600160a060020a0316600160a060020a031681526020019081526020016000206000602c54815260200190815260200160002060008282540192505081905550605e600033600160a060020a0316600160a060020a0316815260200190815260200160002060006019548152602001908152602001600020603f546001019080600181540180825580915050906001820390600052602060002001600090919290919091505550605f600033600160a060020a0316600160a060020a03168152602001908152602001600020600060195481526020019081526020016000208c603f540190806001815401808255809150509060018203906000526020600020016000909192909190915055506019546052600033600160a060020a0316600160a060020a0316815260200190815260200160002081905550602c546053600033600160a060020a0316600160a060020a0316815260200190815260200160002081905550611787606461177b600b548e6134dc90919063ffffffff16565b9063ffffffff61388316565b9650600160a060020a038d16158015906117aa5750600160a060020a038d163314155b156117d257600160a060020a038d166000908152604c602052604090208054880190556117fe565b600160a060020a038d1615806117f05750600160a060020a038d1633145b156117fe5760428054880190555b611818606461177b600d548e6134dc90919063ffffffff16565b6000805482019055600a5490965061183e9060649061177b908e9063ffffffff6134dc16565b60195460009081526028602052604090208054820190556009549095506118739060649061177b908e9063ffffffff6134dc16565b602c5460009081526037602052604090208054820190556007549094506118a89060649061177b908e9063ffffffff6134dc16565b6019546000908152602660205260409020805482019055600c549093506118dd9060649061177b908e9063ffffffff6134dc16565b60195460009081526027602052604090208054820190556008549092506119129060649061177b908e9063ffffffff6134dc16565b604280548201905560195460009081526020805260408120549192501015611967576019546000908152602080526040902054611955908d63ffffffff61358616565b60195460009081526020805260409020555b8b603f600082825401925050819055508b60326000602c548152602001908152602001600020600082825401925050819055508b602160006019548152602001908152602001600020600082825401925050819055508a603c60008282540192505081905550603d600081548092919060010191905055506119e8336133d8565b60198054604080518f815260208101829052808201939093527f612075736572206a75737420626f7567687420746f6b656e7300000000000000606084015251909133917f950fd392c5fe0748dd5533b48a4a05d47aac83df8417290db0f87bc9375a8b099181900360800190a35050505050505050505050505050565b605760209081526000928352604080842090915290825290205481565b604c6020526000908152604090205481565b60495481565b60415481565b60065481565b600454610100900460ff1681565b605b60209081526000928352604080842090915290825290205481565b605960209081526000928352604080842090915290825290205481565b603f5481565b602c5460009081526036602052604090205490565b60115481565b602c5481565b601b6020526000908152604090205460ff1681565b60526020526000908152604090205481565b6002805482908110611b4b57fe5b600091825260209091200154600160a060020a0316905081565b60276020526000908152604090205481565b603c54603d54604f54603e54604854303195565b605d60209081526000928352604080842090915290825290205481565b6048546019546000908152601f60205260408120549091611bcf919063ffffffff6134dc16565b905090565b60546020526000908152604090205481565b604754600160a060020a031681565b601f6020526000908152604090205481565b603b54610100900460ff1681565b604a5481565b60376020526000908152604090205481565b60036020526000908152604090205460ff1681565b60326020526000908152604090205481565b60405481565b60435481565b60465481565b605660209081526000928352604080842090915290825290205481565b600033321480611c9d5750600154600160a060020a031633145b1515611ce1576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b611cea336133d8565b336000908152604c602052604081205411611d4f576040805160e560020a62461bcd02815260206004820152601660248201527f6e6f2062616c616e636520746f20776974686472617700000000000000000000604482015290519081900360640190fd5b336000908152604c602052604090205430311015611ddd576040805160e560020a62461bcd02815260206004820152603060248201527f796f752063616e6e6f74207769746864726177206d6f7265207468616e20746860448201527f6520636f6e747261637420686f6c647300000000000000000000000000000000606482015290519081900360840190fd5b50336000818152604c6020526040808220805490839055905190929183156108fc02918491818181858888f19350505050158015611e1f573d6000803e3d6000fd5b506040805182815260208101829052600f818301527f61207573657220776974686472657700000000000000000000000000000000006060820152905133917fe813c10dc796032ac603c2fd7e519ab79d52f1985ed8fdce5d4f05ca011cabc8919081900360800190a250565b60516020526000908152604090205460ff1681565b602c54600081815260326020908152604080832054600160a060020a0386168452604e8352818420948452939091528120549091611f0491600a9161177b91600591611ef8918490620186a063ffffffff6134dc16565b9063ffffffff6138ff16565b92915050565b60556020526000908152604090205481565b6019546000818152601f60209081526040808320548280528184205460268452828520546027855283862054601d90955292909420549093929192939495565b604f805482908110611b4b57fe5b601954600081815260216020908152604080832054600160a060020a0386168452604d8352818420948452939091528120549091611f0491600a9161177b91600591611ef8918490620186a063ffffffff6134dc16565b60126020526000908152604090205460ff1681565b60165481565b60105481565b605c60209081526000928352604080842090915290825290205481565b3360009081526003602052604090205460ff161515600114612059576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b333214806120715750600154600160a060020a031633145b15156120b5576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff161580156120c85750604054155b151561212c576040805160e560020a62461bcd02815260206004820152602260248201527f746865206379636c652068617320616c7265616479206265656e207374617274604482015260f260020a61195902606482015290519081900360840190fd5b6004805460ff1916600117905561214161396a565b6121496139d4565b612151613b79565b6040805160208082526018908201527f61206e6577206379636c65206a7573742073746172746564000000000000000081830152905133917f58c1ee4f9436456f2ef3c321290be0fbf76d80852237d9e31b8df5a84ddbb646919081900360600190a2565b6000806000806000806000806103e860195410156121d6575060016121da565b5060005b602c54601954603e54604254603b54604354959d949c50929a509098509650610100900460ff1694509092509050565b60195481565b60055481565b605f6020528260005260406000206020528160005260406000208181548110151561223d57fe5b9060005260206000200160009250925050505481565b600e5481565b600154600160a060020a031681565b603c5481565b60136020526000908152604090205460ff1681565b60386020526000908152604090205481565b60006122a082613d8f565b6122a98361433f565b6122b284614454565b600160a060020a0385166000908152604c60205260409020540101019050919050565b60425481565b605860209081526000928352604080842090915290825290205481565b60366020526000908152604090205481565b604d60209081526000928352604080842090915290825290205481565b603d5481565b605a60209081526000928352604080842090915290825290205481565b601d6020526000908152604090205481565b605e6020528260005260406000206020528160005260406000208181548110151561223d57fe5b603e5481565b3360009081526003602052604090205460ff1615156001146123e3576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b333214806123fb5750600154600160a060020a031633145b151561243f576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b6041546276a70001421015801561245d5750603b5460ff1615156001145b15156124b3576040805160e560020a62461bcd02815260206004820152601f60248201527f746f6f206561726c7920746f20636c6f73652074686520636f6e747261637400604482015290519081900360640190fd5b6040805130318152602081018290526012818301527f636f6e74726163742064657374726f79656400000000000000000000000000006060820152905133917f63fdda159eb5f4ef203e133a4b723175b0e4235d131c7906ade7fdc32f5c3bf7919081900360800190a2600154600160a060020a0316ff5b602d6020526000908152604090205460ff1681565b60485481565b60286020526000908152604090205481565b601e6020526000908152604090205481565b602080526000908152604090205481565b3360009081526003602052604090205460ff1615156001146125d5576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b333214806125ed5750600154600160a060020a031633145b1515612631576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff16151560011461267e576040805160e560020a62461bcd0281526020600482015260156024820152600080516020615bcb833981519152604482015290519081900360640190fd5b60185460ff161515600114156126ed57601454601a540143116126ed576040805160e560020a62461bcd02815260206004820152602d6024820152600080516020615c0b8339815191526044820152600080516020615c2b833981519152606482015290519081900360840190fd5b6019546000908152601d602052604090205462093a800142118015612715575060185460ff16155b1515612791576040805160e560020a62461bcd02815260206004820152602260248201527f6561726c795265736f6c7665412063616e6e6f742062652063616c6c6564207960448201527f6574000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60115460105460195460009081526026602052604081205490926127cc9290916127c09163ffffffff61358616565b9063ffffffff61358616565b10156127d757600080fd5b6004805461ffff19166101001790556127ee61360c565b565b60195460009081526026602052604090205490565b60336020526000908152604090205481565b60236020526000908152604090205481565b303190565b600d5481565b60266020526000908152604090205481565b602a60205260009081526040902054600160a060020a031681565b60005481565b60485460195460009081526020805260408120549091611bcf919063ffffffff6134dc16565b60296020526000908152604090205481565b600b5481565b60536020526000908152604090205481565b60306020526000908152604090205481565b603b5462010000900460ff1681565b60216020526000908152604090205481565b60045462010000900460ff1681565b60256020526000908152604090205481565b60396020526000908152604090205481565b60455481565b603a60205260009081526040902054600160a060020a031681565b60085481565b60155481565b602f6020526000908152604090205481565b601c6020526000908152604090205460ff1681565b333214806129895750600154600160a060020a031633145b15156129cd576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff161515600114612a1a576040805160e560020a62461bcd0281526020600482015260156024820152600080516020615bcb833981519152604482015290519081900360640190fd5b60185460ff16151560011415612a8957601454601a54014311612a89576040805160e560020a62461bcd02815260206004820152602d6024820152600080516020615c0b8339815191526044820152600080516020615c2b833981519152606482015290519081900360840190fd5b612a92336133d8565b336000908152604c6020526040902054821115612af9576040805160e560020a62461bcd02815260206004820152601460248201527f696e73756666696369656e742062616c616e6365000000000000000000000000604482015290519081900360640190fd5b604854821015612b53576040805160e560020a62461bcd02815260206004820152601f60248201527f796f75206d75737420627579206174206c65617374206f6e6520746f6b656e00604482015290519081900360640190fd5b336000908152604c6020526040902054612b73908363ffffffff61358616565b336000908152604c6020526040902055612b8d82826112f6565b60408051838152602081018290526011818301527f612075736572207265696e7665737465640000000000000000000000000000006060820152905133917f7089cb758939a26dfd96447cfb746e9401dfad6a02f6bba6d8704e84d5142353919081900360800190a25050565b602b60205260009081526040902054600160a060020a031681565b60246020526000908152604090205481565b60356020526000908152604090205481565b6000806000602c546002604254811515612c4f57fe5b602c546000908152602f60205260409020549295500492509050909192565b60095481565b601a5481565b3360009081526003602052604090205460ff161515600114612cd4576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b33321480612cec5750600154600160a060020a031633145b1515612d30576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff6101009091041615156001148015612d56575060045462010000900460ff16155b8015612d69575060185460ff1615156001145b8015612d7a5750601454601a540143115b1515612df6576040805160e560020a62461bcd02815260206004820152602260248201527f6561726c795265736f6c7665422063616e6e6f742062652063616c6c6564207960448201527f6574000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004805462ff0000191662010000179055612e0f61455a565b6042546040805191825260208201819052601c828201527f746865206379636c6520776173207265736f6c766564206561726c790000000060608301525133917fd6ef6a176aa40fb33015eb650e2cfd21f3b9d3a183fd9e6387061aaac8ad6635919081900360800190a2565b3360009081526003602052604090205460ff161515600114612ed6576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b33321480612eee5750600154600160a060020a031633145b1515612f32576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60185460ff1615156001148015612f4e5750601a546101000143115b1515612fc9576040805160e560020a62461bcd028152602060048201526024808201527f726573746172744d696e6947616d652063616e6e6f742062652063616c6c656460448201527f2079657400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612fd161360c565b6040805160208082526022908201527f6d696e692d67616d652070726f63657373696e672077617320726573746172748183015260f260020a611959026060820152905133917f206d4a37d6c0659e4ec230d287e07c594e15e276fa73a5f81640166600ab0f83919081900360800190a2565b600c5481565b603b5460ff1681565b60226020526000908152604090205481565b604e60209081526000928352604080842090915290825290205481565b60445481565b60175481565b602e6020526000908152604090205460ff1681565b60185460ff1681565b603f54600160a060020a0382166000908152604b60205260408120549091611f0491600a9161177b91600591611ef8918490620186a063ffffffff6134dc16565b60075481565b604b6020526000908152604090205481565b60045460ff1681565b333214806131265750600154600160a060020a031633145b151561316a576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b60045460ff1615156001146131b7576040805160e560020a62461bcd0281526020600482015260156024820152600080516020615bcb833981519152604482015290519081900360640190fd5b60185460ff1615156001141561322657601454601a54014311613226576040805160e560020a62461bcd02815260206004820152602d6024820152600080516020615c0b8339815191526044820152600080516020615c2b833981519152606482015290519081900360840190fd5b61323034826112f6565b50565b3360009081526003602052604081205460ff16151560011461328d576040805160e560020a62461bcd0281526020600482015260146024820152600080516020615beb833981519152604482015290519081900360640190fd5b333214806132a55750600154600160a060020a031633145b15156132e9576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020615c4b833981519152604482015290519081900360640190fd5b50600080548180556001546040519192600160a060020a039091169183156108fc0291849190818181858888f1935050505015801561332c573d6000803e3d6000fd5b5060408051828152602081018290526016818301527f616e2061646d696e206a757374207769746864726577000000000000000000006060820152905133917f95df0f66869f60dce077afdfdd5a8eae3038bfd01a988c9375ea7b81b69e1dfa919081900360800190a250565b600a5481565b60316020526000908152604090205481565b60346020526000908152604090205481565b60506020526000908152604090205460ff1681565b6133e18161459d565b61323081614989565b601454601a5401406017556133fd61507f565b613405615231565b60195460009081526013602052604090205460ff16151561345357601154336000908152604c60209081526040808320805490940190935560195482526013905220805460ff191660011790555b61345b613b79565b6018805460ff1916905560158054600101905560195460408051438152602081018290526013818301527f70726f63657373696e672066696e6973686564000000000000000000000000006060820152905133917fb3a773331914267a7262435efa9633f5701e577627af9934252fdec756030d81919081900360800190a3565b6000808315156134ef576000915061357f565b508282028284828115156134ff57fe5b041461357b576040805160e560020a62461bcd02815260206004820152602860248201527f74686520536166654d617468206d756c7469706c69636174696f6e206368656360448201527f6b206661696c6564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8091505b5092915050565b600082821115613606576040805160e560020a62461bcd02815260206004820152602560248201527f74686520536166654d617468207375627472616374696f6e20636865636b206660448201527f61696c6564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b60185460ff161580613635575060185460ff16151560011480156136355750601a546101000143115b15156136b1576040805160e560020a62461bcd02815260206004820152602660248201527f7365656420412063616e6e6f7420626520726567656e6572617465642072696760448201527f6874206e6f770000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601954600090815260208052604090205415806136db575060045460ff6101009091041615156001145b1515613757576040805160e560020a62461bcd02815260206004820152602560248201527f61637469766520746f6b656e732072656d61696e20696e2074686973206d696e60448201527f6967616d65000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6018805460ff1916600190811790915543601a81905560001901406016556019541115613793576019546000908152601e602052604090204290555b6005546019548115156137a257fe5b0615156137be57602c5460009081526030602052604090204290555b60195460009081526012602052604090205460ff16151561380c57601054336000908152604c60209081526040808320805490940190935560195482526012905220805460ff191660011790555b60158054600101905560195460408051438152602081018290526012818301527f70726f63657373696e67207374617274656400000000000000000000000000006060820152905133917f12df28cb5dc1acadb13f650f1febf3b8d0ad9b02fc9fe76061d528b6572d40b1919081900360800190a3565b6000808083116138eb576040805160e560020a62461bcd02815260206004820152602260248201527f74686520536166654d617468206469766973696f6e20636865636b206661696c604482015260f260020a61195902606482015290519081900360840190fd5b82848115156138f657fe5b04949350505050565b60008282018381101561357b576040805160e560020a62461bcd02815260206004820152602260248201527f74686520536166654d617468206164646974696f6e20636865636b206661696c604482015260f260020a61195902606482015290519081900360840190fd5b603b5460ff16156139c5576040805160e560020a62461bcd02815260206004820152601860248201527f746865206379636c652063616e6e6f74206265206f7665720000000000000000604482015290519081900360640190fd5b60408054600101905542604655565b603b5460ff1615613a2f576040805160e560020a62461bcd02815260206004820152601860248201527f746865206379636c652063616e6e6f74206265206f7665720000000000000000604482015290519081900360640190fd5b602c8054600101908190556000908152602f60205260409020429055603e5415613a9d5760236000613a6d600160195461358690919063ffffffff16565b81526020019081526020016000205460010160336000602c54815260200190815260200160002081905550613ab0565b602c546000908152603360205260408120555b602c546002116127ee5760236000613ad4600160195461358690919063ffffffff16565b81526020019081526020016000205460346000613afd6001602c5461358690919063ffffffff16565b815260200190815260200160002081905550613b4c60336000613b2c6001602c5461358690919063ffffffff16565b815260200190815260200160002054603e5461358690919063ffffffff16565b60316000613b666001602c5461358690919063ffffffff16565b8152602081019190915260400160002055565b603b5460ff1615613bd4576040805160e560020a62461bcd02815260206004820152601860248201527f746865206379636c652063616e6e6f74206265206f7665720000000000000000604482015290519081900360640190fd5b60198054600101908190556000908152601d60205260409020429055603e5415613c1857603e54601954600090815260226020526040902060019091019055613c2b565b6019546000908152602260205260408120555b613c33615399565b601980546000908152601f6020908152604080832094909455825482528382205481805284832055603e54835483526023909152929020919091555460011015613c84576049546048805490910190555b600554601954811515613c9357fe5b06158015613ca357506001601954115b15613ce557613cb0615467565b613cb86139d4565b602c54613ccc90600163ffffffff61358616565b6601c6bf526340000266038d7ea4c68000016048819055505b600654600101601954811515613cf757fe5b06158015613d0757506001601954115b15613d1457613d14615678565b6019546000818152601f60209081526040918290205482519081529081018290526014818301527f6e6577206d696e6967616d652073746172746564000000000000000000000000606082015290517fab4f8235dd6e91d2d31a0edc8c8c9fd500224f08e3ee894c6bb0c2a4dd89515a9181900360800190a2565b603b546000908190819081908190819060ff1615156001148015613dcc5750600160a060020a03871660009081526051602052604090205460ff16155b15613f1057603b5462010000900460ff16151560011415613df1576044549350613e00565b613df96157e1565b5060445493505b603b54610100900460ff16158015613e395750600160a060020a0387166000908152605f60209081526040808320878452909152812054115b15613f1057600092505b600160a060020a0387166000908152605e60209081526040808320878452909152902054831015613f1057600160a060020a0387166000908152605e602090815260408083208784529091529020805484908110613e9d57fe5b906000526020600020015460435410158015613ef45750600160a060020a0387166000908152605f602090815260408083208784529091529020805484908110613ee357fe5b906000526020600020015460435411155b15613f055760425485019450613f10565b600190920191613e43565b600160a060020a038716600090815260536020908152604080832054605590925290912054108015613f5b5750600160a060020a038716600090815260536020526040902054602c54115b156140c95750600160a060020a038616600090815260556020908152604080832054808452602e9092529091205460ff16151560011415613fac576000818152603960205260409020549150613fc8565b613fb5816158d5565b5060008181526039602052604090205491505b600092505b600160a060020a0387166000908152605e602090815260408083208584529091529020548310156140c957600160a060020a0387166000908152605e60209081526040808320858452909152902080548490811061402757fe5b90600052602060002001546035600083815260200190815260200160002054101580156140a05750600160a060020a0387166000908152605f60209081526040808320858452909152902080548490811061407e57fe5b9060005260206000200154603560008381526020019081526020016000205411155b156140be5760008281526036602052604090205494909401936140c9565b600190920191613fcd565b600160a060020a0387166000908152605260209081526040808320546054909252909120541080156141145750600160a060020a038716600090815260526020526040902054601954115b1561433457600160a060020a038716600090815260526020526040812054945092505b600160a060020a0387166000908152605e6020908152604080832087845290915290205483101561423357600160a060020a0387166000908152605e60209081526040808320878452909152902080548490811061419157fe5b906000526020600020015460246000868152602001908152602001600020541015801561420a5750600160a060020a0387166000908152605f6020908152604080832087845290915290208054849081106141e857fe5b9060005260206000200154602460008681526020019081526020016000205411155b15614228576000848152602660205260409020549490940193614233565b600190920191614137565b600092505b600160a060020a0387166000908152605e6020908152604080832087845290915290205483101561433457600160a060020a0387166000908152605e60209081526040808320878452909152902080548490811061429257fe5b906000526020600020015460256000868152602001908152602001600020541015801561430b5750600160a060020a0387166000908152605f6020908152604080832087845290915290208054849081106142e957fe5b9060005260206000200154602560008681526020019081526020016000205411155b15614329576000848152602760205260409020549490940193614334565b600190920191614238565b509295945050505050565b600160a060020a038116600081815260556020908152604080832054605a8352818420818552835281842054858552605b8452828520828652845282852054868652605d85528386208387528552838620546032865284872054600f54988852604e8752858820858952909652938620549596929591949093926143dc92600a9261177b926005909101918391600101850a63ffffffff6134dc16565b925061440d600f54600a0a61177b8560376000898152602001908152602001600020546134dc90919063ffffffff16565b600160a060020a0387166000908152605c6020908152604080832088845290915290205490925061444590839063ffffffff61358616565b90508094505b50505050919050565b600160a060020a038116600081815260546020908152604080832054605683528184208185528352818420548585526057845282852082865284528285205486865260598552838620838752855283862054601f865284872054600f54988852604d8752858820858952909652938620549596929591949093926144f192600a9261177b926005909101918391600101850a63ffffffff6134dc16565b9250614522600f54600a0a61177b8560286000898152602001908152602001600020546134dc90919063ffffffff16565b600160a060020a038716600090815260586020908152604080832088845290915290205490925061444590839063ffffffff61358616565b601454601a54014060175561456d61507f565b614575615231565b61457d615467565b614585615678565b6018805460ff19908116909155600480549091169055565b600160a060020a0381166000818152605260209081526040808320546053835281842054818552601f845282852054600f54968652604d8552838620838752909452918420549094919392839261460d92600a9261177b926005909101918391600101850a63ffffffff6134dc16565b600160a060020a03861660009081526056602090815260408083208884528252808320849055600f5460289092529091205461465492600a9290920a9161177b91906134dc565b600160a060020a03861660008181526057602090815260408083208984528083528184208690559383526058825280832089845282529091205491905261469b9190613586565b600160a060020a03861660009081526059602090815260408083208884529091528120829055101561479e57600084815260286020908152604080832054600160a060020a0389168452605983528184208885529092529091205411156146fe57fe5b600160a060020a03851660009081526059602090815260408083208784529091529020543031101561472c57fe5b600160a060020a038516600081815260576020908152604080832088845282528083205484845260588352818420898552835281842055838352605982528083208884528252808320805490849055938352604c82528083208054850190558783526029909152902080548201905591505b600083815260326020908152604080832054600f54600160a060020a038a168552604e84528285208886529093529220546147f292600a9261177b926005909201918391600101850a63ffffffff6134dc16565b600160a060020a0386166000908152605a602090815260408083208784528252808320849055600f5460379092529091205461483992600a9290920a9161177b91906134dc565b600160a060020a0386166000818152605b60209081526040808320888452808352818420869055938352605c82528083208884528252909120549190526148809190613586565b600160a060020a0386166000908152605d602090815260408083208784529091528120829055101561498257600083815260376020908152604080832054600160a060020a0389168452605d83528184208785529092529091205411156148e357fe5b600160a060020a0385166000908152605d602090815260408083208684529091529020543031101561491157fe5b50600160a060020a0384166000818152605b60209081526040808320868452825280832054848452605c8352818420878552835281842055838352605d82528083208684528252808320805490849055938352604c8252808320805485019055858352603890915290208054820190555b5050505050565b603b5460009081908190819060ff16151560011480156149c25750600160a060020a03851660009081526051602052604090205460ff16155b15614b4a57604454603b54909450610100900460ff16158015614a065750600160a060020a0385166000908152605f60209081526040808320878452909152812054115b15614b2657600092505b600160a060020a0385166000908152605e60209081526040808320878452909152902054831015614b2657600160a060020a0385166000908152605e602090815260408083208784529091529020805484908110614a6a57fe5b906000526020600020015460435410158015614ac15750600160a060020a0385166000908152605f602090815260408083208784529091529020805484908110614ab057fe5b906000526020600020015460435411155b15614b1b57604254600160a060020a0386166000908152604c6020526040902080549091019055603b805461ff0019166101001790556047805473ffffffffffffffffffffffffffffffffffffffff191633179055614b26565b600190920191614a10565b600160a060020a0385166000908152605160205260409020805460ff191660011790555b600160a060020a0385166000908152605360209081526040808320548352602d90915290205460ff16158015614ba55750600160a060020a0385166000908152605360209081526040808320548352602e90915290205460ff165b15614d4857505050600160a060020a03821660009081526053602090815260408083205480845260399092528220545b600160a060020a0385166000908152605e60209081526040808320848452909152902054831015614d2257600160a060020a0385166000908152605e602090815260408083208484529091529020805484908110614c2f57fe5b9060005260206000200154603560008481526020019081526020016000205410158015614ca85750600160a060020a0385166000908152605f602090815260408083208484529091529020805484908110614c8657fe5b9060005260206000200154603560008481526020019081526020016000205411155b15614d1757600081815260366020908152604080832054600160a060020a0389168452604c835281842080549091019055848352602d8252808320805460ff19166001179055603a9091529020805473ffffffffffffffffffffffffffffffffffffffff191633179055614d22565b600190920191614bd5565b600160a060020a0385166000908152605360209081526040808320546055909252909120555b600160a060020a038516600090815260526020908152604080832054605490925290912054108015614d935750600160a060020a038516600090815260526020526040902054601954115b1561498257600160a060020a038516600090815260526020526040812054945092505b600160a060020a0385166000908152605e60209081526040808320878452909152902054831015614f0357600160a060020a0385166000908152605e602090815260408083208784529091529020805484908110614e1057fe5b9060005260206000200154602460008681526020019081526020016000205410158015614e895750600160a060020a0385166000908152605f602090815260408083208784529091529020805484908110614e6757fe5b9060005260206000200154602460008681526020019081526020016000205411155b15614ef857600084815260266020908152604080832054600160a060020a0389168452604c835281842080549091019055868352601b8252808320805460ff19166001179055602a9091529020805473ffffffffffffffffffffffffffffffffffffffff191633179055614f03565b600190920191614db6565b600092505b600160a060020a0385166000908152605e6020908152604080832087845290915290205483101561505557600160a060020a0385166000908152605e602090815260408083208784529091529020805484908110614f6257fe5b9060005260206000200154602560008681526020019081526020016000205410158015614fdb5750600160a060020a0385166000908152605f602090815260408083208784529091529020805484908110614fb957fe5b9060005260206000200154602560008681526020019081526020016000205411155b1561504a57600084815260276020908152604080832054600160a060020a0389168452604c835281842080549091019055868352601c8252808320805460ff19166001179055602b9091529020805473ffffffffffffffffffffffffffffffffffffffff191633179055615055565b600190920191614f08565b50505050600160a060020a0316600090815260526020908152604080832054605490925290912055565b601554601654601754604080516020808201959095528082019390935260608084019290925280518084039092018252608090920191829052805160009384939182918401908083835b602083106150e85780518252601f1990920191602091820191016150c9565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120601954600090815282805284812054601f909352939093205492965061514a945061513d93509050613586565b839063ffffffff61597216565b60198054600090815260226020908152604080832054602483528184209086019055601154601054945484526026909252909120549293506151989290916127c0919063ffffffff61358616565b601980546000908152602660209081526040808320949094556015805460010190559154808252908390205483518581529283015260608284018190526016908301527f6d696e6967616d65207072697a65206177617264656400000000000000000000608083015291517fcda8e84b652675a8e341621d30185dfcf07eb61bca2b1fb4fcd9b4458a3d144e9181900360a00190a25050565b601554601654601754604080516020808201959095528082019390935260608084019290925280518084039092018252608090920191829052805160009384939182918401908083835b6020831061529a5780518252601f19909201916020918201910161527b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120601954600090815282805284812054601f90935293909320549296506152ef945061513d93509050613586565b60198054600090815260226020908152604080832054602583528184209086019055601580546001019055925480835260278252918390205483518581529182015260608184018190526018908201527f6d696e6967616d652061697264726f702061776172646564000000000000000060808201529151929350917f6d2f5773ccbf41f3a3da493acf5a64a6d22a22e0eaca32d794683d1c72dae0099181900360a00190a25050565b601554601654601754604080516020808201959095528082019390935260608084019290925280518084039092018252608090920191829052805160009384938493849390928291908401908083835b602083106154085780518252601f1990920191602091820191016153e9565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120604a5490965061544693508692509050615972565b604a54603e8054929091019182019055601580546001019055949350505050565b6000806000806000601554601654601754604051602001808481526020018360001916600019168152602001826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106154e45780518252601f1990920191602091820191016154c5565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120602c546000908152603390925292812054601954939a506155589550935060239290915061553b906001613586565b81526020019081526020016000205461358690919063ffffffff16565b935061556a858563ffffffff61597216565b602c5460009081526033602090815260408083205460359092529091209082019055600e546042549194506155ac9160649161177b919063ffffffff6134dc16565b91506155c9606461177b60046042546134dc90919063ffffffff16565b6000805482018155602c80548252603660205260409091208490556042849055549091506155f6906159de565b50601580546001019055602c54604080518581526020810185905260608183018190526013908201527f726f756e64207072697a65206177617264656400000000000000000000000000608082015290517ff3315f3af360a6c6236052caa1610cb885187b421c2746f6c6c762f9a5fbb8349181900360a00190a25050505050565b601554601654601754604080516020808201959095528082019390935260608084019290925280518084039092018252608090920191829052805160009384939182918401908083835b602083106156e15780518252601f1990920191602091820191016156c2565b51815160001960209485036101000a810191821691199290921617909152604080519590930185900390942060195490940160009081526023909152205491955061573693508592505063ffffffff61597216565b60438190556004805460ff1990811690915542604155603b805490911660011790559050615762615ab9565b5060158054600101905560425460408051838152602081019290925260608282018190526013908301527f6379636c65207072697a652061776172646564000000000000000000000000006080830152517f31931b65ed09497bdc80c1adff693bb082fa9136c0ffe287a6379d29a56384369181900360a00190a15050565b6043546000908160018180805b602c54841161583b57600084815260336020526040902054861080159061582357506000848152603460205260409020548611155b156158305783945061583b565b6001909301926157ee565b508360018114156158545760019250600554915061587d565b6002811061587d5760055461587090829063ffffffff6134dc16565b9250600160055484010391505b8293505b8184116158cc5760008481526022602052604090205486108015906158b457506000848152602360205260409020548611155b156158c1578396506158cc565b600190930192615881565b50505050505090565b60008181526035602052604081205481808060018614156158fe57600192506005549150615927565b600286106159275760055461591a90879063ffffffff6134dc16565b9250600160055484010391505b50815b81811161444b57600081815260226020526040902054841080159061595d57506000818152602360205260409020548411155b1561596a5780945061444b565b60010161592a565b60008115156159cb576040805160e560020a62461bcd02815260206004820181905260248201527f74686520536166654d617468206d6f64756c6f20636865636b206661696c6564604482015290519081900360640190fd5b81838115156159d657fe5b069392505050565b60008060008084600114156159fb57600192506005549150615a24565b60028510615a2457600554615a1790869063ffffffff6134dc16565b9250600160055484010391505b50815b818111615ab15760008181526022602090815260408083205488845260359092529091205410801590615a76575060008181526023602090815260408083205488845260359092529091205411155b15615aa9576000858152603960208181526040808420858155602e83529320805460ff1916600117905552549350615ab1565b600101615a27565b505050919050565b600060018180805b602c548411615b145760008481526033602052604090205460435410801590615afa575060008481526034602052604090205460435411155b15615b09576045849055615b14565b600190930192615ac1565b506045546001811415615b2f57600192506005549150615b58565b60028110615b5857600554615b4b90829063ffffffff6134dc16565b9250600160055484010391505b8293505b818411615bc35760008481526022602052604090205460435410801590615b93575060008481526023602052604090205460435411155b15615bb8576044849055603b805462ff00001916620100001790559293508392615bc3565b600190930192615b5c565b505050509056007468652067616d65206d757374206265206f70656e0000000000000000000000796f75206d75737420626520616e2061646d696e00000000000000000000000074686520726f756e64206973207374696c6c2070726f63657373696e672e2074727920616761696e20736f6f6e000000000000000000000000000000000000006f6e6c7920617070726f76656420636f6e74726163747320616c6c6f77656400a165627a7a72305820c575e93dbea9eec76b5de9276fedd69e8ff5ceb9b9de9a110cb27964036a74020029000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f
Arg [1] : 000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f
Arg [2] : 000000000000000000000000aebbd80fd7dae979d965a3a5b09bbcd23eb40e5f


   Swarm Source:
bzzr://c575e93dbea9eec76b5de9276fedd69e8ff5ceb9b9de9a110cb27964036a7402

 

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