Contract Overview | Fomo3D_1
Balance: 4.127936413230892449 Ether
Ether Value: $868.52 (@ $210.40/ETH)
Transactions: 2103 txns
 Latest 25 txns From a total of 2103 Transactions

TxHash Age From To Value [TxFee]
0x875fdc0fad49d68d20e80a98f584bde4c9a094d2210d2ee4a00ca6cce52b0c8211 days 3 hrs ago0x76b797e6951ef6744602a9e608f8325f189ee251  IN   Fomo3D_10.000139684904602 Ether0.0000441947
0x2710b0e20e7b0ad38d8738e9148ec69cf6f3d6b1decfaa824aec71971c533d0219 days 18 hrs ago0x322cf22b50ece56c1be25b58411690c9ba8848ae  IN   Fomo3D_10 Ether0.00048263
0xa75579c25df1be774e1b2ef275f5b7e9ec2bfe3ee22a8bc0a97722e1792cb24d31 days 10 hrs ago0xa73cd3397dcb4ec611edbfda5e1705bae4856113  IN   Fomo3D_10 Ether0.00048263
0x89de95cd486212dbfae49876f66b8007319eb0f50a5627b34ce0c500dc0b3ba432 days 20 hrs ago0x8380d1c04705af662ece8a3ee5255e83bb2e35ca  IN   Fomo3D_10 Ether0.0002846835
0x84d17bd2c7047994403c302664a32bc92c55c4b2331c82369d1009cbd329006549 days 13 mins ago0x0b78908e1b393cba8a5ce2c5dd53d32b8601abc3  IN   Fomo3D_10 Ether0.00035044
0xa1320dd7ba3009ece5a0ecc08a3d9cbd627eb557a12ee0fc16f4caf7b8815e3850 days 16 hrs ago0x0b78908e1b393cba8a5ce2c5dd53d32b8601abc3  IN   Fomo3D_10.000078750004101 Ether0.001223356
0x92cf4348ca40b4a567edcd5c2d1d80d1c3441d5dc47d59d8336ee9c54f0b591451 days 23 hrs ago0x0b78908e1b393cba8a5ce2c5dd53d32b8601abc3  IN   Fomo3D_10.000078750004101 Ether0.000544702
0xd984cc0dcc31787205f03cde78a187b1d99c35bc303c925f8f089c42ba7efacb53 days 3 hrs ago0x283b98b4a04a74c80271a4ba4913b8b2202d8d6f  IN   Fomo3D_10.000078750004101 Ether0.000884278
0xe1709a7f8f72783f74908352efd5af198f74facc1ae26e64a9417771148d6d5855 days 11 hrs ago0x51f2f0878fdb54e8d88b9a2d70f2d48822ce1cc6  IN   Fomo3D_10 Ether0.000096526
0xb13e1d1162a8a2066e47419a09a614fa36cb79da35b49b5fc1ed563f55125b5d55 days 23 hrs ago0x9e99639787f4f2f20ac8bed87bf794e979bc4f06  IN   Fomo3D_10 Ether0.00063263
0x65f56e6a856f4c3e06c5b2eb45482f9ac4834fd952da93842f97d4dbfa9bd9e057 days 2 hrs ago0x825d5d0df3b2d59f69cc673f041ca91a296b8183  IN   Fomo3D_10 Ether0.000253052
0x071ad45a14e3b256df844502a1e62036582b6280c7b2d237377d48b0bc7c997957 days 2 hrs ago0x658ac88c53cdddebc2abb03ecca6164019eb34f0  IN   Fomo3D_10 Ether0.000253052
0xb3679ce957f19336d3a78f82049bf2099fcc49dc50e1a13392f1bba15022245357 days 13 hrs ago0xe07b178b1d663994460f42e36d7e0b45eab715e5  IN   Fomo3D_10 Ether0.0002461413
0x811abf48dceac50189bee9bd5365ca5c025d73d120f9cbe0025fa7698c9ac8e257 days 21 hrs ago0x7602543fb013b2e82fde25c0f10268865e372aa6  IN   Fomo3D_10 Ether0.000123654
0xd2749a27a0fb5f45dfda726a72d2b0fa5c4dd42e68311315ec2bedaaa7fd9c2c58 days 7 hrs ago0xda239d47ed6858eca91a57be41b3586d74082722  IN   Fomo3D_10 Ether0.000029316
0x7921fd99c7ca48c81729a160759ef322696385a59bf655456fdf983e48f645d758 days 7 hrs ago0xda239d47ed6858eca91a57be41b3586d74082722  IN   Fomo3D_10 Ether0.0000695893
0xb6fb61e57f65956a6c0a28b7eca0d0a80ef521524199929cede3c1870d54d81a59 days 13 hrs ago0xaf829549f2ca8c1c44616737bee024fef3d67ec3  IN   Fomo3D_10.01 Ether0.00037506
0x5240230748475e0d112387b26ee49a4f454d7e786ca3bd6846471397f04e4af359 days 22 hrs ago0xaf829549f2ca8c1c44616737bee024fef3d67ec3  IN   Fomo3D_10.01 Ether0.000154102
0x86055df263c3873114f8a501004e93349e1fc86b01851ea1187841580f06561c60 days 10 hrs ago0x84ecb387395a1be65e133c75ff9e5fcc6f756db3  IN   Fomo3D_10 Ether0.000447498
0xea2febd1445793921c82d6b86f0132e35a8d398a8bf6a3f4f7862f9fdab8ab6d60 days 14 hrs ago0xece879307315e12236b2958b71fddb75aa753846  IN   Fomo3D_10 Ether0.0001881
0x324250606a574c50eb796be62ad22dd62e612f07ee851b7661cba6daea6f489862 days 14 hrs ago0x32a93668e60399c67df9808b8642f812375beadb  IN   Fomo3D_10.00007725 Ether0.022354788
0x8b89a977eade29846411ef680557b0571a24ea10a794db626c0273a78367029c62 days 23 hrs ago0x4d299adaa74902f929d701e03191a0220daeccb2  IN   Fomo3D_10 Ether0.0002508
0xc1c74ae9f80fa2380fe38a65d16095d8ee9c366fe326c409491a396a2ebdb0c663 days 2 hrs ago0x32a93668e60399c67df9808b8642f812375beadb  IN   Fomo3D_10.000078272 Ether0.00585414
0xc19a7df25efd667fc9a75df71a827b92013dec732908918b0fac75c8b78bd10963 days 2 hrs ago0xa73cd3397dcb4ec611edbfda5e1705bae4856113  IN   Fomo3D_10.000079790347422 Ether0.001077865574
0x062574f5429200f00a082d3dfa67bfd78a92dcf5be385c868a33f9012e98490263 days 2 hrs ago0xa73cd3397dcb4ec611edbfda5e1705bae4856113  IN   Fomo3D_10.000079790347422 Ether0.001168131271
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click Here To View More View All
ParentTxHash Block Age From To Value
0x875fdc0fad49d68d20e80a98f584bde4c9a094d2210d2ee4a00ca6cce52b0c82646134411 days 3 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000002793698092053 Ether
0x875fdc0fad49d68d20e80a98f584bde4c9a094d2210d2ee4a00ca6cce52b0c82646134411 days 3 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x30d4d6079829082e5a4bcaabf6887362527b88380.000001396849046026 Ether
0x2710b0e20e7b0ad38d8738e9148ec69cf6f3d6b1decfaa824aec71971c533d02640869019 days 18 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x322cf22b50ece56c1be25b58411690c9ba8848ae0.004622774922069474 Ether
0xa75579c25df1be774e1b2ef275f5b7e9ec2bfe3ee22a8bc0a97722e1792cb24d633792431 days 10 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0xa73cd3397dcb4ec611edbfda5e1705bae48561130.056550474794965829 Ether
0x89de95cd486212dbfae49876f66b8007319eb0f50a5627b34ce0c500dc0b3ba4632913632 days 20 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x8380d1c04705af662ece8a3ee5255e83bb2e35ca0.006461274320260208 Ether
0x84d17bd2c7047994403c302664a32bc92c55c4b2331c82369d1009cbd3290065623289449 days 13 mins ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x0b78908e1b393cba8a5ce2c5dd53d32b8601abc30.000355472419737549 Ether
0x84d17bd2c7047994403c302664a32bc92c55c4b2331c82369d1009cbd3290065623289449 days 13 mins ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000005197384389409 Ether
0xa1320dd7ba3009ece5a0ecc08a3d9cbd627eb557a12ee0fc16f4caf7b8815e38622290050 days 16 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000013387500697265 Ether
0xa1320dd7ba3009ece5a0ecc08a3d9cbd627eb557a12ee0fc16f4caf7b8815e38622290050 days 16 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x30d4d6079829082e5a4bcaabf6887362527b88380.000000787500041015 Ether
0x92cf4348ca40b4a567edcd5c2d1d80d1c3441d5dc47d59d8336ee9c54f0b5914621533551 days 23 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000048823843730035 Ether
0xd984cc0dcc31787205f03cde78a187b1d99c35bc303c925f8f089c42ba7efacb620843553 days 3 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000001575000082031 Ether
0xd984cc0dcc31787205f03cde78a187b1d99c35bc303c925f8f089c42ba7efacb620843553 days 3 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x30d4d6079829082e5a4bcaabf6887362527b88380.000000787500041015 Ether
0xe1709a7f8f72783f74908352efd5af198f74facc1ae26e64a9417771148d6d58619461455 days 11 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x51f2f0878fdb54e8d88b9a2d70f2d48822ce1cc60.026225604409409182 Ether
0xb13e1d1162a8a2066e47419a09a614fa36cb79da35b49b5fc1ed563f55125b5d619160955 days 23 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x9e99639787f4f2f20ac8bed87bf794e979bc4f060.481145402081775048 Ether
0x65f56e6a856f4c3e06c5b2eb45482f9ac4834fd952da93842f97d4dbfa9bd9e0618486557 days 2 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x825d5d0df3b2d59f69cc673f041ca91a296b81830.000051262018936775 Ether
0x071ad45a14e3b256df844502a1e62036582b6280c7b2d237377d48b0bc7c9979618486557 days 2 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x658ac88c53cdddebc2abb03ecca6164019eb34f00.005474209149693389 Ether
0xb3679ce957f19336d3a78f82049bf2099fcc49dc50e1a13392f1bba150222453618220757 days 13 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0xe07b178b1d663994460f42e36d7e0b45eab715e50.000819740235115059 Ether
0x7921fd99c7ca48c81729a160759ef322696385a59bf655456fdf983e48f645d7617785958 days 7 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0xda239d47ed6858eca91a57be41b3586d740827220.000424967217042155 Ether
0xb6fb61e57f65956a6c0a28b7eca0d0a80ef521524199929cede3c1870d54d81a617024259 days 13 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x40fb95f01d3fa718996107d5bfad0bebd9e8b8740.01 Ether
0x5240230748475e0d112387b26ee49a4f454d7e786ca3bd6846471397f04e4af3616809159 days 22 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x40fb95f01d3fa718996107d5bfad0bebd9e8b8740.01 Ether
0x86055df263c3873114f8a501004e93349e1fc86b01851ea1187841580f06561c616517260 days 10 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x84ecb387395a1be65e133c75ff9e5fcc6f756db30.000156159995716663 Ether
0x86055df263c3873114f8a501004e93349e1fc86b01851ea1187841580f06561c616517260 days 10 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000194035374854518 Ether
0xea2febd1445793921c82d6b86f0132e35a8d398a8bf6a3f4f7862f9fdab8ab6d616422860 days 14 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.000194035374854518 Ether
0x324250606a574c50eb796be62ad22dd62e612f07ee851b7661cba6daea6f4898615249862 days 14 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x6b9e7c45622832a12f728ca87e23fa3a6b512fe20.0000131325 Ether
0x324250606a574c50eb796be62ad22dd62e612f07ee851b7661cba6daea6f4898615249862 days 14 hrs ago0x51a5271ec514c3065d9de2d8e95051989f7d53ab0x30d4d6079829082e5a4bcaabf6887362527b88380.0000007725 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: FoMo3Dlong
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;
/**
 * @title -FoMo-3D v0.7.1
 * ┌┬┐┌─┐┌─┐┌┬┐   ╦╦ ╦╔═╗╔╦╗  ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
 *  │ ├┤ ├─┤│││   ║║ ║╚═╗ ║   ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
 *  ┴ └─┘┴ ┴┴ ┴  ╚╝╚═╝╚═╝ ╩   ┴  ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
 *                                  _____                      _____
 *                                 (, /     /)       /) /)    (, /      /)          /)
 *          ┌─┐                      /   _ (/_      // //       /  _   // _   __  _(/
 *          ├─┤                  ___/___(/_/(__(_/_(/_(/_   ___/__/_)_(/_(_(_/ (_(_(_
 *          ┴ ┴                /   /          .-/ _____   (__ /
 *                            (__ /          (_/ (, /                                      /)™
 *                                                 /  __  __ __ __  _   __ __  _  _/_ _  _(/
 * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐                          /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
 * ├─┘├┬┘│ │ │││ ││   │                      (__ /              .-/  © Jekyll Island Inc. 2018
 * ┴  ┴└─└─┘─┴┘└─┘└─┘ ┴                                        (_/   .--,-``-.
 *========,---,.======================____==========================/   /     '.=======,---,====*
 *      ,'  .' |                    ,'  , `.                       / ../        ;    .'  .' `\
 *    ,---.'   |    ,---.        ,-+-,.' _ |    ,---.              \ ``\  .`-    ' ,---.'     \
 *    |   |   .'   '   ,'\    ,-+-. ;   , ||   '   ,'\      ,---,.  \___\/   \   : |   |  .`\  |
 *    :   :  :    /   /   |  ,--.'|'   |  ||  /   /   |   ,'  .' |       \   :   | :   : |  '  |
 *    :   |  |-, .   ; ,. : |   |  ,', |  |, .   ; ,. : ,---.'   |       /  /   /  |   ' '  ;  :
 *    |   :  ;/| '   | |: : |   | /  | |--'  '   | |: : |   |  .'        \  \   \  '   | ;  .  |
 *    |   |   .' '   | .; : |   : |  | ,     '   | .; : :   |.'      ___ /   :   | |   | :  |  '
 *    '   :  '   |   :    | |   : |  |/      |   :    | `---'       /   /\   /   : '   : | /  ;
 *    |   |  |    \   \  /  |   | |`-'        \   \  /             / ,,/  ',-    . |   | '` ,/
 *    |   :  \     `----'   |   ;/             `----'              \ ''\        ;  ;   :  .'
 *====|   | ,'=============='---'==========(long version)===========\   \     .'===|   ,.'======*
 *    `----'                                                         `--`-,,-'     '---'
 *             ╔═╗┌─┐┌─┐┬┌─┐┬┌─┐┬   ┌─────────────────────────┐ ╦ ╦┌─┐┌┐ ╔═╗┬┌┬┐┌─┐ 
 *             ║ ║├┤ ├┤ ││  │├─┤│   │   https://exitscam.me   │ ║║║├┤ ├┴┐╚═╗│ │ ├┤  
 *             ╚═╝└  └  ┴└─┘┴┴ ┴┴─┘ └─┬─────────────────────┬─┘ ╚╩╝└─┘└─┘╚═╝┴ ┴ └─┘ 
 *   ┌────────────────────────────────┘                     └──────────────────────────────┐
 *   │╔═╗┌─┐┬  ┬┌┬┐┬┌┬┐┬ ┬   ╔╦╗┌─┐┌─┐┬┌─┐┌┐┌   ╦┌┐┌┌┬┐┌─┐┬─┐┌─┐┌─┐┌─┐┌─┐   ╔═╗┌┬┐┌─┐┌─┐┬┌─│
 *   │╚═╗│ ││  │ │││ │ └┬┘ ═  ║║├┤ └─┐││ ┬│││ ═ ║│││ │ ├┤ ├┬┘├┤ ├─┤│  ├┤  ═ ╚═╗ │ ├─┤│  ├┴┐│
 *   │╚═╝└─┘┴─┘┴─┴┘┴ ┴  ┴    ═╩╝└─┘└─┘┴└─┘┘└┘   ╩┘└┘ ┴ └─┘┴└─└  ┴ ┴└─┘└─┘   ╚═╝ ┴ ┴ ┴└─┘┴ ┴│
 *   │    ┌──────────┐           ┌───────┐            ┌─────────┐              ┌────────┐  │
 *   └────┤ Inventor ├───────────┤ Justo ├────────────┤ Sumpunk ├──────────────┤ Mantso ├──┘
 *        └──────────┘           └───────┘            └─────────┘              └────────┘
 *   ┌─────────────────────────────────────────────────────────┐ ╔╦╗┬ ┬┌─┐┌┐┌┬┌─┌─┐  ╔╦╗┌─┐
 *   │ ChungkueiBlock, Ambius, Aritz Cracker, Cryptoknight,    │  ║ ├─┤├─┤│││├┴┐└─┐   ║ │ │
 *   │ Capex, JogFera, The Shocker, Daok, Randazzz, PumpRabbi, │  ╩ ┴ ┴┴ ┴┘└┘┴ ┴└─┘   ╩ └─┘
 *   │ Kadaz, Incognito Jo, Lil Stronghands, Ninja Turtle,     └───────────────────────────┐
 *   │ Psaints, Satoshi, Vitalik, Nano 2nd, Bogdanoffs         Isaac Newton, Nikola Tesla, │ 
 *   │ Le Comte De Saint Germain, Albert Einstein, Socrates, & all the volunteer moderator │
 *   │ & support staff, content, creators, autonomous agents, and indie devs for P3D.      │
 *   │              Without your help, we wouldn't have the time to code this.             │
 *   └─────────────────────────────────────────────────────────────────────────────────────┘
 * 
 * This product is protected under license.  Any unauthorized copy, modification, or use without 
 * express written consent from the creators is prohibited.
 * 
 * WARNING:  THIS PRODUCT IS HIGHLY ADDICTIVE.  IF YOU HAVE AN ADDICTIVE NATURE.  DO NOT PLAY.
 */

