ETH Price: $1,965.67 (+0.90%)
 

Overview

ETH Balance

0.212716646724811506 ETH

Eth Value

$418.13 (@ $1,965.67/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Begin Game71481452019-01-30 9:22:042588 days ago1548840124IN
0x9B3Ca772...d5671D5bD
0 ETH0.000688328
Reset71481392019-01-30 9:20:402588 days ago1548840040IN
0x9B3Ca772...d5671D5bD
0 ETH0.000800168
Payout71481312019-01-30 9:18:352588 days ago1548839915IN
0x9B3Ca772...d5671D5bD
0 ETH0.001391368
Start Settlement71481272019-01-30 9:17:052588 days ago1548839825IN
0x9B3Ca772...d5671D5bD
0 ETH0.001991538
__callback71481242019-01-30 9:15:202589 days ago1548839720IN
0x9B3Ca772...d5671D5bD
0 ETH0.001618120
Finalize71481212019-01-30 9:14:442589 days ago1548839684IN
0x9B3Ca772...d5671D5bD
0 ETH0.001309378
Begin Game71430472019-01-29 8:07:082590 days ago1548749228IN
0x9B3Ca772...d5671D5bD
0 ETH0.000688328
Reset71430422019-01-29 8:06:002590 days ago1548749160IN
0x9B3Ca772...d5671D5bD
0 ETH0.000800168
Payout71430362019-01-29 8:03:212590 days ago1548749001IN
0x9B3Ca772...d5671D5bD
0 ETH0.001391368
Start Settlement71430332019-01-29 8:01:462590 days ago1548748906IN
0x9B3Ca772...d5671D5bD
0 ETH0.001991538
__callback71430302019-01-29 8:00:392590 days ago1548748839IN
0x9B3Ca772...d5671D5bD
0 ETH0.001618120
Finalize71430282019-01-29 8:00:112590 days ago1548748811IN
0x9B3Ca772...d5671D5bD
0 ETH0.001309378
Begin Game71421772019-01-29 3:58:022590 days ago1548734282IN
0x9B3Ca772...d5671D5bD
0 ETH0.000688328
Reset71421742019-01-29 3:57:242590 days ago1548734244IN
0x9B3Ca772...d5671D5bD
0 ETH0.000800168
Payout71421682019-01-29 3:55:402590 days ago1548734140IN
0x9B3Ca772...d5671D5bD
0 ETH0.001391368
Start Settlement71421642019-01-29 3:53:592590 days ago1548734039IN
0x9B3Ca772...d5671D5bD
0 ETH0.001991538
__callback71421622019-01-29 3:51:572590 days ago1548733917IN
0x9B3Ca772...d5671D5bD
0 ETH0.001618120
Finalize71421602019-01-29 3:50:452590 days ago1548733845IN
0x9B3Ca772...d5671D5bD
0 ETH0.001309378
Begin Game71391212019-01-28 12:45:512590 days ago1548679551IN
0x9B3Ca772...d5671D5bD
0 ETH0.000688328
Reset71391152019-01-28 12:44:252590 days ago1548679465IN
0x9B3Ca772...d5671D5bD
0 ETH0.000800168
Payout71391072019-01-28 12:42:552590 days ago1548679375IN
0x9B3Ca772...d5671D5bD
0 ETH0.001391368
Start Settlement71391032019-01-28 12:41:592590 days ago1548679319IN
0x9B3Ca772...d5671D5bD
0 ETH0.001991538
__callback71390992019-01-28 12:41:242590 days ago1548679284IN
0x9B3Ca772...d5671D5bD
0 ETH0.001618120
Finalize71390962019-01-28 12:40:212590 days ago1548679221IN
0x9B3Ca772...d5671D5bD
0 ETH0.001309378
Begin Game71343152019-01-27 13:33:262591 days ago1548596006IN
0x9B3Ca772...d5671D5bD
0 ETH0.000688328
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-71481212019-01-30 9:14:442589 days ago1548839684
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71430282019-01-29 8:00:112590 days ago1548748811
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71421602019-01-29 3:50:452590 days ago1548733845
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71390962019-01-28 12:40:212590 days ago1548679221
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71342942019-01-27 13:26:152591 days ago1548595575
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71338402019-01-27 11:19:122591 days ago1548587952
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71287642019-01-26 11:13:092592 days ago1548501189
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71236892019-01-25 11:07:112593 days ago1548414431
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-71181662019-01-24 8:57:152595 days ago1548320235
0x9B3Ca772...d5671D5bD
0.00243327 ETH
-70472122019-01-11 9:12:262608 days ago1547197946
0x9B3Ca772...d5671D5bD
0.00237461 ETH
-70444172019-01-10 21:04:292608 days ago1547154269
0x9B3Ca772...d5671D5bD
0.00237461 ETH
-70381202019-01-09 17:59:382609 days ago1547056778
0x9B3Ca772...d5671D5bD
0.00231561 ETH
-70353082019-01-09 5:52:372610 days ago1547013157
0x9B3Ca772...d5671D5bD
0.00231561 ETH
-70324722019-01-08 17:46:322610 days ago1546969592
0x9B3Ca772...d5671D5bD
0.00231561 ETH
-70249462019-01-07 9:32:352611 days ago1546853555
0x9B3Ca772...d5671D5bD
0.00231561 ETH
-70221622019-01-06 21:27:162612 days ago1546810036
0x9B3Ca772...d5671D5bD
0.00231561 ETH
-69482532018-12-25 4:32:212625 days ago1545712341
0x9B3Ca772...d5671D5bD
0.00235433 ETH
-69458712018-12-24 18:46:092625 days ago1545677169
0x9B3Ca772...d5671D5bD
0.00245372 ETH
-69457742018-12-24 18:23:472625 days ago1545675827
0x9B3Ca772...d5671D5bD
0.00245372 ETH
-69456692018-12-24 18:03:422625 days ago1545674622
0x9B3Ca772...d5671D5bD
0.00245372 ETH
-69439252018-12-24 11:06:262625 days ago1545649586
0x9B3Ca772...d5671D5bD
0.00245372 ETH
-69044092018-12-17 17:33:532632 days ago1545068033
0x9B3Ca772...d5671D5bD
0.0025724 ETH
-69042682018-12-17 16:56:122632 days ago1545065772
0x9B3Ca772...d5671D5bD
0.0025724 ETH
-69039742018-12-17 15:52:162632 days ago1545061936
0x9B3Ca772...d5671D5bD
0.0025724 ETH
Transfer67932102018-11-29 8:18:422651 days ago1543479522
0x9B3Ca772...d5671D5bD
0.00247312 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GameContract

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-20
*/

pragma solidity ^0.4.18;

contract OraclizeI {
    address public cbAddress;
    function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id);
    function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id);
    function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id);
    function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id);
    function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id);
    function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id);
    function getPrice(string _datasource) public returns (uint _dsprice);
    function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice);
    function setProofType(byte _proofType) external;
    function setCustomGasPrice(uint _gasPrice) external;
    function randomDS_getSessionPubKeyHash() external constant returns(bytes32);
}

contract OraclizeAddrResolverI {
    function getAddress() public returns (address _addr);
}

