Sponsored Link:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 0.18396709560807706 Ether
Ether Value: $83.84 (@ $455.74/ETH)
Transactions: 1668 txns
Misc
Address Watch: Add To Watch List
Contract Creator: 0xe67e1f24a637f84be1e68d547022de8883a0d89bat txn 0x3048c51515a523c17b10bafd33a9f437f814348936ba7b5558ad7feec621856b
Token Balances:
 Latest 25 txns from a total Of 1668 transactions

TxHash Age From To Value [TxFee]
0xafb402fe04df737dda39c419e07091267bd90438a2fc7a040f5b18b0ad02ebe020 days 19 hrs ago0x5fcc927b7da7ac31b262f4398f7dd62d5a894169  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000290152
0x6a6a0a96a01114e6bcdae76153c6dbb4a538ee94f76ba3d154fd657a5c09a3ff22 days 9 hrs ago0x2f036be9baca6b88adbe7e59475968b8c28efaea  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770.091983547804038 Ether0.000191286
0x0ad43a29658fcbaf78f6db706d45e491c42404dde64e95179c0db6e6b5ef7d6c22 days 9 hrs ago0x2f036be9baca6b88adbe7e59475968b8c28efaea  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770.091983547804038 Ether0.000236286
0xbb7d7dce72f61a34f4140d8263723351f8ed9b8e1f926109ec035414b3fd984924 days 7 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0xf6f5e8de2ec8e7e9b60ceca75995cf93cc60780171c71f1849d25dfb221c023a25 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000076482
0xa827771f09e4bdc6eccfd2ca68ee87657766166371c5afd6e8e1e2ce08309d4125 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000076482
0x0f234fb2627c82148c578277616c682083c4e6cf415536539b0c494513842fe125 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000136513
0xb49d4a972e8c82c3cf91e356a9316b3248e9eab475ef3de46aa5c06f63d63e4425 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000148972
0xd0a0df3495b47345b4115b723c08d31acaaa0e38f62fb8692ca00fb06a10cfc125 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0xb5fedf0f6e34c9789beff617926f4ee74c6c1e4a82e65481054db643c45bc84625 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0x6dbe73945675718665a36fe4fba171c25712197d2a2e4d11808b298746d8875225 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0x73373512fb832326ada21978bf66c60e06e38d3f7b031188327e3ef890d9c56225 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0xd5ef4df2edfe6db7cc760c0c779cbd28a0cedf683b23aebebdb941462e9ef72b25 days 12 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000120429
0x8a836ae2c11fcc38dc4d95c9027a3669dcd1f5ae21978d1181b6dc12a71221c028 days 3 mins ago0x4328cfa1ea40b47df5bb9d172a11bc1901fd0c15  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000063138
0xa51adbb454af9cbf2a41821272b6190b64d06c38be747abd47809ae9897fdda128 days 29 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000124657
0x23895d31d5fed3cbec363043982ca2fa2a791a79efc7bf1fbc633d585e64a13428 days 46 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000144883
0x9ec6cd1acae754821420a723be550ae5cdb2a25b80cc5665bb67a1b1042cd3ee28 days 50 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000142473
0xccba77b106d4e1bb9bed3896698999746f117172ffbf60b2419edd8eafa79d1028 days 53 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000144243
0x0e39a6dcfd31305d3d98e12f907c60207c9c1310cd5805a1fd72fa81760c720228 days 53 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000143475
0x56e2ab5306500b3c859e00d8df1aa19358e907f69a9cbae649f184fcc3601fde28 days 53 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000142089
0x7cf686b3362869dc0846ec5e53b82c94c3bdb1f84d728f7be65ed9a9d686219b28 days 53 mins ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000124209
0xdc907aa1fb74b1fe51046f37ec819102d024ef3d36a41c4116dbbea2de7e475728 days 1 hr ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000124337
0x09552087eba1f487c7f88833e64e4ec3cc6698f5ed72ff2495bb31a60ddb217228 days 1 hr ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000124145
0x15e87a429370390906fca7682128eab0336176cba8f9877db8579fa083a7d1f328 days 1 hr ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000282796
0x04d659ca8c7986df59255cca0d8f80dda4474407cb5f785dfdd122adeca087bd28 days 2 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000305789
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 6 Internal Transactions

ParentTxHash Block Age From To Value
0xebbe13b078be5b4a76190a0c33ff12f0e84176c647d1a00612df9f4a0c40a5e0563964561 days 22 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.793889999297211878 Ether
0x4b79e8ca99557fd5d52e73205b08040549de7cefc859924cdb7fdf92535f66cf563907762 days 56 mins ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0xa93f83c42147b122f1b1b52d40ca95239ca4e717a11173567d9a7c1b5b8eef66563602862 days 13 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b3.2 Ether
0xa9b058fdff8ec014ddc45274c0443bb7c917ef7cfbf50adc3b5f01595087577b561508366 days 6 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0x4e088a6f0becf2e267e9452f51e2694765a937cc25c7f7e95a77dd6de14aace6559954768 days 23 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.15418 Ether
0xd7d8a3e99900b1747cc26403439ad4d559f15c913bb8643b5e6a087ac940d920559660669 days 11 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.0805 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: VirtualRealEstate
Compiler Version: v0.4.23+commit.124ca40d
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.2;

// Make setPrivate payout any pending payouts

// ERC20 Token Interface
contract Token {
    uint256 public totalSupply;
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// ERC20 Token Implementation
contract StandardToken is Token {
    function transfer(address _to, uint256 _value) public returns (bool success) {
      if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
      } else {
        return false;
      }
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
      if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
      } else {
        return false;
      }
    }

    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}

