Contract 0xb509A146243bE41759F5Ea1fdF874c1897D0AA44

 
Txn Hash
Method
Block
From
To
Value
0x8a6569150198804914a176d63475ded923e11f22b9f549bf22ce04e20cb0ea32__callback62718282018-09-04 18:41:141444 days 3 hrs ago0x00004242f4449d49ec9c64ad6f9385a56b2a6297 IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍0017164220
0x88012a85985ab4892d5fb046c914b9516047eb8ef1d5b70e920712b15453a70cClaim Initial Al...62718222018-09-04 18:39:241444 days 3 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440.‍0045 Ether0.‍000323122.‍40625
0xecdc453e25ab6a980388c9ead3e011cf34487cf02d84eb07eaf93c86716fa742__callback62360362018-08-29 18:00:401450 days 4 hrs ago0x00004242f4449d49ec9c64ad6f9385a56b2a6297 IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍0017304620
0x0d86f6a6ad1655880a1bc60dfdfb04e39f558ecb9f9d3fd7cacf08463ac4c955Claim Initial Al...62360322018-08-29 17:59:461450 days 4 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440.‍0045 Ether0.‍000350592.‍556
0xfc752b4a8facb93ca9013edf7c6a40a4d4a621f0e9d577e4b437fd61be31f091__callback62072242018-08-24 21:08:561455 days 1 hr ago0x000042425e06b0b1e8e20a811c91d6864608324b IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍0017211620
0x2057f4da4e0769bd5e6a19cd5e2321bbf56e6e82dbc168ec1bbae3c615c9e129Claim Initial Al...62072212018-08-24 21:07:411455 days 1 hr ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440.‍004 Ether0.‍00020431.‍5
0x6013676f5f0c5db434a8619b624efee0631fea8a87c6c847b542ab75542102c6Vote62002412018-08-23 16:58:181456 days 5 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000068512
0xac4e13b4f019e311a8e20eeff787645a6923b4e9204964e54137129220aa18bdPropose62002392018-08-23 16:57:461456 days 5 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000068642
0x6d9ca3cd466499ffffcce10eadf7fedd8298f34af5d1554527b1b98eec9e3b5bTransfer61956622018-08-22 22:03:201457 days 24 mins ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440.‍1 Ether0.‍000110152
0x2abd0d604a4fe9483e655d2e296a9cb68ff91b9255d7b76a7d249453f0d5ca72__callback61950822018-08-22 19:43:281457 days 2 hrs ago0x00004242f4449d49ec9c64ad6f9385a56b2a6297 IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍002025920
0xba7d40c31fdeaa539401b9efcb65dd9df04a5f60e3b8cff8d1a2ea12d7528e0aClaim Initial Al...61950622018-08-22 19:38:341457 days 2 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440.‍008 Ether0.‍00030712.‍1
0x2f642141f006f41998ebc3f5b3d8710839162a3ed37c3f6cbc40e13663645fe0Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000140743
0xb7a9efa0a810425e4a1acb7e237f0a66fa9fea6ba8db28a9381e0e13a7906491Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139783
0x521f37c36959c73b6ab124973c872c2687d67ff36076327f3acc8b888c778e2dCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000140933
0x094d2ed89c81ad1e683bf33c3f7129bda8d75d0ee4dbeb22a79cbf535a1b162fCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139013
0x4d9425e0fd7cb7b1eb16b49c17e3d4757a2cce23002cb00b49eb844090759880Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139593
0x08c2958fa85ef32944c39b589a36e361c7ccb472bd68e275d2647d839b9c06e6Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139013
0xe6758a9c62b5d5a644067272d1a66100bb8e9d2ce530285d468a86b6c4022b5aCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139973
0x6d640d91844ab6b4226c4b21bf46113be04d52ea7c7aa24d3f8c2fe3e1ef8b32Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000140363
0x0e48df2e426825799078a5abb292c0672af789e827e253ff39a31215fd8b10adCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139013
0xf59cd611f27550d0aafa1eb5d47cbc193acfa3c42adc79bd7b7800add7abf91bCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139973
0x2d6ccecbbe830cdfe55e8e5568c3bc4669a480ac879516cc541a37207a704757Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000140553
0x7db6993cb5fd9c5f3c52d61262583a8f1ad4fa1c1e986e10fc14518ce9cb0f96Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139973
0x488ef6aaa6c8f7ce7e6a1ef4f8a33554dc6e8602ca365145d400a42ec8a02663Create Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000139593
0xbcc67be76b1c166d6656a2168ddffce9b84175390caaf171dd1d0fef6723a07dCreate Initial A...61917012018-08-22 6:00:111457 days 16 hrs ago0xf89833589e7316900631a274e172b2c63d71fa5d IN  0xb509a146243be41759f5ea1fdf874c1897d0aa440 Ether0.‍000140363
[ Download CSV Export 
Latest 3 internal transactions
Parent Txn Hash Block From To Value
0x88012a85985ab4892d5fb046c914b9516047eb8ef1d5b70e920712b15453a70c62718222018-09-04 18:39:241444 days 3 hrs ago 0xb509a146243be41759f5ea1fdf874c1897d0aa44 0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.‍0041679 Ether
0x0d86f6a6ad1655880a1bc60dfdfb04e39f558ecb9f9d3fd7cacf08463ac4c95562360322018-08-29 17:59:461450 days 4 hrs ago 0xb509a146243be41759f5ea1fdf874c1897d0aa44 0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.‍00416964 Ether
0x2057f4da4e0769bd5e6a19cd5e2321bbf56e6e82dbc168ec1bbae3c615c9e12962072212018-08-24 21:07:411455 days 1 hr ago 0xb509a146243be41759f5ea1fdf874c1897d0aa44 0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.‍00418144 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoCongress

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-22
*/

/*

   _____                  _         _____                                    
  / ____|                | |       / ____|                                   
 | |     _ __ _   _ _ __ | |_ ___ | |     ___  _ __   __ _ _ __ ___  ___ ___ 
 | |    | '__| | | | '_ \| __/ _ \| |    / _ \| '_ \ / _` | '__/ _ \/ __/ __|
 | |____| |  | |_| | |_) | || (_) | |___| (_) | | | | (_| | | |  __/\__ \__ \
  \_____|_|   \__, | .__/ \__\___/ \_____\___/|_| |_|\__, |_|  \___||___/___/
               __/ | |                                __/ |                  
              |___/|_|                               |___/                   


CryptoCongress smart contract 

The official address is "cryptocongress.eth"

Token and voting code begins on line 1030

*/

pragma solidity ^0.4.10;

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 {
      return;
      myid; result; proof; // Silence compiler warnings
    }

    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(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(sha256(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(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 SafeMath {

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

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

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

    }

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

    contract StandardToken is Token {
        uint256 public fundingEndBlock;

        function transfer(address _to, uint256 _value) returns (bool success) {
          require (block.number > fundingEndBlock);
          if (balances[msg.sender] >= _value && _value > 0) {
            balances[msg.sender] -= _value;
            balances[_to] += _value;
            Transfer(msg.sender, _to, _value);
            return true;
          } else {
            return false;
          }
        }

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

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

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

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

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

    contract CryptoCongress is StandardToken, SafeMath, usingOraclize {
        mapping(bytes => uint256) initialAllotments;
        mapping(bytes32 => bytes) validQueryIds; // Keeps track of Oraclize queries. 
        
        string public constant name = "CryptoCongress";
        string public constant symbol = "CC";
        uint256 public constant decimals = 18;
        string public constant requiredPrefix = "CryptoCongress ";
        string public constant a = "html(https://twitter.com/";
        string public constant b = "/status/";
        string public constant c = ").xpath(//*[contains(@class, 'TweetTextSize--jumbo')]/text())";

        address public ethFundDeposit; 
      
        // Crowdsale parameters
        uint256 public fundingStartBlock;
        uint256 public totalSupply = 0;
        uint256 public totalSupplyFromCrowdsale = 0;

        uint256 public constant tokenExchangeRate = 50; // 50 CC tokens per 1 ETH purchased at crowdsale
        uint256 public constant tokenCreationCap =  131583 * (10**3) * 10**decimals;  // 131,583,000 tokens
        
        event InitialAllotmentRecorded(string username, uint256 initialAllotment);
        
        // Oraclize events
        event newOraclizeQuery(string url);
        event newOraclizeCallback(string result, bytes proof);

        event InitialAllotmentClaimed(bytes username);
        event Proposal(string ID, string description, string data);
        event Vote(string proposalID, string vote, string data);
        
        // Constructor
        function CryptoCongress (
            address _ethFundDeposit,
            uint256 _fundingStartBlock,
            uint256 _fundingEndBlock) payable
        {                 
          ethFundDeposit = _ethFundDeposit;
          fundingStartBlock = _fundingStartBlock;
          fundingEndBlock = _fundingEndBlock;

          // Allows us to prove correct return from Oraclize
          oraclize_setProof(proofType_TLSNotary);
        }

        function createInitialAllotment(
            string username, 
            uint256 initialAllotment) 
        {
          require (msg.sender == ethFundDeposit);
          require (block.number < fundingStartBlock); 
          initialAllotments[bytes(username)] = initialAllotment;
          InitialAllotmentRecorded(username, initialAllotment);
        }

        function claimInitialAllotment(string twitterStatusID, string username) payable {
          bytes memory usernameAsBytes = bytes(username);
          require (usernameAsBytes.length < 16);
          require (msg.value > 4000000000000000); // accounts for oraclize fee
          require (block.number > fundingStartBlock);
          require (block.number < fundingEndBlock);
          require (initialAllotments[usernameAsBytes] > 0); // Check there are tokens to claim.
          
          string memory url = usingOraclize.strConcat(a,username,b,twitterStatusID,c);
         
          newOraclizeQuery(url);
          bytes32 queryId = oraclize_query("URL",url);
          validQueryIds[queryId] = usernameAsBytes;
        
        }

        function __callback(bytes32 myid, string result, bytes proof) {
            // Must be oraclize
            require (msg.sender == oraclize_cbAddress()); 
            newOraclizeCallback(result, proof);
          
            // // Require that the username not have claimed token allotment already
            require (initialAllotments[validQueryIds[myid]] > 0);  

            // Extra safety below; it should still satisfy basic requirements
            require (block.number > fundingStartBlock);
            require (block.number < fundingEndBlock);
          
            bytes memory resultBytes = bytes(result);
            
            // // Claiming tweet must be exactly 57 bytes
            // // 15 byte "CryptoCongress + 42 byte address"
            require (resultBytes.length == 57);
            
            // // First 16 bytes must be "CryptoCongress " (ending whitespace included)
            // // In hex = 0x 43 72 79 70 74 6f 43 6f 6e 67 72 65 73 73 20
            require (resultBytes[0] == 0x43);
            require (resultBytes[1] == 0x72); 
            require (resultBytes[2] == 0x79);
            require (resultBytes[3] == 0x70);
            require (resultBytes[4] == 0x74);
            require (resultBytes[5] == 0x6f);
            require (resultBytes[6] == 0x43);
            require (resultBytes[7] == 0x6f);
            require (resultBytes[8] == 0x6e);
            require (resultBytes[9] == 0x67);
            require (resultBytes[10] == 0x72);
            require (resultBytes[11] == 0x65);
            require (resultBytes[12] == 0x73);
            require (resultBytes[13] == 0x73);
            require (resultBytes[14] == 0x20);
  
            // // Next 20 characters are the address
            // // Must start with 0x
            require (resultBytes[15] == 0x30);
            require (resultBytes[16] == 0x78);
            
            // Convert bytes to an address
            uint160 iaddr = 0;
            uint160 b1;
            uint160 b2;
            
            for (uint i=0; i<40; i+=2){
                iaddr *= 256;
                b1 = uint160(resultBytes[i+17]);
                b2 = uint160(resultBytes[i+18]);
                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);
            }
            
            address addr = address(iaddr);
        
            uint256 tokenAllotment = initialAllotments[validQueryIds[myid]];
            uint256 checkedSupply = safeAdd(totalSupply, tokenAllotment);
            require (tokenCreationCap > checkedSupply); // extra safe
            totalSupply = checkedSupply;

            initialAllotments[validQueryIds[myid]] = 0;
            balances[addr] += tokenAllotment;  // SafeAdd not needed; bad semantics to use here

            // Logs token creation by username (bytes)
            InitialAllotmentClaimed(validQueryIds[myid]); // Log the bytes of the username who claimed funds 
            delete validQueryIds[myid];
            
            // Logs token creation by address for ERC20 front end compatibility
            Transfer(0x0,addr,tokenAllotment);

        }

        // Accepts ether and creates new CC tokens.
        // Enforces that no more than 1/3rd of tokens are be created by sale.
        function buyTokens(address beneficiary) public payable {
          require(beneficiary != address(0)); 
          require(msg.value != 0);
          require (block.number > fundingStartBlock);
          require (block.number < fundingEndBlock);

          uint256 tokens = safeMult(msg.value, tokenExchangeRate); 
          
          uint256 checkedTotalSupply = safeAdd(totalSupply, tokens); 
          uint256 checkedCrowdsaleSupply = safeAdd(totalSupplyFromCrowdsale, tokens);

          // (1) Enforces we don't go over total supply with potential sale. 
          require (tokenCreationCap > checkedTotalSupply);  
          
          // (2) Enforces that no more than 1/3rd of tokens are to be created by potential sale.
          require (safeMult(checkedCrowdsaleSupply, 3) < totalSupply);
       
          totalSupply = checkedTotalSupply;
          totalSupplyFromCrowdsale = checkedCrowdsaleSupply;
          
          balances[msg.sender] += tokens;  // safeAdd not needed
          
          // Logs token creation for ERC20 front end compatibility
          // All crowdsale purchases will enter via fallback function
          Transfer(0x0, beneficiary, tokens);  
        
        }

        // Secure withdraw
        function secureTransfer(uint256 amount) external {
          require (msg.sender == ethFundDeposit); 
          assert (ethFundDeposit.send(amount));  
        }

        // 20,000 tokens required to Propose
        function propose(string _ID, string _description, string _data) {
          require(bytes(_ID).length < 281 && bytes(_description).length < 281 && bytes(_data).length < 281);
          require (balances[msg.sender] > 20000000000000000000000);
          Proposal(_ID, _description, _data);
        }

        // 5,000 tokens required to Vote
        function vote(string _proposalID, string _vote, string _data) {
          require(bytes(_proposalID).length < 281 && bytes(_vote).length < 281 && bytes(_data).length < 281);
          require (balances[msg.sender] > 5000000000000000000000);
          Vote(_proposalID, _vote, _data);
        }

        // Payable fallback to ensure privacy.
        function () payable {
            buyTokens(msg.sender);
        }

    }

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"a","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyFromCrowdsale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"secureTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requiredPrefix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[{"name":"username","type":"string"},{"name":"initialAllotment","type":"uint256"}],"name":"createInitialAllotment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"b","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenCreationCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposalID","type":"string"},{"name":"_vote","type":"string"},{"name":"_data","type":"string"}],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ethFundDeposit","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ID","type":"string"},{"name":"_description","type":"string"},{"name":"_data","type":"string"}],"name":"propose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"c","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"twitterStatusID","type":"string"},{"name":"username","type":"string"}],"name":"claimInitialAllotment","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[{"name":"_ethFundDeposit","type":"address"},{"name":"_fundingStartBlock","type":"uint256"},{"name":"_fundingEndBlock","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"username","type":"string"},{"indexed":false,"name":"initialAllotment","type":"uint256"}],"name":"InitialAllotmentRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"url","type":"string"}],"name":"newOraclizeQuery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"result","type":"string"},{"indexed":false,"name":"proof","type":"bytes"}],"name":"newOraclizeCallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"username","type":"bytes"}],"name":"InitialAllotmentClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ID","type":"string"},{"indexed":false,"name":"description","type":"string"},{"indexed":false,"name":"data","type":"string"}],"name":"Proposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"string"},{"indexed":false,"name":"vote","type":"string"},{"indexed":false,"name":"data","type":"string"}],"name":"Vote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040526000600d556000600e55604051606080620031bc833981016040908152815160208301519190920151600b8054600160a060020a031916600160a060020a038516179055600c8290556001819055620000867f10000000000000000000000000000000000000000000000000000000000000006401000000006200008f810204565b5050506200075b565b600454600160a060020a03161580620000c55750600454620000c390600160a060020a0316640100000000620002d4810204565b155b15620000e257620000e06000640100000000620002d8810204565b505b60048054604080517f38cc48310000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b1580156200014057600080fd5b505af115801562000155573d6000803e3d6000fd5b505050506040513d60208110156200016c57600080fd5b5051600554600160a060020a03908116911614620002305760048054604080517f38cc48310000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b158015620001e257600080fd5b505af1158015620001f7573d6000803e3d6000fd5b505050506040513d60208110156200020e57600080fd5b505160058054600160a060020a031916600160a060020a039092169190911790555b600554604080517f688dcfd70000000000000000000000000000000000000000000000000000000081527fff00000000000000000000000000000000000000000000000000000000000000841660048201529051600160a060020a039092169163688dcfd79160248082019260009290919082900301818387803b158015620002b857600080fd5b505af1158015620002cd573d6000803e3d6000fd5b5050505050565b3b90565b6000620002ed640100000000620002f3810204565b92915050565b6000806200031e731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed640100000000620002d4810204565b11156200039c5760048054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e657400000000000000000000000000000000000000000060208201526200039390640100000000620006a0810204565b5060016200069d565b6000620003c673c03a2615d5efaf5f49f60b7bb6583eaec212fdf1640100000000620002d4810204565b11156200043b5760048054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e33000000000000000000000000000000000000000060208201526200039390640100000000620006a0810204565b60006200046573b7a07bcf2ba2f2703b24c0691b5278999c59ac7e640100000000620002d4810204565b1115620004da5760048054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e000000000000000000000000000000000000000000000060208201526200039390640100000000620006a0810204565b60006200050473146500cfd35b22e4a392fe0adc06de1a1368ed48640100000000620002d4810204565b1115620005795760048054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b65627900000000000000000000000000000000000000000060208201526200039390640100000000620006a0810204565b6000620005a3736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475640100000000620002d4810204565b1115620005d9575060048054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47517905560016200069d565b6000620006037320e12a1f859b3feae5fb2a0a32c18f5a65555bbf640100000000620002d4810204565b111562000639575060048054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf17905560016200069d565b6000620006637351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa640100000000620002d4810204565b111562000699575060048054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa17905560016200069d565b5060005b90565b8051620006b5906006906020840190620006b9565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006fc57805160ff19168380011785556200072c565b828001600101855582156200072c579182015b828111156200072c5782518255916020019190600101906200070f565b506200073a9291506200073e565b5090565b6200069d91905b808211156200073a576000815560010162000745565b612a51806200076b6000396000f30060806040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610169578063095ea7b3146101f35780630dbe671f1461022b57806318160ddd1461024057806318abfdfc146102675780631bacbf4e1461027c5780631d3a5dbe1461029457806323b872dd146102a957806327dc297e146102d3578063313ce5671461033157806338bbfa50146103465780633f982b74146103e25780634172d0801461043d5780634df7e3d0146104525780636f7920fd1461046757806370a082311461047c57806391b43d131461049d57806395d89b41146104b257806395f59fe1146104c7578063a81c3bdf1461059c578063a9059cbb146105cd578063bd51fa4c146105f1578063c3da42b8146106c6578063d3f4fcd9146106db578063d648a64714610765578063dd62ed3e1461077a578063ec8ac4d8146107a1575b610167336107b1565b005b34801561017557600080fd5b5061017e61089b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b85781810151838201526020016101a0565b50505050905090810190601f1680156101e55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ff57600080fd5b50610217600160a060020a03600435166024356108d2565b604080519115158252519081900360200190f35b34801561023757600080fd5b5061017e61094b565b34801561024c57600080fd5b50610255610982565b60408051918252519081900360200190f35b34801561027357600080fd5b50610255610988565b34801561028857600080fd5b5061016760043561098e565b3480156102a057600080fd5b5061017e6109d9565b3480156102b557600080fd5b50610217600160a060020a0360043581169060243516604435610a10565b3480156102df57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610167958335953695604494919390910191908190840183828082843750949750610afc9650505050505050565b34801561033d57600080fd5b50610255610b1c565b34801561035257600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261016795833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610b219650505050505050565b3480156103ee57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261016794369492936024939284019190819084018382808284375094975050933594506115589350505050565b34801561044957600080fd5b50610255611685565b34801561045e57600080fd5b5061017e61168a565b34801561047357600080fd5b506102556116c1565b34801561048857600080fd5b50610255600160a060020a03600435166116d0565b3480156104a957600080fd5b506102556116eb565b3480156104be57600080fd5b5061017e6116f1565b3480156104d357600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261016794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506117289650505050505050565b3480156105a857600080fd5b506105b16118e6565b60408051600160a060020a039092168252519081900360200190f35b3480156105d957600080fd5b50610217600160a060020a03600435166024356118f5565b3480156105fd57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261016794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975061198d9650505050505050565b3480156106d257600080fd5b5061017e611a47565b6040805160206004803580820135601f810184900484028501840190955284845261016794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611aa79650505050505050565b34801561077157600080fd5b50610255611d36565b34801561078657600080fd5b50610255600160a060020a0360043581169060243516611d3c565b610167600160a060020a03600435165b60008080600160a060020a03841615156107ca57600080fd5b3415156107d657600080fd5b600c5443116107e457600080fd5b60015443106107f257600080fd5b6107fd346032611d67565b925061080b600d5484611d96565b9150610819600e5484611d96565b90506a6cd7c8b91d9b3761600000821061083257600080fd5b600d54610840826003611d67565b1061084a57600080fd5b600d829055600e81905533600090815260026020908152604080832080548701905580518681529051600160a060020a0388169392600080516020612a06833981519152928290030190a350505050565b60408051808201909152600e81527f43727970746f436f6e6772657373000000000000000000000000000000000000602082015281565b60015460009043116108e357600080fd5b336000818152600360209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60408051808201909152601981527f68746d6c2868747470733a2f2f747769747465722e636f6d2f00000000000000602082015281565b600d5481565b600e5481565b600b54600160a060020a031633146109a557600080fd5b600b54604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015156109d657fe5b50565b60408051808201909152600f81527f43727970746f436f6e6772657373200000000000000000000000000000000000602082015281565b6001546000904311610a2157600080fd5b600160a060020a0384166000908152600260205260409020548211801590610a6c5750600160a060020a03841660009081526003602090815260408083203384529091529020548211155b8015610a785750600082115b15610af157600160a060020a0380841660008181526002602090815260408083208054880190559388168083528483208054889003905560038252848320338452825291849020805487900390558351868152935192939192600080516020612a068339815191529281900390910190a3506001610af5565b5060005b9392505050565b604080516000815260208101909152610b189083908390610b21565b5050565b601281565b60606000806000806000806000610b36611db0565b600160a060020a03163314610b4a57600080fd5b7fb865ea28e16ae0eba44421ddfdc251e6a31225b285320fa06b8ca8dbaf02e20e8a8a604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610bae578181015183820152602001610b96565b50505050905090810190601f168015610bdb5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610c0e578181015183820152602001610bf6565b50505050905090810190601f168015610c3b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160008b8152600a602052604080822090518154600992919081908390600261010060018316150260001901909116048015610cbc5780601f10610c9a576101008083540402835291820191610cbc565b820191906000526020600020905b815481529060010190602001808311610ca8575b505092835250506040519081900360200190205411610cda57600080fd5b600c544311610ce857600080fd5b6001544310610cf657600080fd5b89518a9850603914610d0757600080fd5b876000815181101515610d1657fe5b90602001015160f860020a900460f860020a02600160f860020a031916604360f860020a02141515610d4757600080fd5b876001815181101515610d5657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607260f860020a02141515610d8757600080fd5b876002815181101515610d9657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607960f860020a02141515610dc757600080fd5b876003815181101515610dd657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607060f860020a02141515610e0757600080fd5b876004815181101515610e1657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607460f860020a02141515610e4757600080fd5b876005815181101515610e5657fe5b90602001015160f860020a900460f860020a02600160f860020a031916606f60f860020a02141515610e8757600080fd5b876006815181101515610e9657fe5b90602001015160f860020a900460f860020a02600160f860020a031916604360f860020a02141515610ec757600080fd5b876007815181101515610ed657fe5b90602001015160f860020a900460f860020a02600160f860020a031916606f60f860020a02141515610f0757600080fd5b876008815181101515610f1657fe5b90602001015160f860020a900460f860020a02600160f860020a031916606e60f860020a02141515610f4757600080fd5b876009815181101515610f5657fe5b90602001015160f860020a900460f860020a02600160f860020a031916606760f860020a02141515610f8757600080fd5b87600a815181101515610f9657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607260f860020a02141515610fc757600080fd5b87600b815181101515610fd657fe5b90602001015160f860020a900460f860020a02600160f860020a031916606560f860020a0214151561100757600080fd5b87600c81518110151561101657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607360f860020a0214151561104757600080fd5b87600d81518110151561105657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607360f860020a0214151561108757600080fd5b87600e81518110151561109657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415156110c757600080fd5b87600f8151811015156110d657fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a0214151561110757600080fd5b87601081518110151561111657fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151561114757600080fd5b60009650600093505b60288410156112f65761010087029650878460110181518110151561117157fe5b90602001015160f860020a900460f860020a0260f860020a90049550878460120181518110151561119e57fe5b016020015160f860020a9081900481020494506061600160a060020a038716108015906111d55750606686600160a060020a031611155b156111e557605786039550611249565b604186600160a060020a0316101580156112095750604686600160a060020a031611155b1561121957603786039550611249565b603086600160a060020a03161015801561123d5750603986600160a060020a031611155b15611249576030860395505b606185600160a060020a03161015801561126d5750606685600160a060020a031611155b1561127d576057850394506112e1565b604185600160a060020a0316101580156112a15750604685600160a060020a031611155b156112b1576037850394506112e1565b603085600160a060020a0316101580156112d55750603985600160a060020a031611155b156112e1576030850394505b84866010020187019650600284019350611150565b60008b8152600a6020526040908190209051815489955060099291908190839060026101006001831615026000190190911604801561136c5780601f1061134a57610100808354040283529182019161136c565b820191906000526020600020905b815481529060010190602001808311611358575b5050915050908152602001604051809103902054915061138e600d5483611d96565b90506a6cd7c8b91d9b376160000081106113a757600080fd5b600d81905560008b8152600a60205260408082209051815460099291908190839060026101006001831615026000190190911604801561141e5780601f106113fc57610100808354040283529182019161141e565b820191906000526020600020905b81548152906001019060200180831161140a575b5050928352505060408051918290036020908101832093909355600160a060020a038616600090815260028085528282208054880190558f8252600a85529082902084845280546101006001821615026000190116919091049383018490527f587205bbba3b230fb9202cbe2d85473cab7db22159aca2f97d6c540b5f8a063093909291829190820190849080156114f75780601f106114cc576101008083540402835291602001916114f7565b820191906000526020600020905b8154815290600101906020018083116114da57829003601f168201915b50509250505060405180910390a160008b8152600a6020526040812061151c91612929565b604080518381529051600160a060020a03851691600091600080516020612a068339815191529181900360200190a35050505050505050505050565b600b54600160a060020a0316331461156f57600080fd5b600c54431061157d57600080fd5b806009836040518082805190602001908083835b602083106115b05780518252601f199092019160209182019101611591565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201852095909555838101869052848452865194840194909452505083517fe95bbc23cc33d4ea754e1b9900eef2cb87ae8a501a37aa2a6d3e5ce231985d90928592859290918291606083019186019080838360005b8381101561164657818101518382015260200161162e565b50505050905090810190601f1680156116735780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b603281565b60408051808201909152600881527f2f7374617475732f000000000000000000000000000000000000000000000000602082015281565b6a6cd7c8b91d9b376160000081565b600160a060020a031660009081526002602052604090205490565b60015481565b60408051808201909152600281527f4343000000000000000000000000000000000000000000000000000000000000602082015281565b610119835110801561173c57506101198251105b801561174a57506101198151105b151561175557600080fd5b3360009081526002602052604090205469010f0cf064dd592000001061177a57600080fd5b7f9ad11b8dfd047676d67afa09c54195e6a148eac240fae3ed60e795e944f4dd9a83838360405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156117e35781810151838201526020016117cb565b50505050905090810190601f1680156118105780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561184357818101518382015260200161182b565b50505050905090810190601f1680156118705780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156118a357818101518382015260200161188b565b50505050905090810190601f1680156118d05780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1505050565b600b54600160a060020a031681565b600154600090431161190657600080fd5b3360009081526002602052604090205482118015906119255750600082115b156119855733600081815260026020908152604080832080548790039055600160a060020a0387168084529281902080548701905580518681529051929392600080516020612a06833981519152929181900390910190a3506001610945565b506000610945565b61011983511080156119a157506101198251105b80156119af57506101198151105b15156119ba57600080fd5b3360009081526002602052604090205469043c33c1937564800000106119df57600080fd5b7fcd55a45854685ad0578d52a885603f7aa576f3a278e8e94e508114dee64d7dbc8383836040518080602001806020018060200184810384528781815181526020019150805190602001908083836000838110156117e35781810151838201526020016117cb565b606060405190810160405280603d81526020017f292e7870617468282f2f2a5b636f6e7461696e732840636c6173732c2027547781526020017f6565745465787453697a652d2d6a756d626f27295d2f7465787428292900000081525081565b80518190606090600090601011611abd57600080fd5b660e35fa931a00003411611ad057600080fd5b600c544311611ade57600080fd5b6001544310611aec57600080fd5b60006009846040518082805190602001908083835b60208310611b205780518252601f199092019160209182019101611b01565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054929092119150611b5d905057600080fd5b611c306040805190810160405280601981526020017f68746d6c2868747470733a2f2f747769747465722e636f6d2f00000000000000815250856040805190810160405280600881526020017f2f7374617475732f00000000000000000000000000000000000000000000000081525088606060405190810160405280603d81526020017f292e7870617468282f2f2a5b636f6e7461696e732840636c6173732c2027547781526020017f6565745465787453697a652d2d6a756d626f27295d2f74657874282929000000815250611fa7565b91507f46cb989ef9cef13e930e3b7f286225a086e716a90d63e0b7da85d310a9db0c9a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015611c91578181015183820152602001611c79565b50505050905090810190601f168015611cbe5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1611d0a6040805190810160405280600381526020017f55524c000000000000000000000000000000000000000000000000000000000081525083612208565b6000818152600a602090815260409091208551929350611d2e92909186019061296d565b505050505050565b600c5481565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6000828202831580611d835750828482811515611d8057fe5b04145b1515611d8b57fe5b8091505b5092915050565b6000828201838110801590611d83575082811015611d8b57fe5b600454600090600160a060020a03161580611ddd5750600454611ddb90600160a060020a03166125e5565b155b15611dee57611dec60006125e9565b505b600480546040805160e060020a6338cc48310281529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b158015611e3557600080fd5b505af1158015611e49573d6000803e3d6000fd5b505050506040513d6020811015611e5f57600080fd5b5051600554600160a060020a03908116911614611f0957600480546040805160e060020a6338cc48310281529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d6020811015611ee757600080fd5b505160058054600160a060020a031916600160a060020a039092169190911790555b600560009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f7557600080fd5b505af1158015611f89573d6000803e3d6000fd5b505050506040513d6020811015611f9f57600080fd5b505190505b90565b6060806060806060806060806000808e98508d97508c96508b95508a94508451865188518a518c51010101016040519080825280601f01601f191660200182016040528015612000578160200160208202803883390190505b50935083925060009150600090505b885181101561206d57888181518110151561202657fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561204d57fe5b906020010190600160f860020a031916908160001a90535060010161200f565b5060005b87518110156120cf57878181518110151561208857fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156120af57fe5b906020010190600160f860020a031916908160001a905350600101612071565b5060005b86518110156121315786818151811015156120ea57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561211157fe5b906020010190600160f860020a031916908160001a9053506001016120d3565b5060005b855181101561219357858181518110151561214c57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561217357fe5b906020010190600160f860020a031916908160001a905350600101612135565b5060005b84518110156121f55784818151811015156121ae57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156121d557fe5b906020010190600160f860020a031916908160001a905350600101612197565b50909d9c50505050505050505050505050565b6004546000908190600160a060020a03161580612237575060045461223590600160a060020a03166125e5565b155b156122485761224660006125e9565b505b600480546040805160e060020a6338cc48310281529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b15801561228f57600080fd5b505af11580156122a3573d6000803e3d6000fd5b505050506040513d60208110156122b957600080fd5b5051600554600160a060020a0390811691161461236357600480546040805160e060020a6338cc48310281529051600160a060020a03909216926338cc48319282820192602092908290030181600087803b15801561231757600080fd5b505af115801561232b573d6000803e3d6000fd5b505050506040513d602081101561234157600080fd5b505160058054600160a060020a031916600160a060020a039092169190911790555b6005546040517f524f3889000000000000000000000000000000000000000000000000000000008152602060048201818152875160248401528751600160a060020a039094169363524f388993899383926044909201919085019080838360005b838110156123dc5781810151838201526020016123c4565b50505050905090810190601f1680156124095780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b505050506040513d602081101561245257600080fd5b50519050670de0b6b3a764000062030d403a02018111156124765760009150611d8f565b6005546040517fadf59f99000000000000000000000000000000000000000000000000000000008152600060048201818152606060248401908152885160648501528851600160a060020a039095169463adf59f99948794938b938b939192909160448201916084019060208701908083838b5b838110156125025781810151838201526020016124ea565b50505050905090810190601f16801561252f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561256257818101518382015260200161254a565b50505050905090810190601f16801561258f5780820380516001836020036101000a031916815260200191505b50955050505050506020604051808303818588803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b50505050506040513d60208110156125db57600080fd5b5051949350505050565b3b90565b600061094560008061260e731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed6125e5565b111561267f5760048054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560408051808201909152600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015261267790612916565b506001611fa4565b600061269e73c03a2615d5efaf5f49f60b7bb6583eaec212fdf16125e5565b11156127075760048054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560408051808201909152600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015261267790612916565b600061272673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e6125e5565b111561278f5760048054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560408051808201909152600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015261267790612916565b60006127ae73146500cfd35b22e4a392fe0adc06de1a1368ed486125e5565b11156128175760048054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905560408051808201909152600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015261267790612916565b6000612836736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4756125e5565b111561286a575060048054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001611fa4565b60006128897320e12a1f859b3feae5fb2a0a32c18f5a65555bbf6125e5565b11156128bd575060048054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001611fa4565b60006128dc7351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa6125e5565b1115612910575060048054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001611fa4565b50600090565b8051610b1890600690602084019061296d565b50805460018160011615610100020316600290046000825580601f1061294f57506109d6565b601f0160209004906000526020600020908101906109d691906129eb565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129ae57805160ff19168380011785556129db565b828001600101855582156129db579182015b828111156129db5782518255916020019190600101906129c0565b506129e79291506129eb565b5090565b611fa491905b808211156129e757600081556001016129f15600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820fefe0c33a77b3ec9010c3ab76b0ce875fe42c71fe4a067dd21cdd3b45a97721a0029000000000000000000000000f89833589e7316900631a274e172b2c63d71fa5d00000000000000000000000000000000000000000000000000000000005e87380000000000000000000000000000000000000000000000000000000000692210

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

000000000000000000000000f89833589e7316900631a274e172b2c63d71fa5d00000000000000000000000000000000000000000000000000000000005e87380000000000000000000000000000000000000000000000000000000000692210

-----Decoded View---------------
Arg [0] : _ethFundDeposit (address): 0xf89833589e7316900631a274e172b2c63d71fa5d
Arg [1] : _fundingStartBlock (uint256): 6195000
Arg [2] : _fundingEndBlock (uint256): 6890000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f89833589e7316900631a274e172b2c63d71fa5d
Arg [1] : 00000000000000000000000000000000000000000000000000000000005e8738
Arg [2] : 0000000000000000000000000000000000000000000000000000000000692210


Swarm Source

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

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.