Contract Overview |  Etheremon_Transform2
Balance: 0 Ether
Ether Value: $0
Transactions: 3453 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xe0a66218c40230967d4240d25f6220a28e52c7ffat txn 0xdbd2914bc7e953d7138e27f3fb7ae362a6577a2966c922dd134610b6b8f8159e
Token Balance:
 Latest 25 transactions from a total of 3453 transactions

TxHash Age From To Value [TxFee]
0x51760ab74e78402c064845abeec656373f5060bbb95d658c555e353f6212b0f397 days 2 hrs ago0xd0ceec6046fc1ed1479853ed0d0b5b24292fbe9f  IN   Etheremon_Transform20.09 Ether0.000022209
0xb11ac5e1f56912d6b9041eeecb3b37f33b0e8ebc894ac7b62759d9245d44362897 days 2 hrs ago0xd0ceec6046fc1ed1479853ed0d0b5b24292fbe9f  IN   Etheremon_Transform20.09 Ether0.000022209
0x4df0425e0da001ed23ed5e64b0a3365c6cb5265ae9a600f21a1c54820b82362c105 days 38 mins agoEtheremon_Creator1  IN   Etheremon_Transform20 Ether0.000357474
0xa884f5ea073a05c5baaf24d9c37031df0cb5fdc2cf79ed9832d7d2eb7e5de4aa105 days 39 mins agoEtheremon_Creator1  IN   Etheremon_Transform20 Ether0.000418821
0x05896c500fd73ec638052c4c6019a6cede93bb4614b2dbdd0aa2663624f6e1ce106 days 5 hrs ago0xfc12d884e4ab95dcbb50fb984aa180eacd74a303  IN   Etheremon_Transform20 Ether0.0000046669
0xb80e73a104dc9f6eec8fa34df84040224f5e95906f732861d23890aa95bcae0d106 days 6 hrs ago0xac407cea82c3cde4073ab66c73521d5427c1c133  IN   Etheremon_Transform20.09 Ether0.000275052
0x270d01d8fd03ec556b0ef6dfc0caa1d9b9a8399d803833b7ea9b5ea63391d397142 days 15 hrs ago0x773cd61af29fc0ec27141bdb9c077b125a421885  IN   Etheremon_Transform20 Ether0.000135051
0x2dd661a9b29c22a7082bdf2f70f91cf5470aaac05ee5648c60008f44269c9bd7142 days 15 hrs ago0x0aa6920041e5111c464d9aa5cd736d1867342813  IN   Etheremon_Transform20 Ether0.0001485561
0xb841c4b68ad53f49ba191776c130a3f4f6c791f179e08441771f28139ebebfa9142 days 15 hrs ago0x69aae7a2969d5ef1a6521ed2f2cc68b9d16360b3  IN   Etheremon_Transform20 Ether0.0001485561
0xdb37f720cb5dfa46ec5713a218b546afffdd4b8e1682de41d17d735a9b124257142 days 23 hrs ago0x7ca3b2c45e56dad79c8ba5eaf4216bf666f0b820  IN   Etheremon_Transform20 Ether0.000090034
0x8482f80ed411f2d93981d7e997a712b79fcf1700fe315f55695e1d4dfcbdf56a143 days 2 hrs ago0x30b572a3850b9835f4deec7ba31a46c489f42cc4  IN   Etheremon_Transform20 Ether0.0005517888
0x6bb503682183b52dd279327dbf9bed9f1a643f2d6f7f7eb47c5dcc5f2fc63b5c143 days 3 hrs ago0x1e98ecec748c09ad41e92cae60c46bc1923117fb  IN   Etheremon_Transform20 Ether0.0005517888
0xca1e5136d4ef80e5c58c11a5c70327c4a14a793f166d828d1efe88abb0d8826c143 days 3 hrs ago0x7ea3fe92a0eef03d366a9c95a15325e43bd496e8  IN   Etheremon_Transform20 Ether0.0005517888
0x2c26e67eb3be5c230a086329dbf510757a8ad09ba12ec1665489e4b4d87048f0143 days 3 hrs ago0x1e4ba1c437d4ea8125c1b1eb020de752d2229a39  IN   Etheremon_Transform20 Ether0.0005517888
0x6953342dca28c9c745088852f93891cd56487acfd3859f949512b911a5365fa6143 days 3 hrs ago0x995216b67a0edcaa03dcdf1dff5b5a48e7fab476  IN   Etheremon_Transform20 Ether0.0005690322
0xacc7359bdb9caf22b0e46d22f474761dc62697350a4948f04a05252dc67624de143 days 3 hrs ago0x8bfab81f1c8242203ef905a9e224e59e0e5e9f9a  IN   Etheremon_Transform20 Ether0.0005996288
0xf2f2556529f303dc0fa3a092cc599d57b42b048dd550df1dc76c5ece15546339143 days 3 hrs ago0x773cd61af29fc0ec27141bdb9c077b125a421885  IN   Etheremon_Transform20 Ether0.000551776
0x6226dc11f6a5ff37aa2fcfd6ea8fd00e972eeb37b0188d1de549f321c4df38a3143 days 4 hrs ago0x0aa6920041e5111c464d9aa5cd736d1867342813  IN   Etheremon_Transform20 Ether0.0005518016
0x69612282719edf102468135855435fba4d48d02ad9056bb8015f3df1709ee3b2143 days 4 hrs ago0x366d6a62acee51f70c9b6b6d8574d7e21ee43a23  IN   Etheremon_Transform20 Ether0.0005996288
0xcd048bb22081b7b8959f6b2599af55238ef3e534dc0ea7a58d982da23018124a143 days 4 hrs ago0x11b67a27127a22546bfcaf69966a4c8d1d18b51c  IN   Etheremon_Transform20 Ether0.0005517888
0xcde67bc6a1f4a66d76b18d6b4467ec3a86e1c056a69aaf65e2c1b2a96ce25e49143 days 4 hrs ago0x835ea455d21625b87353e74066dbd1dd7f3a869b  IN   Etheremon_Transform20 Ether0.0009223
0x8e88121ea1faf328aabffbdeb0544cc389cc82c8260a402a2f4f0fc12a5c2f3a143 days 5 hrs ago0xf8856124ea157d6f26472e38224ee6744ad13af3  IN   Etheremon_Transform20 Ether0.000824
0xb9840a49525999a96541956d74c00f93f7efe231aa53079b6bf496c95661ff32143 days 5 hrs ago0x69aae7a2969d5ef1a6521ed2f2cc68b9d16360b3  IN   Etheremon_Transform20 Ether0.000517302
0x5a372bff6732c42150905a538e1258ece72d43f0aba8ba31b58467920fd9e7d2143 days 5 hrs ago0x9a81d4da7d0147f0163e4ecf95f67678c40a26a5  IN   Etheremon_Transform20 Ether0.0007580426
0x1cc439b3a36192b6e40839e0331ca003840169d4d6addd1bb40978c35427d35e143 days 5 hrs ago0xe0f8896f7704d86b8c5257e212c5957953907212  IN   Etheremon_Transform20 Ether0.0011148
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 6 Internal Transactions