/*
    PXLProperty is the ERC20 Cryptocurrency & Cryptocollectable
    * It is a StandardToken ERC20 token and inherits all of that
    * It has the Property structure and holds the Properties
    * It governs the regulators (moderators, admins, root, Property DApps and PixelProperty)
    * It has getters and setts for all data storage
    * It selectively allows access to PXL and Properties based on caller access
    
    Moderation is handled inside PXLProperty, not by external DApps. It's up to other apps to respect the flags, however
*/
contract PXLProperty is StandardToken {
    /* Access Level Constants */
    uint8 constant LEVEL_1_MODERATOR = 1;    // 1: Level 1 Moderator - nsfw-flagging power
    uint8 constant LEVEL_2_MODERATOR = 2;    // 2: Level 2 Moderator - ban power + [1]
    uint8 constant LEVEL_1_ADMIN = 3;        // 3: Level 1 Admin - Can manage moderator levels + [1,2]
    uint8 constant LEVEL_2_ADMIN = 4;        // 4: Level 2 Admin - Can manage admin level 1 levels + [1-3]
    uint8 constant LEVEL_1_ROOT = 5;         // 5: Level 1 Root - Can set property DApps level [1-4]
    uint8 constant LEVEL_2_ROOT = 6;         // 6: Level 2 Root - Can set pixelPropertyContract level [1-5]
    uint8 constant LEVEL_3_ROOT = 7;         // 7: Level 3 Root - Can demote/remove root, transfer root, [1-6]
    uint8 constant LEVEL_PROPERTY_DAPPS = 8; // 8: Property DApps - Power over manipulating Property data
    uint8 constant LEVEL_PIXEL_PROPERTY = 9; // 9: PixelProperty - Power over PXL generation & Property ownership
    /* Flags Constants */
    uint8 constant FLAG_NSFW = 1;
    uint8 constant FLAG_BAN = 2;
    
    /* Accesser Addresses & Levels */
    address pixelPropertyContract; // Only contract that has control over PXL creation and Property ownership
    mapping (address => uint8) public regulators; // Mapping of users/contracts to their control levels
    
    // Mapping of PropertyID to Property
    mapping (uint16 => Property) public properties;
    // Property Owner's website
    mapping (address => uint256[2]) public ownerWebsite;
    // Property Owner's hover text
    mapping (address => uint256[2]) public ownerHoverText;
    
    /* ### Ownable Property Structure ### */
    struct Property {
        uint8 flag;
        bool isInPrivateMode; //Whether in private mode for owner-only use or free-use mode to be shared
        address owner; //Who owns the Property. If its zero (0), then no owner and known as a "system-Property"
        address lastUpdater; //Who last changed the color of the Property
        uint256[5] colors; //10x10 rgb pixel colors per property. colors[0] is the top row, colors[9] is the bottom row
        uint256 salePrice; //PXL price the owner has the Property on sale for. If zero, then its not for sale.
        uint256 lastUpdate; //Timestamp of when it had its color last updated
        uint256 becomePublic; //Timestamp on when to become public
        uint256 earnUntil; //Timestamp on when Property token generation will stop
    }
    
    /* ### Regulation Access Modifiers ### */
    modifier regulatorAccess(uint8 accessLevel) {
        require(accessLevel <= LEVEL_3_ROOT); // Only request moderator, admin or root levels forr regulatorAccess
        require(regulators[msg.sender] >= accessLevel); // Users must meet requirement
        if (accessLevel >= LEVEL_1_ADMIN) { //
            require(regulators[msg.sender] <= LEVEL_3_ROOT); //DApps can't do Admin/Root stuff, but can set nsfw/ban flags
        }
        _;
    }
    
    modifier propertyDAppAccess() {
        require(regulators[msg.sender] == LEVEL_PROPERTY_DAPPS || regulators[msg.sender] == LEVEL_PIXEL_PROPERTY );
        _;
    }
    
    modifier pixelPropertyAccess() {
        require(regulators[msg.sender] == LEVEL_PIXEL_PROPERTY);
        _;
    }
    
    /* ### Constructor ### */
    function PXLProperty() public {
        regulators[msg.sender] = LEVEL_3_ROOT; // Creator set to Level 3 Root
    }
    
    /* ### Moderator, Admin & Root Functions ### */
    // Moderator Flags
    function setPropertyFlag(uint16 propertyID, uint8 flag) public regulatorAccess(flag == FLAG_NSFW ? LEVEL_1_MODERATOR : LEVEL_2_MODERATOR) {
        properties[propertyID].flag = flag;
        if (flag == FLAG_BAN) {
            require(properties[propertyID].isInPrivateMode); //Can't ban an owner's property if a public user caused the NSFW content
            properties[propertyID].colors = [0, 0, 0, 0, 0];
        }
    }
    
    // Setting moderator/admin/root access
    function setRegulatorAccessLevel(address user, uint8 accessLevel) public regulatorAccess(LEVEL_1_ADMIN) {
        if (msg.sender != user) {
            require(regulators[msg.sender] > regulators[user]); // You have to be a higher rank than the user you are changing
        }
        require(regulators[msg.sender] > accessLevel); // You have to be a higher rank than the role you are setting
        regulators[user] = accessLevel;
    }
    
    function setPixelPropertyContract(address newPixelPropertyContract) public regulatorAccess(LEVEL_2_ROOT) {
        require(newPixelPropertyContract != 0);
        if (pixelPropertyContract != 0) {
            regulators[pixelPropertyContract] = 0; //If we already have a pixelPropertyContract, revoke its ownership
        }
        
        pixelPropertyContract = newPixelPropertyContract;
        regulators[newPixelPropertyContract] = LEVEL_PIXEL_PROPERTY;
    }
    
    function setPropertyDAppContract(address propertyDAppContract, bool giveAccess) public regulatorAccess(LEVEL_1_ROOT) {
        require(propertyDAppContract != 0);
        regulators[propertyDAppContract] = giveAccess ? LEVEL_PROPERTY_DAPPS : 0;
    }
    
    /* ### PropertyDapp Functions ### */
    function setPropertyColors(uint16 propertyID, uint256[5] colors) public propertyDAppAccess() {
        for(uint256 i = 0; i < 5; i++) {
            if (properties[propertyID].colors[i] != colors[i]) {
                properties[propertyID].colors[i] = colors[i];
            }
        }
    }
    
    function setPropertyRowColor(uint16 propertyID, uint8 row, uint256 rowColor) public propertyDAppAccess() {
        if (properties[propertyID].colors[row] != rowColor) {
            properties[propertyID].colors[row] = rowColor;
        }
    }
    
    function setOwnerHoverText(address textOwner, uint256[2] hoverText) public propertyDAppAccess() {
        require (textOwner != 0);
        ownerHoverText[textOwner] = hoverText;
    }
    
    function setOwnerLink(address websiteOwner, uint256[2] website) public propertyDAppAccess() {
        require (websiteOwner != 0);
        ownerWebsite[websiteOwner] = website;
    }
    
    /* ### PixelProperty Property Functions ### */
    function setPropertyPrivateMode(uint16 propertyID, bool isInPrivateMode) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != isInPrivateMode) {
            properties[propertyID].isInPrivateMode = isInPrivateMode;
        }
    }
    
    function setPropertyOwner(uint16 propertyID, address propertyOwner) public pixelPropertyAccess() {
        if (properties[propertyID].owner != propertyOwner) {
            properties[propertyID].owner = propertyOwner;
        }
    }
    
    function setPropertyLastUpdater(uint16 propertyID, address lastUpdater) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
    }
    
    function setPropertySalePrice(uint16 propertyID, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    function setPropertyLastUpdate(uint16 propertyID, uint256 lastUpdate) public pixelPropertyAccess() {
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublic(uint16 propertyID, uint256 becomePublic) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyEarnUntil(uint16 propertyID, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16 propertyID, bool privateMode, uint256 earnUntil, uint256 lastUpdate, uint256 becomePublic) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        properties[propertyID].earnUntil = earnUntil;
        properties[propertyID].lastUpdate = lastUpdate;
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyLastUpdaterLastUpdate(uint16 propertyID, address lastUpdater, uint256 lastUpdate) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublicEarnUntil(uint16 propertyID, uint256 becomePublic, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyOwnerSalePricePrivateModeFlag(uint16 propertyID, address owner, uint256 salePrice, bool privateMode, uint8 flag) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        if (properties[propertyID].flag != flag) {
            properties[propertyID].flag = flag;
        }
    }
    
    function setPropertyOwnerSalePrice(uint16 propertyID, address owner, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    /* ### PixelProperty PXL Functions ### */
    function rewardPXL(address rewardedUser, uint256 amount) public pixelPropertyAccess() {
        require(rewardedUser != 0);
        balances[rewardedUser] += amount;
        totalSupply += amount;
    }
    
    function burnPXL(address burningUser, uint256 amount) public pixelPropertyAccess() {
        require(burningUser != 0);
        require(balances[burningUser] >= amount);
        balances[burningUser] -= amount;
        totalSupply -= amount;
    }
    
    function burnPXLRewardPXL(address burner, uint256 toBurn, address rewarder, uint256 toReward) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder != 0) {
            balances[rewarder] += toReward;
            totalSupply += toReward;
        }
    } 
    
    function burnPXLRewardPXLx2(address burner, uint256 toBurn, address rewarder1, uint256 toReward1, address rewarder2, uint256 toReward2) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder1 != 0) {
            balances[rewarder1] += toReward1;
            totalSupply += toReward1;
        }
        if (rewarder2 != 0) {
            balances[rewarder2] += toReward2;
            totalSupply += toReward2;
        }
    } 
    
    /* ### All Getters/Views ### */
    function getOwnerHoverText(address user) public view returns(uint256[2]) {
        return ownerHoverText[user];
    }
    
    function getOwnerLink(address user) public view returns(uint256[2]) {
        return ownerWebsite[user];
    }
    
    function getPropertyFlag(uint16 propertyID) public view returns(uint8) {
        return properties[propertyID].flag;
    }
    
    function getPropertyPrivateMode(uint16 propertyID) public view returns(bool) {
        return properties[propertyID].isInPrivateMode;
    }
    
    function getPropertyOwner(uint16 propertyID) public view returns(address) {
        return properties[propertyID].owner;
    }
    
    function getPropertyLastUpdater(uint16 propertyID) public view returns(address) {
        return properties[propertyID].lastUpdater;
    }
    
    function getPropertyColors(uint16 propertyID) public view returns(uint256[5]) {
        return properties[propertyID].colors;
    }

    function getPropertyColorsOfRow(uint16 propertyID, uint8 rowIndex) public view returns(uint256) {
        require(rowIndex <= 9);
        return properties[propertyID].colors[rowIndex];
    }
    
    function getPropertySalePrice(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].salePrice;
    }
    
    function getPropertyLastUpdate(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].lastUpdate;
    }
    
    function getPropertyBecomePublic(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].becomePublic;
    }
    
    function getPropertyEarnUntil(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].earnUntil;
    }
    
    function getRegulatorLevel(address user) public view returns(uint8) {
        return regulators[user];
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID, uint256 systemSalePriceETH, uint256 systemSalePricePXL) public view returns(address, uint256, uint256, uint256, bool, uint256, uint8) {
        Property memory property = properties[propertyID];
        bool isInPrivateMode = property.isInPrivateMode;
        //If it's in private, but it has expired and should be public, set our bool to be public
        if (isInPrivateMode && property.becomePublic <= now) { 
            isInPrivateMode = false;
        }
        if (properties[propertyID].owner == 0) {
            return (0, systemSalePriceETH, systemSalePricePXL, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        } else {
            return (property.owner, 0, property.salePrice, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        }
    }
    
    function getPropertyPrivateModeBecomePublic(uint16 propertyID) public view returns (bool, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].becomePublic);
    }
    
    function getPropertyLastUpdaterBecomePublic(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].lastUpdater, properties[propertyID].becomePublic);
    }
    
    function getPropertyOwnerSalePrice(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].owner, properties[propertyID].salePrice);
    }
    
    function getPropertyPrivateModeLastUpdateEarnUntil(uint16 propertyID) public view returns (bool, uint256, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].lastUpdate, properties[propertyID].earnUntil);
    }
}