//==============================================================================
//     _    _  _ _|_ _  .
//    (/_\/(/_| | | _\  .
//==============================================================================
contract F3Devents {
    // fired whenever a player registers a name
    event onNewName
    (
        uint256 indexed playerID,
        address indexed playerAddress,
        bytes32 indexed playerName,
        bool isNewPlayer,
        uint256 affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 amountPaid,
        uint256 timeStamp
    );
    
    // fired at end of buy or reload
    event onEndTx
    (
        uint256 compressedData,     
        uint256 compressedIDs,      
        bytes32 playerName,
        address playerAddress,
        uint256 ethIn,
        uint256 keysBought,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount,
        uint256 potAmount,
        uint256 airDropPot
    );
    
	// fired whenever theres a withdraw
    event onWithdraw
    (
        uint256 indexed playerID,
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 timeStamp
    );
    
    // fired whenever a withdraw forces end round to be ran
    event onWithdrawAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );
    
    // (fomo3d long only) fired whenever a player tries a buy after round timer 
    // hit zero, and causes end round to be ran.
    event onBuyAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );
    
    // (fomo3d long only) fired whenever a player tries a reload after round timer 
    // hit zero, and causes end round to be ran.
    event onReLoadAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );
    
    // fired whenever an affiliate is paid
    event onAffiliatePayout
    (
        uint256 indexed affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 indexed roundID,
        uint256 indexed buyerID,
        uint256 amount,
        uint256 timeStamp
    );
    
    // received pot swap deposit
    event onPotSwapDeposit
    (
        uint256 roundID,
        uint256 amountAddedToPot
    );
}

//==============================================================================
//   _ _  _ _|_ _ _  __|_   _ _ _|_    _   .
//  (_(_)| | | | (_|(_ |   _\(/_ | |_||_)  .
//====================================|=========================================

contract modularLong is F3Devents { }

contract FoMo3Dlong is modularLong {
    using SafeMath for *;
    using NameFilter for string;
    using F3DKeysCalcLong for uint256;

    // otherFoMo3D private otherF3D_;
    address private otherF3D_;

    // remove the 害虫
    // DiviesInterface constant private Divies = DiviesInterface(0xe7d5f7a1afbfeb44894c1114fb021cab7e0367fd);
    // 简化社区分红
    // JIincForwarderInterface constant private Jekyll_Island_Inc = JIincForwarderInterface(0x548e2295fc38b69000ff43a730933919b08c2562);
    PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x40fb95f01d3fa718996107d5bfad0bebd9e8b874);
    // hack 闭源合约
    // F3DexternalSettingsInterface constant private extSettings = F3DexternalSettingsInterface(0x85C2d5079DC6C2856116C41f4EDd2E3EBBb63B5C);
//==============================================================================
//     _ _  _  |`. _     _ _ |_ | _  _  .
//    (_(_)| |~|~|(_||_|| (_||_)|(/__\  .  (game settings)
//=================_|===========================================================
    string constant public name = "imfomo Long Official";
    string constant public symbol = "imfomo";
    uint256 private rndExtra_ = 30;     // length of the very first ICO
    uint256 private rndGap_ = 30;         // length of ICO phase, set to 1 year for EOS.
    uint256 constant private rndInit_ = 12 hours;                // round timer starts at this
    uint256 constant private rndInc_ = 60 seconds;              // every full key purchased adds this much to the timer
    uint256 constant private rndMax_ = 12 hours;                // max length a round timer can be
    address constant private reward = 0x6b9E7c45622832A12f728cA87e23FA3A6B512fE2;
//==============================================================================
//     _| _ _|_ _    _ _ _|_    _   .
//    (_|(_| | (_|  _\(/_ | |_||_)  .  (data used to store game info that changes)
//=============================|================================================
    uint256 public airDropPot_;             // person who gets the airdrop wins part of this pot
    uint256 public airDropTracker_ = 0;     // incremented each time a "qualified" tx occurs.  used to determine winning air drop
    uint256 public rID_;    // round id number / total rounds that have happened
//****************
// PLAYER DATA 
//****************
    mapping (address => uint256) public pIDxAddr_;          // (addr => pID) returns player id by address
    mapping (bytes32 => uint256) public pIDxName_;          // (name => pID) returns player id by name
    mapping (uint256 => F3Ddatasets.Player) public plyr_;   // (pID => data) player data
    mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_;    // (pID => rID => data) player round data by player id & round id
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns.  (used so you can change your display name amongst any name you own)
//****************
// ROUND DATA 
//****************
    mapping (uint256 => F3Ddatasets.Round) public round_;   // (rID => data) round data
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;      // (rID => tID => data) eth in per team, by round id and team id
//****************
// TEAM FEE DATA 
//****************
    mapping (uint256 => F3Ddatasets.TeamFee) public fees_;          // (team => fees) fee distribution by team
    mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_;     // (team => fees) pot split distribution by team
