Contract 0xf3A8f103574bc64358E372Ed68E95db0B2Bb0936

 

Contract Overview

Etheremon: Transform 1
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xbd5c3793a4bb81f80d4009bc6d1c8b27c8960e9220fec5547756ecd05daf1b52Hatch Egg53253402018-03-26 13:04:001184 days 23 hrs ago0x171b206332752671aa38bfd219bec18fed2c7d5f IN  Etheremon: Transform 10 Ether0.000045662
0x615f65275a2db0666e9c476ae8c98e1126711bc0aeb9b5258d22ede57d398791Hatch Egg53253402018-03-26 13:04:001184 days 23 hrs ago0x3dbe30f9c45bc131c3b1f5b8acce1b7bb50e3523 IN  Etheremon: Transform 10 Ether0.000045662
0x75b427fc35938ea8c531867b378a64299039ef988ca22057350a02f9535d2953Hatch Egg53253242018-03-26 12:59:501184 days 23 hrs ago0x3dbe30f9c45bc131c3b1f5b8acce1b7bb50e3523 IN  Etheremon: Transform 10 Ether0.000045662
0x23947d0603b6697b84ca13a21bd449126e1161705a2d6f73999064bb3a505935Hatch Egg53253152018-03-26 12:57:481184 days 23 hrs ago0x40a58abe07fe02c244e5989833b1463d166bf634 IN  Etheremon: Transform 10 Ether0.000045662
0x30dfa44521346720749f42a9f74424ff953cc860473d74da54cb98a4ccdd65f0Hatch Egg53253152018-03-26 12:57:481184 days 23 hrs ago0xaa623900a151d2a0b6858d0b212d5bb440545940 IN  Etheremon: Transform 10 Ether0.000045662
0x4424a6d89011a04a688c3c93d9731bef3cb5de37d5b35ab61e236f46d3ec238eHatch Egg53253142018-03-26 12:57:421184 days 23 hrs ago0x171b206332752671aa38bfd219bec18fed2c7d5f IN  Etheremon: Transform 10 Ether0.000045662
0x74affd05e8d35c6cb061212de7d7d3264c0d1fd472029dd77f8aed1bd53e99adHatch Egg53252642018-03-26 12:43:351185 days 5 mins ago0x3dbe30f9c45bc131c3b1f5b8acce1b7bb50e3523 IN  Etheremon: Transform 10 Ether0.00001255650.55
0x21c9038f5b26b9303d1faa2f95fb4a418b5d46b42a5c408f424cdafa33d0b283Hatch Egg53249902018-03-26 11:34:571185 days 1 hr ago0xaa623900a151d2a0b6858d0b212d5bb440545940 IN  Etheremon: Transform 10 Ether0.0000296791.3
0xab2b378d0bfb328ef9d75d87e050116bce5f7ac0602d8aab49969276a48cc815Hatch Egg53249722018-03-26 11:31:101185 days 1 hr ago0x40a58abe07fe02c244e5989833b1463d166bf634 IN  Etheremon: Transform 10 Ether0.0000273961.2
0x137e3187e33c6a79f2cc44ec568b3044f2e3f15ad09ef0872c61dc91f4943b3dHatch Egg53249722018-03-26 11:31:101185 days 1 hr ago0x171b206332752671aa38bfd219bec18fed2c7d5f IN  Etheremon: Transform 10 Ether0.0000296791.3
0x8e93dd654c4fb4c318dccc686d68c16982c31dfb1d5b07e6dc3847cc471a7866Withdraw Ether53247642018-03-26 10:42:291185 days 2 hrs agoEtheremonToken: Deployer 1 IN  Etheremon: Transform 10 Ether0.0001610855
0x448535bfaf5e85ced3142224fdcf7cc2f8e82d3ecc47a0bca92d8862623ab7e9Update Maintaini...53247442018-03-26 10:37:291185 days 2 hrs agoEtheremonToken: Deployer 1 IN  Etheremon: Transform 10 Ether0.000137495
0xbe070d8b5727c25e9e6b563b9d24c6c56876fa5c86b050b9837fedc91138bb1bHatch Egg53245562018-03-26 9:53:181185 days 2 hrs ago0x12c08b4708495b5dfde1084dff45688b4cc13ebc IN  Etheremon: Transform 10 Ether0.00047210161.2
0x580a9d0d1ff6de7884d106cfdb18a33c57d929aba080abf5b0af2e4b5fa520b5Hatch Egg53245422018-03-26 9:50:141185 days 2 hrs ago0x242d0c57a9ff0391ff7fd3a050cf7edb4f821050 IN  Etheremon: Transform 10 Ether0.0007645562
0x431dda7b0c693330901d495fe0e594e5987f7382ec25f8c5f0895788c782a48eLay Egg53245422018-03-26 9:50:141185 days 2 hrs ago0x9773a39257c640235caffdd0679e36a7dfa58f89 IN  Etheremon: Transform 10 Ether0.00036123362.1
0xf2cd2ba25ea2bfee6dbff7b2ce5f4df8d1199da340aa42a96e780fd818e763ccHatch Egg53241922018-03-26 8:24:181185 days 4 hrs ago0xe5066121f48b0ce06e07dcb67e4b91380a18ad2a IN  Etheremon: Transform 10 Ether0.0007358362
0x9e94328b62d70f80a8c36770a2e0902f059d48c0352da570e161d5f00885db61Hatch Egg53239622018-03-26 7:29:481185 days 5 hrs ago0x3f7fa26ca24acc218000dd72216146d585577df7 IN  Etheremon: Transform 10 Ether0.00077644982.1
0x81108dde369dc2b7edb699e3063fed8a70395f1e3925a715b59f28126a89e379Hatch Egg53239072018-03-26 7:17:181185 days 5 hrs ago0xd629e6b9cee907a49fab593c666339ee6f1f0a10 IN  Etheremon: Transform 10 Ether0.00082617782.1
0x885f54e8e71a43d0a4472074200235e7bcb5b07964bc1479cc10d56c86db4c5eBuy Egg53235442018-03-26 5:46:071185 days 7 hrs ago0xe5066121f48b0ce06e07dcb67e4b91380a18ad2a IN  Etheremon: Transform 10.06 Ether0.0000524522
0x823b7f06b65f80576f87c1f8d692a5310b39361c0dd669f89b48a7398acc3c1bBuy Egg53235442018-03-26 5:46:071185 days 7 hrs ago0xe5066121f48b0ce06e07dcb67e4b91380a18ad2a IN  Etheremon: Transform 10.06 Ether0.0002749522
0xedf42bceeec18575d57c559ce15d47a04fe682540ec3abaa8f308b0d1d3f3ae0Transform53233572018-03-26 5:04:361185 days 7 hrs ago0x7e1dcf785f0353bf657c38ab7865c1f184efe208 IN  Etheremon: Transform 10 Ether0.0014341083
0x9f83a35799b799ec8cf52ac1db152ef5ae0684e6fde90aa23e03b03d154331acLay Egg53232132018-03-26 4:32:251185 days 8 hrs ago0xbe07420e269f9a0dda08316b4f703f831c5d49d8 IN  Etheremon: Transform 10 Ether0.0004036762
0xc08f8b62d047bc9406222196ac8c181694bd312ea8ee610b5a70c35fbe933ff5Transform53230082018-03-26 3:46:321185 days 9 hrs ago0x669df91f06f40d8e887d0a26e8068e14fd6d807f IN  Etheremon: Transform 10 Ether0.0004721191
0xc8600443a1bf0c60de825cb541737ca20d0dc2145f5900dfcf6260224f7138cdHatch Egg53228952018-03-26 3:15:181185 days 9 hrs ago0x9773a39257c640235caffdd0679e36a7dfa58f89 IN  Etheremon: Transform 10 Ether0.00082483382.1
0x881d276b6262e9226720baee3c31af09e71ea359798ef91c5056dc42b1edf7c5Lay Egg53225942018-03-26 2:03:541185 days 10 hrs ago0x773cd61af29fc0ec27141bdb9c077b125a421885 IN  Etheremon: Transform 10 Ether0.000190705321.02
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x8e93dd654c4fb4c318dccc686d68c16982c31dfb1d5b07e6dc3847cc471a786653247642018-03-26 10:42:291185 days 2 hrs ago Etheremon: Transform 10xd3b6d520906bb14c0eab0faf7a8b13fe31f8cbda8.46 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtheremonTransform

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-01-30
*/

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 = true;

    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 EventLayEgg(address indexed trainer, uint64 objId, uint64 eggId);
    event EventHatchEgg(address indexed trainer, uint64 eggId, uint64 objId);
    event EventTransform(address indexed trainer, uint64 oldObjId, uint64 newObjId);
    event EventRelease(address indexed trainer, uint64 objId);
    
    // 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);
        EventHatchEgg(msg.sender, egg.eggId, 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);
        EventTransform(msg.sender, _objId, 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 Security Audit

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":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"},{"indexed":false,"name":"eggId","type":"uint64"}],"name":"EventLayEgg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"eggId","type":"uint64"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventHatchEgg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"oldObjId","type":"uint64"},{"indexed":false,"name":"newObjId","type":"uint64"}],"name":"EventTransform","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventRelease","type":"event"}]