contract usingOraclize {
    uint constant day = 60*60*24;
    uint constant week = 60*60*24*7;
    uint constant month = 60*60*24*30;
    byte constant proofType_NONE = 0x00;
    byte constant proofType_TLSNotary = 0x10;
    byte constant proofType_Android = 0x20;
    byte constant proofType_Ledger = 0x30;
    byte constant proofType_Native = 0xF0;
    byte constant proofStorage_IPFS = 0x01;
    uint8 constant networkID_auto = 0;
    uint8 constant networkID_mainnet = 1;
    uint8 constant networkID_testnet = 2;
    uint8 constant networkID_morden = 2;
    uint8 constant networkID_consensys = 161;

    OraclizeAddrResolverI OAR;

    OraclizeI oraclize;
    modifier oraclizeAPI {
        if((address(OAR)==0)||(getCodeSize(address(OAR))==0))
            oraclize_setNetwork(networkID_auto);

        if(address(oraclize) != OAR.getAddress())
            oraclize = OraclizeI(OAR.getAddress());

        _;
    }
    modifier coupon(string code){
        oraclize = OraclizeI(OAR.getAddress());
        _;
    }

    function oraclize_setNetwork(uint8 networkID) internal returns(bool){
      return oraclize_setNetwork();
      networkID; // silence the warning and remain backwards compatible
    }
    function oraclize_setNetwork() internal returns(bool){
        if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet
            OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed);
            oraclize_setNetworkName("eth_mainnet");
            return true;
        }
        if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet
            OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1);
            oraclize_setNetworkName("eth_ropsten3");
            return true;
        }
        if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet
            OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e);
            oraclize_setNetworkName("eth_kovan");
            return true;
        }
        if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet
            OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48);
            oraclize_setNetworkName("eth_rinkeby");
            return true;
        }
        if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge
            OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
            return true;
        }
        if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide
            OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF);
            return true;
        }
        if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity
            OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA);
            return true;
        }
        return false;
    }

    function __callback(bytes32 myid, string result) public {
        __callback(myid, result, new bytes(0));
    }
    
   function __callback(bytes32 myid, string result, bytes proof) public {
       
   }

    function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){
        return oraclize.getPrice(datasource);
    }

    function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){
        return oraclize.getPrice(datasource, gaslimit);
    }

    function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(0, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(timestamp, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(0, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN.value(price)(0, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN.value(price)(timestamp, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = ba2cbor(argN);
        return oraclize.queryN.value(price)(0, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = ba2cbor(argN);
        return oraclize.queryN.value(price)(timestamp, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = ba2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = ba2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        bytes[] memory dynargs = new bytes[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_cbAddress() oraclizeAPI internal returns (address){
        return oraclize.cbAddress();
    }
    function oraclize_setProof(byte proofP) oraclizeAPI internal {
        return oraclize.setProofType(proofP);
    }
    function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
        return oraclize.setCustomGasPrice(gasPrice);
    }

    function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){
        return oraclize.randomDS_getSessionPubKeyHash();
    }

    function getCodeSize(address _addr) constant internal returns(uint _size) {
        assembly {
            _size := extcodesize(_addr)
        }
    }

    function parseAddr(string _a) internal pure returns (address){
        bytes memory tmp = bytes(_a);
        uint160 iaddr = 0;
        uint160 b1;
        uint160 b2;
        for (uint i=2; i<2+2*20; i+=2){
            iaddr *= 256;
            b1 = uint160(tmp[i]);
            b2 = uint160(tmp[i+1]);
            if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87;
            else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55;
            else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48;
            if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
            else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55;
            else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
            iaddr += (b1*16+b2);
        }
        return address(iaddr);
    }

    function strCompare(string _a, string _b) internal pure returns (int) {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        for (uint i = 0; i < minLength; i ++)
            if (a[i] < b[i])
                return -1;
            else if (a[i] > b[i])
                return 1;
        if (a.length < b.length)
            return -1;
        else if (a.length > b.length)
            return 1;
        else
            return 0;
    }

    function indexOf(string _haystack, string _needle) internal pure returns (int) {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if(h.length < 1 || n.length < 1 || (n.length > h.length))
            return -1;
        else if(h.length > (2**128 -1))
            return -1;
        else
        {
            uint subindex = 0;
            for (uint i = 0; i < h.length; i ++)
            {
                if (h[i] == n[0])
                {
                    subindex = 1;
                    while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex])
                    {
                        subindex++;
                    }
                    if(subindex == n.length)
                        return int(i);
                }
            }
            return -1;
        }
    }

    function strConcat(string _a, string _b, string _c, string _d, string _e) internal pure returns (string) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }

    function strConcat(string _a, string _b, string _c, string _d) internal pure returns (string) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string _a, string _b, string _c) internal pure returns (string) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string _a, string _b) internal pure returns (string) {
        return strConcat(_a, _b, "", "", "");
    }

    // parseInt
    function parseInt(string _a) internal pure returns (uint) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string _a, uint _b) internal pure returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                   if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }

    function uint2str(uint i) internal pure returns (string){
        if (i == 0) return "0";
        uint j = i;
        uint len;
        while (j != 0){
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (i != 0){
            bstr[k--] = byte(48 + i % 10);
            i /= 10;
        }
        return string(bstr);
    }

    function stra2cbor(string[] arr) internal pure returns (bytes) {
            uint arrlen = arr.length;

            // get correct cbor output length
            uint outputlen = 0;
            bytes[] memory elemArray = new bytes[](arrlen);
            for (uint i = 0; i < arrlen; i++) {
                elemArray[i] = (bytes(arr[i]));
                outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types
            }
            uint ctr = 0;
            uint cborlen = arrlen + 0x80;
            outputlen += byte(cborlen).length;
            bytes memory res = new bytes(outputlen);

            while (byte(cborlen).length > ctr) {
                res[ctr] = byte(cborlen)[ctr];
                ctr++;
            }
            for (i = 0; i < arrlen; i++) {
                res[ctr] = 0x5F;
                ctr++;
                for (uint x = 0; x < elemArray[i].length; x++) {
                    // if there's a bug with larger strings, this may be the culprit
                    if (x % 23 == 0) {
                        uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x;
                        elemcborlen += 0x40;
                        uint lctr = ctr;
                        while (byte(elemcborlen).length > ctr - lctr) {
                            res[ctr] = byte(elemcborlen)[ctr - lctr];
                            ctr++;
                        }
                    }
                    res[ctr] = elemArray[i][x];
                    ctr++;
                }
                res[ctr] = 0xFF;
                ctr++;
            }
            return res;
        }

    function ba2cbor(bytes[] arr) internal pure returns (bytes) {
            uint arrlen = arr.length;

            // get correct cbor output length
            uint outputlen = 0;
            bytes[] memory elemArray = new bytes[](arrlen);
            for (uint i = 0; i < arrlen; i++) {
                elemArray[i] = (bytes(arr[i]));
                outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types
            }
            uint ctr = 0;
            uint cborlen = arrlen + 0x80;
            outputlen += byte(cborlen).length;
            bytes memory res = new bytes(outputlen);

            while (byte(cborlen).length > ctr) {
                res[ctr] = byte(cborlen)[ctr];
                ctr++;
            }
            for (i = 0; i < arrlen; i++) {
                res[ctr] = 0x5F;
                ctr++;
                for (uint x = 0; x < elemArray[i].length; x++) {
                    // if there's a bug with larger strings, this may be the culprit
                    if (x % 23 == 0) {
                        uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x;
                        elemcborlen += 0x40;
                        uint lctr = ctr;
                        while (byte(elemcborlen).length > ctr - lctr) {
                            res[ctr] = byte(elemcborlen)[ctr - lctr];
                            ctr++;
                        }
                    }
                    res[ctr] = elemArray[i][x];
                    ctr++;
                }
                res[ctr] = 0xFF;
                ctr++;
            }
            return res;
        }


    string oraclize_network_name;
    function oraclize_setNetworkName(string _network_name) internal {
        oraclize_network_name = _network_name;
    }

    function oraclize_getNetworkName() internal view returns (string) {
        return oraclize_network_name;
    }

    function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){
        require((_nbytes > 0) && (_nbytes <= 32));
        bytes memory nbytes = new bytes(1);
        nbytes[0] = byte(_nbytes);
        bytes memory unonce = new bytes(32);
        bytes memory sessionKeyHash = new bytes(32);
        bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash();
        assembly {
            mstore(unonce, 0x20)
            mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp)))
            mstore(sessionKeyHash, 0x20)
            mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32)
        }
        bytes[3] memory args = [unonce, nbytes, sessionKeyHash];
        bytes32 queryId = oraclize_query(_delay, "random", args, _customGasLimit);
        oraclize_randomDS_setCommitment(queryId, keccak256(abi.encodePacked(bytes8(_delay), args[1], sha256(args[0]), args[2])));
        return queryId;
    }

    function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal {
        oraclize_randomDS_args[queryId] = commitment;
    }

    mapping(bytes32=>bytes32) oraclize_randomDS_args;
    mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified;

    function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){
        bool sigok;
        address signer;

        bytes32 sigr;
        bytes32 sigs;

        bytes memory sigr_ = new bytes(32);
        uint offset = 4+(uint(dersig[3]) - 0x20);
        sigr_ = copyBytes(dersig, offset, 32, sigr_, 0);
        bytes memory sigs_ = new bytes(32);
        offset += 32 + 2;
        sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0);

        assembly {
            sigr := mload(add(sigr_, 32))
            sigs := mload(add(sigs_, 32))
        }


        (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs);
        if (address(keccak256(pubkey)) == signer) return true;
        else {
            (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs);
            return (address(keccak256(pubkey)) == signer);
        }
    }

    function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) {
        bool sigok;

        // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH)
        bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2);
        copyBytes(proof, sig2offset, sig2.length, sig2, 0);

        bytes memory appkey1_pubkey = new bytes(64);
        copyBytes(proof, 3+1, 64, appkey1_pubkey, 0);

        bytes memory tosign2 = new bytes(1+65+32);
        tosign2[0] = byte(1); //role
        copyBytes(proof, sig2offset-65, 65, tosign2, 1);
        bytes memory CODEHASH = hex"fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c";
        copyBytes(CODEHASH, 0, 32, tosign2, 1+65);
        sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey);

        if (sigok == false) return false;


        // Step 7: verify the APPKEY1 provenance (must be signed by Ledger)
        bytes memory LEDGERKEY = hex"7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4";

        bytes memory tosign3 = new bytes(1+65);
        tosign3[0] = 0xFE;
        copyBytes(proof, 3, 65, tosign3, 1);

        bytes memory sig3 = new bytes(uint(proof[3+65+1])+2);
        copyBytes(proof, 3+65, sig3.length, sig3, 0);

        sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY);

        return sigok;
    }

    modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) {
        // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1)
        require((_proof[0] == "L") && (_proof[1] == "P") && (_proof[2] == 1));

        bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName());
        require(proofVerified);

        _;
    }

    function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){
        // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1)
        if ((_proof[0] != "L")||(_proof[1] != "P")||(_proof[2] != 1)) return 1;

        bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName());
        if (proofVerified == false) return 2;

        return 0;
    }

    function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal pure returns (bool){
        bool match_ = true;
        

        for (uint256 i=0; i< n_random_bytes; i++) {
            if (content[i] != prefix[i]) match_ = false;
        }

        return match_;
    }

    function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){

        // Step 2: the unique keyhash has to match with the sha256 of (context name + queryId)
        uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32;
        bytes memory keyhash = new bytes(32);
        copyBytes(proof, ledgerProofLength, 32, keyhash, 0);
        if (!(keccak256(keyhash) == keccak256(abi.encodePacked(sha256(abi.encodePacked(context_name, queryId)))))) return false;

        bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2);
        copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0);

        // Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1)
        if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false;

        // Step 4: commitment match verification, keccak256(delay, nbytes, unonce, sessionKeyHash) == commitment in storage.
        // This is to verify that the computed args match with the ones specified in the query.
        bytes memory commitmentSlice1 = new bytes(8+1+32);
        copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0);

        bytes memory sessionPubkey = new bytes(64);
        uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65;
        copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0);

        bytes32 sessionPubkeyHash = sha256(sessionPubkey);
        if (oraclize_randomDS_args[queryId] == keccak256(abi.encodePacked(commitmentSlice1, sessionPubkeyHash))){ //unonce, nbytes and sessionKeyHash match
            delete oraclize_randomDS_args[queryId];
        } else return false;


        // Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey)
        bytes memory tosign1 = new bytes(32+8+1+32);
        copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0);
        if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false;

        // verify if sessionPubkeyHash was verified already, if not.. let's do it!
        if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){
            oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset);
        }

        return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash];
    }

    // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
    function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal pure returns (bytes) {
        uint minLength = length + toOffset;

        // Buffer too small
        require(to.length >= minLength); // Should be a better way?

        // NOTE: the offset 32 is added to skip the `size` field of both bytes variables
        uint i = 32 + fromOffset;
        uint j = 32 + toOffset;

        while (i < (32 + fromOffset + length)) {
            assembly {
                let tmp := mload(add(from, i))
                mstore(add(to, j), tmp)
            }
            i += 32;
            j += 32;
        }

        return to;
    }

    // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
    // Duplicate Solidity's ecrecover, but catching the CALL return value
    function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) {
        // We do our own memory management here. Solidity uses memory offset
        // 0x40 to store the current end of memory. We write past it (as
        // writes are memory extensions), but don't update the offset so
        // Solidity will reuse it. The memory used here is only needed for
        // this context.

        // FIXME: inline assembly can't access return values
        bool ret;
        address addr;

        assembly {
            let size := mload(0x40)
            mstore(size, hash)
            mstore(add(size, 32), v)
            mstore(add(size, 64), r)
            mstore(add(size, 96), s)

            // NOTE: we can reuse the request memory because we deal with
            //       the return code
            ret := call(3000, 1, 0, size, 128, size, 32)
            addr := mload(size)
        }

        return (ret, addr);
    }

    // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license
    function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) {
        bytes32 r;
        bytes32 s;
        uint8 v;

        if (sig.length != 65)
          return (false, 0);

        // The signature format is a compact form of:
        //   {bytes32 r}{bytes32 s}{uint8 v}
        // Compact means, uint8 is not padded to 32 bytes.
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))

            // Here we are loading the last 32 bytes. We exploit the fact that
            // 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))

            // Alternative solution:
            // 'byte' is not working due to the Solidity parser, so lets
            // use the second best option, 'and'
            // v := and(mload(add(sig, 65)), 255)
        }

        // albeit non-transactional signatures are not specified by the YP, one would expect it
        // to match the YP range of [27, 28]
        //
        // geth uses [0, 1] and some clients have followed. This might change, see:
        //  https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27)
          v += 27;

        if (v != 27 && v != 28)
            return (false, 0);

        return safer_ecrecover(hash, v, r, s);
    }

}