//==============================================================================
//     _ _  _  __|_ _    __|_ _  _  .
//    (_(_)| |_\ | | |_|(_ | (_)|   .  (initial data setup upon contract deploy)
//==============================================================================
    constructor()
        public
    {
		// Team allocation structures
        // 0 = whales
        // 1 = bears
        // 2 = sneks
        // 3 = bulls

		// Team allocation percentages
        // (F3D, P3D) + (Pot , Referrals, Community)
            // Referrals / Community rewards are mathematically designed to come from the winner's share of the pot.
        fees_[0] = F3Ddatasets.TeamFee(31,0);   //50% to pot, 15% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
        fees_[1] = F3Ddatasets.TeamFee(38,0);   //43% to pot, 15% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
        fees_[2] = F3Ddatasets.TeamFee(61,0);   //20% to pot, 15% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
        fees_[3] = F3Ddatasets.TeamFee(46,0);   //35% to pot, 15% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
        
        // how to split up the final pot based on which team was picked
        // (F3D, P3D)
        potSplit_[0] = F3Ddatasets.PotSplit(15,0);  //58% to winner, 25% to next round, 2% to com
        potSplit_[1] = F3Ddatasets.PotSplit(15,0);  //58% to winner, 25% to next round, 2% to com
        potSplit_[2] = F3Ddatasets.PotSplit(30,0);  //58% to winner, 10% to next round, 2% to com
        potSplit_[3] = F3Ddatasets.PotSplit(30,0);  //58% to winner, 10% to next round, 2% to com
    }
//==============================================================================
//     _ _  _  _|. |`. _  _ _  .
//    | | |(_)(_||~|~|(/_| _\  .  (these are safety checks)
//==============================================================================
    /**
     * @dev used to make sure no one can interact with contract until it has 
     * been activated. 
     */
    modifier isActivated() {
        require(activated_ == true, "its not ready yet.  check ?eta in discord"); 
        _;
    }
    
    /**
     * @dev prevents contracts from interacting with fomo3d 
     */
    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;
        
        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }

    /**
     * @dev sets boundaries for incoming tx 
     */
    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 100000000000000000000000, "no vitalik, no");
        _;    
    }
    
//==============================================================================
//     _    |_ |. _   |`    _  __|_. _  _  _  .
//    |_)|_||_)||(_  ~|~|_|| |(_ | |(_)| |_\  .  (use these to interact with contract)
//====|=========================================================================
    /**
     * @dev emergency buy uses last stored affiliate ID and team snek
     */
    function()
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
            
        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // buy core 
        buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
    }
    
    /**
     * @dev converts all incoming ethereum to keys.
     * -functionhash- 0x8f38f309 (using ID for affiliate)
     * -functionhash- 0x98a0871d (using address for affiliate)
     * -functionhash- 0xa65b37a1 (using name for affiliate)
     * @param _affCode the ID/address/name of the player who gets the affiliate fee
     * @param _team what team is the player playing for?
     */
    function buyXid(uint256 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        
        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == 0 || _affCode == _pID)
        {
            // use last stored affiliate code 
            _affCode = plyr_[_pID].laff;
            
        // if affiliate code was given & its not the same as previously stored 
        } else if (_affCode != plyr_[_pID].laff) {
            // update last affiliate 
            plyr_[_pID].laff = _affCode;
        }
        
        // verify a valid team was selected
        _team = verifyTeam(_team);
        
        // buy core 
        buyCore(_pID, _affCode, _team, _eventData_);
    }
    
    function buyXaddr(address _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        
        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;
        
        // if affiliate code was given    
        } else {
            // get affiliate ID from aff Code 
            _affID = pIDxAddr_[_affCode];
            
            // if affID is not the same as previously stored 
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }
        
        // verify a valid team was selected
        _team = verifyTeam(_team);
        
        // buy core 
        buyCore(_pID, _affID, _team, _eventData_);
    }
    
    function buyXname(bytes32 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        
        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;
        
        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];
            
            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }
        
        // verify a valid team was selected
        _team = verifyTeam(_team);
        
        // buy core 
        buyCore(_pID, _affID, _team, _eventData_);
    }
    
    /**
     * @dev essentially the same as buy, but instead of you sending ether 
     * from your wallet, it uses your unwithdrawn earnings.
     * -functionhash- 0x349cdcac (using ID for affiliate)
     * -functionhash- 0x82bfc739 (using address for affiliate)
     * -functionhash- 0x079ce327 (using name for affiliate)
     * @param _affCode the ID/address/name of the player who gets the affiliate fee
     * @param _team what team is the player playing for?
     * @param _eth amount of earnings to use (remainder returned to gen vault)
     */
    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;
        
        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == 0 || _affCode == _pID)
        {
            // use last stored affiliate code 
            _affCode = plyr_[_pID].laff;
            
        // if affiliate code was given & its not the same as previously stored 
        } else if (_affCode != plyr_[_pID].laff) {
            // update last affiliate 
            plyr_[_pID].laff = _affCode;
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // reload core
        reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
    }
    
    function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;
        
        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;
        
        // if affiliate code was given    
        } else {
            // get affiliate ID from aff Code 
            _affID = pIDxAddr_[_affCode];
            
            // if affID is not the same as previously stored 
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }
        
        // verify a valid team was selected
        _team = verifyTeam(_team);
        
        // reload core
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }
    
    function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;
        
        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;
        
        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];
            
            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }
        
        // verify a valid team was selected
        _team = verifyTeam(_team);
        
        // reload core
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }

    /**
     * @dev withdraws all of your earnings.
     * -functionhash- 0x3ccfd60b
     */
    function withdraw()
        isActivated()
        isHuman()
        public
    {
        // setup local rID 
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];
        
        // setup temp var for player eth
        uint256 _eth;
        
        // check to see if round has ended and no one has run round end yet
        if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // set up our tx event data
            F3Ddatasets.EventReturns memory _eventData_;
            
            // end the round (distributes pot)
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);
            
			// get their earnings
            _eth = withdrawEarnings(_pID);
            
            // gib moni
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);    
            
            // build event data
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
            
            // fire withdraw and distribute event
            emit F3Devents.onWithdrawAndDistribute
            (
                msg.sender, 
                plyr_[_pID].name, 
                _eth, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.P3DAmount, 
                _eventData_.genAmount
            );
            
        // in any other situation
        } else {
            // get their earnings
            _eth = withdrawEarnings(_pID);
            
            // gib moni
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);
            
            // fire withdraw event
            emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
        }
    }
    
    /**
     * @dev use these to register names.  they are just wrappers that will send the
     * registration requests to the PlayerBook contract.  So registering here is the 
     * same as registering there.  UI will always display the last name you registered.
     * but you will still own all previously registered names to use as affiliate 
     * links.
     * - must pay a registration fee.
     * - name must be unique
     * - names will be converted to lowercase
     * - name cannot start or end with a space 
     * - cannot have more than 1 space in a row
     * - cannot be only numbers
     * - cannot start with 0x 
     * - name must be at least 1 char
     * - max length of 32 characters long
     * - allowed characters: a-z, 0-9, and space
     * -functionhash- 0x921dec21 (using ID for affiliate)
     * -functionhash- 0x3ddd4698 (using address for affiliate)
     * -functionhash- 0x685ffd83 (using name for affiliate)
     * @param _nameString players desired name
     * @param _affCode affiliate ID, address, or name of who referred you
     * @param _all set to true if you want this to push your info to all games 
     * (this might cost a lot of gas)
     */
    function registerNameXID(string _nameString, uint256 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all);
        
        uint256 _pID = pIDxAddr_[_addr];
        
        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }
    
    function registerNameXaddr(string _nameString, address _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
        
        uint256 _pID = pIDxAddr_[_addr];
        
        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }
    
    function registerNameXname(string _nameString, bytes32 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
        
        uint256 _pID = pIDxAddr_[_addr];
        
        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }
//==============================================================================
//     _  _ _|__|_ _  _ _  .
//    (_|(/_ |  | (/_| _\  . (for UI & viewing things on etherscan)
//=====_|=======================================================================
    /**
     * @dev return the price buyer will pay for next 1 individual key.
     * -functionhash- 0x018a25e8
     * @return price for next key bought (in wei format)
     */
    function getBuyPrice()
        public 
        view 
        returns(uint256)
    {  
        // setup local rID
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
        else // rounds over.  need price for new round
            return ( 75000000000000 ); // init
    }
    
    /**
     * @dev returns time left.  dont spam this, you'll ddos yourself from your node 
     * provider
     * -functionhash- 0xc7e284b8
     * @return time left in seconds
     */
    function getTimeLeft()
        public
        view
        returns(uint256)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        if (_now < round_[_rID].end)
            if (_now > round_[_rID].strt + rndGap_)
                return( (round_[_rID].end).sub(_now) );
            else
                return( (round_[_rID].strt + rndGap_).sub(_now) );
        else
            return(0);
    }
    
    /**
     * @dev returns player earnings per vaults 
     * -functionhash- 0x63066434
     * @return winnings vault
     * @return general vault
     * @return affiliate vault
     */
    function getPlayerVaults(uint256 _pID)
        public
        view
        returns(uint256 ,uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // if round has ended.  but round end has not been run (so contract has not distributed winnings)
        if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // if player is winner 
            if (round_[_rID].plyr == _pID)
            {
                return
                (
                    (plyr_[_pID].win).add( ((round_[_rID].pot).mul(58)) / 100 ),
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)   ),
                    plyr_[_pID].aff
                );
            // if player is not the winner
            } else {
                return
                (
                    plyr_[_pID].win,
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)  ),
                    plyr_[_pID].aff
                );
            }
            
        // if round is still going on, or round has ended and round end has been ran
        } else {
            return
            (
                plyr_[_pID].win,
                (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
                plyr_[_pID].aff
            );
        }
    }
    
    /**
     * solidity hates stack limits.  this lets us avoid that hate 
     */
    function getPlayerVaultsHelper(uint256 _pID, uint256 _rID)
        private
        view
        returns(uint256)
    {
        return(  ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000)  );
    }
    
    /**
     * @dev returns all current round info needed for front end
     * -functionhash- 0x747dff42
     * @return eth invested during ICO phase
     * @return round id 
     * @return total keys for round 
     * @return time round ends
     * @return time round started
     * @return current pot 
     * @return current team ID & player ID in lead 
     * @return current player in leads address 
     * @return current player in leads name
     * @return whales eth in for round
     * @return bears eth in for round
     * @return sneks eth in for round
     * @return bulls eth in for round
     * @return airdrop tracker # & airdrop pot
     */
    function getCurrentRoundInfo()
        public
        view
        returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        return
        (
            round_[_rID].ico,               //0
            _rID,                           //1
            round_[_rID].keys,              //2
            round_[_rID].end,               //3
            round_[_rID].strt,              //4
            round_[_rID].pot,               //5
            (round_[_rID].team + (round_[_rID].plyr * 10)),     //6
            plyr_[round_[_rID].plyr].addr,  //7
            plyr_[round_[_rID].plyr].name,  //8
            rndTmEth_[_rID][0],             //9
            rndTmEth_[_rID][1],             //10
            rndTmEth_[_rID][2],             //11
            rndTmEth_[_rID][3],             //12
            airDropTracker_ + (airDropPot_ * 1000)              //13
        );
    }

    /**
     * @dev returns player info based on address.  if no address is given, it will 
     * use msg.sender 
     * -functionhash- 0xee0b5d8b
     * @param _addr address of the player you want to lookup 
     * @return player ID 
     * @return player name
     * @return keys owned (current round)
     * @return winnings vault
     * @return general vault 
     * @return affiliate vault 
	 * @return player round eth
     */
    function getPlayerInfoByAddress(address _addr)
        public 
        view 
        returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        if (_addr == address(0))
        {
            _addr == msg.sender;
        }
        uint256 _pID = pIDxAddr_[_addr];
        
        return
        (
            _pID,                               //0
            plyr_[_pID].name,                   //1
            plyrRnds_[_pID][_rID].keys,         //2
            plyr_[_pID].win,                    //3
            (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),       //4
            plyr_[_pID].aff,                    //5
            plyrRnds_[_pID][_rID].eth           //6
        );
    }