ParentTxHash Block Age From To Value
0xa884f5ea073a05c5baaf24d9c37031df0cb5fdc2cf79ed9832d7d2eb7e5de4aa6468214105 days 39 mins ago0xa6ff73743b2fd8dedfacea4067a51ef86d2494910xf35728a27318156ae04ba8a6dff8074fe98b19b81.63 Ether
0xe8860894b715a938f30ac65663f2f9f75cc919b0417accdc938e84c7d0f5093b6072697171 days 1 hr ago0xa6ff73743b2fd8dedfacea4067a51ef86d2494910xf35728a27318156ae04ba8a6dff8074fe98b19b819.63 Ether
0xa2e872814f549d392f78ca3768404f829edbdbfc0bd80ddd2def717640df141d5386628289 days 10 hrs ago0xdd38296a1592f06312d3ca3599057a403cb76b0b0xa6ff73743b2fd8dedfacea4067a51ef86d2494910.09 Ether
0x6e9bc70f3e972c387a85d437214f16c67156e0cb67a43ff906d81d3ca080fc9e5386625289 days 10 hrs ago0xdd38296a1592f06312d3ca3599057a403cb76b0b0xa6ff73743b2fd8dedfacea4067a51ef86d2494910.09 Ether
0xdcf6453e55c23042ae6c24b09f9211cd21e091fa076813f3cdd7e510671cf4735355641294 days 13 hrs ago0xdd38296a1592f06312d3ca3599057a403cb76b0b0xa6ff73743b2fd8dedfacea4067a51ef86d2494910.05 Ether
0x4497fe1f42aebdc124d5aa20490ff635774e1343dc04ad5c24d5746caa3a93c25354322294 days 18 hrs ago0xa6ff73743b2fd8dedfacea4067a51ef86d2494910xd3b6d520906bb14c0eab0faf7a8b13fe31f8cbda0.65 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

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



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.16;

// copyright [email protected]

contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

    function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) {
      assert(x >= y);
      uint256 z = x - y;
      return z;
    }

    function safeMult(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x * y;
      assert((x == 0)||(z/x == y));
      return z;
    }

}

contract BasicAccessControl {
    address public owner;
    // address[] public moderators;
    uint16 public totalModerators = 0;
    mapping (address => bool) public moderators;
    bool public isMaintaining = false;

    function BasicAccessControl() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    modifier onlyModerators() {
        require(msg.sender == owner || moderators[msg.sender] == true);
        _;
    }

    modifier isActive {
        require(!isMaintaining);
        _;
    }

    function ChangeOwner(address _newOwner) onlyOwner public {
        if (_newOwner != address(0)) {
            owner = _newOwner;
        }
    }


    function AddModerator(address _newModerator) onlyOwner public {
        if (moderators[_newModerator] == false) {
            moderators[_newModerator] = true;
            totalModerators += 1;
        }
    }
    
    function RemoveModerator(address _oldModerator) onlyOwner public {
        if (moderators[_oldModerator] == true) {
            moderators[_oldModerator] = false;
            totalModerators -= 1;
        }
    }

    function UpdateMaintaining(bool _isMaintaining) onlyOwner public {
        isMaintaining = _isMaintaining;
    }
}

contract EtheremonEnum {

    enum ResultCode {
        SUCCESS,
        ERROR_CLASS_NOT_FOUND,
        ERROR_LOW_BALANCE,
        ERROR_SEND_FAIL,
        ERROR_NOT_TRAINER,
        ERROR_NOT_ENOUGH_MONEY,
        ERROR_INVALID_AMOUNT,
        ERROR_OBJ_NOT_FOUND,
        ERROR_OBJ_INVALID_OWNERSHIP
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }
    
    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // write
    function addElementToArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function removeElementOfArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function setMonsterClass(uint32 _classId, uint256 _price, uint256 _returnPrice, bool _catchable) onlyModerators public returns(uint32);
    function addMonsterObj(uint32 _classId, address _trainer, string _name) onlyModerators public returns(uint64);
    function setMonsterObj(uint64 _objId, string _name, uint32 _exp, uint32 _createIndex, uint32 _lastClaimIndex) onlyModerators public;
    function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function removeMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function addMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function clearMonsterReturnBalance(uint64 _monsterId) onlyModerators public returns(uint256 amount);
    function collectAllReturnBalance(address _trainer) onlyModerators public returns(uint256 amount);
    function transferMonster(address _from, address _to, uint64 _monsterId) onlyModerators public returns(ResultCode);
    function addExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function deductExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function setExtraBalance(address _trainer, uint256 _amount) onlyModerators public;
    
    // read
    function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint);
    function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8);
    function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant public returns(string name);
    function getExtraBalance(address _trainer) constant public returns(uint256);
    function getMonsterDexSize(address _trainer) constant public returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant public returns(uint64);
    function getExpectedBalance(address _trainer) constant public returns(uint256);
    function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total);
}

contract EtheremonTransformData {
    uint64 public totalEgg = 0;
    function getHatchingEggId(address _trainer) constant external returns(uint64);
    function getHatchingEggData(address _trainer) constant external returns(uint64, uint64, uint32, address, uint, uint64);
    function getTranformedId(uint64 _objId) constant external returns(uint64);
    function countEgg(uint64 _objId) constant external returns(uint);
    
    function setHatchTime(uint64 _eggId, uint _hatchTime) external;
    function setHatchedEgg(uint64 _eggId, uint64 _newObjId) external;
    function addEgg(uint64 _objId, uint32 _classId, address _trainer, uint _hatchTime) external returns(uint64);
    function setTranformed(uint64 _objId, uint64 _newObjId) external;
}

contract EtheremonWorld is EtheremonEnum {
    
    function getGen0COnfig(uint32 _classId) constant public returns(uint32, uint256, uint32);
    function getTrainerEarn(address _trainer) constant public returns(uint256);
    function getReturnFromMonster(uint64 _objId) constant public returns(uint256 current, uint256 total);
    function getClassPropertyValue(uint32 _classId, PropertyType _type, uint index) constant external returns(uint32);
    function getClassPropertySize(uint32 _classId, PropertyType _type) constant external returns(uint);
}

interface EtheremonBattle {
    function isOnBattle(uint64 _objId) constant external returns(bool);
    function getMonsterLevel(uint64 _objId) constant public returns(uint8);
}

interface EtheremonTradeInterface {
    function isOnTrading(uint64 _objId) constant external returns(bool);
}