contract Mortal {
    /* Define variable owner of the type address */
    address owner;

    /* This function is executed at initialization and sets the owner of the contract */
    constructor() public {
        owner = msg.sender;
    }

    /* Function to recover the funds on the contract */
    function kill() public {
        if (msg.sender == owner) {
            selfdestruct(owner);
        }
    }
}

contract BucketContract is Mortal {
	mapping (address => uint) public betAmount;
	mapping (address => bool) public hasBet;
	address[] public betters;
	uint[] public amountWon;
	uint[] public amountBid;
	address public owner;
	uint256 public totalBid;
	bool public payoutComplete;
	bool public isWinner;
	uint256 public gameId;
	uint256 public referralAmount;
	uint256 public settlementType;
	uint256 public processed;/* no of payouts processed */
	uint256 public remaining;/* no of payouts remaining */
	uint256 public totalBalance;

	GameContract public gameContractObject;

	event StateChanged(bool status, string message);
	event SendReward(address winner, uint amount);

	modifier onlyGameContractOrOwner {
		require (msg.sender == address(gameContractObject) || msg.sender == owner);
		_;
	}

	modifier onlyGameContract {
		require (msg.sender == address(gameContractObject));
		_;
	}

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

  constructor(address gcAddress/*, uint256 _gameId*/) public {
		owner = msg.sender;
		// gameId = _gameId;
		gameContractObject = GameContract(gcAddress);
		emit StateChanged(true, "bucket contract deployed");
	}

	function getBettersArrayLength() public view returns(uint256) {
		return betters.length;
	}

	function getBetter() public view returns(address[]) {
		return betters;
	} 

	function getWinningAmount() public view returns(uint[]) {
		return amountWon;
	}

	function getBidAmount() public view returns(uint[]) {
		return amountBid;
	}

	function setGameId(uint256 _gameId) public onlyGameContract {
		assert(gameId == 0);
		gameId = _gameId;
	}

	function bet() public payable /*gameRunning*/ {
		require (msg.value >= gameContractObject.getPrice(), "Too small bet");
		assert(gameContractObject.canBet());
		if (hasBet[msg.sender] == false) {
			betters.push(msg.sender);
			hasBet[msg.sender] = true;
		}
		betAmount[msg.sender] += msg.value;
		totalBid += msg.value;
		emit StateChanged(true,"Bet submitted");
	}

	function transferToOtherBucketContract(address _bucketContract) public onlyGameContractOrOwner {
		_bucketContract.transfer(address(this).balance);
	}

	function () public payable {
		emit StateChanged(true, "Ether Received");
	}

	/* setWinner function - set the winning contract */
	function setWinner(uint256 _gameId) public onlyGameContractOrOwner {
		require(_gameId == gameContractObject.gameId());
		assert(gameContractObject.state() == GameContract.GameState.RandomReceived);
		assert(!isWinner);
		isWinner = true;
		address houseAddressOne = gameContractObject.getHouseAddressOne();
		address houseAddressTwo = gameContractObject.getHouseAddressTwo();
		address referralAddress = gameContractObject.getReferralAddress();
		if (totalBid == 0) {
			houseAddressOne.transfer((address(this).balance * 70)/100);
			houseAddressTwo.transfer(address(this).balance);
      settlementType = 0;
		} else if (totalBid == address(this).balance) {
		    settlementType = 1;
		} else {
			totalBalance = address(this).balance - totalBid;
			uint256 houseAddressShare = gameContractObject.getHouseAddressShare();
			houseAddressOne.transfer((totalBalance * houseAddressShare * 70) / 10000);/* 70 percent of house share goes to bucket one */
			houseAddressTwo.transfer((totalBalance * houseAddressShare * 30) / 10000);/* 30 percent of house share goes to bucket one */
			referralAmount = (totalBalance * gameContractObject.getReferralAddressShare())/100;	
			referralAddress.transfer(referralAmount);
			totalBalance = address(this).balance;
			settlementType = 2;
		}
		processed = 0;
		remaining = betters.length;
	}

	function payout() public onlyGameContract {
		assert(!payoutComplete);
		assert(isWinner);
		uint256 batchsize = gameContractObject.getBatchSize();
		uint256 i;
		if (betters.length - processed <= batchsize) {
			batchsize = remaining;
		}
		uint256 processLimit = processed + batchsize;
		if (settlementType == 0) {
		    gameContractObject.finishGame();
		    return;
		}
		else if (settlementType == 1) {
			for (i = processed; i < processLimit && i < betters.length; i++) {
				address better = betters[i];
				uint amount = betAmount[better];
				better.transfer(amount);
				emit SendReward(better, amount);
				amountWon.push(amount);
			}
		
		} else if (settlementType == 2) {
			for (i = processed; i < processLimit && i < betters.length; i++) {
				address better2 = betters[i];
				uint amountToTransfer = (betAmount[better2]*totalBalance)/totalBid;
				better2.transfer(amountToTransfer); 
				emit SendReward(better2, amountToTransfer);
				amountWon.push(amountToTransfer - betAmount[better2]);
				amountBid.push(betAmount[better2]);
			}
		}
		processed = i;	
		remaining = betters.length - processed;
		if (processed > betters.length - 1) {
			payoutComplete = true;
			gameContractObject.getHouseAddressOne().transfer(address(this).balance);
			gameContractObject.finishGame();
		}
	}
	
	function resetBucket() public onlyGameContract {
	    assert(gameContractObject.state() == GameContract.GameState.Finishing);
	    uint256 i;
	    for (i = 0; i < betters.length; i++) {
	        delete betAmount[betters[i]];
	        delete hasBet[betters[i]];
	    }
	    delete betters;
	    delete amountWon;
	    delete amountBid;
	    totalBid = 0;
	    payoutComplete = false;
        isWinner = false;
	    gameId = 0;
			referralAmount = 0;
	    settlementType = 0;
	    processed = 0;/* no of payouts processed */
			remaining = 0;/* no of payouts remaining */ 
	    totalBalance = 0;
	}
	
	function drain() public onlyGameContractOrOwner {
		assert(gameContractObject.state() == GameContract.GameState.Deployed || gameContractObject.state() == GameContract.GameState.Finished);
		gameContractObject.getHouseAddressOne().transfer((address(this).balance * 7) / 10);
		gameContractObject.getHouseAddressTwo().transfer(address(this).balance);
		emit StateChanged(true, "Drain Successful");
	}

}