//==============================================================================
//     _ _  _ _   | _  _ . _  .
//    (_(_)| (/_  |(_)(_||(_  . (this + tools + calcs + modules = our softwares engine)
//=====================_|=======================================================
    /**
     * @dev logic runs whenever a buy order is executed.  determines how to handle 
     * incoming eth depending on if we are in an active round or not
     */
    function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        // if round is active
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) 
        {
            // call core 
            core(_rID, _pID, msg.value, _affID, _team, _eventData_);
        
        // if round is not active     
        } else {
            // check to see if end round needs to be ran
            if (_now > round_[_rID].end && round_[_rID].ended == false) 
            {
                // end the round (distributes pot) & start new round
			    round_[_rID].ended = true;
                _eventData_ = endRound(_eventData_);
                
                // build event data
                _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
                _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
                
                // fire buy and distribute event 
                emit F3Devents.onBuyAndDistribute
                (
                    msg.sender, 
                    plyr_[_pID].name, 
                    msg.value, 
                    _eventData_.compressedData, 
                    _eventData_.compressedIDs, 
                    _eventData_.winnerAddr, 
                    _eventData_.winnerName, 
                    _eventData_.amountWon, 
                    _eventData_.newPot, 
                    _eventData_.P3DAmount, 
                    _eventData_.genAmount
                );
            }
            
            // put eth in players vault 
            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }
    
    /**
     * @dev logic runs whenever a reload order is executed.  determines how to handle 
     * incoming eth depending on if we are in an active round or not 
     */
    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        // if round is active
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) 
        {
            // get earnings from all vaults and return unused to gen vault
            // because we use a custom safemath library.  this will throw if player 
            // tried to spend more eth than they have.
            plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);
            
            // call core 
            core(_rID, _pID, _eth, _affID, _team, _eventData_);
        
        // if round is not active and end round needs to be ran   
        } else if (_now > round_[_rID].end && round_[_rID].ended == false) {
            // end the round (distributes pot) & start new round
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);
                
            // build event data
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
                
            // fire buy and distribute event 
            emit F3Devents.onReLoadAndDistribute
            (
                msg.sender, 
                plyr_[_pID].name, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.P3DAmount, 
                _eventData_.genAmount
            );
        }
    }
    
    /**
     * @dev this is the core logic for any buy/reload that happens while a round 
     * is live.
     */
    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // if player is new to round
        if (plyrRnds_[_pID][_rID].keys == 0)
            _eventData_ = managePlayer(_pID, _eventData_);
        
        // early round eth limiter 
        if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000)
        {
            uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
            uint256 _refund = _eth.sub(_availableLimit);
            plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
            _eth = _availableLimit;
        }
        
        // if eth left is greater than min eth allowed (sorry no pocket lint)
        if (_eth > 1000000000) 
        {
            
            // mint the new keys
            uint256 _keys = (round_[_rID].eth).keysRec(_eth);
            
            // if they bought at least 1 whole key
            if (_keys >= 1000000000000000000)
            {
            updateTimer(_keys, _rID);

            // set new leaders
            if (round_[_rID].plyr != _pID)
                round_[_rID].plyr = _pID;  
            if (round_[_rID].team != _team)
                round_[_rID].team = _team; 
            
            // set the new leader bool to true
            _eventData_.compressedData = _eventData_.compressedData + 100;
        }
            
            // manage airdrops
            if (_eth >= 100000000000000000)
            {
            airDropTracker_++;
            if (airdrop() == true)
            {
                // gib muni
                uint256 _prize;
                // >= 10 ether
                if (_eth >= 10000000000000000000)
                {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(75)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
                    
                    // adjust airDropPot 
                    airDropPot_ = (airDropPot_).sub(_prize);
                    
                    // let event know a tier 3 prize was won 
                    _eventData_.compressedData += 300000000000000000000000000000000;
                // >= 1 && < 10 ether
                } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(50)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
                    
                    // adjust airDropPot 
                    airDropPot_ = (airDropPot_).sub(_prize);
                    
                    // let event know a tier 2 prize was won 
                    _eventData_.compressedData += 200000000000000000000000000000000;
                // >= 0.1 && <= 1 ether
                } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(25)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
                    
                    // adjust airDropPot 
                    airDropPot_ = (airDropPot_).sub(_prize);
                    
                    // let event know a tier 3 prize was won 
                    _eventData_.compressedData += 300000000000000000000000000000000;
                }
                // set airdrop happened bool to true
                _eventData_.compressedData += 10000000000000000000000000000000;
                // let event know how much was won 
                _eventData_.compressedData += _prize * 1000000000000000000000000000000000;
                
                // reset air drop tracker
                airDropTracker_ = 0;
            }
        }
    
            // store the air drop tracker number (number of buys since last airdrop)
            _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000);
            
            // update player 
            plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
            plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);
            
            // update round
            round_[_rID].keys = _keys.add(round_[_rID].keys);
            round_[_rID].eth = _eth.add(round_[_rID].eth);
            rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]);
    
            // distribute eth
            _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_);
            _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_);
            
            // call end tx function to fire end tx event.
            endTx(_pID, _team, _eth, _keys, _eventData_);
        }
    }
//==============================================================================
//     _ _ | _   | _ _|_ _  _ _  .
//    (_(_||(_|_||(_| | (_)| _\  .
//==============================================================================
    /**
     * @dev calculates unmasked earnings (just calculates, does not update mask)
     * @return earnings in wei format
     */
    function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast)
        private
        view
        returns(uint256)
    {
        return(  (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask)  );
    }
    
    /** 
     * @dev returns the amount of keys you would get given an amount of eth. 
     * -functionhash- 0xce89c80c
     * @param _rID round ID you want price for
     * @param _eth amount of eth sent in 
     * @return keys received 
     */
    function calcKeysReceived(uint256 _rID, uint256 _eth)
        public
        view
        returns(uint256)
    {
        // grab time
        uint256 _now = now;
        
        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].eth).keysRec(_eth) );
        else // rounds over.  need keys for new round
            return ( (_eth).keys() );
    }
    
    /** 
     * @dev returns current eth price for X keys.  
     * -functionhash- 0xcf808000
     * @param _keys number of keys desired (in 18 decimal format)
     * @return amount of eth needed to send
     */
    function iWantXKeys(uint256 _keys)
        public
        view
        returns(uint256)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // grab time
        uint256 _now = now;
        
        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
        else // rounds over.  need price for new round
            return ( (_keys).eth() );
    }