60606040526000805460a060020a61ffff02191690556002805460ff191660011762ffff0019166102001764ffff0000001916632e00000017905566b1a2bc2ec5000060035566d529ae9e860000600455341561005b57600080fd5b60405160a08061499f833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600d805499831699821699909917909855600e805497821697891697909717909655600f8054958716958816959095179094555050601080549184169185169190911790556011805492909116919092161790556148938061010c6000396000f3006060604052600436106102635763ffffffff60e060020a600035041663085f8ebb81146102685780630d668818146102915780630daf4151146102c057806314d0f1ba1461030d57806318758480146103405780631dbb9867146103535780631e34c5851461037857806320eb2a8714610391578063217b97e4146103c85780632f6a6e20146103f257806333ced32114610412578063418bc2ee14610425578063423b1ca31461044557806348ef5aa8146104585780634e3dc2f1146104705780634efb023e14610499578063522f6815146104ac57806352bb525c146104ce5780635b86ce97146104ea57806366ba2670146105095780636a81af171461051c5780636c81fd6d1461055157806373d65c001461057057806378b475a8146105835780637d635502146105b55780638587be6e146105bd5780638da5cb5b146105d657806390f2dc88146105e957806392c537e91461063f57806393cc6d85146106525780639983ce511461066557806399bf954c146106815780639bd7d6881461069d578063a15b9769146106de578063a3c07c6a146106fa578063a3cb3e9714610702578063a4d5e30e14610721578063afd61d2c14610734578063b2cad9b714610754578063b62d4ce114610770578063b85d62751461079f578063bc602ab7146107be578063c5442f7d146107da578063c993548714610806578063ca9c4b331461081c578063cf790bbb1461082f578063d2fb32c21461084b578063d98e14bd14610895578063e98f402c146108a8578063eb14367d146108d4578063ee4e4416146108f4578063f285329214610907578063ffa640d814610926575b600080fd5b61028f67ffffffffffffffff60043581169060243581169060443581169060643516610939565b005b341561029c57600080fd5b6102a4610d9f565b604051600160a060020a03909116815260200160405180910390f35b34156102cb57600080fd5b6102dc63ffffffff60043516610dae565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b341561031857600080fd5b61032c600160a060020a0360043516610ddd565b604051901515815260200160405180910390f35b341561034b57600080fd5b6102a4610df2565b341561035e57600080fd5b610366610e01565b60405190815260200160405180910390f35b341561038357600080fd5b61028f600435602435610e07565b341561039c57600080fd5b61028f600160a060020a0360043581169060243581169060443581169060643581169060843516610e58565b34156103d357600080fd5b6103db610f0a565b60405161ffff909116815260200160405180910390f35b34156103fd57600080fd5b61036667ffffffffffffffff60043516610f1b565b341561041d57600080fd5b61028f6110e6565b341561043057600080fd5b61028f61ffff60043581169060243516611194565b341561045057600080fd5b6102a461120b565b341561046357600080fd5b61028f600435151561121a565b341561047b57600080fd5b610483611248565b60405160ff909116815260200160405180910390f35b34156104a457600080fd5b6103db61124d565b34156104b757600080fd5b61028f600160a060020a036004351660243561126f565b34156104d957600080fd5b61048363ffffffff60043516611301565b34156104f557600080fd5b61028f600160a060020a0360043516611316565b341561051457600080fd5b61028f6115d1565b341561052757600080fd5b61028f63ffffffff60043581169060ff60243581169160443582169160643516906084351661269b565b341561055c57600080fd5b61028f600160a060020a0360043516612751565b341561057b57600080fd5b6104836127fb565b341561058e57600080fd5b61059c60ff60043516612800565b60405163ffffffff909116815260200160405180910390f35b61028f612818565b34156105c857600080fd5b610366600435602435612a9a565b34156105e157600080fd5b6102a4612ab6565b34156105f457600080fd5b61060967ffffffffffffffff60043516612ac5565b60405163ffffffff9093168352600160a060020a03909116602083015260ff166040808301919091526060909101905180910390f35b341561064a57600080fd5b6103db612beb565b341561065d57600080fd5b6102a4612bfa565b341561067057600080fd5b61048363ffffffff60043516612c09565b341561068c57600080fd5b61048363ffffffff60043516612c1e565b34156106a857600080fd5b61032c63ffffffff60043516600160a060020a036024351667ffffffffffffffff60443581169060643581169060843516612c33565b34156106e957600080fd5b61028f63ffffffff60043516612fa0565b61028f6130a8565b341561070d57600080fd5b61028f600160a060020a0360043516613293565b341561072c57600080fd5b6103666134b7565b341561073f57600080fd5b61036667ffffffffffffffff600435166134bd565b341561075f57600080fd5b61048363ffffffff60043516613569565b341561077b57600080fd5b61032c67ffffffffffffffff6004351663ffffffff602435811690604435166135cc565b34156107aa57600080fd5b61028f600160a060020a03600435166136d0565b34156107c957600080fd5b61028f63ffffffff6004351661377a565b34156107e557600080fd5b61048361ffff6004351660ff60243516600160a060020a03604435166138fc565b341561081157600080fd5b61059c600435613957565b341561082757600080fd5b61028f61398f565b341561083a57600080fd5b61059c63ffffffff60043516613c0c565b341561085657600080fd5b61086b67ffffffffffffffff60043516613c24565b60405163ffffffff9384168152919092166020820152604080820192909252606001905180910390f35b34156108a057600080fd5b610483613e0a565b34156108b357600080fd5b61059c67ffffffffffffffff60043516600160a060020a0360243516613e0f565b34156108df57600080fd5b61028f67ffffffffffffffff60043516613f3b565b34156108ff57600080fd5b61032c61441d565b341561091257600080fd5b61028f600160a060020a0360043516614426565b341561093157600080fd5b6102a461447d565b600080600080610947614710565b600254600090819060ff161561095c57600080fd5b600d54600160a060020a0316151561097357600080fd5b600f54600160a060020a0316151561098a57600080fd5b600f54600160a060020a0316965060008763fd7d79488d836040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156109e857600080fd5b6102c65a03f115156109f957600080fd5b5050506040518051905067ffffffffffffffff161115610a1857600080fd5b601054601154600160a060020a039182169750169450856335f097f38c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b5050506040518051905080610b12575084600160a060020a031663a847a71c8c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610af657600080fd5b6102c65a03f11515610b0757600080fd5b505050604051805190505b15610b1c57600080fd5b600d54600160a060020a03169350610b338b612ac5565b60ff166040860152600160a060020a0316602085015263ffffffff16835260096000845163ffffffff9081168252602082019290925260400160002054169150825163ffffffff161580610b9d575033600160a060020a03168360200151600160a060020a031614155b15610ba757600080fd5b60086000845163ffffffff16815260208101919091526040016000205460ff161580610bf9575060086000845163ffffffff168152602081019190915260409081016000205460ff169084015160ff16105b15610c0357600080fd5b63ffffffff82161515610c1557600080fd5b6018835163ffffffff1611610c3f576000610c2f8c6134bd565b1115610c3a57600080fd5b610c58565b610c4d8351338c8c8c612c33565b1515610c5857600080fd5b610c62338361448c565b905083600160a060020a03166360c6ccb2338d60405160e060020a63ffffffff8516028152600160a060020a03909216600483015267ffffffffffffffff166024820152604401600060405180830381600087803b1515610cc257600080fd5b6102c65a03f11515610cd357600080fd5b50505086600160a060020a03166354b670578c8360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515610d2d57600080fd5b6102c65a03f11515610d3e57600080fd5b50505033600160a060020a03167f0e0ff0f818cd7a80a3f90089d30ab4a3465f1829f11769f48f05f9974857965f8c8360405167ffffffffffffffff9283168152911660208201526040908101905180910390a25050505050505050505050565b600d54600160a060020a031681565b600c60205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b60016020526000908152604090205460ff1681565b600e54600160a060020a031681565b60045481565b60005433600160a060020a0390811691161480610e425750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610e4d57600080fd5b600391909155600455565b60005433600160a060020a0390811691161480610e935750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610e9e57600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a0397881617909155600e8054821695871695909517909455600f8054851693861693909317909255601080548416918516919091179055601180549092169216919091179055565b6002546301000000900461ffff1681565b600080600080610f29614730565b600080600080610f388a613c24565b91995097509550601863ffffffff89161180610f5a57508763ffffffff166014145b80610f6b57508763ffffffff166015145b15610f7957600098506110d9565b63ffffffff88166000908152600c60205260409081902090608090519081016040908152825463ffffffff908116835260018401546020840152600284015491830191909152600390920154909116606082019081529095505163ffffffff168763ffffffff161115610fef57600098506110d9565b846020015193508460400151856020015181151561100957fe5b04925082856060015163ffffffff16111561106f5782856060015163ffffffff16039150846060015163ffffffff16600283600101848860400151020281151561104f57fe5b048660200151876060015163ffffffff16020181151561106b57fe5b0493505b84602001519050828763ffffffff16111561109c576110948763ffffffff16846146d1565b856040015102015b8086106110ac57600098506110d9565b6127106110cc85613a98898503028115156110c357fe5b04612710612a9a565b8115156110d557fe5b0498505b5050505050505050919050565b600080548190819033600160a060020a03908116911614806111265750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561113157600080fd5b506001915060649050805b606460ff84161161118f5760ff83166000908152600a60208190526040909120805463ffffffff191663ffffffff84811691909117909155600190940193600b840216046005019150818101905061113c565b505050565b60005433600160a060020a03908116911614806111cf5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156111da57600080fd5b6002805461ffff92831663010000000264ffff00000019949093166101000262ffff00199091161792909216179055565b601054600160a060020a031681565b60005433600160a060020a0390811691161461123557600080fd5b6002805460ff1916911515919091179055565b602081565b60005474010000000000000000000000000000000000000000900461ffff1681565b60005433600160a060020a03908116911614806112aa5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156112b557600080fd5b30600160a060020a0316318111156112cc57600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f1935050505015156112fd57600080fd5b5050565b60086020526000908152604090205460ff1681565b6002546000908190819060ff161561132d57600080fd5b60005433600160a060020a03908116911614806113685750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561137357600080fd5b600d54600160a060020a0316151561138a57600080fd5b600f54600160a060020a031615156113a157600080fd5b60055415156113af57600080fd5b600f54600160a060020a0316925060008363aeb669eb86836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561140c57600080fd5b6102c65a03f1151561141d57600080fd5b5050506040518051905067ffffffffffffffff16111561143c57600080fd5b600554600b546114589190600190600160a060020a03166138fc565b915082600160a060020a0316630bc954dc600060058560ff1681548110151561147d57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16876114d5600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a03166138fc565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561155d57600080fd5b6102c65a03f1151561156e57600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a250505050565b60005433600160a060020a039081169116148061160c5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561161757600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600c90527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600c90527f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd7208151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600c90527fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600052600c90527f5b84bb9e0f5aa9cc45a8bb66468db5d4816d1e75ff86b5e1f1dd8d144dab80978151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600c90527f2cd9ebf6ff19cdd7ffcc447d7c7d47b5991f5c7392a04512134e765802361fa68151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600c90527f980f427e00e74f6d338adfccc7468518c8c8ea00836d0dce98c5fe154e17bf2b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600c90527fdae089abd7155aa13ce498edb0d7a7156b783d015031f10c9a3d4f5fcb5189718151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600052600c90527f5ff1be3842b54290a9d10674244dae5848d2371b5314790c54805c086586e1df8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600c90527f2fb3c9afecd3f0d43923381d3e9f60168c039b98f0b7120382e81b682b7bc3168151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600c90527f9e6c92d7be355807bd948171438a5e65aaf9e4c36f1405c1b9ca25d27c4ea3a08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600c90527f6a9911425952520efa6de3784a0ac63c35d3c5bb392028ea0beb0dc41a1919578151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600081905290527f37877ab6ac9e279d19a4db3294b259b5a4163c0ed597627ae79e33d80cde4db88151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600c90527f551134c3788a756a109c6e227f794518fef985fa2ba3fac727bcd6dac5e98e8f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600c90527f4c711c77a2730b2744c96ef60e2967c2b4247d6a372f8b2e95c748d1459b23808151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600c90527f977a47af6886c81cccba9ceb5316ec9b4027c59ac276de3e2cb39ec8af72ee7b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600c90527ffba2bf5b1dd468baf16221045792a70d5cdd656b9f3da14b127c3e81dc5d6de28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600c90527f270e7751614d4e91a095cd3ace3f4d517c1b37aa711dfeaf72be0b76abd048398151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600c90527f63ad5e8597ed00826582ffe8302b2704b28344c60ae5645ec296a6326e0ed3458151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600c90527fe02ca69cf2f93f7a389d26d1c6b52e01a88a074c056dfe4bf6a3c69d4a8041e28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600c90527f55664edbebd57273ba1f6d1c017cd920bbceea562d5502a6837280a660edef958151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600c90527ff77830ee6ca813461e84e66f2fead14ff7f40269cd63d8faab5b6ce1c3d8c07e8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600c90527f9fe279e833bcb8beab045538c3e47062dba2173d3cb9299210a3ae3478eac49d8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600c90527f6422c4859a0e1cfb624515c5474fb4780841aa90bef78e8ffd8411f6df3c00a78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600c90527f591a7551fcdfca13c6240947c6945b1b81f85a820d3ef46ea582217b1dd807198151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a03908116911614806126d65750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156126e157600080fd5b63ffffffff9485166000908152600660209081526040808320805460ff1990811660ff998a161790915560078352818420805482169789169790971790965560088252808320805490961694909616939093179093556009909152919020805463ffffffff191691909216179055565b60005433600160a060020a0390811691161461276c57600080fd5b600160a060020a03811660009081526001602052604090205460ff1615156127f857600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b600a6020526000908152604090205463ffffffff1681565b6002546000908190819060ff161561282f57600080fd5b600d54600160a060020a0316151561284657600080fd5b600f54600160a060020a0316151561285d57600080fd5b600454341461286b57600080fd5b600554151561287957600080fd5b600f54600160a060020a0316925060008363aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156128d657600080fd5b6102c65a03f115156128e757600080fd5b5050506040518051905067ffffffffffffffff16111561290657600080fd5b600554600b546129229190600190600160a060020a03166138fc565b915082600160a060020a0316630bc954dc600060058560ff1681548110151561294757fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff163361299f600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a03166138fc565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b1515612a2757600080fd5b6102c65a03f11515612a3857600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050565b60008182600184860103811515612aad57fe5b04029392505050565b600054600160a060020a031681565b600080600080612ad3614757565b600d54600090600160a060020a03161515612aed57600080fd5b50600d54600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515612b4c57600080fd5b6102c65a03f11515612b5d57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a039092166040870152919091166020850190815267ffffffffffffffff90921684529150518260400151612bdb8460800151613569565b9550955095505050509193909250565b600254610100900461ffff1681565b600f54600160a060020a031681565b60076020526000908152604090205460ff1681565b60066020526000908152604090205460ff1681565b600080600080612c416147a3565b612c496147a3565b600e54600160a060020a0316945060009350839250846388e9abb68c8580604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115612ca257fe5b60ff16815260200192505050602060405180830381600087803b1515612cc757600080fd5b6102c65a03f11515612cd857600080fd5b50505060405180519450505b6000841115612dab5760018403935084600160a060020a0316635b6263398c6000876000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115612d4357fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515612d6f57600080fd5b6102c65a03f11515612d8057600080fd5b50505060405180519050828560038110612d9657fe5b63ffffffff9092166020929092020152612ce4565b60008967ffffffffffffffff161115612dea57612dc8898b613e0f565b925063ffffffff83161515612de05760009550612f92565b63ffffffff831681525b60008867ffffffffffffffff161115612e2c57612e07888b613e0f565b925063ffffffff83161515612e1f5760009550612f92565b63ffffffff831660208201525b60008767ffffffffffffffff161115612e6e57612e49878b613e0f565b925063ffffffff83161515612e615760009550612f92565b63ffffffff831660408201525b6000815163ffffffff16118015612eaf5750602081015163ffffffff16815163ffffffff161480612eaf5750604081015163ffffffff16815163ffffffff16145b15612ebd5760009550612f92565b6000602082015163ffffffff16118015612eea5750604081015163ffffffff16602082015163ffffffff16145b15612ef85760009550612f92565b600093505b6003841015612f8d57818460038110612f1257fe5b6020020151925060008363ffffffff16118015612f3c5750805163ffffffff168363ffffffff1614155b8015612f585750602081015163ffffffff168363ffffffff1614155b8015612f745750604081015163ffffffff168363ffffffff1614155b15612f825760009550612f92565b600190930192612efd565b600195505b505050505095945050505050565b6000805433600160a060020a0390811691161480612fdc5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612fe757600080fd5b60008263ffffffff1611156112fd575060005b600554811015613059578163ffffffff1660058281548110151561301a57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff161415613051576112fd565b600101612ffa565b600580546001810161306b83826147cb565b916000526020600020906008918282040191900660040284909190916101000a81548163ffffffff021916908363ffffffff160217905550505050565b60006130b26147ff565b60025460ff16156130c257600080fd5b600d54600160a060020a031615156130d957600080fd5b600f54600160a060020a031615156130f057600080fd5b600f54600160a060020a031691508163710ad12833600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b151561314c57600080fd5b6102c65a03f1151561315d57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff1615806131f3575033600160a060020a03168160600151600160a060020a031614155b8061320c575060008160a0015167ffffffffffffffff16115b1561321657600080fd5b600354341461322457600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b151561327b57600080fd5b6102c65a03f1151561328c57600080fd5b5050505050565b600061329d6147ff565b60025460ff16156132ad57600080fd5b60005433600160a060020a03908116911614806132e85750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156132f357600080fd5b600d54600160a060020a0316151561330a57600080fd5b600f54600160a060020a0316151561332157600080fd5b600f54600160a060020a031691508163710ad12884600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b151561337d57600080fd5b6102c65a03f1151561338e57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff161580613424575082600160a060020a03168160600151600160a060020a031614155b8061343d575060008160a0015167ffffffffffffffff16115b1561344757600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b151561349e57600080fd5b6102c65a03f115156134af57600080fd5b505050505050565b60035481565b600f54600090600160a060020a0316816134d684610f1b565b9050600081111561355d5781600160a060020a031663ec0ba0068560006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561353957600080fd5b6102c65a03f1151561354a57600080fd5b5050506040518051905081039250613562565b600092505b5050919050565b600060016064825b8160ff168360ff1610156135c357600260ff848401160460ff81166000908152600a602052604090205490915063ffffffff90811690861610156135b7578091506135be565b8060010192505b613571565b50909392505050565b600080601863ffffffff85161161367f5750600f54600160a060020a03166135f385610f1b565b81600160a060020a031663ec0ba0068760006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561364b57600080fd5b6102c65a03f1151561365c57600080fd5b5050506040518051905010151561367657600091506136c8565b600191506136c8565b63ffffffff841660009081526006602052604090205460ff1615806136be575063ffffffff80851660009081526006602052604090205460ff16908416105b1561367657600091505b509392505050565b60005433600160a060020a039081169116146136eb57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff16151514156127f857600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b6000805433600160a060020a03908116911614806137b65750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156137c157600080fd5b5060005b600554811015613824578163ffffffff166005828154811015156137e557fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16141561381c57613824565b6001016137c5565b6005548110156112fd5760058054600019810190811061384057fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1660058281548110151561387557fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060056001600580549050038154811015156138bf57fe5b90600052602060002090600891828204019190066004026101000a81549063ffffffff0219169055600580548091906001900361118f91906147cb565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015613929575060068160ff16105b1561393d5761010082049150600101613911565b8561ffff168281151561394c57fe5b069695505050505050565b600580548290811061396557fe5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b60006139996147ff565b60025460009060ff16156139ac57600080fd5b600d54600160a060020a031615156139c357600080fd5b600f54600160a060020a031615156139da57600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0381811692909217909255600f54169350839063710ad12890600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b1515613a5d57600080fd5b6102c65a03f11515613a6e57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08a0152608089019290925250600160a060020a03909116606087015263ffffffff90911660408601529081166020850152168252815167ffffffffffffffff161580613b04575033600160a060020a03168260600151600160a060020a031614155b15613b0e57600080fd5b60008260a0015167ffffffffffffffff161180613b2e5750428260800151115b15613b3857600080fd5b613b4633836040015161448c565b9050600160a060020a0383166337bd186883518360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515613ba057600080fd5b6102c65a03f11515613bb157600080fd5b5050600160a060020a03331690507f1ed4c19c1b2053a18834a9630d21a5641a6904102ee9d604c131cedad3cb665f83518360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050565b60096020526000908152604090205463ffffffff1681565b600080600080613c32614757565b613c3a614730565b600d54600160a060020a031692506000836307202460898360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613c9857600080fd5b6102c65a03f11515613ca957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a039091166040870152166020850190815267ffffffffffffffff9091168452600c906000905163ffffffff1663ffffffff16815260200190815260200160002060806040519081016040908152825463ffffffff908116835260018401546020808501919091526002850154928401929092526003909301549092166060820152925083015163ffffffff16825163ffffffff1614613dad5781518360a00151909750955060009450613dff565b506000606082015163ffffffff168360a0015163ffffffff161015613dda578260a0015182606001510390505b82602001518360a00151613df88363ffffffff1685604001516146e5565b9650965096505b505050509193909250565b600681565b600080613e1a614757565b600d54600090600160a060020a03161515613e3457600080fd5b50600d54600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613e9357600080fd5b6102c65a03f11515613ea457600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087019081529216602086015267ffffffffffffffff909216845290915051600160a060020a03868116911614613f2a5760009350613f32565b816020015193505b50505092915050565b6000806000613f48614757565b60025460009081908190819060ff1615613f6157600080fd5b600d54600160a060020a03161515613f7857600080fd5b600f54600160a060020a03161515613f8f57600080fd5b600f54600160a060020a0316975060008863aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515613fec57600080fd5b6102c65a03f11515613ffd57600080fd5b5050506040518051905067ffffffffffffffff16111561401c57600080fd5b601154600160a060020a031696508663a847a71c8a60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561407957600080fd5b6102c65a03f1151561408a57600080fd5b505050604051805190501561409e57600080fd5b600d54600160a060020a03169550600093508563072024608a8660405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b15156140fe57600080fd5b6102c65a03f1151561410f57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08d0152505063ffffffff91821660808b0152600160a060020a0390921660408a015291909116602088015267ffffffffffffffff918216875294508916855167ffffffffffffffff161415806141a9575033600160a060020a03168560400151600160a060020a031614155b156141b357600080fd5b6141c08560800151613569565b9250600091506141d88986602001518560ff166135cc565b15156141e357600080fd5b8260ff1660076000876020015163ffffffff16815260208101919091526040016000205460ff161061421457600080fd5b60076000866020015163ffffffff16815260208101919091526040016000205460ff1683039150600160a060020a038816630bc954dc86518760200151600254600b54339161427b91630100000090910461ffff1690600090600160a060020a03166138fc565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561430357600080fd5b6102c65a03f1151561431457600080fd5b5050506040518051905090508260ff168260ff1610156143c15760ff6000198301166000908152600a6020526040902054600160a060020a038716906331afa55f908b9063ffffffff1660808901510360405163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b15156143ac57600080fd5b6102c65a03f115156143bd57600080fd5b5050505b33600160a060020a03167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef758a8360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050505050505050565b60025460ff1681565b60005433600160a060020a0390811691161461444157600080fd5b600160a060020a038116156127f85760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b601154600160a060020a031681565b600d54600090600160a060020a03168180808363fc4d20f58789846040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b151561452857600080fd5b6102c65a03f1151561453957600080fd5b5050506040518051935060009250505b60068210156146c65783600160a060020a03166362b21ad760028863ffffffff16856000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561459657fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156145dc57600080fd5b6102c65a03f115156145ed57600080fd5b5050506040518051600b54909150614612906020908590600160a060020a03166138fc565b01905083600160a060020a03166326bda739600385846000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561465357fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b151561469f57600080fd5b6102c65a03f115156146b057600080fd5b5050506040518051905050600182019150614549565b509095945050505050565b600080828410156146de57fe5b5050900390565b600082820283158061470157508284828115156146fe57fe5b04145b151561470957fe5b9392505050565b606060405190810160409081526000808352602083018190529082015290565b60806040519081016040908152600080835260208301819052908201819052606082015290565b61010060405190810160409081526000808352602083018190529082015260608101614781614834565b8152600060208201819052604082018190526060820181905260809091015290565b60606040519081016040526003815b6000815260001990910190602001816147b25790505090565b81548183558181151161118f57600701600890048160070160089004836000526020600020918201910161118f9190614846565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60206040519081016040526000815290565b61486491905b80821115614860576000815560010161484c565b5090565b905600a165627a7a72305820af4dbb3cc3e6dcf37382e3f0f4f21a1d7b0c248dc9597fb69acd89b231c0f8ae0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a050000000000000000000000000c28bf52d0d4d9447e86d7e7f0e317f273d3c9a30000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030

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

000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a050000000000000000000000000c28bf52d0d4d9447e86d7e7f0e317f273d3c9a30000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030

-----Decoded View---------------
Arg [0] : _dataContract (address): 0xabc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : _worldContract (address): 0x1fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : _transformDataContract (address): 0xfdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : _battleContract (address): 0x0c28bf52d0d4d9447e86d7e7f0e317f273d3c9a3
Arg [4] : _tradeContract (address): 0x4ba72f0f8dad13709ee28a992869e79d0fe47030

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


Swarm Source

bzzr://af4dbb3cc3e6dcf37382e3f0f4f21a1d7b0c248dc9597fb69acd89b231c0f8ae
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.