contract GameContract is usingOraclize, Mortal {
	enum GameState {
		Deployed,
		Started,
		RandomRequesting,
		RandomReceived,
		Settled,
		Finishing,
		Finished
	}

	address public owner;
	address public otherSettingOwner;
	uint256 public price = 1e16;
	uint256 public gameId;
	uint public startTime = 0;
	address public houseAddressOne;
	address public houseAddressTwo;	
	address public referralAddress;
	address public recentWinnerContract;
	uint256 public shareOfHouseAddress = 10;
	uint256 public shareOfReferralAddress = 20;
	uint256 public batchSize = 50;
	uint256 public callbackGas = 100000; /* The gas amount required to call oraclize function */
  
    GameContract.GameState public state = GameContract.GameState.Deployed;

	mapping (uint256 => bool) public isGameSettled;
	mapping (uint256 => address) public winningContract;
	mapping (uint256 => uint256) public typeOfWinnerContract;
	mapping (uint256 => uint256) public randomValue;
	mapping (bytes32 => uint256) public oraclizeQueryData;
	mapping (uint256 => bool) public oraclizeValueReceived;
	mapping (uint256 => bool) public settlement;
 	 
	BucketContract public bucketOneContractObject;
	BucketContract public bucketTwoContractObject;

	event StateChanged(bool state, string status);
	event CallbackEvent(uint256 number);

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

	modifier onlyOtherSettingOwner {
		require(msg.sender == otherSettingOwner);
		_;
	}
	
	modifier onlyContractOrOwner {
		require (msg.sender == address(this) || msg.sender == owner);
		_;
	}

	constructor( address _houseAddressOne, address _houseAddressTwo, address _referralAddress, address _otherSettingOwner) public {
      require(_houseAddressOne != address(0) && _houseAddressTwo != address(0) && _referralAddress != address(0) && _otherSettingOwner != address(0));
      owner = msg.sender;
	  houseAddressOne = _houseAddressOne;
      houseAddressTwo = _houseAddressTwo;
      referralAddress = _referralAddress;
      otherSettingOwner = _otherSettingOwner;
      bucketOneContractObject = new BucketContract(address(this));
      bucketTwoContractObject = new BucketContract(address(this));
      emit StateChanged(true, "Contract deployed");
	}

		function kill() public onlyOwner {
			// kill buckets first
			if (address(bucketOneContractObject) != 0) {
				bucketOneContractObject.kill();
			}
			if (address(bucketTwoContractObject) != 0) {
				bucketTwoContractObject.kill();
			}
			super.kill();
		}

	/*House Share will be value between 1-100*/
	function setHouseAddressShare (uint _share) public onlyOtherSettingOwner {
		require(_share >= 1 && _share <= 100);
		require(_share + shareOfReferralAddress <= 100);
		shareOfHouseAddress = _share;
	}

	function setReferralAddressShare (uint _share) public onlyOtherSettingOwner {
		require(_share >= 1 && _share <= 100);
		require(_share + shareOfHouseAddress <= 100);		
		shareOfReferralAddress = _share;
	}

	function getHouseAddressShare() public view returns(uint) {
		return shareOfHouseAddress;
	}

	function getReferralAddressShare() public view returns(uint) {
		return shareOfReferralAddress;
	}

	function setPrice (uint256 _price) public onlyOtherSettingOwner {
		require(_price != 0);
		price = _price;
	}

	function setHouseAddressOne(address _houseAddress) public onlyOtherSettingOwner {
		require(_houseAddress != address(0));
		houseAddressOne = _houseAddress;
	}

	function setHouseAddressTwo(address _houseAddress) public onlyOtherSettingOwner {
		require(_houseAddress != address(0));
		houseAddressTwo = _houseAddress;
	}

	function setReferralAddress(address _referralAddress) public onlyOtherSettingOwner {
		require(_referralAddress != address(0));
		referralAddress = _referralAddress;
	}

	function setCallbackGas(uint256 _value) public onlyOtherSettingOwner {
		require(_value > 0);
		callbackGas = _value;
	}

	function setBatchSize(uint256 _size) public onlyOtherSettingOwner {
		require(_size != 0);
		batchSize = _size;
	}

	function setOwner(address _owner) public onlyOwner {
		require(_owner != address(0));
		owner = _owner;
	}

	function setOtherSettingOwner(address _otherSettingOwner) public onlyOtherSettingOwner {
		require(_otherSettingOwner != address(0));
		otherSettingOwner = _otherSettingOwner;
	}

	function getPrice () public view returns (uint256 _price) {
		return price;
	}

	function getGameId() public view returns (uint256 _gameId) {
		return gameId;
	}
	
	function getHouseAddressOne() public view returns (address _houseAddress) {
		return houseAddressOne;
	}

	function getHouseAddressTwo() public view returns (address _houseAddress) {
		return houseAddressTwo;
	}

	function getReferralAddress() public view returns(address _referralAddress) {
		return referralAddress;
	}

	function getWinnerContractAddress(uint256 _gameId) public view returns(address) {
		return winningContract[_gameId];
	}

	function getWinnerType(uint256 _gameId) public view returns(uint256) {
		return typeOfWinnerContract[_gameId];
	}

	function getBatchSize() public view returns(uint256) {
		return batchSize;
	}

    function beginGame (uint256 _gameId) public payable onlyOwner {
        require(_gameId != 0);
        require(isGameSettled[_gameId] != true);
        assert(state == GameContract.GameState.Deployed || state == GameContract.GameState.Finished);
        gameId = _gameId;
            bucketOneContractObject.setGameId(_gameId);
            bucketTwoContractObject.setGameId(_gameId);
        startTime = block.timestamp; // solium-disable-line
        state = GameContract.GameState.Started;
        emit StateChanged(true, "game started");
    }

	function () public payable {
		emit StateChanged(true, "Ether Received");
	}

	function finalize() public onlyOwner {
		require(oraclizeValueReceived[gameId] == false);
		bytes32 queryId = oraclize_newRandomDSQuery(0, 7, callbackGas);
		oraclizeQueryData[queryId] = gameId;
		state = GameContract.GameState.RandomRequesting;
	}

	function __callback(bytes32 _queryId, string _result) public {
		require(msg.sender == oraclize_cbAddress());
		assert(oraclizeValueReceived[oraclizeQueryData[_queryId]] == false);
		uint256 maxRange = 2**(8*7);
		uint256 randomNumber = uint256(keccak256(abi.encodePacked(_result))) % maxRange;
		randomValue[oraclizeQueryData[_queryId]] = randomNumber;
		oraclizeValueReceived[oraclizeQueryData[_queryId]] = true;
		state = GameContract.GameState.RandomReceived;
		emit CallbackEvent(randomNumber);
	}

	function startSettlement() public onlyOwner {
		require(state == GameContract.GameState.RandomReceived);
		assert(oraclizeValueReceived[gameId]);
		assert(settlement[gameId] == false);
		uint256 randomNumber = randomValue[gameId];
		if (randomNumber % 2 == 0) {
			bucketTwoContractObject.transferToOtherBucketContract(address(bucketOneContractObject));
			recentWinnerContract = address(bucketOneContractObject);
			winningContract[gameId] = address(bucketOneContractObject);
			bucketOneContractObject.setWinner(gameId);
			settlement[gameId] = true;
			state = GameContract.GameState.Settled;
		} else {
			bucketOneContractObject.transferToOtherBucketContract(address(bucketTwoContractObject));
			recentWinnerContract = address(bucketTwoContractObject);
			winningContract[gameId] = address(bucketTwoContractObject);
			bucketTwoContractObject.setWinner(gameId);
			settlement[gameId] = true;
			state = GameContract.GameState.Settled;
		}
	}

	function payout() public onlyOwner {
		require(state == GameContract.GameState.Settled);
		BucketContract(recentWinnerContract).payout();
	}

	function canBet() public view returns (bool) {
      return state == GameContract.GameState.Started;
	}

	function finishGame() public {
		require(msg.sender == winningContract[gameId] || msg.sender == recentWinnerContract);
		isGameSettled[gameId] = true;
		state = GameContract.GameState.Finishing;
		emit StateChanged(true, "game finished");
	}

	function reset() public onlyOwner {
		require(state == GameContract.GameState.Finishing);
		bucketOneContractObject.resetBucket();
		bucketTwoContractObject.resetBucket();
		state = GameContract.GameState.Finished;
		emit StateChanged(true, "game reset");
	}
	
	function drain() public onlyOwner {
		houseAddressOne.transfer((address(this).balance * 7) / 10);
		houseAddressTwo.transfer(address(this).balance);
		emit StateChanged(true, "Drain Successful");
	}
    
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"setCallbackGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"winningContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referralAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"houseAddressOne","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"beginGame","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"oraclizeQueryData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_queryId","type":"bytes32"},{"name":"_result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"otherSettingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"houseAddressTwo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReferralAddress","outputs":[{"name":"_referralAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getReferralAddressShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"getWinnerType","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bucketOneContractObject","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"canBet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_size","type":"uint256"}],"name":"setBatchSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"settlement","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"recentWinnerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressTwo","outputs":[{"name":"_houseAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_houseAddress","type":"address"}],"name":"setHouseAddressTwo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startSettlement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"typeOfWinnerContract","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_share","type":"uint256"}],"name":"setHouseAddressShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPrice","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_gameId","type":"uint256"}],"name":"getWinnerContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callbackGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBatchSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareOfHouseAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_houseAddress","type":"address"}],"name":"setHouseAddressOne","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_share","type":"uint256"}],"name":"setReferralAddressShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referralAddress","type":"address"}],"name":"setReferralAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"randomValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareOfReferralAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGameId","outputs":[{"name":"_gameId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"isGameSettled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bucketTwoContractObject","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHouseAddressOne","outputs":[{"name":"_houseAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reset","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_otherSettingOwner","type":"address"}],"name":"setOtherSettingOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"oraclizeValueReceived","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"batchSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_houseAddressOne","type":"address"},{"name":"_houseAddressTwo","type":"address"},{"name":"_referralAddress","type":"address"},{"name":"_otherSettingOwner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"state","type":"bool"},{"indexed":false,"name":"status","type":"string"}],"name":"StateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"number","type":"uint256"}],"name":"CallbackEvent","type":"event"}]

6080604052662386f26fc100006008556000600a908155600f5560146010556032601155620186a06012556013805460ff191690553480156200004157600080fd5b5060405160808062004bd5833981016040908152815160208301519183015160609093015160058054600160a060020a03191633179055909290600160a060020a038416158015906200009c5750600160a060020a03831615155b8015620000b15750600160a060020a03821615155b8015620000c65750600160a060020a03811615155b1515620000d257600080fd5b6006805433600160a060020a031991821617909155600b80548216600160a060020a0387811691909117909155600c80548316868316179055600d8054831685831617905560078054909216908316179055306200012f6200024a565b600160a060020a03909116815260405190819003602001906000f0801580156200015d573d6000803e3d6000fd5b50601b8054600160a060020a031916600160a060020a039290921691909117905530620001896200024a565b600160a060020a03909116815260405190819003602001906000f080158015620001b7573d6000803e3d6000fd5b50601c8054600160a060020a031916600160a060020a03929092169190911790556040805160018152602081018290526011818301527f436f6e7472616374206465706c6f796564000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353916080908290030190a1505050506200025b565b604051611ad880620030fd83390190565b612e92806200026b6000396000f30060806040526004361061026e5763ffffffff60e060020a60003504166301d09a3c81146102c55780630f82c8c5146102df57806313af40351461031357806315a88d221461033457806319950a4c1461034957806325a7650a1461035e57806327d8026c1461036957806327dc297e146103935780632d37d425146103f15780632e88fd851461040657806331c359fa1461041b57806338bbfa501461043057806340c97617146104cc5780634182fa46146104e157806341c0e1b5146104f65780634bb278f31461050b5780634dd0f157146105205780635242de1d1461053857806355ec671a1461054d578063576f35e31461057657806360ad23911461058e5780636224dc3e146105a657806363bd1d4a146105bb578063662a3b81146105d0578063680b5eba146105e557806377e170391461060657806378e979251461061b5780637b4f17cd146106305780638da5cb5b1461064857806391b7f5ed1461065d57806396283310146106755780639890220b1461068d57806398d5fdca146106a257806399f02ab5146106b75780639fecb69f146106cf578063a035b1fe146106e4578063a10132ad146106f9578063a25f55d41461070e578063a2eee47d14610723578063a31e5e9714610738578063aa45b11e14610759578063b3caba5a14610771578063b7a2de1814610792578063be7e039f146107aa578063c0bd8351146107bf578063c19d93fb146107d4578063c983c01a1461080d578063cd7b662814610825578063d7c81b551461083a578063d811b1001461084f578063d826f88f14610864578063e6f4c4a714610879578063f0f7c40f1461089a578063f4daaba1146108b2575b604080516001815260208101829052600e818301527f457468657220526563656976656400000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1005b3480156102d157600080fd5b506102dd6004356108c7565b005b3480156102eb57600080fd5b506102f76004356108f0565b60408051600160a060020a039092168252519081900360200190f35b34801561031f57600080fd5b506102dd600160a060020a036004351661090b565b34801561034057600080fd5b506102f7610959565b34801561035557600080fd5b506102f7610968565b6102dd600435610977565b34801561037557600080fd5b50610381600435610b5e565b60408051918252519081900360200190f35b34801561039f57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd958335953695604494919390910191908190840183828082843750949750610b709650505050505050565b3480156103fd57600080fd5b506102f7610d10565b34801561041257600080fd5b506102f7610d1f565b34801561042757600080fd5b506102f7610d2e565b34801561043c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd95833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d3e9650505050505050565b3480156104d857600080fd5b50610381610d43565b3480156104ed57600080fd5b50610381610d49565b34801561050257600080fd5b506102dd610d4f565b34801561051757600080fd5b506102dd610e6a565b34801561052c57600080fd5b50610381600435610ede565b34801561054457600080fd5b506102f7610ef0565b34801561055957600080fd5b50610562610eff565b604080519115158252519081900360200190f35b34801561058257600080fd5b506102dd600435610f1a565b34801561059a57600080fd5b50610562600435610f42565b3480156105b257600080fd5b506102f7610f57565b3480156105c757600080fd5b506102dd610f66565b3480156105dc57600080fd5b506102f7611007565b3480156105f157600080fd5b506102dd600160a060020a0360043516611016565b34801561061257600080fd5b506102dd611064565b34801561062757600080fd5b506103816113c2565b34801561063c57600080fd5b506103816004356113c8565b34801561065457600080fd5b506102f76113da565b34801561066957600080fd5b506102dd6004356113e9565b34801561068157600080fd5b506102dd600435611411565b34801561069957600080fd5b506102dd61145d565b3480156106ae57600080fd5b50610381611547565b3480156106c357600080fd5b506102f760043561154d565b3480156106db57600080fd5b506102dd611568565b3480156106f057600080fd5b5061038161162d565b34801561070557600080fd5b50610381611633565b34801561071a57600080fd5b50610381611639565b34801561072f57600080fd5b5061038161163f565b34801561074457600080fd5b506102dd600160a060020a0360043516611645565b34801561076557600080fd5b506102dd600435611693565b34801561077d57600080fd5b506102dd600160a060020a03600435166116df565b34801561079e57600080fd5b5061038160043561172d565b3480156107b657600080fd5b5061038161173f565b3480156107cb57600080fd5b50610381611745565b3480156107e057600080fd5b506107e961174b565b604051808260068111156107f957fe5b60ff16815260200191505060405180910390f35b34801561081957600080fd5b50610562600435611754565b34801561083157600080fd5b506102f7611769565b34801561084657600080fd5b50610381611778565b34801561085b57600080fd5b506102f761177e565b34801561087057600080fd5b506102dd61178d565b34801561088557600080fd5b506102dd600160a060020a03600435166118fc565b3480156108a657600080fd5b5061056260043561194a565b3480156108be57600080fd5b5061038161195f565b600754600160a060020a031633146108de57600080fd5b600081116108eb57600080fd5b601255565b601560205260009081526040902054600160a060020a031681565b600654600160a060020a0316331461092257600080fd5b600160a060020a038116151561093757600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600b54600160a060020a031681565b600654600160a060020a0316331461098e57600080fd5b80151561099a57600080fd5b60008181526014602052604090205460ff161515600114156109bb57600080fd5b600060135460ff1660068111156109ce57fe5b14806109ea5750600660135460ff1660068111156109e857fe5b145b15156109f257fe5b6009819055601b54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a0390921691635926cf139160248082019260009290919082900301818387803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050601c54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a039092169350635926cf13925060248082019260009290919082900301818387803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b505042600a5550506013805460ff191660019081179091556040805191825260208201819052600c828201527f67616d6520737461727465640000000000000000000000000000000000000000606083015251600080516020612e47833981519152916080908290030190a150565b60186020526000908152604090205481565b600080610b7b611965565b600160a060020a03163314610b8f57600080fd5b6000848152601860209081526040808320548352601990915290205460ff1615610bb557fe5b670100000000000000915081836040516020018082805190602001908083835b60208310610bf45780518252601f199092019160209182019101610bd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610c575780518252601f199092019160209182019101610c38565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515610c8d57fe5b600086815260186020908152604080832080548452601783528184209590940694859055925482526019815290829020805460ff19908116600117909155601380549091166003179055815183815291519293507fd73f199d24506c6a66f156765f2434c927383914c10d3de489f010c64086e29a92918290030190a150505050565b600754600160a060020a031681565b600c54600160a060020a031681565b600d54600160a060020a03165b90565b505050565b60105490565b600f5490565b600654600160a060020a03163314610d6657600080fd5b601b54600160a060020a031615610de357601b60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050505b601c54600160a060020a031615610e6057601c60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050505b610e68611b56565b565b600654600090600160a060020a03163314610e8457600080fd5b60095460009081526019602052604090205460ff1615610ea357600080fd5b610eb260006007601254611b77565b6009546000828152601860205260409020556013805491925060029160ff19166001835b021790555050565b60009081526016602052604090205490565b601b54600160a060020a031681565b6000600160135460ff166006811115610f1457fe5b14905090565b600754600160a060020a03163314610f3157600080fd5b801515610f3d57600080fd5b601155565b601a6020526000908152604090205460ff1681565b600e54600160a060020a031681565b600654600160a060020a03163314610f7d57600080fd5b600460135460ff166006811115610f9057fe5b14610f9a57600080fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166363bd1d4a6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b50505050565b600c54600160a060020a031690565b600754600160a060020a0316331461102d57600080fd5b600160a060020a038116151561104257600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600654600090600160a060020a0316331461107e57600080fd5b600360135460ff16600681111561109157fe5b1461109b57600080fd5b60095460009081526019602052604090205460ff1615156110b857fe5b6009546000908152601a602052604090205460ff16156110d457fe5b5060095460009081526017602052604090205460028106151561125857601c54601b54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b5050601b8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b50506009546000908152601a60205260409020805460ff19908116600117909155601380549091166004179055506113bf9050565b601b54601c54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050601c8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50506009546000908152601a602052604090208054600160ff1991821681179092556013805460049550909350169083610ed6565b50565b600a5481565b60166020526000908152604090205481565b600654600160a060020a031681565b600754600160a060020a0316331461140057600080fd5b80151561140c57600080fd5b600855565b600754600160a060020a0316331461142857600080fd5b6001811015801561143a575060648111155b151561144557600080fd5b6010546064908201111561145857600080fd5b600f55565b600654600160a060020a0316331461147457600080fd5b600b54604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f193505050501580156114b4573d6000803e3d6000fd5b50600c54604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156114ef573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c0000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085490565b600090815260156020526040902054600160a060020a031690565b600954600090815260156020526040902054600160a060020a031633148061159a5750600e54600160a060020a031633145b15156115a557600080fd5b60095460009081526014602052604090208054600160ff1991821681179092556013805460059391921690830217905550604080516001815260208101829052600d818301527f67616d652066696e69736865640000000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085481565b60125481565b60115490565b600f5481565b600754600160a060020a0316331461165c57600080fd5b600160a060020a038116151561167157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031633146116aa57600080fd5b600181101580156116bc575060648111155b15156116c757600080fd5b600f54606490820111156116da57600080fd5b601055565b600754600160a060020a031633146116f657600080fd5b600160a060020a038116151561170b57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b60176020526000908152604090205481565b60105481565b60095490565b60135460ff1681565b60146020526000908152604090205460ff1681565b601c54600160a060020a031681565b60095481565b600b54600160a060020a031690565b600654600160a060020a031633146117a457600080fd5b600560135460ff1660068111156117b757fe5b146117c157600080fd5b601b60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b50505050601c60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b50506013805460ff191660061790555050604080516001815260208101829052600a818301527f67616d652072657365740000000000000000000000000000000000000000000060608201529051600080516020612e47833981519152916080908290030190a1565b600754600160a060020a0316331461191357600080fd5b600160a060020a038116151561192857600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60196020526000908152604090205460ff1681565b60115481565b60008054600160a060020a03161580611990575060005461198e90600160a060020a0316611ebf565b155b156119a15761199f6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050506040513d6020811015611a1d57600080fd5b5051600154600160a060020a03908116911614611ad2576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5051905090565b600554600160a060020a0316331415610e6857600554600160a060020a0316ff5b600060608060606000611b88612d86565b60008089118015611b9a575060208911155b1515611ba557600080fd5b60408051600180825281830190925290602080830190803883390190505095508860f860020a02866000815181101515611bdb57fe5b906020010190600160f860020a031916908160001a90535060408051602080825281830190925290808201610400803883395050604080516020808252818301909252929750905080820161040080388339019050509350611c3b611ed3565b925060208552424118600143034018602086015260208452826020850152606060405190810160405280868152602001878152602001858152509150611cb88a6040805190810160405280600681526020017f72616e646f6d0000000000000000000000000000000000000000000000000000815250848b612093565b9050611eb28178010000000000000000000000000000000000000000000000008c028460016020020151600286600060200201516040518082805190602001908083835b60208310611d1b5780518252601f199092019160209182019101611cfc565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015611d5c573d6000803e3d6000fd5b5050506040513d6020811015611d7157600080fd5b5051604080880151905177ffffffffffffffffffffffffffffffffffffffffffffffff19851660208281019182528551919260280191908601908083835b60208310611dce5780518252601f199092019160209182019101611daf565b51815160209384036101000a60001901801990921691161790529201858152845190830192850191508083835b60208310611e1a5780518252601f199092019160209182019101611dfb565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206122a2565b9998505050505050505050565b3b90565b6000611ecd6122b4565b92915050565b60008054600160a060020a03161580611efe5750600054611efc90600160a060020a0316611ebf565b155b15611f0f57611f0d6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050506040513d6020811015611f8b57600080fd5b5051600154600160a060020a03908116911614612040576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505050506040513d602081101561201e57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663abaa5f3e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b60008054606090600160a060020a031615806120c157506000546120bf90600160a060020a0316611ebf565b155b156120d2576120d06000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212457600080fd5b505af1158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051600154600160a060020a03908116911614612203576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d60208110156121e157600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b6040805160038082526080820190925290816020015b606081526020019060019003908161221957505084518151919250908290600090811061224257fe5b60209081029091010152836001602002015181600181518110151561226357fe5b6020908102919091010152604084015181518290600290811061228257fe5b60209081029091010152612298868683866125dc565b9695505050505050565b60009182526003602052604090912055565b6000806122d4731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611ebf565b11156123455760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015261233d906129ee565b506001610d3b565b600061236473c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611ebf565b11156123cd5760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015261233d906129ee565b60006123ec73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611ebf565b11156124555760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015261233d906129ee565b600061247473146500cfd35b22e4a392fe0adc06de1a1368ed48611ebf565b11156124dd5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015261233d906129ee565b60006124fc736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611ebf565b1115612530575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610d3b565b600061254f7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611ebf565b1115612583575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610d3b565b60006125a27351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611ebf565b11156125d6575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610d3b565b50600090565b600080548190606090600160a060020a0316158061260c575060005461260a90600160a060020a0316611ebf565b155b1561261d5761261b6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561266f57600080fd5b505af1158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051600154600160a060020a0390811691161461274e576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600154604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810187905260048101918252885160448201528851600160a060020a0390931692632ef3accc928a928992829160640190602086019080838360005b838110156127ce5781810151838201526020016127b6565b50505050905090810190601f1680156127fb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d602081101561284557600080fd5b50519150670de0b6b3a76400003a85020182111561286657600092506129e4565b61286f85612a05565b6001546040517fc55c1cb6000000000000000000000000000000000000000000000000000000008152600481018a8152606482018890526080602483019081528a5160848401528a51949550600160a060020a039093169363c55c1cb69387938d938d9389938d939091604482019160a40190602088019080838360005b838110156129055781810151838201526020016128ed565b50505050905090810190601f1680156129325780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561296557818101518382015260200161294d565b50505050905090810190601f1680156129925780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b50505050506040513d60208110156129df57600080fd5b505192505b5050949350505050565b8051612a01906002906020840190612dae565b5050565b606060008060606000806000606060008060008b5199506000985089604051908082528060200260200182016040528015612a5457816020015b6060815260200190600190039081612a3f5790505b509750600096505b89871015612aed578b87815181101515612a7257fe5b906020019060200201518888815181101515612a8a57fe5b90602001906020020181905250601760018989815181101515612aa957fe5b906020019060200201515103811515612abe57fe5b048888815181101515612acd57fe5b906020019060200201515101600301890198508680600101975050612a5c565b6040805160018b01808252601f1960209c8d01168201909b019091526000965060808b019550898015612b2a578160200160208202803883390190505b5093505b6001861015612b815760f860020a85028660018110612b4957fe5b1a60f860020a028487815181101515612b5e57fe5b906020010190600160f860020a031916908160001a905350600190950194612b2e565b600096505b89871015612d765783517f5f0000000000000000000000000000000000000000000000000000000000000090859088908110612bbe57fe5b906020010190600160f860020a031916908160001a905350600190950194600092505b8787815181101515612bef57fe5b9060200190602002015151831015612d1f57601783061515612cb1576018838989815181101515612c1c57fe5b9060200190602002015151031015612c4e57828888815181101515612c3d57fe5b906020019060200201515103612c51565b60175b60400191508590505b80860360011115612cb15760f860020a820281870360018110612c7957fe5b1a60f860020a028487815181101515612c8e57fe5b906020010190600160f860020a031916908160001a905350600190950194612c5a565b8787815181101515612cbf57fe5b9060200190602002015183815181101515612cd657fe5b90602001015160f860020a900460f860020a028487815181101515612cf757fe5b906020010190600160f860020a031916908160001a9053506001958601959290920191612be1565b83517fff0000000000000000000000000000000000000000000000000000000000000090859088908110612d4f57fe5b906020010190600160f860020a031916908160001a90535060019687019690950194612b86565b50919a9950505050505050505050565b6060604051908101604052806003905b6060815260200190600190039081612d965790505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612def57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1c578251825591602001919060010190612e01565b50612e28929150612e2c565b5090565b610d3b91905b80821115612e285760008155600101612e325600a5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353a165627a7a72305820509d6961d46ffd79919060fd15303ee55516cb4f2680e8a61b26db785f6ef2590029608060405234801561001057600080fd5b50604051602080611ad883398101604081815291516000805433600160a060020a03199182168117909255600680548216909217909155600f8054909116600160a060020a03831617905560018252602082018390526018838301527f6275636b657420636f6e7472616374206465706c6f7965640000000000000000606083015291517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353916080908290030190a150611a09806100cf6000396000f3006080604052600436106101505763ffffffff60e060020a6000350416630df7160281146101b957806311610c25146101d3578063136f1016146101db5780631a9b0b7c14610210578063262007c0146102255780632ce5c2841461028a5780632d180328146102b15780632faebb20146102c957806334aa7e00146102de57806341c0e1b5146102ff5780635005537e1461031457806355234ec0146103295780635926cf131461033e57806363bd1d4a146103565780636bd68a8f1461036b5780636dad2a9114610380578063735ea6e21461039557806375024ae5146103ad578063883cf630146103c25780638a9e8671146103d75780638da5cb5b146103ec5780639890220b1461041d5780639fda5d6214610432578063ad7a672f1461044a578063bbe7a75b1461045f578063d7c81b5514610474578063d811b7ca14610489578063eb01d83b146104aa575b604080516001815260208101829052600e818301527f4574686572205265636569766564000000000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1005b3480156101c557600080fd5b506101d16004356104bf565b005b6101d1610a91565b3480156101e757600080fd5b506101fc600160a060020a0360043516610d0f565b604080519115158252519081900360200190f35b34801561021c57600080fd5b506101fc610d24565b34801561023157600080fd5b5061023a610d32565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561027657818101518382015260200161025e565b505050509050019250505060405180910390f35b34801561029657600080fd5b5061029f610d95565b60408051918252519081900360200190f35b3480156102bd57600080fd5b5061029f600435610d9b565b3480156102d557600080fd5b5061029f610dba565b3480156102ea57600080fd5b5061029f600160a060020a0360043516610dc0565b34801561030b57600080fd5b506101d1610dd2565b34801561032057600080fd5b506101fc610df5565b34801561033557600080fd5b5061029f610dfe565b34801561034a57600080fd5b506101d1600435610e04565b34801561036257600080fd5b506101d1610e2a565b34801561037757600080fd5b5061029f611374565b34801561038c57600080fd5b5061023a61137a565b3480156103a157600080fd5b5061029f6004356113d1565b3480156103b957600080fd5b5061029f6113df565b3480156103ce57600080fd5b506101d16113e5565b3480156103e357600080fd5b5061029f61156b565b3480156103f857600080fd5b50610401611571565b60408051600160a060020a039092168252519081900360200190f35b34801561042957600080fd5b506101d1611580565b34801561043e57600080fd5b5061040160043561189d565b34801561045657600080fd5b5061029f6118c5565b34801561046b57600080fd5b506104016118cb565b34801561048057600080fd5b5061029f6118da565b34801561049557600080fd5b506101d1600160a060020a03600435166118e0565b3480156104b657600080fd5b5061023a611948565b600f54600090819081908190600160a060020a03163314806104eb5750600654600160a060020a031633145b15156104f657600080fd5b600f60009054906101000a9004600160a060020a0316600160a060020a031663d7c81b556040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561054957600080fd5b505af115801561055d573d6000803e3d6000fd5b505050506040513d602081101561057357600080fd5b5051851461058057600080fd5b600f546040805160e060020a63c19d93fb0281529051600392600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d60208110156105f457600080fd5b5051600681111561060157fe5b1461060857fe5b600854610100900460ff161561061a57fe5b6008805461ff001916610100179055600f54604080517fd811b1000000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163d811b100916004808201926020929091908290030181600087803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050506040513d60208110156106b357600080fd5b5051600f54604080517f662a3b810000000000000000000000000000000000000000000000000000000081529051929650600160a060020a039091169163662a3b81916004808201926020929091908290030181600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050506040513d602081101561074257600080fd5b5051600f54604080517f31c359fa0000000000000000000000000000000000000000000000000000000081529051929550600160a060020a03909116916331c359fa916004808201926020929091908290030181600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b505050506040513d60208110156107d157600080fd5b5051600754909250151561085d57604051600160a060020a03851690606430316046020480156108fc02916000818181858888f1935050505015801561081b573d6000803e3d6000fd5b50604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015610852573d6000803e3d6000fd5b506000600b55610a7f565b60075430311415610872576001600b55610a7f565b600754303103600e55600f54604080517f4182fa460000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691634182fa46916004808201926020929091908290030181600087803b1580156108db57600080fd5b505af11580156108ef573d6000803e3d6000fd5b505050506040513d602081101561090557600080fd5b5051600e54909150600160a060020a038516906108fc90612710908402604602049081150290604051600060405180830381858888f19350505050158015610951573d6000803e3d6000fd5b5082600160a060020a03166108fc61271083600e5402601e0281151561097357fe5b049081150290604051600060405180830381858888f1935050505015801561099f573d6000803e3d6000fd5b50600f54604080517f40c976170000000000000000000000000000000000000000000000000000000081529051606492600160a060020a0316916340c976179160048083019260209291908290030181600087803b158015610a0057600080fd5b505af1158015610a14573d6000803e3d6000fd5b505050506040513d6020811015610a2a57600080fd5b5051600e5402811515610a3957fe5b04600a819055604051600160a060020a0384169180156108fc02916000818181858888f19350505050158015610a73573d6000803e3d6000fd5b503031600e556002600b555b50506000600c555050600354600d5550565b600f60009054906101000a9004600160a060020a0316600160a060020a03166398d5fdca6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ae457600080fd5b505af1158015610af8573d6000803e3d6000fd5b505050506040513d6020811015610b0e57600080fd5b5051341015610b7e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f546f6f20736d616c6c2062657400000000000000000000000000000000000000604482015290519081900360640190fd5b600f60009054906101000a9004600160a060020a0316600160a060020a03166355ec671a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505050506040513d6020811015610bfb57600080fd5b50511515610c0557fe5b3360009081526002602052604090205460ff161515610c86576003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556000908152600260205260409020805460ff191690911790555b3360009081526001602081815260409283902080543490810190915560078054909101905582519182528101829052600d818301527f426574207375626d697474656400000000000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1565b60026020526000908152604090205460ff1681565b600854610100900460ff1681565b60606003805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610d6c575b505050505090505b90565b600c5481565b6005805482908110610da957fe5b600091825260209091200154905081565b60035490565b60016020526000908152604090205481565b600054600160a060020a0316331415610df357600054600160a060020a0316ff5b565b60085460ff1681565b600d5481565b600f54600160a060020a03163314610e1b57600080fd5b60095415610e2557fe5b600955565b600f54600090819081908190819081908190600160a060020a03163314610e5057600080fd5b60085460ff1615610e5d57fe5b600854610100900460ff161515610e7057fe5b600f60009054906101000a9004600160a060020a0316600160a060020a031663a25f55d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505050506040513d6020811015610eed57600080fd5b5051600c5460035491985090038710610f0657600d5496505b86600c54019450600b5460001415610f8857600f60009054906101000a9004600160a060020a0316600160a060020a0316639fecb69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b5050505061136b565b600b546001141561109a57600c5495505b8486108015610fa9575060035486105b15611095576003805487908110610fbc57fe5b6000918252602080832090910154600160a060020a0316808352600190915260408083205490519196509450859185156108fc02918691818181858888f19350505050158015611010573d6000803e3d6000fd5b5060408051600160a060020a03861681526020810185905281517fdd98c2e0f63fdbf67a6103620ad6f0ff8ece02b505f42dfd9933c03bcce1389d929181900390910190a160048054600181810183556000929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018490559590950194610f99565b611215565b600b546002141561121557600c5495505b84861080156110bb575060035486105b156112155760038054879081106110ce57fe5b6000918252602080832090910154600754600e54600160a060020a0390921680855260019093526040909320549194500281151561110857fe5b04905081600160a060020a03166108fc829081150290604051600060405180830381858888f19350505050158015611144573d6000803e3d6000fd5b5060408051600160a060020a03841681526020810183905281517fdd98c2e0f63fdbf67a6103620ad6f0ff8ece02b505f42dfd9933c03bcce1389d929181900390910190a1600160a060020a038216600090815260016020819052604082208054600480548085019091559085037f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101555460058054808401825593527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09092019190915595909501946110ab565b600c869055600354868103600d556000190186111561136b576008805460ff19166001179055600f54604080517fd811b1000000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163d811b100916004808201926020929091908290030181600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b505050506040513d60208110156112c557600080fd5b5051604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156112fe573d6000803e3d6000fd5b50600f60009054906101000a9004600160a060020a0316600160a060020a0316639fecb69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050505b50505050505050565b600a5481565b60606004805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020905b8154815260200190600101908083116113b4575050505050905090565b6004805482908110610da957fe5b600b5481565b600f54600090600160a060020a031633146113ff57600080fd5b600f546040805160e060020a63c19d93fb0281529051600592600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b15801561144957600080fd5b505af115801561145d573d6000803e3d6000fd5b505050506040513d602081101561147357600080fd5b5051600681111561148057fe5b1461148757fe5b5060005b60035481101561151657600160006003838154811015156114a857fe5b6000918252602080832090910154600160a060020a031683528201929092526040018120819055600380546002929190849081106114e257fe5b6000918252602080832090910154600160a060020a031683528201929092526040019020805460ff1916905560010161148b565b6115226003600061199e565b61152e6004600061199e565b61153a6005600061199e565b50600060078190556008805461ffff191690556009819055600a819055600b819055600c819055600d819055600e55565b60075481565b600654600160a060020a031681565b600f54600160a060020a03163314806115a35750600654600160a060020a031633145b15156115ae57600080fd5b600f546040805160e060020a63c19d93fb0281529051600092600160a060020a03169163c19d93fb91600480830192602092919082900301818787803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050506040513d602081101561162157600080fd5b5051600681111561162e57fe5b14806116b85750600f546040805160e060020a63c19d93fb0281529051600692600160a060020a03169163c19d93fb9160048083019260209291908290030181600087803b15801561167f57600080fd5b505af1158015611693573d6000803e3d6000fd5b505050506040513d60208110156116a957600080fd5b505160068111156116b657fe5b145b15156116c057fe5b600f60009054906101000a9004600160a060020a0316600160a060020a031663d811b1006040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561171357600080fd5b505af1158015611727573d6000803e3d6000fd5b505050506040513d602081101561173d57600080fd5b5051604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f1935050505015801561177c573d6000803e3d6000fd5b50600f60009054906101000a9004600160a060020a0316600160a060020a031663662a3b816040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b505050506040513d60208110156117fa57600080fd5b5051604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015611833573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c00000000000000000000000000000000606082015290517fa5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a353539181900360800190a1565b60038054829081106118ab57fe5b600091825260209091200154600160a060020a0316905081565b600e5481565b600f54600160a060020a031681565b60095481565b600f54600160a060020a03163314806119035750600654600160a060020a031633145b151561190e57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015611944573d6000803e3d6000fd5b5050565b60606005805480602002602001604051908101604052809291908181526020018280548015610d8a57602002820191906000526020600020908154815260200190600101908083116113b4575050505050905090565b50805460008255906000526020600020908101906119bc91906119bf565b50565b610d9291905b808211156119d957600081556001016119c5565b50905600a165627a7a72305820442ed2b459e10c6f07d76c20547225e07da966621a64ecabda83e7af9168dcd8002900000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef440000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf

Deployed Bytecode

0x60806040526004361061026e5763ffffffff60e060020a60003504166301d09a3c81146102c55780630f82c8c5146102df57806313af40351461031357806315a88d221461033457806319950a4c1461034957806325a7650a1461035e57806327d8026c1461036957806327dc297e146103935780632d37d425146103f15780632e88fd851461040657806331c359fa1461041b57806338bbfa501461043057806340c97617146104cc5780634182fa46146104e157806341c0e1b5146104f65780634bb278f31461050b5780634dd0f157146105205780635242de1d1461053857806355ec671a1461054d578063576f35e31461057657806360ad23911461058e5780636224dc3e146105a657806363bd1d4a146105bb578063662a3b81146105d0578063680b5eba146105e557806377e170391461060657806378e979251461061b5780637b4f17cd146106305780638da5cb5b1461064857806391b7f5ed1461065d57806396283310146106755780639890220b1461068d57806398d5fdca146106a257806399f02ab5146106b75780639fecb69f146106cf578063a035b1fe146106e4578063a10132ad146106f9578063a25f55d41461070e578063a2eee47d14610723578063a31e5e9714610738578063aa45b11e14610759578063b3caba5a14610771578063b7a2de1814610792578063be7e039f146107aa578063c0bd8351146107bf578063c19d93fb146107d4578063c983c01a1461080d578063cd7b662814610825578063d7c81b551461083a578063d811b1001461084f578063d826f88f14610864578063e6f4c4a714610879578063f0f7c40f1461089a578063f4daaba1146108b2575b604080516001815260208101829052600e818301527f457468657220526563656976656400000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1005b3480156102d157600080fd5b506102dd6004356108c7565b005b3480156102eb57600080fd5b506102f76004356108f0565b60408051600160a060020a039092168252519081900360200190f35b34801561031f57600080fd5b506102dd600160a060020a036004351661090b565b34801561034057600080fd5b506102f7610959565b34801561035557600080fd5b506102f7610968565b6102dd600435610977565b34801561037557600080fd5b50610381600435610b5e565b60408051918252519081900360200190f35b34801561039f57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd958335953695604494919390910191908190840183828082843750949750610b709650505050505050565b3480156103fd57600080fd5b506102f7610d10565b34801561041257600080fd5b506102f7610d1f565b34801561042757600080fd5b506102f7610d2e565b34801561043c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102dd95833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d3e9650505050505050565b3480156104d857600080fd5b50610381610d43565b3480156104ed57600080fd5b50610381610d49565b34801561050257600080fd5b506102dd610d4f565b34801561051757600080fd5b506102dd610e6a565b34801561052c57600080fd5b50610381600435610ede565b34801561054457600080fd5b506102f7610ef0565b34801561055957600080fd5b50610562610eff565b604080519115158252519081900360200190f35b34801561058257600080fd5b506102dd600435610f1a565b34801561059a57600080fd5b50610562600435610f42565b3480156105b257600080fd5b506102f7610f57565b3480156105c757600080fd5b506102dd610f66565b3480156105dc57600080fd5b506102f7611007565b3480156105f157600080fd5b506102dd600160a060020a0360043516611016565b34801561061257600080fd5b506102dd611064565b34801561062757600080fd5b506103816113c2565b34801561063c57600080fd5b506103816004356113c8565b34801561065457600080fd5b506102f76113da565b34801561066957600080fd5b506102dd6004356113e9565b34801561068157600080fd5b506102dd600435611411565b34801561069957600080fd5b506102dd61145d565b3480156106ae57600080fd5b50610381611547565b3480156106c357600080fd5b506102f760043561154d565b3480156106db57600080fd5b506102dd611568565b3480156106f057600080fd5b5061038161162d565b34801561070557600080fd5b50610381611633565b34801561071a57600080fd5b50610381611639565b34801561072f57600080fd5b5061038161163f565b34801561074457600080fd5b506102dd600160a060020a0360043516611645565b34801561076557600080fd5b506102dd600435611693565b34801561077d57600080fd5b506102dd600160a060020a03600435166116df565b34801561079e57600080fd5b5061038160043561172d565b3480156107b657600080fd5b5061038161173f565b3480156107cb57600080fd5b50610381611745565b3480156107e057600080fd5b506107e961174b565b604051808260068111156107f957fe5b60ff16815260200191505060405180910390f35b34801561081957600080fd5b50610562600435611754565b34801561083157600080fd5b506102f7611769565b34801561084657600080fd5b50610381611778565b34801561085b57600080fd5b506102f761177e565b34801561087057600080fd5b506102dd61178d565b34801561088557600080fd5b506102dd600160a060020a03600435166118fc565b3480156108a657600080fd5b5061056260043561194a565b3480156108be57600080fd5b5061038161195f565b600754600160a060020a031633146108de57600080fd5b600081116108eb57600080fd5b601255565b601560205260009081526040902054600160a060020a031681565b600654600160a060020a0316331461092257600080fd5b600160a060020a038116151561093757600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600b54600160a060020a031681565b600654600160a060020a0316331461098e57600080fd5b80151561099a57600080fd5b60008181526014602052604090205460ff161515600114156109bb57600080fd5b600060135460ff1660068111156109ce57fe5b14806109ea5750600660135460ff1660068111156109e857fe5b145b15156109f257fe5b6009819055601b54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a0390921691635926cf139160248082019260009290919082900301818387803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050601c54604080517f5926cf13000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a039092169350635926cf13925060248082019260009290919082900301818387803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b505042600a5550506013805460ff191660019081179091556040805191825260208201819052600c828201527f67616d6520737461727465640000000000000000000000000000000000000000606083015251600080516020612e47833981519152916080908290030190a150565b60186020526000908152604090205481565b600080610b7b611965565b600160a060020a03163314610b8f57600080fd5b6000848152601860209081526040808320548352601990915290205460ff1615610bb557fe5b670100000000000000915081836040516020018082805190602001908083835b60208310610bf45780518252601f199092019160209182019101610bd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610c575780518252601f199092019160209182019101610c38565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515610c8d57fe5b600086815260186020908152604080832080548452601783528184209590940694859055925482526019815290829020805460ff19908116600117909155601380549091166003179055815183815291519293507fd73f199d24506c6a66f156765f2434c927383914c10d3de489f010c64086e29a92918290030190a150505050565b600754600160a060020a031681565b600c54600160a060020a031681565b600d54600160a060020a03165b90565b505050565b60105490565b600f5490565b600654600160a060020a03163314610d6657600080fd5b601b54600160a060020a031615610de357601b60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610dca57600080fd5b505af1158015610dde573d6000803e3d6000fd5b505050505b601c54600160a060020a031615610e6057601c60009054906101000a9004600160a060020a0316600160a060020a03166341c0e1b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050505b610e68611b56565b565b600654600090600160a060020a03163314610e8457600080fd5b60095460009081526019602052604090205460ff1615610ea357600080fd5b610eb260006007601254611b77565b6009546000828152601860205260409020556013805491925060029160ff19166001835b021790555050565b60009081526016602052604090205490565b601b54600160a060020a031681565b6000600160135460ff166006811115610f1457fe5b14905090565b600754600160a060020a03163314610f3157600080fd5b801515610f3d57600080fd5b601155565b601a6020526000908152604090205460ff1681565b600e54600160a060020a031681565b600654600160a060020a03163314610f7d57600080fd5b600460135460ff166006811115610f9057fe5b14610f9a57600080fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166363bd1d4a6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b50505050565b600c54600160a060020a031690565b600754600160a060020a0316331461102d57600080fd5b600160a060020a038116151561104257600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600654600090600160a060020a0316331461107e57600080fd5b600360135460ff16600681111561109157fe5b1461109b57600080fd5b60095460009081526019602052604090205460ff1615156110b857fe5b6009546000908152601a602052604090205460ff16156110d457fe5b5060095460009081526017602052604090205460028106151561125857601c54601b54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b5050601b8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561120f57600080fd5b505af1158015611223573d6000803e3d6000fd5b50506009546000908152601a60205260409020805460ff19908116600117909155601380549091166004179055506113bf9050565b601b54601c54604080517fd811b7ca000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163d811b7ca91602480830192600092919082900301818387803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050601c8054600e8054600160a060020a03928316600160a060020a031991821681179092556009805460009081526015602052604080822080549094169094179092559354935482517f0df7160200000000000000000000000000000000000000000000000000000000815260048101919091529151939092169450630df7160293506024808201939182900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50506009546000908152601a602052604090208054600160ff1991821681179092556013805460049550909350169083610ed6565b50565b600a5481565b60166020526000908152604090205481565b600654600160a060020a031681565b600754600160a060020a0316331461140057600080fd5b80151561140c57600080fd5b600855565b600754600160a060020a0316331461142857600080fd5b6001811015801561143a575060648111155b151561144557600080fd5b6010546064908201111561145857600080fd5b600f55565b600654600160a060020a0316331461147457600080fd5b600b54604051600160a060020a0390911690600a30316007020480156108fc02916000818181858888f193505050501580156114b4573d6000803e3d6000fd5b50600c54604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156114ef573d6000803e3d6000fd5b506040805160018152602081018290526010818301527f447261696e205375636365737366756c0000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085490565b600090815260156020526040902054600160a060020a031690565b600954600090815260156020526040902054600160a060020a031633148061159a5750600e54600160a060020a031633145b15156115a557600080fd5b60095460009081526014602052604090208054600160ff1991821681179092556013805460059391921690830217905550604080516001815260208101829052600d818301527f67616d652066696e69736865640000000000000000000000000000000000000060608201529051600080516020612e478339815191529181900360800190a1565b60085481565b60125481565b60115490565b600f5481565b600754600160a060020a0316331461165c57600080fd5b600160a060020a038116151561167157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031633146116aa57600080fd5b600181101580156116bc575060648111155b15156116c757600080fd5b600f54606490820111156116da57600080fd5b601055565b600754600160a060020a031633146116f657600080fd5b600160a060020a038116151561170b57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b60176020526000908152604090205481565b60105481565b60095490565b60135460ff1681565b60146020526000908152604090205460ff1681565b601c54600160a060020a031681565b60095481565b600b54600160a060020a031690565b600654600160a060020a031633146117a457600080fd5b600560135460ff1660068111156117b757fe5b146117c157600080fd5b601b60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b50505050601c60009054906101000a9004600160a060020a0316600160a060020a031663883cf6306040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b50506013805460ff191660061790555050604080516001815260208101829052600a818301527f67616d652072657365740000000000000000000000000000000000000000000060608201529051600080516020612e47833981519152916080908290030190a1565b600754600160a060020a0316331461191357600080fd5b600160a060020a038116151561192857600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60196020526000908152604090205460ff1681565b60115481565b60008054600160a060020a03161580611990575060005461198e90600160a060020a0316611ebf565b155b156119a15761199f6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050506040513d6020811015611a1d57600080fd5b5051600154600160a060020a03908116911614611ad2576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b5051905090565b600554600160a060020a0316331415610e6857600554600160a060020a0316ff5b600060608060606000611b88612d86565b60008089118015611b9a575060208911155b1515611ba557600080fd5b60408051600180825281830190925290602080830190803883390190505095508860f860020a02866000815181101515611bdb57fe5b906020010190600160f860020a031916908160001a90535060408051602080825281830190925290808201610400803883395050604080516020808252818301909252929750905080820161040080388339019050509350611c3b611ed3565b925060208552424118600143034018602086015260208452826020850152606060405190810160405280868152602001878152602001858152509150611cb88a6040805190810160405280600681526020017f72616e646f6d0000000000000000000000000000000000000000000000000000815250848b612093565b9050611eb28178010000000000000000000000000000000000000000000000008c028460016020020151600286600060200201516040518082805190602001908083835b60208310611d1b5780518252601f199092019160209182019101611cfc565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015611d5c573d6000803e3d6000fd5b5050506040513d6020811015611d7157600080fd5b5051604080880151905177ffffffffffffffffffffffffffffffffffffffffffffffff19851660208281019182528551919260280191908601908083835b60208310611dce5780518252601f199092019160209182019101611daf565b51815160209384036101000a60001901801990921691161790529201858152845190830192850191508083835b60208310611e1a5780518252601f199092019160209182019101611dfb565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310611e805780518252601f199092019160209182019101611e61565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206122a2565b9998505050505050505050565b3b90565b6000611ecd6122b4565b92915050565b60008054600160a060020a03161580611efe5750600054611efc90600160a060020a0316611ebf565b155b15611f0f57611f0d6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050506040513d6020811015611f8b57600080fd5b5051600154600160a060020a03908116911614612040576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505050506040513d602081101561201e57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600160009054906101000a9004600160a060020a0316600160a060020a031663abaa5f3e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2557600080fd5b60008054606090600160a060020a031615806120c157506000546120bf90600160a060020a0316611ebf565b155b156120d2576120d06000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212457600080fd5b505af1158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051600154600160a060020a03908116911614612203576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d60208110156121e157600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b6040805160038082526080820190925290816020015b606081526020019060019003908161221957505084518151919250908290600090811061224257fe5b60209081029091010152836001602002015181600181518110151561226357fe5b6020908102919091010152604084015181518290600290811061228257fe5b60209081029091010152612298868683866125dc565b9695505050505050565b60009182526003602052604090912055565b6000806122d4731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611ebf565b11156123455760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015261233d906129ee565b506001610d3b565b600061236473c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611ebf565b11156123cd5760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015261233d906129ee565b60006123ec73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611ebf565b11156124555760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015261233d906129ee565b600061247473146500cfd35b22e4a392fe0adc06de1a1368ed48611ebf565b11156124dd5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015261233d906129ee565b60006124fc736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611ebf565b1115612530575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610d3b565b600061254f7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611ebf565b1115612583575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610d3b565b60006125a27351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611ebf565b11156125d6575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610d3b565b50600090565b600080548190606090600160a060020a0316158061260c575060005461260a90600160a060020a0316611ebf565b155b1561261d5761261b6000611ec3565b505b6000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561266f57600080fd5b505af1158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051600154600160a060020a0390811691161461274e576000809054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505160018054600160a060020a031916600160a060020a039092169190911790555b600154604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810187905260048101918252885160448201528851600160a060020a0390931692632ef3accc928a928992829160640190602086019080838360005b838110156127ce5781810151838201526020016127b6565b50505050905090810190601f1680156127fb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d602081101561284557600080fd5b50519150670de0b6b3a76400003a85020182111561286657600092506129e4565b61286f85612a05565b6001546040517fc55c1cb6000000000000000000000000000000000000000000000000000000008152600481018a8152606482018890526080602483019081528a5160848401528a51949550600160a060020a039093169363c55c1cb69387938d938d9389938d939091604482019160a40190602088019080838360005b838110156129055781810151838201526020016128ed565b50505050905090810190601f1680156129325780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561296557818101518382015260200161294d565b50505050905090810190601f1680156129925780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b50505050506040513d60208110156129df57600080fd5b505192505b5050949350505050565b8051612a01906002906020840190612dae565b5050565b606060008060606000806000606060008060008b5199506000985089604051908082528060200260200182016040528015612a5457816020015b6060815260200190600190039081612a3f5790505b509750600096505b89871015612aed578b87815181101515612a7257fe5b906020019060200201518888815181101515612a8a57fe5b90602001906020020181905250601760018989815181101515612aa957fe5b906020019060200201515103811515612abe57fe5b048888815181101515612acd57fe5b906020019060200201515101600301890198508680600101975050612a5c565b6040805160018b01808252601f1960209c8d01168201909b019091526000965060808b019550898015612b2a578160200160208202803883390190505b5093505b6001861015612b815760f860020a85028660018110612b4957fe5b1a60f860020a028487815181101515612b5e57fe5b906020010190600160f860020a031916908160001a905350600190950194612b2e565b600096505b89871015612d765783517f5f0000000000000000000000000000000000000000000000000000000000000090859088908110612bbe57fe5b906020010190600160f860020a031916908160001a905350600190950194600092505b8787815181101515612bef57fe5b9060200190602002015151831015612d1f57601783061515612cb1576018838989815181101515612c1c57fe5b9060200190602002015151031015612c4e57828888815181101515612c3d57fe5b906020019060200201515103612c51565b60175b60400191508590505b80860360011115612cb15760f860020a820281870360018110612c7957fe5b1a60f860020a028487815181101515612c8e57fe5b906020010190600160f860020a031916908160001a905350600190950194612c5a565b8787815181101515612cbf57fe5b9060200190602002015183815181101515612cd657fe5b90602001015160f860020a900460f860020a028487815181101515612cf757fe5b906020010190600160f860020a031916908160001a9053506001958601959290920191612be1565b83517fff0000000000000000000000000000000000000000000000000000000000000090859088908110612d4f57fe5b906020010190600160f860020a031916908160001a90535060019687019690950194612b86565b50919a9950505050505050505050565b6060604051908101604052806003905b6060815260200190600190039081612d965790505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612def57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1c578251825591602001919060010190612e01565b50612e28929150612e2c565b5090565b610d3b91905b80821115612e285760008155600101612e325600a5804521bb561240f530b4f1793374949f8242f09a60ac677a776cf882a35353a165627a7a72305820509d6961d46ffd79919060fd15303ee55516cb4f2680e8a61b26db785f6ef2590029

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

00000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef440000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf

-----Decoded View---------------
Arg [0] : _houseAddressOne (address): 0x10C494b0aa052D82B1910449Ab2D3e88F8C89e8f
Arg [1] : _houseAddressTwo (address): 0x817178A29c5fc05584b0d039FdF000048f1bF125
Arg [2] : _referralAddress (address): 0xB4cE4486898370CF70Ee4788b62d296Bc764ef44
Arg [3] : _otherSettingOwner (address): 0x5A757B51E8923cfA6849eB8d6217078886fcf7CF

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000010c494b0aa052d82b1910449ab2d3e88f8c89e8f
Arg [1] : 000000000000000000000000817178a29c5fc05584b0d039fdf000048f1bf125
Arg [2] : 000000000000000000000000b4ce4486898370cf70ee4788b62d296bc764ef44
Arg [3] : 0000000000000000000000005a757b51e8923cfa6849eb8d6217078886fcf7cf


Swarm Source

bzzr://442ed2b459e10c6f07d76c20547225e07da966621a64ecabda83e7af9168dcd8

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.