//==============================================================================
//    _|_ _  _ | _  .
//     | (_)(_)|_\  .
//==============================================================================
    /**
	 * @dev receives name/player info from names contract 
     */
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if (pIDxAddr_[_addr] != _pID)
            pIDxAddr_[_addr] = _pID;
        if (pIDxName_[_name] != _pID)
            pIDxName_[_name] = _pID;
        if (plyr_[_pID].addr != _addr)
            plyr_[_pID].addr = _addr;
        if (plyr_[_pID].name != _name)
            plyr_[_pID].name = _name;
        if (plyr_[_pID].laff != _laff)
            plyr_[_pID].laff = _laff;
        if (plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }
    
    /**
     * @dev receives entire player name list 
     */
    function receivePlayerNameList(uint256 _pID, bytes32 _name)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if(plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }   
        
    /**
     * @dev gets existing or registers new pID.  use this when a player may be new
     * @return pID 
     */
    function determinePID(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        uint256 _pID = pIDxAddr_[msg.sender];
        // if player is new to this version of fomo3d
        if (_pID == 0)
        {
            // grab their player ID, name and last aff ID, from player names contract 
            _pID = PlayerBook.getPlayerID(msg.sender);
            bytes32 _name = PlayerBook.getPlayerName(_pID);
            uint256 _laff = PlayerBook.getPlayerLAff(_pID);

            // set up player account 
            pIDxAddr_[msg.sender] = _pID;
            plyr_[_pID].addr = msg.sender;
            
            if (_name != "")
            {
                pIDxName_[_name] = _pID;
                plyr_[_pID].name = _name;
                plyrNames_[_pID][_name] = true;
            }
            
            if (_laff != 0 && _laff != _pID)
                plyr_[_pID].laff = _laff;
            
            // set the new player bool to true
            _eventData_.compressedData = _eventData_.compressedData + 1;
        } 
        return (_eventData_);
    }
    
    /**
     * @dev checks to make sure user picked a valid team.  if not sets team 
     * to default (sneks)
     */
    function verifyTeam(uint256 _team)
        private
        pure
        returns (uint256)
    {
        if (_team < 0 || _team > 3)
            return(2);
        else
            return(_team);
    }
    
    /**
     * @dev decides if round end needs to be run & new round started.  and if 
     * player unmasked earnings from previously played rounds need to be moved.
     */
    function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // if player has played a previous round, move their unmasked earnings
        // from that round to gen vault.
        if (plyr_[_pID].lrnd != 0)
            updateGenVault(_pID, plyr_[_pID].lrnd);
            
        // update player's last round played
        plyr_[_pID].lrnd = rID_;
            
        // set the joined round bool to true
        _eventData_.compressedData = _eventData_.compressedData + 10;
        
        return(_eventData_);
    }
    
    /**
     * @dev ends the round. manages paying out winner/splitting up pot
     */
    function endRound(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // setup local rID
        uint256 _rID = rID_;
        
        // grab our winning player and team id's
        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;
        
        // grab our pot amount
        uint256 _pot = round_[_rID].pot;
        
        // calculate our winner share, community rewards, gen share, 
        // p3d share, and amount reserved for next pot 
        uint256 _win = (_pot.mul(58)) / 100;
        uint256 _com = (_pot / 50);
        uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
        uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100;
        uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d);
        
        // calculate ppt for round mask
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000);
        if (_dust > 0)
        {
            _gen = _gen.sub(_dust);
            _res = _res.add(_dust);
        }
        
        // pay our winner
        plyr_[_winPID].win = _win.add(plyr_[_winPID].win);
        
        // community rewards
        // if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256("deposit()"))))
        // {
        //     // This ensures Team Just cannot influence the outcome of FoMo3D with
        //     // bank migrations by breaking outgoing transactions.
        //     // Something we would never do. But that's not the point.
        //     // We spent 2000$ in eth re-deploying just to patch this, we hold the 
        //     // highest belief that everything we create should be trustless.
        //     // Team JUST, The name you shouldn't have to trust.
        //     _p3d = _p3d.add(_com);
        //     _com = 0;
        // }

        _p3d = _p3d.add(_com);
        
        // distribute gen portion to key holders
        round_[_rID].mask = _ppt.add(round_[_rID].mask);
        
        // send share for p3d to divies
        // Divies.deposit.value(_p3d)();
        if (_p3d > 0)
            reward.send(_p3d);
            
        // prepare event data
        _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000);
        _eventData_.winnerAddr = plyr_[_winPID].addr;
        _eventData_.winnerName = plyr_[_winPID].name;
        _eventData_.amountWon = _win;
        _eventData_.genAmount = _gen;
        _eventData_.P3DAmount = _p3d;
        _eventData_.newPot = _res;
        
        // start next round
        rID_++;
        _rID++;
        round_[_rID].strt = now;
        round_[_rID].end = now.add(rndInit_).add(rndGap_);
        round_[_rID].pot = _res;
        
        return(_eventData_);
    }
    
    /**
     * @dev moves any unmasked earnings to gen vault.  updates earnings mask
     */
    function updateGenVault(uint256 _pID, uint256 _rIDlast)
        private 
    {
        uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
        if (_earnings > 0)
        {
            // put in gen vault
            plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);
            // zero out their earnings by updating mask
            plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);
        }
    }
    
    /**
     * @dev updates round timer based on number of whole keys bought.
     */
    function updateTimer(uint256 _keys, uint256 _rID)
        private
    {
        // grab time
        uint256 _now = now;
        
        // calculate time based on number of keys bought
        uint256 _newTime;
        if (_now > round_[_rID].end && round_[_rID].plyr == 0)
            _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now);
        else
            _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end);
        
        // compare to max and set new end time
        if (_newTime < (rndMax_).add(_now))
            round_[_rID].end = _newTime;
        else
            round_[_rID].end = rndMax_.add(_now);
    }
    
    /**
     * @dev generates a random number between 0-99 and checks to see if thats
     * resulted in an airdrop win
     * @return do we have a winner?
     */
    function airdrop()
        private 
        view 
        returns(bool)
    {
        uint256 seed = uint256(keccak256(abi.encodePacked(
            
            (block.timestamp).add
            (block.difficulty).add
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add
            (block.gaslimit).add
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add
            (block.number)
            
        )));
        if((seed - ((seed / 1000) * 1000)) < airDropTracker_)
            return(true);
        else
            return(false);
    }

    /**
     * @dev distributes eth based on fees to com, aff, and p3d
     */
    function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // pay 2% out to community rewards
        uint256 _com = _eth / 50;
        uint256 _p3d;
        // if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256("deposit()"))))
        // {
        //     // This ensures Team Just cannot influence the outcome of FoMo3D with
        //     // bank migrations by breaking outgoing transactions.
        //     // Something we would never do. But that's not the point.
        //     // We spent 2000$ in eth re-deploying just to patch this, we hold the 
        //     // highest belief that everything we create should be trustless.
        //     // Team JUST, The name you shouldn't have to trust.
        //     _p3d = _com;
        //     _com = 0;
        // }
        _p3d = _p3d.add(_com);

        // pay 1% out to FoMo3D short
        uint256 _long = _eth / 100;
        otherF3D_.send(_long);
        
        // distribute share to affiliate
        uint256 _aff;
        uint256 _aff2;

        uint256 _affID2 = plyr_[_affID].laff;

        if (_affID2 != 0 && plyr_[_affID2].name != "") {
            _aff = _eth.mul(10) / 100;
            _aff2 = _eth.mul(5) / 100;
            plyr_[_affID2].aff = _aff2.add(plyr_[_affID2].aff);
        } else {
            _aff = _eth.mul(15) / 100;
        }
        
        // decide what to do with affiliate share of fees
        // affiliate must not be self, and must have a name registered
        if (_affID != _pID && plyr_[_affID].name != "") {
            plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
            // emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now);
        } else {
            _p3d = _p3d.add(_aff);
        }

        // pay out p3d
        _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100));
        if (_p3d > 0)
        {
            // deposit to divies contract
            // Divies.deposit.value(_p3d)();
            reward.send(_p3d);
            // set up event data
            _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount);
        }
        
        return(_eventData_);
    }
    
    function potSwap()
        external
        payable
    {
        // setup local rID
        uint256 _rID = rID_ + 1;
        
        round_[_rID].pot = round_[_rID].pot.add(msg.value);
        emit F3Devents.onPotSwapDeposit(_rID, msg.value);
    }
    
    /**
     * @dev distributes eth based on fees to gen and pot
     */
    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // calculate gen share
        uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;
        
        // toss 1% into airdrop pot 
        uint256 _air = (_eth / 100);
        airDropPot_ = airDropPot_.add(_air);
        
        // update eth balance (eth = eth - (com share + pot swap share + aff share + p3d share + airdrop pot share))
        _eth = _eth.sub(((_eth.mul(19)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100));
        
        // calculate pot 
        uint256 _pot = _eth.sub(_gen);
        
        // distribute gen share (thats what updateMasks() does) and adjust
        // balances for dust.
        uint256 _dust = updateMasks(_rID, _pID, _gen, _keys);
        if (_dust > 0)
            _gen = _gen.sub(_dust);
        
        // add eth to pot
        round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot);
        
        // set up event data
        _eventData_.genAmount = _gen.add(_eventData_.genAmount);
        _eventData_.potAmount = _pot;
        
        return(_eventData_);
    }

    /**
     * @dev updates masks for round and player when keys are bought
     * @return dust left over 
     */
    function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys)
        private
        returns(uint256)
    {
        /* MASKING NOTES
            earnings masks are a tricky thing for people to wrap their minds around.
            the basic thing to understand here.  is were going to have a global
            tracker based on profit per share for each round, that increases in
            relevant proportion to the increase in share supply.
            
            the player will have an additional mask that basically says "based
            on the rounds mask, my shares, and how much i've already withdrawn,
            how much is still owed to me?"
        */
        
        // calc profit per key & round mask based on this buy:  (dust goes to pot)
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        round_[_rID].mask = _ppt.add(round_[_rID].mask);
            
        // calculate player earning from their own buy (only based on the keys
        // they just bought).  & update player earnings mask
        uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000);
        plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask);
        
        // calculate & return dust
        return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)));
    }
    
    /**
     * @dev adds up unmasked earnings, & vault earnings, sets them all to 0
     * @return earnings in wei format
     */
    function withdrawEarnings(uint256 _pID)
        private
        returns(uint256)
    {
        // update gen vault
        updateGenVault(_pID, plyr_[_pID].lrnd);
        
        // from vaults 
        uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff);
        if (_earnings > 0)
        {
            plyr_[_pID].win = 0;
            plyr_[_pID].gen = 0;
            plyr_[_pID].aff = 0;
        }

        return(_earnings);
    }
    
    /**
     * @dev prepares compression data and fires event for buy or reload tx's
     */
    function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);
        
        emit F3Devents.onEndTx
        (
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.P3DAmount,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }
//==============================================================================
//    (~ _  _    _._|_    .
//    _)(/_(_|_|| | | \/  .
//====================/=========================================================
    /** upon contract deploy, it will be deactivated.  this is a one time
     * use function that will activate the contract.  we do this so devs 
     * have time to set things up on the web end                            **/
    bool public activated_ = false;
    function activate()
        public
    {
        // only team just can activate 
        require(
            msg.sender == 0xdbEB69c655b666b3E17b8061dF7EA4cc2399Df11 ||
            msg.sender == 0x6b9E7c45622832A12f728cA87e23FA3A6B512fE2 ||
            msg.sender == 0x3D3B33b8F50AB9e8F5a9Ff369853F0e638450aDB,
            "only team just can activate"
        );

		// make sure that its been linked.
        require(address(otherF3D_) != address(0), "must link to other FoMo3D first");
        
        // can only be ran once
        require(activated_ == false, "fomo3d already activated");
        
        // activate the contract 
        activated_ = true;
        
        // lets start first round
		rID_ = 1;
        round_[1].strt = now + rndExtra_ - rndGap_;
        round_[1].end = now + rndInit_ + rndExtra_;
    }
    function setOtherFomo(address _otherF3D)
        public
    {
        // only team just can activate 
        require(
            msg.sender == 0xdbEB69c655b666b3E17b8061dF7EA4cc2399Df11 ||
            msg.sender == 0x6b9E7c45622832A12f728cA87e23FA3A6B512fE2 ||
            msg.sender == 0x3D3B33b8F50AB9e8F5a9Ff369853F0e638450aDB,
            "only team just can activate"
        );

        // make sure that it HASNT yet been linked.
        require(address(otherF3D_) == address(0), "silly dev, you already did that");
        
        // set up other fomo3d (fast or long) for pot swap
        // otherF3D_ = otherFoMo3D(_otherF3D);
        otherF3D_ = _otherF3D;
    }
}

//==============================================================================
//   __|_ _    __|_ _  .
//  _\ | | |_|(_ | _\  .
//==============================================================================
library F3Ddatasets {
    //compressedData key
    // [76-33][32][31][30][29][28-18][17][16-6][5-3][2][1][0]
        // 0 - new player (bool)
        // 1 - joined round (bool)
        // 2 - new  leader (bool)
        // 3-5 - air drop tracker (uint 0-999)
        // 6-16 - round end time
        // 17 - winnerTeam
        // 18 - 28 timestamp 
        // 29 - team
        // 30 - 0 = reinvest (round), 1 = buy (round), 2 = buy (ico), 3 = reinvest (ico)
        // 31 - airdrop happened bool
        // 32 - airdrop tier 
        // 33 - airdrop amount won
    //compressedIDs key
    // [77-52][51-26][25-0]
        // 0-25 - pID 
        // 26-51 - winPID
        // 52-77 - rID
    struct EventReturns {
        uint256 compressedData;
        uint256 compressedIDs;
        address winnerAddr;         // winner address
        bytes32 winnerName;         // winner name
        uint256 amountWon;          // amount won
        uint256 newPot;             // amount in new pot
        uint256 P3DAmount;          // amount distributed to p3d
        uint256 genAmount;          // amount distributed to gen
        uint256 potAmount;          // amount added to pot
    }
    struct Player {
        address addr;   // player address
        bytes32 name;   // player name
        uint256 win;    // winnings vault
        uint256 gen;    // general vault
        uint256 aff;    // affiliate vault
        uint256 lrnd;   // last round played
        uint256 laff;   // last affiliate id used
    }
    struct PlayerRounds {
        uint256 eth;    // eth player has added to round (used for eth limiter)
        uint256 keys;   // keys
        uint256 mask;   // player mask 
        uint256 ico;    // ICO phase investment
    }
    struct Round {
        uint256 plyr;   // pID of player in lead
        uint256 team;   // tID of team in lead
        uint256 end;    // time ends/ended
        bool ended;     // has round end function been ran
        uint256 strt;   // time round started
        uint256 keys;   // keys
        uint256 eth;    // total eth in
        uint256 pot;    // eth to pot (during round) / final amount paid to winner (after round ends)
        uint256 mask;   // global mask
        uint256 ico;    // total eth sent in during ICO phase
        uint256 icoGen; // total eth for gen during ICO phase
        uint256 icoAvg; // average key price for ICO phase
    }
    struct TeamFee {
        uint256 gen;    // % of buy in thats paid to key holders of current round
        uint256 p3d;    // % of buy in thats paid to p3d holders
    }
    struct PotSplit {
        uint256 gen;    // % of pot thats paid to key holders of current round
        uint256 p3d;    // % of pot thats paid to p3d holders
    }
}