// PixelProperty
contract VirtualRealEstate {
    /* ### Variables ### */
    // Contract owner
    address owner;
    PXLProperty pxlProperty;
    
    bool initialPropertiesReserved;
    
    mapping (uint16 => bool) hasBeenSet;
    
    // The amount in % for which a user is paid
    uint8 constant USER_BUY_CUT_PERCENT = 98;
    // Maximum amount of generated PXL a property can give away per minute
    uint8 constant PROPERTY_GENERATES_PER_MINUTE = 1;
    // The point in time when the initial grace period is over, and users get the default values based on coins burned
    uint256 GRACE_PERIOD_END_TIMESTAMP;
    // The amount of time required for a Property to generate tokens for payouts
    uint256 constant PROPERTY_GENERATION_PAYOUT_INTERVAL = (1 minutes); //Generation amount
    
    uint256 ownerEth = 0; // Amount of ETH the contract owner is entitled to withdraw (only Root account can do withdraws)
    
    // The current system prices of ETH and PXL, for which unsold Properties are listed for sale at
    uint256 systemSalePriceETH;
    uint256 systemSalePricePXL;
    uint8 systemPixelIncreasePercent;
    uint8 systemPriceIncreaseStep;
    uint16 systemETHStepTally;
    uint16 systemPXLStepTally;
    uint16 systemETHStepCount;
    uint16 systemPXLStepCount;

    /* ### Events ### */
    event PropertyColorUpdate(uint16 indexed property, uint256[5] colors, uint256 lastUpdate, address indexed lastUpdaterPayee, uint256 becomePublic, uint256 indexed rewardedCoins);
    event PropertyBought(uint16 indexed property, address indexed newOwner, uint256 ethAmount, uint256 PXLAmount, uint256 timestamp, address indexed oldOwner);
    event SetUserHoverText(address indexed user, uint256[2] newHoverText);
    event SetUserSetLink(address indexed user, uint256[2] newLink);
    event PropertySetForSale(uint16 indexed property, uint256 forSalePrice);
    event DelistProperty(uint16 indexed property);
    event SetPropertyPublic(uint16 indexed property);
    event SetPropertyPrivate(uint16 indexed property, uint32 numMinutesPrivate, address indexed rewardedUser, uint256 indexed rewardedCoins);
    event Bid(uint16 indexed property, uint256 bid, uint256 timestamp);
    
    /* ### MODIFIERS ### */

    // Only the contract owner can call these methods
    modifier ownerOnly() {
        require(owner == msg.sender);
        _;
    }
    
    // Can only be called on Properties referecing a valid PropertyID
    modifier validPropertyID(uint16 propertyID) {
        if (propertyID < 10000) {
            _;
        }
    }
    
    /* ### PUBLICALLY INVOKABLE FUNCTIONS ### */
    
    /* CONSTRUCTOR */
    function VirtualRealEstate() public {
        owner = msg.sender; // Default the owner to be whichever Ethereum account created the contract
        systemSalePricePXL = 1000; //Initial PXL system price
        systemSalePriceETH = 19500000000000000; //Initial ETH system price
        systemPriceIncreaseStep = 10;
        systemPixelIncreasePercent = 5;
        systemETHStepTally = 0;
        systemPXLStepTally = 0;
        systemETHStepCount = 1;
        systemPXLStepCount = 1;
        initialPropertiesReserved = false;
    }
    
    function setPXLPropertyContract(address pxlPropertyContract) public ownerOnly() {
        pxlProperty = PXLProperty(pxlPropertyContract);
        if (!initialPropertiesReserved) {
            uint16 xReserved = 45;
            uint16 yReserved = 0;
            for(uint16 x = 0; x < 10; ++x) {
                uint16 propertyID = (yReserved) * 100 + (xReserved + x);
                _transferProperty(propertyID, owner, 0, 0, 0, 0);
            }
            initialPropertiesReserved = true;
            GRACE_PERIOD_END_TIMESTAMP = now + 3 days; // Extends the three 
        }
    }

    function getSaleInformation() public view ownerOnly() returns(uint8, uint8, uint16, uint16, uint16, uint16) {
        return (systemPixelIncreasePercent, systemPriceIncreaseStep, systemETHStepTally, systemPXLStepTally, systemETHStepCount, systemPXLStepCount);
    }
    
    /* USER FUNCTIONS */
    
    // Property owners can change their hoverText for when a user mouses over their Properties
    function setHoverText(uint256[2] text) public {
        pxlProperty.setOwnerHoverText(msg.sender, text);
        SetUserHoverText(msg.sender, text);
    }
    
    // Property owners can change the clickable link for when a user clicks on their Properties
    function setLink(uint256[2] website) public {
        pxlProperty.setOwnerLink(msg.sender, website);
        SetUserSetLink(msg.sender, website);
    }
    
    // If a Property is private which has expired, make it public
    function tryForcePublic(uint16 propertyID) public validPropertyID(propertyID) { 
        var (isInPrivateMode, becomePublic) = pxlProperty.getPropertyPrivateModeBecomePublic(propertyID);
        if (isInPrivateMode && becomePublic < now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
        }
    }
    
    // Update the 10x10 image data for a Property, triggering potential payouts if it succeeds
    function setColors(uint16 propertyID, uint256[5] newColors, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyColors(propertyID, newColors);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, newColors, now, lastUpdater, becomePublic, projectedPayout);
            // The first user to set a Properties color ever is awarded extra PXL due to eating the extra GAS cost of creating the uint256[5]
            if (!hasBeenSet[propertyID]) {
                pxlProperty.rewardPXL(msg.sender, 25);
                hasBeenSet[propertyID] = true;
            }
            return true;
        }
        return false;
    }

    //Wrapper to call setColors 4 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX4(uint16[4] propertyIDs, uint256[20] newColors, uint256 PXLToSpendEach) public returns(bool[4]) {
        bool[4] results;
        for(uint256 i = 0; i < 4; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }

    //Wrapper to call setColors 8 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX8(uint16[8] propertyIDs, uint256[40] newColors, uint256 PXLToSpendEach) public returns(bool[8]) {
        bool[8] results;
        for(uint256 i = 0; i < 8; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }
    
    // Update a row of image data for a Property, triggering potential payouts if it succeeds
    function setRowColors(uint16 propertyID, uint8 row, uint256 newColorData, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        require(row < 10);
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyRowColor(propertyID, row, newColorData);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, pxlProperty.getPropertyColors(propertyID), now, lastUpdater, becomePublic, projectedPayout);
            return true;
        }
        return false;
    }
    // Property owners can toggle their Properties between private mode and free-use mode
    function setPropertyMode(uint16 propertyID, bool setPrivateMode, uint32 numMinutesPrivate) public validPropertyID(propertyID) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        
        require(msg.sender == propertyOwner);
        uint256 whenToBecomePublic = 0;
        uint256 rewardedAmount = 0;
        
        if (setPrivateMode) {
            //If inprivate, we can extend the duration, otherwise if becomePublic > now it means a free-use user locked it
            require(propertyIsInPrivateMode || propertyBecomePublic <= now || propertyLastUpdater == msg.sender ); 
            require(numMinutesPrivate > 0);
            require(pxlProperty.balanceOf(msg.sender) >= numMinutesPrivate);
            // Determines when the Property becomes public, one payout interval per coin burned
            whenToBecomePublic = (now < propertyBecomePublic ? propertyBecomePublic : now) + PROPERTY_GENERATION_PAYOUT_INTERVAL * numMinutesPrivate;

            rewardedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            if (rewardedAmount > 0 && propertyLastUpdater != 0) {
                pxlProperty.burnPXLRewardPXLx2(msg.sender, numMinutesPrivate, propertyLastUpdater, rewardedAmount, msg.sender, rewardedAmount);
            } else {
                pxlProperty.burnPXL(msg.sender, numMinutesPrivate);
            }

        } else {
            // If its in private mode and still has time left, reimburse them for N-1 minutes tokens back
            if (propertyIsInPrivateMode && propertyBecomePublic > now) {
                pxlProperty.rewardPXL(msg.sender, ((propertyBecomePublic - now) / PROPERTY_GENERATION_PAYOUT_INTERVAL) - 1);
            }
        }
        
        pxlProperty.setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(propertyID, setPrivateMode, 0, 0, whenToBecomePublic);
        
        if (setPrivateMode) {
            SetPropertyPrivate(propertyID, numMinutesPrivate, propertyLastUpdater, rewardedAmount);
        } else {
            SetPropertyPublic(propertyID);
        }
    }
    // Transfer Property ownership between accounts. This has no cost, no cut and does not change flag status
    function transferProperty(uint16 propertyID, address newOwner) public validPropertyID(propertyID) returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == msg.sender);
        _transferProperty(propertyID, newOwner, 0, 0, pxlProperty.getPropertyFlag(propertyID), msg.sender);
        return true;
    }
    // Purchase a unowned system-Property in a combination of PXL and ETH
    function buyProperty(uint16 propertyID, uint256 pxlValue) public validPropertyID(propertyID) payable returns(bool) {
        //Must be the first purchase, otherwise do it with PXL from another user
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        // Must be able to afford the given PXL
        require(pxlProperty.balanceOf(msg.sender) >= pxlValue);
        require(pxlValue != 0);
        
        // Protect against underflow
        require(pxlValue <= systemSalePricePXL);
        uint256 pxlLeft = systemSalePricePXL - pxlValue;
        uint256 ethLeft = systemSalePriceETH / systemSalePricePXL * pxlLeft;
        
        // Must have spent enough ETH to cover the ETH left after PXL price was subtracted
        require(msg.value >= ethLeft);
        
        pxlProperty.burnPXLRewardPXL(msg.sender, pxlValue, owner, pxlValue);
        
        systemPXLStepTally += uint16(100 * pxlValue / systemSalePricePXL);
        if (systemPXLStepTally >= 1000) {
             systemPXLStepCount++;
            systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
            systemPXLStepTally -= 1000;
        }
        
        ownerEth += msg.value;

        systemETHStepTally += uint16(100 * pxlLeft / systemSalePricePXL);
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }

        _transferProperty(propertyID, msg.sender, msg.value, pxlValue, 0, 0);
        
        return true;
    }
    // Purchase a listed user-owner Property in PXL
    function buyPropertyInPXL(uint16 propertyID, uint256 PXLValue) public validPropertyID(propertyID) {
        // If Property is system-owned
        var (propertyOwner, propertySalePrice) = pxlProperty.getPropertyOwnerSalePrice(propertyID);
        address originalOwner = propertyOwner;
        if (propertyOwner == 0) {
            // Turn it into a user-owned at system price with contract owner as owner
            pxlProperty.setPropertyOwnerSalePrice(propertyID, owner, systemSalePricePXL);
            propertyOwner = owner;
            propertySalePrice = systemSalePricePXL;
            // Increase system PXL price
            systemPXLStepTally += 100;
            if (systemPXLStepTally >= 1000) {
                systemPXLStepCount++;
                systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
                systemPXLStepTally -= 1000;
            }
        }
        require(propertySalePrice <= PXLValue);
        uint256 amountTransfered = propertySalePrice * USER_BUY_CUT_PERCENT / 100;
        pxlProperty.burnPXLRewardPXLx2(msg.sender, propertySalePrice, propertyOwner, amountTransfered, owner, (propertySalePrice - amountTransfered));        
        _transferProperty(propertyID, msg.sender, 0, propertySalePrice, 0, originalOwner);
    }

    // Purchase a system-Property in pure ETH
    function buyPropertyInETH(uint16 propertyID) public validPropertyID(propertyID) payable returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        require(msg.value >= systemSalePriceETH);
        
        ownerEth += msg.value;
        systemETHStepTally += 100;
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }
        _transferProperty(propertyID, msg.sender, msg.value, 0, 0, 0);
        return true;
    }
    
    // Property owner lists their Property for sale at their preferred price
    function listForSale(uint16 propertyID, uint256 price) public validPropertyID(propertyID) returns(bool) {
        require(price != 0);
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, price);
        PropertySetForSale(propertyID, price);
        return true;
    }
    
    // Property owner delists their Property from being for sale
    function delist(uint16 propertyID) public validPropertyID(propertyID) returns(bool) {
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, 0);
        DelistProperty(propertyID);
        return true;
    }

    // Make a public bid and notify a Property owner of your bid. Burn 1 coin
    function makeBid(uint16 propertyID, uint256 bidAmount) public validPropertyID(propertyID) {
        require(bidAmount > 0);
        require(pxlProperty.balanceOf(msg.sender) >= 1 + bidAmount);
        Bid(propertyID, bidAmount, now);
        pxlProperty.burnPXL(msg.sender, 1);
    }
    
    /* CONTRACT OWNER FUNCTIONS */
    
    // Contract owner can withdraw up to ownerEth amount
    function withdraw(uint256 amount) public ownerOnly() {
        if (amount <= ownerEth) {
            owner.transfer(amount);
            ownerEth -= amount;
        }
    }
    
    // Contract owner can withdraw ownerEth amount
    function withdrawAll() public ownerOnly() {
        owner.transfer(ownerEth);
        ownerEth = 0;
    }
    
    // Contract owner can change who is the contract owner
    function changeOwners(address newOwner) public ownerOnly() {
        owner = newOwner;
    }
    
    /* ## PRIVATE FUNCTIONS ## */
    
    // Function which wraps payouts for setColors
    function _tryTriggerPayout(uint16 propertyID, uint256 pxlToSpend) private returns(bool) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        //If the Property is in private mode and expired, make it public
        if (propertyIsInPrivateMode && propertyBecomePublic <= now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
            propertyIsInPrivateMode = false;
        }
        //If its in private mode, only the owner can interact with it
        if (propertyIsInPrivateMode) {
            require(msg.sender == propertyOwner);
            require(propertyFlag != 2);
        //If if its in free-use mode
        } else if (propertyBecomePublic <= now || propertyLastUpdater == msg.sender) {
            uint256 pxlSpent = pxlToSpend + 1; //All pxlSpent math uses N+1, so built in for convenience
            if (isInGracePeriod() && pxlToSpend < 2) { //If first 3 days and we spent <2 coins, treat it as if we spent 2
                pxlSpent = 3; //We're treating it like 2, but it's N+1 in the math using this
            }
            
            uint256 projectedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            pxlProperty.burnPXLRewardPXLx2(msg.sender, pxlToSpend, propertyLastUpdater, projectedAmount, propertyOwner, projectedAmount);
            
            //BecomePublic = (N+1)/2 minutes of user-private mode
            //EarnUntil = (N+1)*5 coins earned max/minutes we can earn from
            pxlProperty.setPropertyBecomePublicEarnUntil(propertyID, now + (pxlSpent * PROPERTY_GENERATION_PAYOUT_INTERVAL / 2), now + (pxlSpent * 5 * PROPERTY_GENERATION_PAYOUT_INTERVAL));
        } else {
            return false;
        }
        pxlProperty.setPropertyLastUpdaterLastUpdate(propertyID, msg.sender, now);
        return true;
    }
    // Transfer ownership of a Property and reset their info
    function _transferProperty(uint16 propertyID, address newOwner, uint256 ethAmount, uint256 PXLAmount, uint8 flag, address oldOwner) private {
        require(newOwner != 0);
        pxlProperty.setPropertyOwnerSalePricePrivateModeFlag(propertyID, newOwner, 0, false, flag);
        PropertyBought(propertyID, newOwner, ethAmount, PXLAmount, now, oldOwner);
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID) public validPropertyID(propertyID) view returns(address, uint256, uint256, uint256, bool, uint256, uint32) {
        return pxlProperty.getPropertyData(propertyID, systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the system ETH and PXL prices
    function getSystemSalePrices() public view returns(uint256, uint256) {
        return (systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the sale prices of any Property in ETH and PXL
    function getForSalePrices(uint16 propertyID) public validPropertyID(propertyID) view returns(uint256, uint256) {
        if (pxlProperty.getPropertyOwner(propertyID) == 0) {
            return getSystemSalePrices();
        } else {
            return (0, pxlProperty.getPropertySalePrice(propertyID));
        }
    }
    
    // Gets the projected sale price for a property should it be triggered at this very moment
    function getProjectedPayout(uint16 propertyID) public view returns(uint256) {
        var (propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil) = pxlProperty.getPropertyPrivateModeLastUpdateEarnUntil(propertyID);
        return getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
    }
    
    function getProjectedPayout(bool propertyIsInPrivateMode, uint256 propertyLastUpdate, uint256 propertyEarnUntil) public view returns(uint256) {
        if (!propertyIsInPrivateMode && propertyLastUpdate != 0) {
            uint256 earnedUntil = (now < propertyEarnUntil) ? now : propertyEarnUntil;
            uint256 minutesSinceLastColourChange = (earnedUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL;
            return minutesSinceLastColourChange * PROPERTY_GENERATES_PER_MINUTE;
            //return (((now < propertyEarnUntil) ? now : propertyEarnUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL) * PROPERTY_GENERATES_PER_MINUTE; //Gave too high number wtf?
        }
        return 0;
    }
    
    // Gets whether the contract is still in the intial grace period where we give extra features to color setters
    function isInGracePeriod() public view returns(bool) {
        return now <= GRACE_PERIOD_END_TIMESTAMP;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getPropertyData","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"buyPropertyInETH","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"row","type":"uint8"},{"name":"newColorData","type":"uint256"},{"name":"PXLToSpend","type":"uint256"}],"name":"setRowColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newOwner","type":"address"}],"name":"transferProperty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"tryForcePublic","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"PXLValue","type":"uint256"}],"name":"buyPropertyInPXL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newColors","type":"uint256[5]"},{"name":"PXLToSpend","type":"uint256"}],"name":"setColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[8]"},{"name":"newColors","type":"uint256[40]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX8","outputs":[{"name":"","type":"bool[8]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pxlPropertyContract","type":"address"}],"name":"setPXLPropertyContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyIsInPrivateMode","type":"bool"},{"name":"propertyLastUpdate","type":"uint256"},{"name":"propertyEarnUntil","type":"uint256"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[4]"},{"name":"newColors","type":"uint256[20]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX4","outputs":[{"name":"","type":"bool[4]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"setPrivateMode","type":"bool"},{"name":"numMinutesPrivate","type":"uint32"}],"name":"setPropertyMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSystemSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"text","type":"uint256[2]"}],"name":"setHoverText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"bidAmount","type":"uint256"}],"name":"makeBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"price","type":"uint256"}],"name":"listForSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getForSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"delist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isInGracePeriod","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"website","type":"uint256[2]"}],"name":"setLink","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"pxlValue","type":"uint256"}],"name":"buyProperty","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getSaleInformation","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"colors","type":"uint256[5]"},{"indexed":false,"name":"lastUpdate","type":"uint256"},{"indexed":true,"name":"lastUpdaterPayee","type":"address"},{"indexed":false,"name":"becomePublic","type":"uint256"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"PropertyColorUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":true,"name":"newOwner","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"},{"indexed":false,"name":"PXLAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"oldOwner","type":"address"}],"name":"PropertyBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newHoverText","type":"uint256[2]"}],"name":"SetUserHoverText","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newLink","type":"uint256[2]"}],"name":"SetUserSetLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"forSalePrice","type":"uint256"}],"name":"PropertySetForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"DelistProperty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"SetPropertyPublic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"numMinutesPrivate","type":"uint32"},{"indexed":true,"name":"rewardedUser","type":"address"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"SetPropertyPrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"bid","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Bid","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604052600060045534801561001557600080fd5b5060008054600160a060020a03191633600160a060020a03161781556103e8600655664547258d1ec00060059081556007805468010000000000000000660100000000000061ff0019909216610a001760ff191690931767ffffffffffff0000191617604060020a61ffff0219169190911790556001805460a060020a60ff02191690556131f49081906100a990396000f30060806040526004361061013a5763ffffffff60e060020a60003504166309ddc583811461013f5780630ad50c02146101a55780631286d9e8146101c85780631bb2921b146101f05780631db939681461021e5780631e7769de146102465780632e1a7d4d1461026457806332a428821461027c57806335b11b721461029b57806351846028146102e75780636b1ac9001461038e578063728516c2146103af578063853828b6146103cf5780639cfda697146103e4578063a72aa16314610464578063ab4c44871461048e578063acd9930b146104bc578063ae813029146104fc578063b047f2451461051b578063b4f6aa561461053a578063ba08651814610556578063cf27d01614610572578063d56a455514610587578063d7963f94146105c7578063e829945a146105e8578063f1ab36b4146105fa575b600080fd5b34801561014b57600080fd5b5061015b61ffff6004351661064e565b60408051600160a060020a03909816885260208801969096528686019490945260608601929092521515608085015260a084015263ffffffff1660c0830152519081900360e00190f35b6101b461ffff60043516610755565b604080519115158252519081900360200190f35b3480156101d457600080fd5b506101b461ffff6004351660ff602435166044356064356108e9565b3480156101fc57600080fd5b5061020c61ffff60043516610b87565b60408051918252519081900360200190f35b34801561022a57600080fd5b506101b461ffff60043516600160a060020a0360243516610c4a565b34801561025257600080fd5b5061026261ffff60043516610da3565b005b34801561027057600080fd5b50610262600435610ef3565b34801561028857600080fd5b5061026261ffff60043516602435610f5e565b3480156102a757600080fd5b506040805160a08082019092526101b4916004803561ffff1692369260c49190602490600590839083908082843750939650509235935061126f92505050565b3480156102f357600080fd5b506040805161010081810190925261035591369160049161010491908390600890839083908082843750506040805161050081810190925294979695818101959450925060289150839083908082843750939650509235935061154092505050565b604051808261010080838360005b8381101561037b578181015183820152602001610363565b5050505090500191505060405180910390f35b34801561039a57600080fd5b50610262600160a060020a03600435166116bc565b3480156103bb57600080fd5b5061020c60043515156024356044356117bc565b3480156103db57600080fd5b50610262611800565b3480156103f057600080fd5b5060408051608081810190925261044f9136916004916084919083908190839082908082843750506040805161028081810190925294979695818101959450925060149150839083908082843750939650509235935061185e92505050565b60405181518152808260808083836020610363565b34801561047057600080fd5b5061026261ffff60043516602435151563ffffffff604435166119ae565b34801561049a57600080fd5b506104a3611f89565b6040805192835260208301919091528051918290030190f35b3480156104c857600080fd5b50604080518082018252610262913691600491604491908390600290839083908082843750939650611f9395505050505050565b34801561050857600080fd5b5061026261ffff600435166024356120a9565b34801561052757600080fd5b506101b461ffff60043516602435612230565b34801561054657600080fd5b506104a361ffff600435166123b1565b34801561056257600080fd5b506101b461ffff60043516612504565b34801561057e57600080fd5b506101b461266c565b34801561059357600080fd5b5060408051808201825261026291369160049160449190839060029083908390808284375093965061267595505050505050565b3480156105d357600080fd5b50610262600160a060020a0360043516612767565b6101b461ffff600435166024356127b1565b34801561060657600080fd5b5061060f612ba2565b6040805160ff978816815295909616602086015261ffff938416858701529183166060850152821660808401521660a082015290519081900360c00190f35b6000806000806000806000876127108161ffff16101561074957600154600554600654604080517fb7b1e3cc00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201526024810193909352604483019190915251600160a060020a039092169163b7b1e3cc9160648082019260e0929091908290030181600087803b1580156106e757600080fd5b505af11580156106fb573d6000803e3d6000fd5b505050506040513d60e081101561071157600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949d50929b509099509750955090935060ff1691505b50919395979092949650565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050506040513d60208110156107e457600080fd5b5051600160a060020a0316156107f957600080fd5b60055434101561080857600080fd5b60048054340190556007805461ffff6201000080830482166064018216810263ffff00001990931692909217928390556103e891909204909116106108ce576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a9392909204169060090281151561089057fe5b0481151561089a57fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b6108de8333346000806000612c17565b600191505b50919050565b600080600080876127108161ffff161015610b7b57600a60ff89161061090e57600080fd5b61091789610b87565b93506109238987612d27565b15610b7657600154604080517f3953ca8b00000000000000000000000000000000000000000000000000000000815261ffff8c16600482015260ff8b166024820152604481018a90529051600160a060020a0390921691633953ca8b9160648082019260009290919082900301818387803b1580156109a157600080fd5b505af11580156109b5573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d6040811015610a4857600080fd5b508051602090910151600154604080517fe86994ea00000000000000000000000000000000000000000000000000000000815261ffff8e166004820181905291519497509295508793600160a060020a038089169492937fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b519391169163e86994ea9160248082019260a0929091908290030181600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060a0811015610b2557600080fd5b5060405142908890808460a080838360005b83811015610b4f578181015183820152602001610b37565b5050505091909101938452505060208201526040805191829003019150a460019450610b7b565b600094505b50505050949350505050565b600154604080517f1f12da0600000000000000000000000000000000000000000000000000000000815261ffff841660048201529051600092839283928392600160a060020a031691631f12da0691602480830192606092919082900301818787803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b505050506040513d6060811015610c2057600080fd5b50805160208201516040909201519094509092509050610c418383836117bc565b95945050505050565b6000826127108161ffff161015610d9c576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a03338116931691632ccaa3e99160248083019260209291908290030181600087803b158015610cb057600080fd5b505af1158015610cc4573d6000803e3d6000fd5b505050506040513d6020811015610cda57600080fd5b5051600160a060020a031614610cef57600080fd5b600154604080517f98864aaf00000000000000000000000000000000000000000000000000000000815261ffff871660048201529051610d9792879287926000928392600160a060020a03909116916398864aaf9160248082019260209290919082900301818787803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050506040513d6020811015610d8f57600080fd5b505133612c17565b600191505b5092915050565b600080826127108161ffff161015610eed57600154604080517fab383a6b00000000000000000000000000000000000000000000000000000000815261ffff871660048201528151600160a060020a039093169263ab383a6b926024808401939192918290030181600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6040811015610e4657600080fd5b5080516020909101519093509150828015610e6057504282105b15610eed57600154604080517f4b1ec20c00000000000000000000000000000000000000000000000000000000815261ffff871660048201526000602482018190529151600160a060020a0390931692634b1ec20c9260448084019391929182900301818387803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b505050505b50505050565b60005433600160a060020a03908116911614610f0e57600080fd5b6004548111610f5b5760008054604051600160a060020a039091169183156108fc02918491818181858888f19350505050158015610f50573d6000803e3d6000fd5b506004805482900390555b50565b600080600080856127108161ffff16101561126657600154604080517fcf09e82000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201528151600160a060020a039093169263cf09e820926024808401939192918290030181600087803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b505050506040513d604081101561100457600080fd5b5080516020909101519095509350849250600160a060020a038316151561119a5760015460008054600654604080517f45ede90000000000000000000000000000000000000000000000000000000000815261ffff8d166004820152600160a060020a03938416602482015260448101929092525191909316926345ede90092606480830193919282900301818387803b1580156110a157600080fd5b505af11580156110b5573d6000803e3d6000fd5b50506000546006546007805461ffff64010000000080830482166064018216810265ffff00000000199093169290921792839055600160a060020a039094169a509198506103e891900490911610915061119a9050576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a9392909204169060090281151561115857fe5b0481151561116257fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b858411156111a757600080fd5b60015460008054604080517f121c2b35000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018a90528a81166044830152606460628b028190049083018190529381166084830152838a0360a4830152915192965093169263121c2b359260c480830193919282900301818387803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b505050506112668733600087600088612c17565b50505050505050565b600080600080866127108161ffff1610156115355761128d88610b87565b93506112998887612d27565b15611530576001546040517feb39bc9000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201908152600160a060020a039092169163eb39bc90918b918b916024018260a080838360005b8381101561130d5781810151838201526020016112f5565b5050505090500192505050600060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8d1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b505050506040513d60408110156113d957600080fd5b50805160209091015160405191945092508490600160a060020a0385169061ffff8b16907fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b51908b9042908890808460a080838360005b8381101561144757818101518382015260200161142f565b5050505091909101938452505060208201526040805191829003019150a461ffff881660009081526002602052604090205460ff16151561152757600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260196024830152915191909216916326728b1491604480830192600092919082900301818387803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b50505061ffff89166000908152600260205260409020805460ff19166001179055505b60019450611535565b600094505b505050509392505050565b611548613189565b6000805b60088110156116635761271086826008811061156457fe5b602002015161ffff161061157757600080fd5b61162b86826008811061158657fe5b60200201516040805160a08101909152808860058602602881106115a657fe5b6020020151815260200188856005026001016028811015156115c457fe5b6020020151815260200188856005026002016028811015156115e257fe5b60200201518152602001888560050260030160288110151561160057fe5b60200201518152602001888560050260040160288110151561161e57fe5b602002015190528661126f565b82826008811061163757fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161154c565b60408051610100810191829052908390600890826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161167b579050505050505092505b50509392505050565b6000805481908190819033600160a060020a039081169116146116de57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038716179081905574010000000000000000000000000000000000000000900460ff1615156117b557602d935060009250600091505b600a8261ffff16101561177657506000805460648402858401019161176b918391600160a060020a0390911690808080612c17565b816001019150611736565b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556203f48042016003555b5050505050565b6000806000851580156117ce57508415155b156117f4578342106117e057836117e2565b425b9150603c8583030492508290506116b3565b50600095945050505050565b60005433600160a060020a0390811691161461181b57600080fd5b60008054600454604051600160a060020a039092169281156108fc029290818181858888f19350505050158015611856573d6000803e3d6000fd5b506000600455565b6118666131a9565b6000805b60048110156119745761271086826004811061188257fe5b602002015161ffff161061189557600080fd5b61193c8682600481106118a457fe5b60200201516040805160a08101909152808860058602601481106118c457fe5b6020020151815260200188856005026001016014811015156118e257fe5b60200201518152602001888560050260020160148110151561190057fe5b60200201518152602001888560050260030160148110151561191e57fe5b60200201518152602001888560050260040160148110151561161e57fe5b82826004811061194857fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161186a565b604080516080810191829052835460ff16151581529083906004908260016020860180841161167b5750949b9a5050505050505050505050565b6000806000806000806000806000808c6127108161ffff161015611f7957600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78f6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050506040513d610100811015611a5e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509a509a509a509a509a509a509a509a5088600160a060020a031633600160a060020a0316141515611ae557600080fd5b60009250600091508c15611da8578980611aff5750428511155b80611b1b575033600160a060020a031688600160a060020a0316145b1515611b2657600080fd5b600063ffffffff8d1611611b3957600080fd5b8b63ffffffff16600160009054906101000a9004600160a060020a0316600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50511015611be757600080fd5b8b63ffffffff16603c02854210611bfe5742611c00565b855b019250611c0e8a87866117bc565b9150600082118015611c285750600160a060020a03881615155b15611d0c57600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8b8633886040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a031681526020018663ffffffff16815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b158015611cef57600080fd5b505af1158015611d03573d6000803e3d6000fd5b50505050611da3565b600160009054906101000a9004600160a060020a0316600160a060020a031663f6f8ca07338e6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018263ffffffff16815260200192505050600060405180830381600087803b158015611d8a57600080fd5b505af1158015611d9e573d6000803e3d6000fd5b505050505b611e48565b898015611db457504285115b15611e4857600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152603c428a0304600019016024830152915191909216916326728b1491604480830192600092919082900301818387803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b505050505b600160009054906101000a9004600160a060020a0316600160a060020a031663886b148d8f8f600080886040518663ffffffff1660e060020a028152600401808661ffff1661ffff1681526020018515151515815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b158015611ed357600080fd5b505af1158015611ee7573d6000803e3d6000fd5b505050508c15611f49578188600160a060020a03168f61ffff167fa21d884986f2c87cfb81054448f66071c9363735665db28d236c882a5c0917968f604051808263ffffffff1663ffffffff16815260200191505060405180910390a4611f79565b60405161ffff8f16907f3f7bf071636ed8429b752f79e5cd881beb27062a4d0092050a0fc633850d387d90600090a25b5050505050505050505050505050565b6005546006549091565b600154604080517f606bc9a500000000000000000000000000000000000000000000000000000000815233600160a060020a038181166004840190815294169363606bc9a59391928692602490910190839080838360005b83811015612003578181015183820152602001611feb565b5050505090500192505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b5050505033600160a060020a03167fb05ccb51f2408b99be7026712c574396fced9c3e0480bf7b8f8874d8c830b7cc826040518082600260200280838360005b8381101561209457818101518382015260200161207c565b5050505090500191505060405180910390a250565b816127108161ffff16101561222b57600082116120c557600080fd5b60018054604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015291519386019391909216916370a082319160248083019260209291908290030181600087803b15801561213257600080fd5b505af1158015612146573d6000803e3d6000fd5b505050506040513d602081101561215c57600080fd5b5051101561216957600080fd5b60408051838152426020820152815161ffff8616927f606e2d57e3221093069398002086bf333ae29b8033fc68ddf70c7a4516b530f8928290030190a260018054604080517ff6f8ca07000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260248201949094529051929091169163f6f8ca079160448082019260009290919082900301818387803b15801561221757600080fd5b505af1158015611266573d6000803e3d6000fd5b505050565b6000826127108161ffff161015610d9c5782151561224d57600080fd5b6001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b505133600160a060020a039081169116146122e557600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff87166004820152602481018690529051600160a060020a0390921691636d87b65c9160448082019260009290919082900301818387803b15801561235557600080fd5b505af1158015612369573d6000803e3d6000fd5b505060408051868152905161ffff881693507ffbf70f26ac04d08c24acb352205513f53182e26fe61c050a6dd445a584cd145192509081900360200190a25060019392505050565b600080826127108161ffff1610156124fe576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561241757600080fd5b505af115801561242b573d6000803e3d6000fd5b505050506040513d602081101561244157600080fd5b5051600160a060020a031615156124635761245a611f89565b925092506124fe565b600154604080517f1bbc795200000000000000000000000000000000000000000000000000000000815261ffff871660048201529051600092600160a060020a031691631bbc795291602480830192602092919082900301818787803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050506040513d60208110156124f657600080fd5b505190935091505b50915091565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d602081101561259357600080fd5b505133600160a060020a039081169116146125ad57600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff861660048201526000602482018190529151600160a060020a0390931692636d87b65c9260448084019391929182900301818387803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505060405161ffff861692507f01a14d3ac14361bc1087c805becdb2946b166a265e22798f7011f3a9e8b5fc6c9150600090a250600192915050565b60035442111590565b600154604080517f6fcdcb3e00000000000000000000000000000000000000000000000000000000815233600160a060020a0381811660048401908152941693636fcdcb3e9391928692602490910190839080838360005b838110156126e55781810151838201526020016126cd565b5050505090500192505050600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b5050604080518451815233600160a060020a031693507f4d267d545ed24f4a32ae8dafe3dd6b7015cf92b46e36306b74986fc9288964a79250849181908390808383602061207c565b60005433600160a060020a0390811691161461278257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000846127108161ffff161015612b99576001546040805160e060020a632ccaa3e902815261ffff891660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561281957600080fd5b505af115801561282d573d6000803e3d6000fd5b505050506040513d602081101561284357600080fd5b5051600160a060020a03161561285857600080fd5b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0333811660048301529151889392909216916370a08231916024808201926020929091908290030181600087803b1580156128c357600080fd5b505af11580156128d7573d6000803e3d6000fd5b505050506040513d60208110156128ed57600080fd5b505110156128fa57600080fd5b84151561290657600080fd5b60065485111561291557600080fd5b846006540392508260065460055481151561292c57fe5b040291503482111561293d57600080fd5b60015460008054604080517f2a396734000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018b90529283166044820152606481018a905290519190931692632a39673492608480830193919282900301818387803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b50505050600654856064028115156129e357fe5b6007805461ffff640100000000808304821695909404949094018416830265ffff000000001990911617908190556103e891900490911610612aae576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a93929092041690600902811515612a6c57fe5b04811515612a7657fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b600480543401905560065460648402811515612ac657fe5b6007805461ffff62010000808304821695909404949094018416830263ffff00001990911617908190556103e891900490911610612b85576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a93929092041690600902811515612b4757fe5b04811515612b5157fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b612b9486333488600080612c17565b600193505b50505092915050565b600080548190819081908190819033600160a060020a03908116911614612bc857600080fd5b505060075460ff8082169550610100820416935061ffff620100008204811693506401000000008204811692506601000000000000820481169168010000000000000000900416909192939495565b600160a060020a0385161515612c2c57600080fd5b600154604080517fb9e58ab000000000000000000000000000000000000000000000000000000000815261ffff89166004820152600160a060020a0388811660248301526000604483018190526064830181905260ff87166084840152925193169263b9e58ab09260a48084019391929182900301818387803b158015612cb257600080fd5b505af1158015612cc6573d6000803e3d6000fd5b5050604080518781526020810187905242818301529051600160a060020a0380861694508916925061ffff8a16917f75d46023a8160c0896514b1afdbbaf5d7b2175bb0ef87ee9c94df9e7455f9627919081900360600190a4505050505050565b6000806000806000806000806000806000600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78e6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b505050506040513d610100811015612dca57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505099509950995099509950995099509950888015612e3e5750428411155b15612ed357600160009054906101000a9004600160a060020a0316600160a060020a0316634b1ec20c8e60006040518363ffffffff1660e060020a028152600401808361ffff1661ffff1681526020018215151515815260200192505050600060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b50505050600098505b8815612f0f5787600160a060020a031633600160a060020a0316141515612ef957600080fd5b600260ff8b161415612f0a57600080fd5b6130d4565b4284111580612f2f575033600160a060020a031687600160a060020a0316145b156130cb578b6001019150612f4261266c565b8015612f4e575060028c105b15612f5857600391505b612f638986856117bc565b9050600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8a858d876040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a0316815260200186815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b15801561302157600080fd5b505af1158015613035573d6000803e3d6000fd5b5050600154600160a060020a0316915063c575200d90508e6002603c8602044201603c866005020242016040518463ffffffff1660e060020a028152600401808461ffff1661ffff1681526020018381526020018281526020019350505050600060405180830381600087803b1580156130ae57600080fd5b505af11580156130c2573d6000803e3d6000fd5b505050506130d4565b60009a50613179565b600160009054906101000a9004600160a060020a0316600160a060020a03166315f590338e33426040518463ffffffff1660e060020a028152600401808461ffff1661ffff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b5050505060019a505b5050505050505050505092915050565b610100604051908101604052806008906020820280388339509192915050565b60806040519081016040528060049060208202803883395091929150505600a165627a7a7230582051780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c0029

   Swarm Source:
bzzr://51780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.