contract EtheremonTransform is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public STAT_COUNT = 6;
    uint8 constant public STAT_MAX = 32;
    uint8 constant public GEN0_NO = 24;
    
    struct MonsterClassAcc {
        uint32 classId;
        uint256 price;
        uint256 returnPrice;
        uint32 total;
        bool catchable;
    }

    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct MonsterEgg {
        uint64 eggId;
        uint64 objId;
        uint32 classId;
        address trainer;
        uint hatchTime;
        uint64 newObjId;
    }
    
    struct BasicObjInfo {
        uint32 classId;
        address owner;
        uint8 level;
    }
    
    // Gen0 has return price & no longer can be caught when this contract is deployed
    struct Gen0Config {
        uint32 classId;
        uint256 originalPrice;
        uint256 returnPrice;
        uint32 total; // total caught (not count those from eggs)
    }
    
    // hatching range
    uint16 public hatchStartTime = 2; // hour
    uint16 public hatchMaxTime = 46; // hour
    uint public removeHatchingTimeFee = 0.05 ether; // ETH
    uint public buyEggFee = 0.06 ether; // ETH
    
    uint32[] public randomClassIds;
    mapping(uint32 => uint8) public layingEggLevels;
    mapping(uint32 => uint8) public layingEggDeductions;
    mapping(uint32 => uint8) public transformLevels;
    mapping(uint32 => uint32) public transformClasses;

    mapping(uint8 => uint32) public levelExps;
    address private lastHatchingAddress;
    
    mapping(uint32 => Gen0Config) public gen0Config;
    
    // linked smart contract
    address public dataContract;
    address public worldContract;
    address public transformDataContract;
    address public battleContract;
    address public tradeContract;
    
    // events
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event EventLayEgg(address indexed trainer, uint64 objId, uint64 eggId);
    
    // modifier
    
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireTransformDataContract {
        require(transformDataContract != address(0));
        _;
    }
    
    modifier requireBattleContract {
        require(battleContract != address(0));
        _;
    }
    
    modifier requireTradeContract {
        require(tradeContract != address(0));
        _;        
    }
    
    
    // constructor
    function EtheremonTransform(address _dataContract, address _worldContract, address _transformDataContract, address _battleContract, address _tradeContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
    }
    
    // helper
    function getRandom(uint16 maxRan, uint8 index, address priAddress) constant public returns(uint8) {
        uint256 genNum = uint256(block.blockhash(block.number-1)) + uint256(priAddress);
        for (uint8 i = 0; i < index && i < 6; i ++) {
            genNum /= 256;
        }
        return uint8(genNum % maxRan);
    }
    
    function addNewObj(address _trainer, uint32 _classId) private returns(uint64) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        uint64 objId = data.addMonsterObj(_classId, _trainer, "..name me...");
        for (uint i=0; i < STAT_COUNT; i+= 1) {
            uint8 value = getRandom(STAT_MAX, uint8(i), lastHatchingAddress) + data.getElementInArrayType(ArrayType.STAT_START, uint64(_classId), i);
            data.addElementToArrayType(ArrayType.STAT_BASE, objId, value);
        }
        return objId;
    }
    
    // admin & moderators
    function setContract(address _dataContract, address _worldContract, address _transformDataContract, address _battleContract, address _tradeContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
    }

    function setOriginalPriceGen0() onlyModerators external {
        gen0Config[1] = Gen0Config(1, 0.3 ether, 0.003 ether, 374);
        gen0Config[2] = Gen0Config(2, 0.3 ether, 0.003 ether, 408);
        gen0Config[3] = Gen0Config(3, 0.3 ether, 0.003 ether, 373);
        gen0Config[4] = Gen0Config(4, 0.2 ether, 0.002 ether, 437);
        gen0Config[5] = Gen0Config(5, 0.1 ether, 0.001 ether, 497);
        gen0Config[6] = Gen0Config(6, 0.3 ether, 0.003 ether, 380); 
        gen0Config[7] = Gen0Config(7, 0.2 ether, 0.002 ether, 345);
        gen0Config[8] = Gen0Config(8, 0.1 ether, 0.001 ether, 518); 
        gen0Config[9] = Gen0Config(9, 0.1 ether, 0.001 ether, 447);
        gen0Config[10] = Gen0Config(10, 0.2 ether, 0.002 ether, 380); 
        gen0Config[11] = Gen0Config(11, 0.2 ether, 0.002 ether, 354);
        gen0Config[12] = Gen0Config(12, 0.2 ether, 0.002 ether, 346);
        gen0Config[13] = Gen0Config(13, 0.2 ether, 0.002 ether, 351); 
        gen0Config[14] = Gen0Config(14, 0.2 ether, 0.002 ether, 338);
        gen0Config[15] = Gen0Config(15, 0.2 ether, 0.002 ether, 341);
        gen0Config[16] = Gen0Config(16, 0.35 ether, 0.0035 ether, 384);
        gen0Config[17] = Gen0Config(17, 1 ether, 0.01 ether, 305); 
        gen0Config[18] = Gen0Config(18, 0.1 ether, 0.001 ether, 427);
        gen0Config[19] = Gen0Config(19, 1 ether, 0.01 ether, 304);
        gen0Config[20] = Gen0Config(20, 0.4 ether, 0.05 ether, 82);
        gen0Config[21] = Gen0Config(21, 1, 1, 123);
        gen0Config[22] = Gen0Config(22, 0.2 ether, 0.001 ether, 468);
        gen0Config[23] = Gen0Config(23, 0.5 ether, 0.0025 ether, 302);
        gen0Config[24] = Gen0Config(24, 1 ether, 0.005 ether, 195);
    }    

    function updateHatchingRange(uint16 _start, uint16 _max) onlyModerators external {
        hatchStartTime = _start;
        hatchMaxTime = _max;
    }

    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        // no user money is kept in this contract, only trasaction fee
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }

    function setConfigClass(uint32 _classId, uint8 _layingLevel, uint8 _layingCost, uint8 _transformLevel, uint32 _tranformClass) onlyModerators external {
        layingEggLevels[_classId] = _layingLevel;
        layingEggDeductions[_classId] = _layingCost;
        transformLevels[_classId] = _transformLevel;
        transformClasses[_classId] = _tranformClass;
    }
    
    function setConfig(uint _removeHatchingTimeFee, uint _buyEggFee) onlyModerators external {
        removeHatchingTimeFee = _removeHatchingTimeFee;
        buyEggFee = _buyEggFee;
    }

    function genLevelExp() onlyModerators external {
        uint8 level = 1;
        uint32 requirement = 100;
        uint32 sum = requirement;
        while(level <= 100) {
            levelExps[level] = sum;
            level += 1;
            requirement = (requirement * 11) / 10 + 5;
            sum += requirement;
        }
    }
    
    function addRandomClass(uint32 _newClassId) onlyModerators public {
        if (_newClassId > 0) {
            for (uint index = 0; index < randomClassIds.length; index++) {
                if (randomClassIds[index] == _newClassId) {
                    return;
                }
            }
            randomClassIds.push(_newClassId);
        }
    }
    
    function removeRandomClass(uint32 _oldClassId) onlyModerators public {
        uint foundIndex = 0;
        for (; foundIndex < randomClassIds.length; foundIndex++) {
            if (randomClassIds[foundIndex] == _oldClassId) {
                break;
            }
        }
        if (foundIndex < randomClassIds.length) {
            randomClassIds[foundIndex] = randomClassIds[randomClassIds.length-1];
            delete randomClassIds[randomClassIds.length-1];
            randomClassIds.length--;
        }
    }
    
    function removeHatchingTimeWithToken(address _trainer) isActive onlyModerators requireDataContract requireTransformDataContract external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(_trainer);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != _trainer || egg.newObjId > 0)
            revert();
        
        transformData.setHatchTime(egg.eggId, 0);
    }    
    
    function buyEggWithToken(address _trainer) isActive onlyModerators requireDataContract requireTransformDataContract external {
        if (randomClassIds.length == 0) {
            revert();
        }
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(_trainer) > 0) {
            revert();
        }

        // add random egg
        uint8 classIndex = getRandom(uint16(randomClassIds.length), 1, lastHatchingAddress);
        uint64 eggId = transformData.addEgg(0, randomClassIds[classIndex], _trainer, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        // deduct exp
        EventLayEgg(msg.sender, 0, eggId);
    }
    
    // public

    function ceil(uint a, uint m) pure public returns (uint) {
        return ((a + m - 1) / m) * m;
    }

    function getLevel(uint32 exp) view public returns (uint8) {
        uint8 minIndex = 1;
        uint8 maxIndex = 100;
        uint8 currentIndex;
     
        while (minIndex < maxIndex) {
            currentIndex = (minIndex + maxIndex) / 2;
            if (exp < levelExps[currentIndex])
                maxIndex = currentIndex;
            else
                minIndex = currentIndex + 1;
        }

        return minIndex;
    }

    function getGen0ObjInfo(uint64 _objId) constant public returns(uint32, uint32, uint256) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        
        Gen0Config memory gen0 = gen0Config[obj.classId];
        if (gen0.classId != obj.classId) {
            return (gen0.classId, obj.createIndex, 0);
        }
        
        uint32 totalGap = 0;
        if (obj.createIndex < gen0.total)
            totalGap = gen0.total - obj.createIndex;
        
        return (obj.classId, obj.createIndex, safeMult(totalGap, gen0.returnPrice));
    }
    
    function getObjClassId(uint64 _objId) requireDataContract constant public returns(uint32, address, uint8) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        return (obj.classId, obj.trainer, getLevel(obj.exp));
    }
    
    function getClassCheckOwner(uint64 _objId, address _trainer) requireDataContract constant public returns(uint32) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (_trainer != obj.trainer)
            return 0;
        return obj.classId;
    }

    function calculateMaxEggG0(uint64 _objId) constant public returns(uint) {
        uint32 classId;
        uint32 createIndex; 
        uint256 totalEarn;
        (classId, createIndex, totalEarn) = getGen0ObjInfo(_objId);
        if (classId > GEN0_NO || classId == 20 || classId == 21)
            return 0;
        
        Gen0Config memory config = gen0Config[classId];
        // the one from egg can not lay
        if (createIndex > config.total)
            return 0;

        // calculate agv price
        uint256 avgPrice = config.originalPrice;
        uint rate = config.originalPrice/config.returnPrice;
        if (config.total > rate) {
            uint k = config.total - rate;
            avgPrice = (config.total * config.originalPrice + config.returnPrice * k * (k+1) / 2) / config.total;
        }
        uint256 catchPrice = config.originalPrice;            
        if (createIndex > rate) {
            catchPrice += config.returnPrice * safeSubtract(createIndex, rate);
        }
        if (totalEarn >= catchPrice) {
            return 0;
        }
        return ceil((catchPrice - totalEarn)*15*1000/avgPrice, 10000)/10000;
    }
    
    function canLayEgg(uint64 _objId, uint32 _classId, uint32 _level) constant public returns(bool) {
        if (_classId <= GEN0_NO) {
            EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
            // legends
            if (transformData.countEgg(_objId) >= calculateMaxEggG0(_objId))
                return false;
            return true;
        } else {
            if (layingEggLevels[_classId] == 0 || _level < layingEggLevels[_classId])
                return false;
            return true;
        }
    }
    
    function layEgg(uint64 _objId) isActive requireDataContract requireTransformDataContract external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }
        
        // can not lay egg when trading
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (trade.isOnTrading(_objId))
            revert();
        
        // check obj 
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (obj.monsterId != _objId || obj.trainer != msg.sender) {
            revert();
        }
        
        // check lay egg condition
        uint8 currentLevel = getLevel(obj.exp);
        uint8 afterLevel = 0;
        if (!canLayEgg(_objId, obj.classId, currentLevel))
            revert();
        if (layingEggDeductions[obj.classId] >= currentLevel)
            revert();
        afterLevel = currentLevel - layingEggDeductions[obj.classId];

        // add egg 
        uint64 eggId = transformData.addEgg(obj.monsterId, obj.classId, msg.sender, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        
        // deduct exp 
        if (afterLevel < currentLevel)
            data.decreaseMonsterExp(_objId, obj.exp - levelExps[afterLevel-1]);
        EventLayEgg(msg.sender, _objId, eggId);
    }
    
    function hatchEgg() isActive requireDataContract requireTransformDataContract external {
        // use as a seed for random
        lastHatchingAddress = msg.sender;
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender)
            revert();
        // need more time
        if (egg.newObjId > 0 || egg.hatchTime > block.timestamp) {
            revert();
        }
        
        uint64 objId = addNewObj(msg.sender, egg.classId);
        transformData.setHatchedEgg(egg.eggId, objId);
        
        Transfer(address(0), msg.sender, objId);
    }
    
    function removeHatchingTime() isActive requireDataContract requireTransformDataContract external payable  {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender || egg.newObjId > 0)
            revert();
        
        if (msg.value != removeHatchingTimeFee) {
            revert();
        }
        transformData.setHatchTime(egg.eggId, 0);
    }

    
    function checkAncestors(uint32 _classId, address _trainer, uint64 _a1, uint64 _a2, uint64 _a3) constant public returns(bool) {
        EtheremonWorld world = EtheremonWorld(worldContract);
        uint index = 0;
        uint32 temp = 0;
        // check ancestor
        uint32[3] memory ancestors;
        uint32[3] memory requestAncestors;
        index = world.getClassPropertySize(_classId, PropertyType.ANCESTOR);
        while (index > 0) {
            index -= 1;
            ancestors[index] = world.getClassPropertyValue(_classId, PropertyType.ANCESTOR, index);
        }
            
        if (_a1 > 0) {
            temp = getClassCheckOwner(_a1, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[0] = temp;
        }
        if (_a2 > 0) {
            temp = getClassCheckOwner(_a2, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[1] = temp;
        }
        if (_a3 > 0) {
            temp = getClassCheckOwner(_a3, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[2] = temp;
        }
            
        if (requestAncestors[0] > 0 && (requestAncestors[0] == requestAncestors[1] || requestAncestors[0] == requestAncestors[2]))
            return false;
        if (requestAncestors[1] > 0 && (requestAncestors[1] == requestAncestors[2]))
            return false;
                
        for (index = 0; index < ancestors.length; index++) {
            temp = ancestors[index];
            if (temp > 0 && temp != requestAncestors[0]  && temp != requestAncestors[1] && temp != requestAncestors[2])
                return false;
        }
        
        return true;
    }
    
    function transform(uint64 _objId, uint64 _a1, uint64 _a2, uint64 _a3) isActive requireDataContract requireTransformDataContract external payable {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        if (transformData.getTranformedId(_objId) > 0)
            revert();
        
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (battle.isOnBattle(_objId) || trade.isOnTrading(_objId))
            revert();
        
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        
        BasicObjInfo memory objInfo;
        (objInfo.classId, objInfo.owner, objInfo.level) = getObjClassId(_objId);
        uint32 transformClass = transformClasses[objInfo.classId];
        if (objInfo.classId == 0 || objInfo.owner != msg.sender)
            revert();
        if (transformLevels[objInfo.classId] == 0 || objInfo.level < transformLevels[objInfo.classId])
            revert();
        if (transformClass == 0)
            revert();
        
        
        // gen0 - can not transform if it has bonus egg 
        if (objInfo.classId <= GEN0_NO) {
            // legends
            if (getBonusEgg(_objId) > 0)
                revert();
        } else {
            if (!checkAncestors(objInfo.classId, msg.sender, _a1, _a2, _a3))
                revert();
        }
        
        uint64 newObjId = addNewObj(msg.sender, transformClass);
        // remove old one
        data.removeMonsterIdMapping(msg.sender, _objId);
        transformData.setTranformed(_objId, newObjId);
        
        Transfer(msg.sender, address(0), _objId);
        Transfer(address(0), msg.sender, newObjId);
    }
    
    function buyEgg() isActive requireDataContract requireTransformDataContract external payable {
        if (msg.value != buyEggFee) {
            revert();
        }
        
        if (randomClassIds.length == 0) {
            revert();
        }
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }

        // add random egg
        uint8 classIndex = getRandom(uint16(randomClassIds.length), 1, lastHatchingAddress);
        uint64 eggId = transformData.addEgg(0, randomClassIds[classIndex], msg.sender, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        // deduct exp
        EventLayEgg(msg.sender, 0, eggId);
    }
    
    // read
    function getBonusEgg(uint64 _objId) constant public returns(uint) {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        uint totalBonusEgg = calculateMaxEggG0(_objId);
        if (totalBonusEgg > 0) {
            return (totalBonusEgg - transformData.countEgg(_objId));
        }
        return 0;
    }
    
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"transform","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"gen0Config","outputs":[{"name":"classId","type":"uint32"},{"name":"originalPrice","type":"uint256"},{"name":"returnPrice","type":"uint256"},{"name":"total","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyEggFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_removeHatchingTimeFee","type":"uint256"},{"name":"_buyEggFee","type":"uint256"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hatchMaxTime","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"calculateMaxEggG0","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_start","type":"uint16"},{"name":"_max","type":"uint16"}],"name":"updateHatchingRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"battleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAT_MAX","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"transformLevels","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"buyEggWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setOriginalPriceGen0","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_layingLevel","type":"uint8"},{"name":"_layingCost","type":"uint8"},{"name":"_transformLevel","type":"uint8"},{"name":"_tranformClass","type":"uint32"}],"name":"setConfigClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"levelExps","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyEgg","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"m","type":"uint256"}],"name":"ceil","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjClassId","outputs":[{"name":"","type":"uint32"},{"name":"","type":"address"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hatchStartTime","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transformDataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"layingEggDeductions","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"layingEggLevels","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"checkAncestors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newClassId","type":"uint32"}],"name":"addRandomClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"removeHatchingTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"removeHatchingTimeWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"removeHatchingTimeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBonusEgg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_classId","type":"uint32"},{"name":"_level","type":"uint32"}],"name":"canLayEgg","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_oldClassId","type":"uint32"}],"name":"removeRandomClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint16"},{"name":"index","type":"uint8"},{"name":"priAddress","type":"address"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"randomClassIds","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"hatchEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"transformClasses","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getGen0ObjInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_trainer","type":"address"}],"name":"getClassCheckOwner","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"layEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"},{"indexed":false,"name":"eggId","type":"uint64"}],"name":"EventLayEgg","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a61ffff02191690556002805462ffffff19166102001764ffff0000001916632e00000017905566b1a2bc2ec5000060035566d529ae9e860000600455341561005457600080fd5b60405160a0806149d4833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600d805499831699821699909917909855600e805497821697891697909717909655600f8054958716958816959095179094555050601080549184169185169190911790556011805492909116919092161790556148cf806101056000396000f3006060604052600436106102635763ffffffff60e060020a600035041663085f8ebb81146102685780630d668818146102915780630daf4151146102c057806314d0f1ba1461030d57806318758480146103405780631dbb9867146103535780631e34c5851461037857806320eb2a8714610391578063217b97e4146103c85780632f6a6e20146103f257806333ced32114610412578063418bc2ee14610425578063423b1ca31461044557806348ef5aa8146104585780634e3dc2f1146104705780634efb023e14610499578063522f6815146104ac57806352bb525c146104ce5780635b86ce97146104ea57806366ba2670146105095780636a81af171461051c5780636c81fd6d1461055157806373d65c001461057057806378b475a8146105835780637d635502146105b55780638587be6e146105bd5780638da5cb5b146105d657806390f2dc88146105e957806392c537e91461063f57806393cc6d85146106525780639983ce511461066557806399bf954c146106815780639bd7d6881461069d578063a15b9769146106de578063a3c07c6a146106fa578063a3cb3e9714610702578063a4d5e30e14610721578063afd61d2c14610734578063b2cad9b714610754578063b62d4ce114610770578063b85d62751461079f578063bc602ab7146107be578063c5442f7d146107da578063c993548714610806578063ca9c4b331461081c578063cf790bbb1461082f578063d2fb32c21461084b578063d98e14bd14610895578063e98f402c146108a8578063eb14367d146108d4578063ee4e4416146108f4578063f285329214610907578063ffa640d814610926575b600080fd5b61028f67ffffffffffffffff60043581169060243581169060443581169060643516610939565b005b341561029c57600080fd5b6102a4610de3565b604051600160a060020a03909116815260200160405180910390f35b34156102cb57600080fd5b6102dc63ffffffff60043516610df2565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b341561031857600080fd5b61032c600160a060020a0360043516610e21565b604051901515815260200160405180910390f35b341561034b57600080fd5b6102a4610e36565b341561035e57600080fd5b610366610e45565b60405190815260200160405180910390f35b341561038357600080fd5b61028f600435602435610e4b565b341561039c57600080fd5b61028f600160a060020a0360043581169060243581169060443581169060643581169060843516610e9c565b34156103d357600080fd5b6103db610f4e565b60405161ffff909116815260200160405180910390f35b34156103fd57600080fd5b61036667ffffffffffffffff60043516610f5f565b341561041d57600080fd5b61028f61112a565b341561043057600080fd5b61028f61ffff600435811690602435166111d8565b341561045057600080fd5b6102a461124f565b341561046357600080fd5b61028f600435151561125e565b341561047b57600080fd5b61048361128c565b60405160ff909116815260200160405180910390f35b34156104a457600080fd5b6103db611291565b34156104b757600080fd5b61028f600160a060020a03600435166024356112b3565b34156104d957600080fd5b61048363ffffffff60043516611345565b34156104f557600080fd5b61028f600160a060020a036004351661135a565b341561051457600080fd5b61028f611615565b341561052757600080fd5b61028f63ffffffff60043581169060ff6024358116916044358216916064351690608435166126df565b341561055c57600080fd5b61028f600160a060020a0360043516612795565b341561057b57600080fd5b61048361283f565b341561058e57600080fd5b61059c60ff60043516612844565b60405163ffffffff909116815260200160405180910390f35b61028f61285c565b34156105c857600080fd5b610366600435602435612ade565b34156105e157600080fd5b6102a4612afa565b34156105f457600080fd5b61060967ffffffffffffffff60043516612b09565b60405163ffffffff9093168352600160a060020a03909116602083015260ff166040808301919091526060909101905180910390f35b341561064a57600080fd5b6103db612c2f565b341561065d57600080fd5b6102a4612c3e565b341561067057600080fd5b61048363ffffffff60043516612c4d565b341561068c57600080fd5b61048363ffffffff60043516612c62565b34156106a857600080fd5b61032c63ffffffff60043516600160a060020a036024351667ffffffffffffffff60443581169060643581169060843516612c77565b34156106e957600080fd5b61028f63ffffffff60043516612fe4565b61028f6130ec565b341561070d57600080fd5b61028f600160a060020a03600435166132d7565b341561072c57600080fd5b6103666134fb565b341561073f57600080fd5b61036667ffffffffffffffff60043516613501565b341561075f57600080fd5b61048363ffffffff600435166135ad565b341561077b57600080fd5b61032c67ffffffffffffffff6004351663ffffffff60243581169060443516613610565b34156107aa57600080fd5b61028f600160a060020a0360043516613714565b34156107c957600080fd5b61028f63ffffffff600435166137be565b34156107e557600080fd5b61048361ffff6004351660ff60243516600160a060020a0360443516613940565b341561081157600080fd5b61059c60043561399b565b341561082757600080fd5b61028f6139d3565b341561083a57600080fd5b61059c63ffffffff60043516613c48565b341561085657600080fd5b61086b67ffffffffffffffff60043516613c60565b60405163ffffffff9384168152919092166020820152604080820192909252606001905180910390f35b34156108a057600080fd5b610483613e46565b34156108b357600080fd5b61059c67ffffffffffffffff60043516600160a060020a0360243516613e4b565b34156108df57600080fd5b61028f67ffffffffffffffff60043516613f77565b34156108ff57600080fd5b61032c614459565b341561091257600080fd5b61028f600160a060020a0360043516614462565b341561093157600080fd5b6102a46144b9565b60008060008061094761474c565b600254600090819060ff161561095c57600080fd5b600d54600160a060020a0316151561097357600080fd5b600f54600160a060020a0316151561098a57600080fd5b600f54600160a060020a0316965060008763fd7d79488d836040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156109e857600080fd5b6102c65a03f115156109f957600080fd5b5050506040518051905067ffffffffffffffff161115610a1857600080fd5b601054601154600160a060020a039182169750169450856335f097f38c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b5050506040518051905080610b12575084600160a060020a031663a847a71c8c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610af657600080fd5b6102c65a03f11515610b0757600080fd5b505050604051805190505b15610b1c57600080fd5b600d54600160a060020a03169350610b338b612b09565b60ff166040860152600160a060020a0316602085015263ffffffff16835260096000845163ffffffff9081168252602082019290925260400160002054169150825163ffffffff161580610b9d575033600160a060020a03168360200151600160a060020a031614155b15610ba757600080fd5b60086000845163ffffffff16815260208101919091526040016000205460ff161580610bf9575060086000845163ffffffff168152602081019190915260409081016000205460ff169084015160ff16105b15610c0357600080fd5b63ffffffff82161515610c1557600080fd5b6018835163ffffffff1611610c3f576000610c2f8c613501565b1115610c3a57600080fd5b610c58565b610c4d8351338c8c8c612c77565b1515610c5857600080fd5b610c6233836144c8565b905083600160a060020a03166360c6ccb2338d60405160e060020a63ffffffff8516028152600160a060020a03909216600483015267ffffffffffffffff166024820152604401600060405180830381600087803b1515610cc257600080fd5b6102c65a03f11515610cd357600080fd5b50505086600160a060020a03166354b670578c8360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515610d2d57600080fd5b6102c65a03f11515610d3e57600080fd5b50600091505033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8d60405167ffffffffffffffff909116815260200160405180910390a3600160a060020a03331660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405167ffffffffffffffff909116815260200160405180910390a35050505050505050505050565b600d54600160a060020a031681565b600c60205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b60016020526000908152604090205460ff1681565b600e54600160a060020a031681565b60045481565b60005433600160a060020a0390811691161480610e865750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610e9157600080fd5b600391909155600455565b60005433600160a060020a0390811691161480610ed75750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610ee257600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a0397881617909155600e8054821695871695909517909455600f8054851693861693909317909255601080548416918516919091179055601180549092169216919091179055565b6002546301000000900461ffff1681565b600080600080610f6d61476c565b600080600080610f7c8a613c60565b91995097509550601863ffffffff89161180610f9e57508763ffffffff166014145b80610faf57508763ffffffff166015145b15610fbd576000985061111d565b63ffffffff88166000908152600c60205260409081902090608090519081016040908152825463ffffffff908116835260018401546020840152600284015491830191909152600390920154909116606082019081529095505163ffffffff168763ffffffff161115611033576000985061111d565b846020015193508460400151856020015181151561104d57fe5b04925082856060015163ffffffff1611156110b35782856060015163ffffffff16039150846060015163ffffffff16600283600101848860400151020281151561109357fe5b048660200151876060015163ffffffff1602018115156110af57fe5b0493505b84602001519050828763ffffffff1611156110e0576110d88763ffffffff168461470d565b856040015102015b8086106110f0576000985061111d565b61271061111085613a988985030281151561110757fe5b04612710612ade565b81151561111957fe5b0498505b5050505050505050919050565b600080548190819033600160a060020a039081169116148061116a5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561117557600080fd5b506001915060649050805b606460ff8416116111d35760ff83166000908152600a60208190526040909120805463ffffffff191663ffffffff84811691909117909155600190940193600b8402160460050191508181019050611180565b505050565b60005433600160a060020a03908116911614806112135750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561121e57600080fd5b6002805461ffff92831663010000000264ffff00000019949093166101000262ffff00199091161792909216179055565b601054600160a060020a031681565b60005433600160a060020a0390811691161461127957600080fd5b6002805460ff1916911515919091179055565b602081565b60005474010000000000000000000000000000000000000000900461ffff1681565b60005433600160a060020a03908116911614806112ee5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156112f957600080fd5b30600160a060020a03163181111561131057600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561134157600080fd5b5050565b60086020526000908152604090205460ff1681565b6002546000908190819060ff161561137157600080fd5b60005433600160a060020a03908116911614806113ac5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156113b757600080fd5b600d54600160a060020a031615156113ce57600080fd5b600f54600160a060020a031615156113e557600080fd5b60055415156113f357600080fd5b600f54600160a060020a0316925060008363aeb669eb86836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561145057600080fd5b6102c65a03f1151561146157600080fd5b5050506040518051905067ffffffffffffffff16111561148057600080fd5b600554600b5461149c9190600190600160a060020a0316613940565b915082600160a060020a0316630bc954dc600060058560ff168154811015156114c157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1687611519600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b15156115a157600080fd5b6102c65a03f115156115b257600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a250505050565b60005433600160a060020a03908116911614806116505750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561165b57600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600c90527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600c90527f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd7208151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600c90527fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600052600c90527f5b84bb9e0f5aa9cc45a8bb66468db5d4816d1e75ff86b5e1f1dd8d144dab80978151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600c90527f2cd9ebf6ff19cdd7ffcc447d7c7d47b5991f5c7392a04512134e765802361fa68151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600c90527f980f427e00e74f6d338adfccc7468518c8c8ea00836d0dce98c5fe154e17bf2b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600c90527fdae089abd7155aa13ce498edb0d7a7156b783d015031f10c9a3d4f5fcb5189718151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600052600c90527f5ff1be3842b54290a9d10674244dae5848d2371b5314790c54805c086586e1df8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600c90527f2fb3c9afecd3f0d43923381d3e9f60168c039b98f0b7120382e81b682b7bc3168151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600c90527f9e6c92d7be355807bd948171438a5e65aaf9e4c36f1405c1b9ca25d27c4ea3a08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600c90527f6a9911425952520efa6de3784a0ac63c35d3c5bb392028ea0beb0dc41a1919578151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600081905290527f37877ab6ac9e279d19a4db3294b259b5a4163c0ed597627ae79e33d80cde4db88151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600c90527f551134c3788a756a109c6e227f794518fef985fa2ba3fac727bcd6dac5e98e8f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600c90527f4c711c77a2730b2744c96ef60e2967c2b4247d6a372f8b2e95c748d1459b23808151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600c90527f977a47af6886c81cccba9ceb5316ec9b4027c59ac276de3e2cb39ec8af72ee7b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600c90527ffba2bf5b1dd468baf16221045792a70d5cdd656b9f3da14b127c3e81dc5d6de28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600c90527f270e7751614d4e91a095cd3ace3f4d517c1b37aa711dfeaf72be0b76abd048398151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600c90527f63ad5e8597ed00826582ffe8302b2704b28344c60ae5645ec296a6326e0ed3458151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600c90527fe02ca69cf2f93f7a389d26d1c6b52e01a88a074c056dfe4bf6a3c69d4a8041e28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600c90527f55664edbebd57273ba1f6d1c017cd920bbceea562d5502a6837280a660edef958151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600c90527ff77830ee6ca813461e84e66f2fead14ff7f40269cd63d8faab5b6ce1c3d8c07e8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600c90527f9fe279e833bcb8beab045538c3e47062dba2173d3cb9299210a3ae3478eac49d8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600c90527f6422c4859a0e1cfb624515c5474fb4780841aa90bef78e8ffd8411f6df3c00a78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600c90527f591a7551fcdfca13c6240947c6945b1b81f85a820d3ef46ea582217b1dd807198151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a039081169116148061271a5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561272557600080fd5b63ffffffff9485166000908152600660209081526040808320805460ff1990811660ff998a161790915560078352818420805482169789169790971790965560088252808320805490961694909616939093179093556009909152919020805463ffffffff191691909216179055565b60005433600160a060020a039081169116146127b057600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561283c57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b600a6020526000908152604090205463ffffffff1681565b6002546000908190819060ff161561287357600080fd5b600d54600160a060020a0316151561288a57600080fd5b600f54600160a060020a031615156128a157600080fd5b60045434146128af57600080fd5b60055415156128bd57600080fd5b600f54600160a060020a0316925060008363aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561291a57600080fd5b6102c65a03f1151561292b57600080fd5b5050506040518051905067ffffffffffffffff16111561294a57600080fd5b600554600b546129669190600190600160a060020a0316613940565b915082600160a060020a0316630bc954dc600060058560ff1681548110151561298b57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16336129e3600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b1515612a6b57600080fd5b6102c65a03f11515612a7c57600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050565b60008182600184860103811515612af157fe5b04029392505050565b600054600160a060020a031681565b600080600080612b17614793565b600d54600090600160a060020a03161515612b3157600080fd5b50600d54600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515612b9057600080fd5b6102c65a03f11515612ba157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a039092166040870152919091166020850190815267ffffffffffffffff90921684529150518260400151612c1f84608001516135ad565b9550955095505050509193909250565b600254610100900461ffff1681565b600f54600160a060020a031681565b60076020526000908152604090205460ff1681565b60066020526000908152604090205460ff1681565b600080600080612c856147df565b612c8d6147df565b600e54600160a060020a0316945060009350839250846388e9abb68c8580604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115612ce657fe5b60ff16815260200192505050602060405180830381600087803b1515612d0b57600080fd5b6102c65a03f11515612d1c57600080fd5b50505060405180519450505b6000841115612def5760018403935084600160a060020a0316635b6263398c6000876000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115612d8757fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515612db357600080fd5b6102c65a03f11515612dc457600080fd5b50505060405180519050828560038110612dda57fe5b63ffffffff9092166020929092020152612d28565b60008967ffffffffffffffff161115612e2e57612e0c898b613e4b565b925063ffffffff83161515612e245760009550612fd6565b63ffffffff831681525b60008867ffffffffffffffff161115612e7057612e4b888b613e4b565b925063ffffffff83161515612e635760009550612fd6565b63ffffffff831660208201525b60008767ffffffffffffffff161115612eb257612e8d878b613e4b565b925063ffffffff83161515612ea55760009550612fd6565b63ffffffff831660408201525b6000815163ffffffff16118015612ef35750602081015163ffffffff16815163ffffffff161480612ef35750604081015163ffffffff16815163ffffffff16145b15612f015760009550612fd6565b6000602082015163ffffffff16118015612f2e5750604081015163ffffffff16602082015163ffffffff16145b15612f3c5760009550612fd6565b600093505b6003841015612fd157818460038110612f5657fe5b6020020151925060008363ffffffff16118015612f805750805163ffffffff168363ffffffff1614155b8015612f9c5750602081015163ffffffff168363ffffffff1614155b8015612fb85750604081015163ffffffff168363ffffffff1614155b15612fc65760009550612fd6565b600190930192612f41565b600195505b505050505095945050505050565b6000805433600160a060020a03908116911614806130205750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561302b57600080fd5b60008263ffffffff161115611341575060005b60055481101561309d578163ffffffff1660058281548110151561305e57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16141561309557611341565b60010161303e565b60058054600181016130af8382614807565b916000526020600020906008918282040191900660040284909190916101000a81548163ffffffff021916908363ffffffff160217905550505050565b60006130f661483b565b60025460ff161561310657600080fd5b600d54600160a060020a0316151561311d57600080fd5b600f54600160a060020a0316151561313457600080fd5b600f54600160a060020a031691508163710ad12833600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b151561319057600080fd5b6102c65a03f115156131a157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff161580613237575033600160a060020a03168160600151600160a060020a031614155b80613250575060008160a0015167ffffffffffffffff16115b1561325a57600080fd5b600354341461326857600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15156132bf57600080fd5b6102c65a03f115156132d057600080fd5b5050505050565b60006132e161483b565b60025460ff16156132f157600080fd5b60005433600160a060020a039081169116148061332c5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561333757600080fd5b600d54600160a060020a0316151561334e57600080fd5b600f54600160a060020a0316151561336557600080fd5b600f54600160a060020a031691508163710ad12884600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b15156133c157600080fd5b6102c65a03f115156133d257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff161580613468575082600160a060020a03168160600151600160a060020a031614155b80613481575060008160a0015167ffffffffffffffff16115b1561348b57600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15156134e257600080fd5b6102c65a03f115156134f357600080fd5b505050505050565b60035481565b600f54600090600160a060020a03168161351a84610f5f565b905060008111156135a15781600160a060020a031663ec0ba0068560006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561357d57600080fd5b6102c65a03f1151561358e57600080fd5b50505060405180519050810392506135a6565b600092505b5050919050565b600060016064825b8160ff168360ff16101561360757600260ff848401160460ff81166000908152600a602052604090205490915063ffffffff90811690861610156135fb57809150613602565b8060010192505b6135b5565b50909392505050565b600080601863ffffffff8516116136c35750600f54600160a060020a031661363785610f5f565b81600160a060020a031663ec0ba0068760006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561368f57600080fd5b6102c65a03f115156136a057600080fd5b505050604051805190501015156136ba576000915061370c565b6001915061370c565b63ffffffff841660009081526006602052604090205460ff161580613702575063ffffffff80851660009081526006602052604090205460ff16908416105b156136ba57600091505b509392505050565b60005433600160a060020a0390811691161461372f57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561283c57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b6000805433600160a060020a03908116911614806137fa5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561380557600080fd5b5060005b600554811015613868578163ffffffff1660058281548110151561382957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16141561386057613868565b600101613809565b6005548110156113415760058054600019810190811061388457fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff166005828154811015156138b957fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550600560016005805490500381548110151561390357fe5b90600052602060002090600891828204019190066004026101000a81549063ffffffff021916905560058054809190600190036111d39190614807565b6000600019430140600160a060020a03831601815b8460ff168160ff1610801561396d575060068160ff16105b156139815761010082049150600101613955565b8561ffff168281151561399057fe5b069695505050505050565b60058054829081106139a957fe5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b60006139dd61483b565b60025460009060ff16156139f057600080fd5b600d54600160a060020a03161515613a0757600080fd5b600f54600160a060020a03161515613a1e57600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0381811692909217909255600f54169350839063710ad12890600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b1515613aa157600080fd5b6102c65a03f11515613ab257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08a0152608089019290925250600160a060020a03909116606087015263ffffffff90911660408601529081166020850152168252815167ffffffffffffffff161580613b48575033600160a060020a03168260600151600160a060020a031614155b15613b5257600080fd5b60008260a0015167ffffffffffffffff161180613b725750428260800151115b15613b7c57600080fd5b613b8a3383604001516144c8565b9050600160a060020a0383166337bd186883518360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515613be457600080fd5b6102c65a03f11515613bf557600080fd5b5050600160a060020a033316905060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405167ffffffffffffffff909116815260200160405180910390a3505050565b60096020526000908152604090205463ffffffff1681565b600080600080613c6e614793565b613c7661476c565b600d54600160a060020a031692506000836307202460898360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613cd457600080fd5b6102c65a03f11515613ce557600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a039091166040870152166020850190815267ffffffffffffffff9091168452600c906000905163ffffffff1663ffffffff16815260200190815260200160002060806040519081016040908152825463ffffffff908116835260018401546020808501919091526002850154928401929092526003909301549092166060820152925083015163ffffffff16825163ffffffff1614613de95781518360a00151909750955060009450613e3b565b506000606082015163ffffffff168360a0015163ffffffff161015613e16578260a0015182606001510390505b82602001518360a00151613e348363ffffffff168560400151614721565b9650965096505b505050509193909250565b600681565b600080613e56614793565b600d54600090600160a060020a03161515613e7057600080fd5b50600d54600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613ecf57600080fd5b6102c65a03f11515613ee057600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087019081529216602086015267ffffffffffffffff909216845290915051600160a060020a03868116911614613f665760009350613f6e565b816020015193505b50505092915050565b6000806000613f84614793565b60025460009081908190819060ff1615613f9d57600080fd5b600d54600160a060020a03161515613fb457600080fd5b600f54600160a060020a03161515613fcb57600080fd5b600f54600160a060020a0316975060008863aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561402857600080fd5b6102c65a03f1151561403957600080fd5b5050506040518051905067ffffffffffffffff16111561405857600080fd5b601154600160a060020a031696508663a847a71c8a60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156140b557600080fd5b6102c65a03f115156140c657600080fd5b50505060405180519050156140da57600080fd5b600d54600160a060020a03169550600093508563072024608a8660405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b151561413a57600080fd5b6102c65a03f1151561414b57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08d0152505063ffffffff91821660808b0152600160a060020a0390921660408a015291909116602088015267ffffffffffffffff918216875294508916855167ffffffffffffffff161415806141e5575033600160a060020a03168560400151600160a060020a031614155b156141ef57600080fd5b6141fc85608001516135ad565b9250600091506142148986602001518560ff16613610565b151561421f57600080fd5b8260ff1660076000876020015163ffffffff16815260208101919091526040016000205460ff161061425057600080fd5b60076000866020015163ffffffff16815260208101919091526040016000205460ff1683039150600160a060020a038816630bc954dc86518760200151600254600b5433916142b791630100000090910461ffff1690600090600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561433f57600080fd5b6102c65a03f1151561435057600080fd5b5050506040518051905090508260ff168260ff1610156143fd5760ff6000198301166000908152600a6020526040902054600160a060020a038716906331afa55f908b9063ffffffff1660808901510360405163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b15156143e857600080fd5b6102c65a03f115156143f957600080fd5b5050505b33600160a060020a03167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef758a8360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050505050505050565b60025460ff1681565b60005433600160a060020a0390811691161461447d57600080fd5b600160a060020a0381161561283c5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b601154600160a060020a031681565b600d54600090600160a060020a03168180808363fc4d20f58789846040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b151561456457600080fd5b6102c65a03f1151561457557600080fd5b5050506040518051935060009250505b60068210156147025783600160a060020a03166362b21ad760028863ffffffff16856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156145d257fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561461857600080fd5b6102c65a03f1151561462957600080fd5b5050506040518051600b5490915061464e906020908590600160a060020a0316613940565b01905083600160a060020a03166326bda739600385846000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561468f57fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b15156146db57600080fd5b6102c65a03f115156146ec57600080fd5b5050506040518051905050600182019150614585565b509095945050505050565b6000808284101561471a57fe5b5050900390565b600082820283158061473d575082848281151561473a57fe5b04145b151561474557fe5b9392505050565b606060405190810160409081526000808352602083018190529082015290565b60806040519081016040908152600080835260208301819052908201819052606082015290565b610100604051908101604090815260008083526020830181905290820152606081016147bd614870565b8152600060208201819052604082018190526060820181905260809091015290565b60606040519081016040526003815b6000815260001990910190602001816147ee5790505090565b8154818355818115116111d35760070160089004816007016008900483600052602060002091820191016111d39190614882565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60206040519081016040526000815290565b6148a091905b8082111561489c5760008155600101614888565b5090565b905600a165627a7a72305820a5bd0e91965e71deb67672c5c0250521648f17074576a29588ea0b91577a767e0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05000000000000000000000000df6164efd12678bf6a7d5a1ddf73c831493f65740000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : 000000000000000000000000df6164efd12678bf6a7d5a1ddf73c831493f6574
Arg [4] : 0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030


   Swarm Source:
bzzr://a5bd0e91965e71deb67672c5c0250521648f17074576a29588ea0b91577a767e

 

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.