//==============================================================================
//  |  _      _ _ | _  .
//  |<(/_\/  (_(_||(_  .
//=======/======================================================================
library F3DKeysCalcLong {
    using SafeMath for *;
    /**
     * @dev calculates number of keys received given X eth 
     * @param _curEth current amount of eth in contract 
     * @param _newEth eth being spent
     * @return amount of ticket purchased
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }
    
    /**
     * @dev calculates amount of eth received if you sold X keys 
     * @param _curKeys current amount of keys that exist 
     * @param _sellKeys amount of keys you wish to sell
     * @return amount of eth received
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev calculates how many keys would exist with given an amount of eth
     * @param _eth eth "in contract"
     * @return number of keys that would exist
     */
    function keys(uint256 _eth) 
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }
    
    /**
     * @dev calculates how much eth would be in contract given a number of keys
     * @param _keys number of keys "in contract" 
     * @return eth that would exists
     */
    function eth(uint256 _keys) 
        internal
        pure
        returns(uint256)  
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

//==============================================================================
//  . _ _|_ _  _ |` _  _ _  _  .
//  || | | (/_| ~|~(_|(_(/__\  .
//==============================================================================
interface otherFoMo3D {
    function potSwap() external payable;
}

interface F3DexternalSettingsInterface {
    function getFastGap() external returns(uint256);
    function getLongGap() external returns(uint256);
    function getFastExtra() external returns(uint256);
    function getLongExtra() external returns(uint256);
}

interface DiviesInterface {
    function deposit() external payable;
}

interface JIincForwarderInterface {
    function deposit() external payable returns(bool);
    function status() external view returns(address, address, bool);
    function startMigration(address _newCorpBank) external returns(bool);
    function cancelMigration() external returns(bool);
    function finishMigration() external returns(bool);
    function setup(address _firstCorpBank) external;
}

interface PlayerBookInterface {
    function getPlayerID(address _addr) external returns (uint256);
    function getPlayerName(uint256 _pID) external view returns (bytes32);
    function getPlayerLAff(uint256 _pID) external view returns (uint256);
    function getPlayerAddr(uint256 _pID) external view returns (address);
    function getNameFee() external view returns (uint256);
    function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256);
}

/**
* @title -Name Filter- v0.1.9
* ┌┬┐┌─┐┌─┐┌┬┐   ╦╦ ╦╔═╗╔╦╗  ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
*  │ ├┤ ├─┤│││   ║║ ║╚═╗ ║   ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
*  ┴ └─┘┴ ┴┴ ┴  ╚╝╚═╝╚═╝ ╩   ┴  ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
*                                  _____                      _____
*                                 (, /     /)       /) /)    (, /      /)          /)
*          ┌─┐                      /   _ (/_      // //       /  _   // _   __  _(/
*          ├─┤                  ___/___(/_/(__(_/_(/_(/_   ___/__/_)_(/_(_(_/ (_(_(_
*          ┴ ┴                /   /          .-/ _____   (__ /                               
*                            (__ /          (_/ (, /                                      /)™ 
*                                                 /  __  __ __ __  _   __ __  _  _/_ _  _(/
* ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐                          /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
* ├─┘├┬┘│ │ │││ ││   │                      (__ /              .-/  © Jekyll Island Inc. 2018
* ┴  ┴└─└─┘─┴┘└─┘└─┘ ┴                                        (_/
*              _       __    _      ____      ____  _   _    _____  ____  ___  
*=============| |\ |  / /\  | |\/| | |_ =====| |_  | | | |    | |  | |_  | |_)==============*
*=============|_| \| /_/--\ |_|  | |_|__=====|_|   |_| |_|__  |_|  |_|__ |_| \==============*
*
* ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐  ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐
* ║  │ ││││ │ ├┬┘├─┤│   │   ║  │ │ ││├┤  │ Inventor │
* ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴   ╚═╝└─┘─┴┘└─┘ └──────────┘
*/

library NameFilter {
    /**
     * @dev filters name strings
     * -converts uppercase to lower case.  
     * -makes sure it does not start/end with a space
     * -makes sure it does not contain multiple spaces in a row
     * -cannot be only numbers
     * -cannot start with 0x 
     * -restricts characters to A-Z, a-z, 0-9, and space.
     * @return reprocessed string in bytes32 format
     */
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;
        
        //sorry limited to 32 characters
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // make sure it doesnt start with or end with space
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }
        
        // create a bool to track if we have a non number character
        bool _hasNonNumber;
        
        // convert & check
        for (uint256 i = 0; i < _length; i++)
        {
            // if its uppercase A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // convert to lower case a-z
                _temp[i] = byte(uint(_temp[i]) + 32);
                
                // we have a non number
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // require character is a space
                    _temp[i] == 0x20 || 
                    // OR lowercase a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // or 0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // make sure theres not 2x spaces in a row
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");
                
                // see if we have a character other than a number
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;    
            }
        }
        
        require(_hasNonNumber == true, "string cannot be only numbers");
        
        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

/**
 * @title SafeMath v0.1.9
 * @dev Math operations with safety checks that throw on error
 * change notes:  original SafeMath library from OpenZeppelin modified by Inventor
 * - added sqrt
 * - added sq
 * - added pwr 
 * - changed asserts to requires with error log outputs
 * - removed div, its useless
 */
library SafeMath {
    
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256 c) 
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256) 
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c) 
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }
    
    /**
     * @dev gives square root of given x.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y) 
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y) 
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }
    
    /**
     * @dev gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }
    
    /**
     * @dev x to the power of y 
     */
    function pwr(uint256 x, uint256 y)
        internal 
        pure 
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else 
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropTracker_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_","outputs":[{"name":"plyr","type":"uint256"},{"name":"team","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"strt","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"eth","type":"uint256"},{"name":"pot","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"},{"name":"icoGen","type":"uint256"},{"name":"icoAvg","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_laff","type":"uint256"}],"name":"receivePlayerInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"rndTmEth_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerVaults","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrRnds_","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_otherF3D","type":"address"}],"name":"setOtherFomo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rID","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"calcKeysReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"uint256"}],"name":"iWantXKeys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPot_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"win","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"lrnd","type":"uint256"},{"name":"laff","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"potSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerInfoByAddress","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"keysBought","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"},{"indexed":false,"name":"potAmount","type":"uint256"},{"indexed":false,"name":"airDropPot","type":"uint256"}],"name":"onEndTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onWithdrawAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onBuyAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amountAddedToPot","type":"uint256"}],"name":"onPotSwapDeposit","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604052601e60018190556002556000600455600f805460ff1916905534801561002957600080fd5b50604080518082018252601f815260006020808301828152828052600d80835293517f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55517f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef558351808501855260268152808201838152600180855285845291517ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c555517ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c65584518086018652603d8152808301848152600280865286855291517f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24955517f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24a5585518087018752602e8152808401858152600380875296855290517f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e255517f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e35585518087018752600f808252818501868152868052600e80875292517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c55517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d5587518089018952908152808501868152938652818552517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582075591517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582085585518087018752601e80825281850186815292865283855290517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f04815590517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f04825585518087019096528552848201838152939092525290517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814455517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814555615474806103396000396000f3006080604052600436106101cc5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036a57806306fdde0314610391578063079ce3271461041b5780630f15f4c01461043b57806310f01eba1461045057806311a09ae71461047157806324c33d33146104865780632660316e146104fd5780632ce219991461052c5780632e19ebdc1461055d578063349cdcac146105755780633ccfd60b146105935780633ddd4698146105a857806349cc635d146106045780635893d4811461062e578063624ae5c014610649578063630664341461065e578063685ffd8314610694578063747dff42146106e757806382bfc739146107725780638f38f309146107995780638f7140ea146107a7578063921dec21146107c257806395d89b411461081557806398a0871d1461082a578063a2bccae914610841578063a65b37a114610882578063b483c05414610890578063c519500e146108b1578063c7e284b8146108c9578063ce89c80c146108de578063cf808000146108f9578063d53b267914610911578063d87574e014610926578063de7874f31461093b578063ed78cf4a14610995578063ee0b5d8b1461099d575b6101d461534f565b600f5460009060ff161515600114610238576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b801561027f576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b34633b9aca008110156102d7576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115610327576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b610330856109f6565b33600090815260066020818152604080842054808552600890925290922001549196509450610363908590600288610caa565b5050505050005b34801561037657600080fd5b5061037f610ee4565b60408051918252519081900360200190f35b34801561039d57600080fd5b506103a6610fa9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b50610439600435602435604435610fe0565b005b34801561044757600080fd5b506104396111ec565b34801561045c57600080fd5b5061037f600160a060020a03600435166113c8565b34801561047d57600080fd5b5061037f6113da565b34801561049257600080fd5b5061049e6004356113e0565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561050957600080fd5b50610518600435602435611443565b604080519115158252519081900360200190f35b34801561053857600080fd5b50610544600435611463565b6040805192835260208301919091528051918290030190f35b34801561056957600080fd5b5061037f60043561147c565b34801561058157600080fd5b5061043960043560243560443561148e565b34801561059f57600080fd5b50610439611674565b6040805160206004803580820135601f810184900484028501840190955284845261043994369492936024939284019190819084018382808284375094975050600160a060020a038535169550505050506020013515156119f5565b34801561061057600080fd5b50610439600435600160a060020a0360243516604435606435611bae565b34801561063a57600080fd5b5061037f600435602435611d9f565b34801561065557600080fd5b5061037f611dbc565b34801561066a57600080fd5b50610676600435611dc2565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610439943694929360249392840191908190840183828082843750949750508435955050505050602001351515611f68565b3480156106f357600080fd5b506106fc612048565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561077e57600080fd5b50610439600160a060020a0360043516602435604435612246565b610439600435602435612440565b3480156107b357600080fd5b50610439600435602435612627565b6040805160206004803580820135601f8101849004840285018401909552848452610439943694929360249392840191908190840183828082843750949750508435955050505050602001351515612704565b34801561082157600080fd5b506103a66127e4565b610439600160a060020a036004351660243561281b565b34801561084d57600080fd5b5061085c600435602435612a30565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610439600435602435612a62565b34801561089c57600080fd5b50610439600160a060020a0360043516612c5f565b3480156108bd57600080fd5b50610544600435612d98565b3480156108d557600080fd5b5061037f612db1565b3480156108ea57600080fd5b5061037f600435602435612e40565b34801561090557600080fd5b5061037f600435612ee8565b34801561091d57600080fd5b50610518612f9a565b34801561093257600080fd5b5061037f612fa3565b34801561094757600080fd5b50610953600435612fa9565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610439612ff0565b3480156109a957600080fd5b506109be600160a060020a036004351661306d565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109fe61534f565b336000908152600660205260408120549080821515610ca157604080517fe56556a900000000000000000000000000000000000000000000000000000000815233600482015290517340fb95f01d3fa718996107d5bfad0bebd9e8b8749163e56556a99160248083019260209291908290030181600087803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b505050506040513d6020811015610aad57600080fd5b5051604080517f82e37b2c0000000000000000000000000000000000000000000000000000000081526004810183905290519194507340fb95f01d3fa718996107d5bfad0bebd9e8b874916382e37b2c916024808201926020929091908290030181600087803b158015610b2057600080fd5b505af1158015610b34573d6000803e3d6000fd5b505050506040513d6020811015610b4a57600080fd5b5051604080517fe3c08adf0000000000000000000000000000000000000000000000000000000081526004810186905290519193507340fb95f01d3fa718996107d5bfad0bebd9e8b8749163e3c08adf916024808201926020929091908290030181600087803b158015610bbd57600080fd5b505af1158015610bd1573d6000803e3d6000fd5b505050506040513d6020811015610be757600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c70576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c7f5750828114155b15610c995760008381526008602052604090206006018190555b845160010185525b50929392505050565b6005546002546000828152600b602052604090206004015442910181118015610d1557506000828152600b602052604090206002015481111580610d1557506000828152600b602052604090206002015481118015610d1557506000828152600b6020526040902054155b15610d2d57610d28828734888888613142565b610edc565b6000828152600b602052604090206002015481118015610d5f57506000828152600b602052604090206003015460ff16155b15610ea7576000828152600b60205260409020600301805460ff19166001179055610d8983613693565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610ec9903463ffffffff613a4716565b6000878152600860205260409020600301555b505050505050565b6005546002546000828152600b602052604081206004015490929142910181118015610f5257506000828152600b602052604090206002015481111580610f5257506000828152600b602052604090206002015481118015610f5257506000828152600b6020526040902054155b15610f9a576000828152600b6020526040902060050154610f9390670de0b6b3a764000090610f87908263ffffffff613a4716565b9063ffffffff613aa816565b9250610fa4565b6544364c5bb00092505b505090565b60408051808201909152601481527f696d666f6d6f204c6f6e67204f6666696369616c000000000000000000000000602082015281565b610fe861534f565b600f54600090819060ff16151560011461104e576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b8015611095576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b85633b9aca008110156110ed576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561113d576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b33600090815260066020526040902054945088158061116c575060008581526008602052604090206001015489145b1561118a5760008581526008602052604090206006015493506111c9565b60008981526007602090815260408083205488845260089092529091206006015490945084146111c95760008581526008602052604090206006018490555b6111d288613ad5565b97506111e185858a8a8a613afa565b505050505050505050565b73dbeb69c655b666b3e17b8061df7ea4cc2399df113314806112215750736b9e7c45622832a12f728ca87e23fa3a6b512fe233145b8061123f5750733d3b33b8f50ab9e8f5a9ff369853f0e638450adb33145b1515611295576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c79207465616d206a7573742063616e2061637469766174650000000000604482015290519081900360640190fd5b600054600160a060020a031615156112f7576040805160e560020a62461bcd02815260206004820152601f60248201527f6d757374206c696e6b20746f206f7468657220466f4d6f334420666972737400604482015290519081900360640190fd5b600f5460ff1615611352576040805160e560020a62461bcd02815260206004820152601860248201527f666f6d6f336420616c7265616479206163746976617465640000000000000000604482015290519081900360640190fd5b600f805460ff1916600190811790915560058190556002548154600092909252600b602052429091019081037f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d35561a8c0017f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155565b60066020526000908152604090205481565b60045481565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969860ff90961697949693959294919390928c565b600a60209081526000928352604080842090915290825290205460ff1681565b600d602052600090815260409020805460019091015482565b60076020526000908152604090205481565b61149661534f565b600f5460009060ff1615156001146114fa576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b8015611541576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b84633b9aca00811015611599576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156115e9576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b33600090815260066020526040902054935087158061160757508388145b15611625576000848152600860205260409020600601549750611652565b60008481526008602052604090206006015488146116525760008481526008602052604090206006018890555b61165b87613ad5565b965061166a8489898989613afa565b5050505050505050565b60008060008061168261534f565b600f5460ff1615156001146116e3576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b801561172a576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b60055433600090815260066020908152604080832054848452600b9092529091206002015491985042975095508611801561177757506000878152600b602052604090206003015460ff16155b801561179057506000878152600b602052604090205415155b15611936576000878152600b60205260409020600301805460ff191660011790556117ba83613693565b92506117c585613d16565b9350600084111561181657600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611814573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360086000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a16119ec565b61193f85613d16565b9350600084111561199057600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561198e573d6000803e3d6000fd5b505b6000858152600860209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611a43576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b611a4c8b613d9d565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b5099503498507340fb95f01d3fa718996107d5bfad0bebd9e8b8749263aa4d490b928a926084808201939182900301818588803b158015611add57600080fd5b505af1158015611af1573d6000803e3d6000fd5b50505050506040513d6040811015611b0857600080fd5b508051602091820151600160a060020a03808b1660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b337340fb95f01d3fa718996107d5bfad0bebd9e8b87414611c3f576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600660205260409020548414611c7a57600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611ca15760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611cf7576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611d245760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611d515760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611d99576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600c60209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600b60205260408120600201549091829182919042118015611dfe57506000818152600b602052604090206003015460ff16155b8015611e1757506000818152600b602052604090205415155b15611f38576000818152600b6020526040902054851415611efc576000818152600b6020526040902060070154611e8590606490611e5c90603a63ffffffff6145b016565b811515611e6557fe5b60008881526008602052604090206002015491900463ffffffff613a4716565b6000868152600960209081526040808320858452909152902060020154611ede90611ec090611eb48986614627565b9063ffffffff6146f516565b6000888152600860205260409020600301549063ffffffff613a4716565b60008781526008602052604090206004015491955093509150611f60565b600085815260086020908152604080832060029081015460098452828520868652909352922090910154611ede90611ec090611eb48986614627565b60008581526008602052604090206002810154600590910154611ede90611ec0908890614755565b509193909250565b6000808080808033803b8015611fb6576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b611fbf8b613d9d565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b5099503498507340fb95f01d3fa718996107d5bfad0bebd9e8b8749263745ea0c1928a926084808201939182900301818588803b158015611add57600080fd5b60008060008060008060008060008060008060008060006005549050600b60008281526020019081526020016000206009015481600b600084815260200190815260200160002060050154600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060040154600b600087815260200190815260200160002060070154600b600088815260200190815260200160002060000154600a02600b6000898152602001908152602001600020600101540160086000600b60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600b60008c815260200190815260200160002060000154815260200190815260200160002060010154600c60008b8152602001908152602001600020600080815260200190815260200160002054600c60008c815260200190815260200160002060006001815260200190815260200160002054600c60008d815260200190815260200160002060006002815260200190815260200160002054600c60008e8152602001908152602001600020600060038152602001908152602001600020546003546103e802600454019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61224e61534f565b600f54600090819060ff1615156001146122b4576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b80156122fb576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b85633b9aca00811015612353576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156123a3576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b336000908152600660205260409020549450600160a060020a03891615806123d35750600160a060020a03891633145b156123f15760008581526008602052604090206006015493506111c9565b600160a060020a0389166000908152600660208181526040808420548985526008909252909220015490945084146111c95760008581526008602052604090206006018490556111d288613ad5565b61244861534f565b600f5460009060ff1615156001146124ac576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b80156124f3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b34633b9aca0081101561254b576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561259b576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b6125a4856109f6565b3360009081526006602052604090205490955093508615806125c557508387145b156125e3576000848152600860205260409020600601549650612610565b60008481526008602052604090206006015487146126105760008481526008602052604090206006018790555b61261986613ad5565b95506119ec84888888610caa565b337340fb95f01d3fa718996107d5bfad0bebd9e8b874146126b8576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600a6020908152604080832084845290915290205460ff161515612700576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612752576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b61275b8b613d9d565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b5099503498507340fb95f01d3fa718996107d5bfad0bebd9e8b8749263c0942dfd928a926084808201939182900301818588803b158015611add57600080fd5b60408051808201909152600681527f696d666f6d6f0000000000000000000000000000000000000000000000000000602082015281565b61282361534f565b600f54600090819060ff161515600114612889576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b80156128d0576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b34633b9aca00811015612928576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612978576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b612981866109f6565b336000908152600660205260409020549096509450600160a060020a03881615806129b45750600160a060020a03881633145b156129d2576000858152600860205260409020600601549350612a19565b600160a060020a038816600090815260066020818152604080842054898552600890925290922001549094508414612a195760008581526008602052604090206006018490555b612a2287613ad5565b965061166a85858989610caa565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612a6a61534f565b600f54600090819060ff161515600114612ad0576040805160e560020a62461bcd02815260206004820152602960248201526000805160206153e983398151915260448201526000805160206153a9833981519152606482015290519081900360840190fd5b33803b8015612b17576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615429833981519152604482015290519081900360640190fd5b34633b9aca00811015612b6f576040805160e560020a62461bcd02815260206004820152602160248201526000805160206153c9833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612bbf576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615409833981519152604482015290519081900360640190fd5b612bc8866109f6565b336000908152600660205260409020549096509450871580612bfa575060008581526008602052604090206001015488145b15612c18576000858152600860205260409020600601549350612a19565b6000888152600760209081526040808320548884526008909252909120600601549094508414612a19576000858152600860205260409020600601849055612a2287613ad5565b73dbeb69c655b666b3e17b8061df7ea4cc2399df11331480612c945750736b9e7c45622832a12f728ca87e23fa3a6b512fe233145b80612cb25750733d3b33b8f50ab9e8f5a9ff369853f0e638450adb33145b1515612d08576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c79207465616d206a7573742063616e2061637469766174650000000000604482015290519081900360640190fd5b600054600160a060020a031615612d69576040805160e560020a62461bcd02815260206004820152601f60248201527f73696c6c79206465762c20796f7520616c726561647920646964207468617400604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e602052600090815260409020805460019091015482565b6005546000818152600b60205260408120600201549091904290811015612e37576002546000838152600b602052604090206004015401811115612e11576000828152600b6020526040902060020154610f93908263ffffffff6146f516565b6002546000838152600b6020526040902060040154610f9391018263ffffffff6146f516565b60009250610fa4565b6002546000838152600b6020526040812060040154909142910181118015612eaa57506000848152600b602052604090206002015481111580612eaa57506000848152600b602052604090206002015481118015612eaa57506000848152600b6020526040902054155b15612ed8576000848152600b6020526040902060060154612ed1908463ffffffff6147b216565b9150612ee1565b612ed1836147d3565b5092915050565b6005546002546000828152600b602052604081206004015490929142910181118015612f5657506000828152600b602052604090206002015481111580612f5657506000828152600b602052604090206002015481118015612f5657506000828152600b6020526040902054155b15612f8a576000828152600b6020526040902060050154612f83908590610f87908263ffffffff613a4716565b9250612f93565b612f838461484b565b5050919050565b600f5460ff1681565b60035481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600b6020526040902060070154613018903463ffffffff613a4716565b6000828152600b6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600554915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091613103906130e5908690614755565b6000878152600860205260409020600301549063ffffffff613a4716565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b600085815260096020908152604080832089845290915281206001015481908190819015156131785761317589866148b8565b94505b60008a8152600b602052604090206006015468056bc75e2d631000001180156131d2575060008981526009602090815260408083208d8452909152902054670de0b6b3a7640000906131d0908a63ffffffff613a4716565b115b156132595760008981526009602090815260408083208d845290915290205461320a90670de0b6b3a76400009063ffffffff6146f516565b935061321c888563ffffffff6146f516565b60008a815260086020526040902060030154909350613241908463ffffffff613a4716565b60008a81526008602052604090206003015592965086925b633b9aca008811156136875760008a8152600b6020526040902060060154613287908963ffffffff6147b216565b9150670de0b6b3a764000082106132fe576132a2828b614917565b60008a8152600b602052604090205489146132c95760008a8152600b602052604090208990555b60008a8152600b602052604090206001015486146132f65760008a8152600b602052604090206001018690555b845160640185525b67016345785d8a0000881061353e5760048054600101905561331e6149f3565b15156001141561353e57678ac7230489e8000088106133bf5760035460649061334e90604b63ffffffff6145b016565b81151561335757fe5b60008b815260086020526040902060020154919004915061337e908263ffffffff613a4716565b60008a8152600860205260409020600201556003546133a3908263ffffffff6146f516565b60035584516d0eca8847c4129106ce8300000000018552613513565b670de0b6b3a764000088101580156133de5750678ac7230489e8000088105b1561346b576003546064906133fa90603263ffffffff6145b016565b81151561340357fe5b60008b815260086020526040902060020154919004915061342a908263ffffffff613a4716565b60008a81526008602052604090206002015560035461344f908263ffffffff6146f516565b60035584516d09dc5ada82b70b59df0200000000018552613513565b67016345785d8a0000881015801561348a5750670de0b6b3a764000088105b15613513576003546064906134a690601963ffffffff6145b016565b8115156134af57fe5b60008b81526008602052604090206002015491900491506134d6908263ffffffff613a4716565b60008a8152600860205260409020600201556003546134fb908263ffffffff6146f516565b60035584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006004555b60045485516103e890910201855260008981526009602090815260408083208d845290915290206001015461357a90839063ffffffff613a4716565b60008a81526009602090815260408083208e845290915290206001810191909155546135a7908990613a47565b60008a81526009602090815260408083208e8452825280832093909355600b905220600501546135de90839063ffffffff613a4716565b60008b8152600b6020526040902060058101919091556006015461360990899063ffffffff613a4716565b60008b8152600b6020908152604080832060060193909355600c81528282208983529052205461364090899063ffffffff613a4716565b60008b8152600c602090815260408083208a84529091529020556136688a8a8a8a8a8a614c0a565b94506136788a8a8a89868a614e44565b945061368789878a8589614fb2565b50505050505050505050565b61369b61534f565b6005546000818152600b6020526040812080546001820154600790920154909280808080808060646136d489603a63ffffffff6145b016565b8115156136dd57fe5b04965060328860008b8152600e6020526040902054919004965060649061370b908a9063ffffffff6145b016565b81151561371457fe5b60008b8152600e6020526040902060010154919004955060649061373f908a9063ffffffff6145b016565b81151561374857fe5b04935061376384611eb487818a818e8e63ffffffff6146f516565b60008c8152600b602052604090206005015490935061379086670de0b6b3a764000063ffffffff6145b016565b81151561379957fe5b60008d8152600b602052604090206005015491900492506137e790670de0b6b3a7640000906137cf90859063ffffffff6145b016565b8115156137d857fe5b8791900463ffffffff6146f516565b9050600081111561381757613802858263ffffffff6146f516565b9450613814838263ffffffff613a4716565b92505b60008a81526008602052604090206002015461383a90889063ffffffff613a4716565b60008b81526008602052604090206002015561385c848763ffffffff613a4716565b60008c8152600b602052604090206008015490945061388290839063ffffffff613a4716565b60008c8152600b60205260408120600801919091558411156138cf57604051736b9e7c45622832a12f728ca87e23fa3a6b512fe29085156108fc029086906000818181858888f150505050505b600b60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506005600081548092919060010191905055508a806001019b505042600b60008d815260200190815260200160002060040181905550613a18600254613a0c61a8c042613a4790919063ffffffff16565b9063ffffffff613a4716565b60008c8152600b6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b81810182811015613aa2576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613ace613ac5613ac0858563ffffffff6146f516565b61484b565b611eb48561484b565b9392505050565b600080821080613ae55750600382115b15613af257506002613af5565b50805b919050565b6005546002546000828152600b602052604090206004015442910181118015613b6557506000828152600b602052604090206002015481111580613b6557506000828152600b602052604090206002015481118015613b6557506000828152600b6020526040902054155b15613b9c57613b7784611eb489613d16565b600088815260086020526040902060030155613b97828886898988613142565b6119ec565b6000828152600b602052604090206002015481118015613bce57506000828152600b602052604090206003015460ff16155b156119ec576000828152600b60205260409020600301805460ff19166001179055613bf883613693565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600860205260408120600501548190613d35908490615120565b600083815260086020526040902060048101546003820154600290920154613d6792613a0c919063ffffffff613a4716565b90506000811115613d935760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613db85750600084115b1515613e34576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613e4357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613eaa57508460018503815181101515613e8257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613f26576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613f3557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561407857846001815181101515613f6f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613fec576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613ffb57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515614078576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156145485784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106140b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614129575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061410a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1561419657848281518110151561413c57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561416d57fe5b906020010190600160f860020a031916908160001a90535082151561419157600192505b61453d565b84828151811015156141a457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480614274575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061420057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614274575084517f7b000000000000000000000000000000000000000000000000000000000000009086908490811061425557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b8061431e575084517f2f00000000000000000000000000000000000000000000000000000000000000908690849081106142aa57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561431e575084517f3a00000000000000000000000000000000000000000000000000000000000000908690849081106142ff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561439a576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84828151811015156143a857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156144875784826001018151811015156143e457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515614487576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015614533575084517f3000000000000000000000000000000000000000000000000000000000000000908690849081106144c057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614533575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061451457fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561453d57600192505b60019091019061407d565b6001831515146145a2576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b60008215156145c157506000613aa2565b508181028183828115156145d157fe5b0414613aa2576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60008281526009602090815260408083208484528252808320600190810154600b8085528386206005810154938101548752600e8652938620548787529452600790920154670de0b6b3a7640000936146e493926146d89290916146af9187916064916146999163ffffffff6145b016565b8115156146a257fe5b049063ffffffff6145b016565b8115156146b857fe5b6000888152600b602052604090206008015491900463ffffffff613a4716565b9063ffffffff6145b016565b8115156146ed57fe5b049392505050565b60008282111561474f576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600b90935290832060080154613ace92670de0b6b3a76400009161479c916145b0565b8115156147a557fe5b049063ffffffff6146f516565b6000613ace6147c0846147d3565b611eb46147d3868663ffffffff613a4716565b60006309502f9061483b6d03b2a1d15167e7c5699bfde00000611eb46148367a0dac7055469777a6122ee4310dd6c14410500f2904840000000000613a0c6b01027e72f1f12813088000006146d88a670de0b6b3a764000063ffffffff6145b016565b6151b7565b81151561484457fe5b0492915050565b600061485e670de0b6b3a764000061520a565b61483b600261489161487e86670de0b6b3a764000063ffffffff6145b016565b65886c8f6730709063ffffffff6145b016565b81151561489a57fe5b04613a0c6148a78661520a565b6304a817c89063ffffffff6145b016565b6148c061534f565b600083815260086020526040902060050154156148f4576000838152600860205260409020600501546148f4908490615120565b506005805460009384526008602052604090932001919091558051600a01815290565b6000818152600b60205260408120600201544291908211801561494657506000838152600b6020526040902054155b1561496a5761496382613a0c603c670de0b6b3a7640000886146a2565b9050614997565b6000838152600b602052604090206002015461499490613a0c603c670de0b6b3a7640000886146a2565b90505b6149a961a8c08363ffffffff613a4716565b8110156149c9576000838152600b60205260409020600201819055611d99565b6149db61a8c08363ffffffff613a4716565b6000848152600b602052604090206002015550505050565b600080614b6443613a0c42336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a6e5780518252601f199092019160209182019101614a4f565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614aa457fe5b04613a0c45613a0c42416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614b1d5780518252601f199092019160209182019101614afe565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614b5357fe5b04613a0c424463ffffffff613a4716565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614bb25780518252601f199092019160209182019101614b93565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045490945092506103e89150839050046103e80282031015614c015760019150614c06565b600091505b5090565b614c1261534f565b60328504600080808080614c268187613a47565b6000805460405192975060648e049650600160a060020a0316916108fc87150291879190818181858888f150505060008c815260086020526040902060060154925050508015801590614c89575060008181526008602052604090206001015415155b15614d08576064614ca18c600a63ffffffff6145b016565b811515614caa57fe5b0492506064614cc08c600563ffffffff6145b016565b811515614cc957fe5b6000838152600860205260409020600401549190049250614cf190839063ffffffff613a4716565b600082815260086020526040902060040155614d28565b6064614d1b8c600f63ffffffff6145b016565b811515614d2457fe5b0492505b8b8a14158015614d48575060008a81526008602052604090206001015415155b15614d875760008a815260086020526040902060040154614d7090849063ffffffff613a4716565b60008b815260086020526040902060040155614d9a565b614d97858463ffffffff613a4716565b94505b6000898152600d6020526040902060010154614ddc90606490614dc4908e9063ffffffff6145b016565b811515614dcd57fe5b8791900463ffffffff613a4716565b94506000851115614e3357604051736b9e7c45622832a12f728ca87e23fa3a6b512fe29086156108fc029087906000818181858888f150505060c08a0151614e2d925087915063ffffffff613a4716565b60c08901525b50959b9a5050505050505050505050565b614e4c61534f565b6000848152600d6020526040812054819081908190606490614e75908b9063ffffffff6145b016565b811515614e7e57fe5b049350606489049250614e9c83600354613a4790919063ffffffff16565b6003556000888152600d6020526040902060010154614f0d90614f0090606490614ecd908d9063ffffffff6145b016565b811515614ed657fe5b046064614eea8d601363ffffffff6145b016565b811515614ef357fe5b049063ffffffff613a4716565b8a9063ffffffff6146f516565b9850614f1f898563ffffffff6146f516565b9150614f2d8b8b868a615216565b90506000811115614f4b57614f48848263ffffffff6146f516565b93505b60008b8152600b6020526040902060070154614f7190613a0c848463ffffffff613a4716565b60008c8152600b602052604090206007015560e0860151614f9990859063ffffffff613a4716565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b600061512c8383614755565b905060008111156151b25760008381526008602052604090206003015461515a90829063ffffffff613a4716565b600084815260086020908152604080832060030193909355600981528282208583529052206002015461519490829063ffffffff613a4716565b60008481526009602090815260408083208684529091529020600201555b505050565b60008060026151c7846001613a47565b8115156151d057fe5b0490508291505b81811015613d975780915060026151f982858115156151f257fe5b0483613a47565b81151561520257fe5b0490506151d7565b6000613aa282836145b0565b6000848152600b60205260408120600501548190819061524486670de0b6b3a764000063ffffffff6145b016565b81151561524d57fe5b6000898152600b6020526040902060080154919004925061527590839063ffffffff613a4716565b6000888152600b6020526040902060080155670de0b6b3a76400006152a0838663ffffffff6145b016565b8115156152a957fe5b60008881526009602090815260408083208c8452825280832060020154600b909252909120600801549290910492506152fc91613a0c908490670de0b6b3a76400009061479c908a63ffffffff6145b016565b60008781526009602090815260408083208b8452825280832060020193909355600b9052206005015461534490670de0b6b3a7640000906137cf90859063ffffffff6145b016565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820c2dcf9cc82bc45c477ac5e620f7c08145467adc2e22ba8b72b86e2a545325f680029

   Swarm Source:
bzzr://c2dcf9cc82bc45c477ac5e620f7c08145467adc2e22ba8b72b86e2a545325f68

 

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