Sponsored:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
 Latest 25 txns from a total Of 59802 transactions
(+2 PendingTxns)

TxHash Age From To Value [TxFee]
0x3488858914315df53ecea90b68abe19a57adf84ea31c8eeb933dab5ec217afb1(pending)0xfd60e65bcaa3933c37bdea66152416410ad1ff2e  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x3f98150a2e9ea3d30cdeeace63885b4e9839c1329c4aad5567ecb702ffa0285f(pending)0x15ff5a7469fbd25cc5c3dbb8d05843bfea869b05  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xb041c853000cadee34ab6ff34070b953579e18920c42a1c0d3423718b405ecb924 mins ago0x4f5b708f07918b6e469508c81b7f6a70ea6e66d9  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000325395
0xa79f472136c5fb486d2c3de457440d4904e2ffbd71ba4fbd5748dba6f0dc7e0a31 mins agoTidex-Tokens  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00040101
0x1470d2de241556ac9eea9122744bc53ef8475f684f43dd0d8e4ca684fef1046635 mins agoTidex-Tokens  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00040101
0x58c804686421d2a7d07a4c6cca1c897d64989158f81af065ece1af8b9cd3e0f63 hrs 42 mins ago0x274f3c32c90517975e29dfc209a23f315c1e5fc7  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00110074
0xb320e9ad431ad890050b4884d98728b9eba3c9b495572f9cb21cd041168ed4ac4 hrs 19 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00040101
0xc5102c9e3dd1edceff4ec506f1d4ce4316d4d08878861601c39db1effccff96f4 hrs 22 mins ago0x118b8cfc33ae0623058b8226fb1bc0dae628b981  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001646765
0xd2096b7dbac65aee435631750cd0e4d88c6400a7c05ca2f04be4aee77d33c91a5 hrs 13 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00110202
0xaeae0da579593b0213bc90a1c6b01653a85d73bd84d75437f89a051e2c8cc4a75 hrs 36 mins ago0xbc04d55c186b265cae108018dcb18d8480b2dbca  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0005033
0x05d0493406a2bc8c7edbeea7543ec8cb92f66d7c7fd0b6a6e6eb8dde6edfe7346 hrs 6 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0006116211
0x95d718c35ff4a5cd87cf91b43c79f46b2a0b30f87c8f1b108a67ea15a4ac311f6 hrs 20 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000771414
0xb010653c214f6fb6f4893c3fb0a1630388379a6bbdcb851b2638660854b744777 hrs 6 mins ago0xb792195793f691c4bbc9573b7149d55714edabf0  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000165303
0x245140a9de92d24321b0d13dd7c30fd49b15cc0ffd3d7f7710cbe152e5ee9c457 hrs 20 mins ago0x274f3c32c90517975e29dfc209a23f315c1e5fc7  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002148939
0xf1bf76491fb7bcb4ac374f8c73b371e9deab96e67fc33090b0fa28eb5e2f7ac17 hrs 43 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000280707
0xf3d20fd684468ae3ec5df59f9155f4f12780b1acd92180877ca29361e21d56727 hrs 52 mins ago0x7a21b7b6cf610ea0bfbcbf71a7c90723d2c20d68  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00027891
0x3b24dc71e43afce906201e6917aa1fbe26e3d8188883b3428a240b61774f38b38 hrs 3 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0002735572
0xe00abac4b7910c403c28f85f604c317dc9f0d3064f6e51e86b9cabf87b045f3a8 hrs 3 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000273122
0x060ff7034c17fd3d9c4e995cc5f2c4d11b827fefa21db2052141bf236745bb378 hrs 5 mins ago0xa12431d0b9db640034b0cdfceef9cce161e62be4  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00023131675
0xe115f52d9d080540a1f59f164cdde1b6739eb2380fdc847d686b7a614de57b528 hrs 13 mins ago0xf18d93463a605bc3b4bb86cc238162c09b06a14c  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001646765
0x5e888c4e3289390d0748ba7ae5978f465f465c2cf136f0a8598ddb26950b8b6d8 hrs 29 mins ago0x3c02290922a3618a4646e3bbca65853ea45fe7c6  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002446161
0xe1cca5160a0019901f0a43e75dd23c91a4195d8fa5ca679df733e0f1a962d5778 hrs 41 mins ago0x274f3c32c90517975e29dfc209a23f315c1e5fc7  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0055101
0x5782e8e69aeba6f2c4b7e593b3a94b5e06933b76a682f8b52309f1c237a9f6409 hrs 26 mins ago0x3c02290922a3618a4646e3bbca65853ea45fe7c6  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002450065
0xc166855cee8f73e05a15d5c7111ec4e87c560eae3ebc74b7e2be4b0fc9e9615d9 hrs 48 mins ago0x274f3c32c90517975e29dfc209a23f315c1e5fc7  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0008033
0x2ca2c587099d14760cd30265f16ccff672437923764da9ff8dbf7fc4e3f77aac10 hrs 18 mins ago0x3c02290922a3618a4646e3bbca65853ea45fe7c6  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002450065
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: STQToken
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.15;

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) returns (bool) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

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


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}


/// @title StandardToken which circulation can be delayed and started by another contract.
/// @dev To be used as a mixin contract.
/// The contract is created in disabled state: circulation is disabled.
contract CirculatingToken is StandardToken {

    event CirculationEnabled();

    modifier requiresCirculation {
        require(m_isCirculating);
        _;
    }


    // PUBLIC interface

    function transfer(address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) requiresCirculation returns (bool) {
        return super.approve(_spender, _value);
    }


    // INTERNAL functions

    function enableCirculation() internal returns (bool) {
        if (m_isCirculating)
            return false;

        m_isCirculating = true;
        CirculationEnabled();
        return true;
    }


    // FIELDS

    /// @notice are the circulation started?
    bool public m_isCirculating;
}

/// note: during any ownership changes all pending operations (waiting for more signatures) are cancelled
// TODO acceptOwnership
contract multiowned {

	// TYPES

    // struct for the status of a pending operation.
    struct MultiOwnedOperationPendingState {
        // count of confirmations needed
        uint yetNeeded;

        // bitmap of confirmations where owner #ownerIndex's decision corresponds to 2**ownerIndex bit
        uint ownersDone;

        // position of this operation key in m_multiOwnedPendingIndex
        uint index;
    }

	// EVENTS

    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    event FinalConfirmation(address owner, bytes32 operation);

    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);

    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

	// MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        require(isOwner(msg.sender));
        _;
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation)) {
            _;
        }
        // Even if required number of confirmations has't been collected yet,
        // we can't throw here - because changes to the state have to be preserved.
        // But, confirmAndCheck itself will throw in case sender is not an owner.
    }

    modifier validNumOwners(uint _numOwners) {
        require(_numOwners > 0 && _numOwners <= c_maxOwners);
        _;
    }

    modifier multiOwnedValidRequirement(uint _required, uint _numOwners) {
        require(_required > 0 && _required <= _numOwners);
        _;
    }

    modifier ownerExists(address _address) {
        require(isOwner(_address));
        _;
    }

    modifier ownerDoesNotExist(address _address) {
        require(!isOwner(_address));
        _;
    }

    modifier multiOwnedOperationIsActive(bytes32 _operation) {
        require(isOperationActive(_operation));
        _;
    }

	// METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them (msg.sender is not added to the owners!).
    function multiowned(address[] _owners, uint _required)
        validNumOwners(_owners.length)
        multiOwnedValidRequirement(_required, _owners.length)
    {
        assert(c_maxOwners <= 255);

        m_numOwners = _owners.length;
        m_multiOwnedRequired = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            address owner = _owners[i];
            // invalid and duplicate addresses are not allowed
            require(0 != owner && !isOwner(owner) /* not isOwner yet! */);

            uint currentOwnerIndex = checkOwnerIndex(i + 1 /* first slot is unused */);
            m_owners[currentOwnerIndex] = owner;
            m_ownerIndex[owner] = currentOwnerIndex;
        }

        assertOwnersAreConsistent();
    }

    /// @notice replaces an owner `_from` with another `_to`.
    /// @param _from address of owner to replace
    /// @param _to address of new owner
    // All pending operations will be canceled!
    function changeOwner(address _from, address _to)
        external
        ownerExists(_from)
        ownerDoesNotExist(_to)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_from]);
        m_owners[ownerIndex] = _to;
        m_ownerIndex[_from] = 0;
        m_ownerIndex[_to] = ownerIndex;

        assertOwnersAreConsistent();
        OwnerChanged(_from, _to);
    }

    /// @notice adds an owner
    /// @param _owner address of new owner
    // All pending operations will be canceled!
    function addOwner(address _owner)
        external
        ownerDoesNotExist(_owner)
        validNumOwners(m_numOwners + 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        m_numOwners++;
        m_owners[m_numOwners] = _owner;
        m_ownerIndex[_owner] = checkOwnerIndex(m_numOwners);

        assertOwnersAreConsistent();
        OwnerAdded(_owner);
    }

    /// @notice removes an owner
    /// @param _owner address of owner to remove
    // All pending operations will be canceled!
    function removeOwner(address _owner)
        external
        ownerExists(_owner)
        validNumOwners(m_numOwners - 1)
        multiOwnedValidRequirement(m_multiOwnedRequired, m_numOwners - 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_owner]);
        m_owners[ownerIndex] = 0;
        m_ownerIndex[_owner] = 0;
        //make sure m_numOwners is equal to the number of owners and always points to the last owner
        reorganizeOwners();

        assertOwnersAreConsistent();
        OwnerRemoved(_owner);
    }

    /// @notice changes the required number of owner signatures
    /// @param _newRequired new number of signatures required
    // All pending operations will be canceled!
    function changeRequirement(uint _newRequired)
        external
        multiOwnedValidRequirement(_newRequired, m_numOwners)
        onlymanyowners(sha3(msg.data))
    {
        m_multiOwnedRequired = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }

    /// @notice Gets an owner by 0-indexed position
    /// @param ownerIndex 0-indexed owner position
    function getOwner(uint ownerIndex) public constant returns (address) {
        return m_owners[ownerIndex + 1];
    }

    /// @notice Gets owners
    /// @return memory array of owners
    function getOwners() public constant returns (address[]) {
        address[] memory result = new address[](m_numOwners);
        for (uint i = 0; i < m_numOwners; i++)
            result[i] = getOwner(i);

        return result;
    }

    /// @notice checks if provided address is an owner address
    /// @param _addr address to check
    /// @return true if it's an owner
    function isOwner(address _addr) public constant returns (bool) {
        return m_ownerIndex[_addr] > 0;
    }

    /// @notice Tests ownership of the current caller.
    /// @return true if it's an owner
    // It's advisable to call it by new owner to make sure that the same erroneous address is not copy-pasted to
    // addOwner/changeOwner and to isOwner.
    function amIOwner() external constant onlyowner returns (bool) {
        return true;
    }

    /// @notice Revokes a prior confirmation of the given operation
    /// @param _operation operation value, typically sha3(msg.data)
    function revoke(bytes32 _operation)
        external
        multiOwnedOperationIsActive(_operation)
        onlyowner
    {
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        var pending = m_multiOwnedPending[_operation];
        require(pending.ownersDone & ownerIndexBit > 0);

        assertOperationIsConsistent(_operation);

        pending.yetNeeded++;
        pending.ownersDone -= ownerIndexBit;

        assertOperationIsConsistent(_operation);
        Revoke(msg.sender, _operation);
    }

    /// @notice Checks if owner confirmed given operation
    /// @param _operation operation value, typically sha3(msg.data)
    /// @param _owner an owner address
    function hasConfirmed(bytes32 _operation, address _owner)
        external
        constant
        multiOwnedOperationIsActive(_operation)
        ownerExists(_owner)
        returns (bool)
    {
        return !(m_multiOwnedPending[_operation].ownersDone & makeOwnerBitmapBit(_owner) == 0);
    }

    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation)
        private
        onlyowner
        returns (bool)
    {
        if (512 == m_multiOwnedPendingIndex.length)
            // In case m_multiOwnedPendingIndex grows too much we have to shrink it: otherwise at some point
            // we won't be able to do it because of block gas limit.
            // Yes, pending confirmations will be lost. Dont see any security or stability implications.
            // TODO use more graceful approach like compact or removal of clearPending completely
            clearPending();

        var pending = m_multiOwnedPending[_operation];

        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (! isOperationActive(_operation)) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_multiOwnedRequired;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_multiOwnedPendingIndex.length++;
            m_multiOwnedPendingIndex[pending.index] = _operation;
            assertOperationIsConsistent(_operation);
        }

        // determine the bit to set for this owner.
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            // ok - check if count is enough to go ahead.
            assert(pending.yetNeeded > 0);
            if (pending.yetNeeded == 1) {
                // enough confirmations: reset and run interior.
                delete m_multiOwnedPendingIndex[m_multiOwnedPending[_operation].index];
                delete m_multiOwnedPending[_operation];
                FinalConfirmation(msg.sender, _operation);
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
                assertOperationIsConsistent(_operation);
                Confirmation(msg.sender, _operation);
            }
        }
    }

    // Reclaims free slots between valid owners in m_owners.
    // TODO given that its called after each removal, it could be simplified.
    function reorganizeOwners() private {
        uint free = 1;
        while (free < m_numOwners)
        {
            // iterating to the first free slot from the beginning
            while (free < m_numOwners && m_owners[free] != 0) free++;

            // iterating to the first occupied slot from the end
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;

            // swap, if possible, so free slot is located at the end after the swap
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                // owners between swapped slots should't be renumbered - that saves a lot of gas
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }

    function clearPending() private onlyowner {
        uint length = m_multiOwnedPendingIndex.length;
        for (uint i = 0; i < length; ++i) {
            if (m_multiOwnedPendingIndex[i] != 0)
                delete m_multiOwnedPending[m_multiOwnedPendingIndex[i]];
        }
        delete m_multiOwnedPendingIndex;
    }

    function checkOwnerIndex(uint ownerIndex) private constant returns (uint) {
        assert(0 != ownerIndex && ownerIndex <= c_maxOwners);
        return ownerIndex;
    }

    function makeOwnerBitmapBit(address owner) private constant returns (uint) {
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[owner]);
        return 2 ** ownerIndex;
    }

    function isOperationActive(bytes32 _operation) private constant returns (bool) {
        return 0 != m_multiOwnedPending[_operation].yetNeeded;
    }


    function assertOwnersAreConsistent() private constant {
        assert(m_numOwners > 0);
        assert(m_numOwners <= c_maxOwners);
        assert(m_owners[0] == 0);
        assert(0 != m_multiOwnedRequired && m_multiOwnedRequired <= m_numOwners);
    }

    function assertOperationIsConsistent(bytes32 _operation) private constant {
        var pending = m_multiOwnedPending[_operation];
        assert(0 != pending.yetNeeded);
        assert(m_multiOwnedPendingIndex[pending.index] == _operation);
        assert(pending.yetNeeded <= m_multiOwnedRequired);
    }


   	// FIELDS

    uint constant c_maxOwners = 250;

    // the number of owners that must confirm the same operation before it is run.
    uint public m_multiOwnedRequired;


    // pointer used to find a free slot in m_owners
    uint public m_numOwners;

    // list of owners (addresses),
    // slot 0 is unused so there are no owner which index is 0.
    // TODO could we save space at the end of the array for the common case of <10 owners? and should we?
    address[256] internal m_owners;

    // index on the list of owners to allow reverse lookup: owner address => index in m_owners
    mapping(address => uint) internal m_ownerIndex;


    // the ongoing operations.
    mapping(bytes32 => MultiOwnedOperationPendingState) internal m_multiOwnedPending;
    bytes32[] internal m_multiOwnedPendingIndex;
}


/**
 * @title Contract which is owned by owners and operated by controller.
 *
 * @notice Provides a way to set up an entity (typically other contract) entitled to control actions of this contract.
 * Controller is set up by owners or during construction.
 *
 * @dev controller check is performed by onlyController modifier.
 */
contract MultiownedControlled is multiowned {

    event ControllerSet(address controller);
    event ControllerRetired(address was);


    modifier onlyController {
        require(msg.sender == m_controller);
        _;
    }


    // PUBLIC interface

    function MultiownedControlled(address[] _owners, uint _signaturesRequired, address _controller)
        multiowned(_owners, _signaturesRequired)
    {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev sets the controller
    function setController(address _controller) external onlymanyowners(sha3(msg.data)) {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev ability for controller to step down
    function detachController() external onlyController {
        address was = m_controller;
        m_controller = address(0);
        ControllerRetired(was);
    }


    // FIELDS

    /// @notice address of entity entitled to mint new tokens
    address public m_controller;
}


/// @title StandardToken which can be minted by another contract.
contract MintableMultiownedToken is MultiownedControlled, StandardToken {

    /// @dev parameters of an extra token emission
    struct EmissionInfo {
        // tokens created
        uint256 created;

        // totalSupply at the moment of emission (excluding created tokens)
        uint256 totalSupplyWas;
    }

    event Mint(address indexed to, uint256 amount);
    event Emission(uint256 tokensCreated, uint256 totalSupplyWas, uint256 time);
    event Dividend(address indexed to, uint256 amount);


    // PUBLIC interface

    function MintableMultiownedToken(address[] _owners, uint _signaturesRequired, address _minter)
        MultiownedControlled(_owners, _signaturesRequired, _minter)
    {
        dividendsPool = this;   // or any other special unforgeable value, actually

        // emission #0 is a dummy: because of default value 0 in m_lastAccountEmission
        m_emissions.push(EmissionInfo({created: 0, totalSupplyWas: 0}));
    }

    /// @notice Request dividends for current account.
    function requestDividends() external {
        payDividendsTo(msg.sender);
    }

    /// @notice hook on standard ERC20#transfer to pay dividends
    function transfer(address _to, uint256 _value) returns (bool) {
        payDividendsTo(msg.sender);
        payDividendsTo(_to);
        return super.transfer(_to, _value);
    }

    /// @notice hook on standard ERC20#transferFrom to pay dividends
    function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
        payDividendsTo(_from);
        payDividendsTo(_to);
        return super.transferFrom(_from, _to, _value);
    }

    // Disabled: this could be undesirable because sum of (balanceOf() for each token owner) != totalSupply
    // (but: sum of (balances[owner] for each token owner) == totalSupply!).
    //
    // @notice hook on standard ERC20#balanceOf to take dividends into consideration
    // function balanceOf(address _owner) constant returns (uint256) {
    //     var (hasNewDividends, dividends) = calculateDividendsFor(_owner);
    //     return hasNewDividends ? super.balanceOf(_owner).add(dividends) : super.balanceOf(_owner);
    // }


    /// @dev mints new tokens
    function mint(address _to, uint256 _amount) external onlyController {
        require(m_externalMintingEnabled);
        payDividendsTo(_to);
        mintInternal(_to, _amount);
    }

    /// @dev disables mint(), irreversible!
    function disableMinting() external onlyController {
        require(m_externalMintingEnabled);
        m_externalMintingEnabled = false;
    }


    // INTERNAL functions

    /**
     * @notice Starts new token emission
     * @param _tokensCreated Amount of tokens to create
     * @dev Dividends are not distributed immediately as it could require billions of gas,
     * instead they are `pulled` by a holder from dividends pool account before any update to the holder account occurs.
     */
    function emissionInternal(uint256 _tokensCreated) internal {
        require(0 != _tokensCreated);
        require(_tokensCreated < totalSupply / 2);  // otherwise it looks like an error

        uint256 totalSupplyWas = totalSupply;

        m_emissions.push(EmissionInfo({created: _tokensCreated, totalSupplyWas: totalSupplyWas}));
        mintInternal(dividendsPool, _tokensCreated);

        Emission(_tokensCreated, totalSupplyWas, now);
    }

    function mintInternal(address _to, uint256 _amount) internal {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Transfer(this, _to, _amount);
        Mint(_to, _amount);
    }

    /// @dev adds dividends to the account _to
    function payDividendsTo(address _to) internal {
        var (hasNewDividends, dividends) = calculateDividendsFor(_to);
        if (!hasNewDividends)
            return;

        if (0 != dividends) {
            balances[dividendsPool] = balances[dividendsPool].sub(dividends);
            balances[_to] = balances[_to].add(dividends);
            Transfer(dividendsPool, _to, dividends);
        }
        m_lastAccountEmission[_to] = getLastEmissionNum();
    }

    /// @dev calculates dividends for the account _for
    /// @return (true if state has to be updated, dividend amount (could be 0!))
    function calculateDividendsFor(address _for) constant internal returns (bool hasNewDividends, uint dividends) {
        assert(_for != dividendsPool);  // no dividends for the pool!

        uint256 lastEmissionNum = getLastEmissionNum();
        uint256 lastAccountEmissionNum = m_lastAccountEmission[_for];
        assert(lastAccountEmissionNum <= lastEmissionNum);
        if (lastAccountEmissionNum == lastEmissionNum)
            return (false, 0);

        uint256 initialBalance = balances[_for];    // beware of recursion!
        if (0 == initialBalance)
            return (true, 0);

        uint256 balance = initialBalance;
        for (uint256 emissionToProcess = lastAccountEmissionNum + 1; emissionToProcess <= lastEmissionNum; emissionToProcess++) {
            EmissionInfo storage emission = m_emissions[emissionToProcess];
            assert(0 != emission.created && 0 != emission.totalSupplyWas);

            uint256 dividend = balance.mul(emission.created).div(emission.totalSupplyWas);
            Dividend(_for, dividend);

            balance = balance.add(dividend);
        }

        return (true, balance.sub(initialBalance));
    }

    function getLastEmissionNum() private constant returns (uint256) {
        return m_emissions.length - 1;
    }


    // FIELDS

    /// @notice if this true then token is still externally mintable (but this flag does't affect emissions!)
    bool public m_externalMintingEnabled = true;

    /// @dev internal address of dividends in balances mapping.
    address dividendsPool;

    /// @notice record of issued dividend emissions
    EmissionInfo[] public m_emissions;

    /// @dev for each token holder: last emission (index in m_emissions) which was processed for this holder
    mapping(address => uint256) m_lastAccountEmission;
}


/// @title Storiqa coin contract
contract STQToken is CirculatingToken, MintableMultiownedToken {


    // PUBLIC interface

    function STQToken(address[] _owners)
        MintableMultiownedToken(_owners, 2, /* minter: */ address(0))
    {
        require(3 == _owners.length);
    }

    /// @dev Allows token transfers
    function startCirculation() external onlyController {
        assert(enableCirculation());    // must be called once
    }

    /// @notice Starts new token emission
    /// @param _tokensCreatedInSTQ Amount of STQ (not STQ-wei!) to create, like 30 000 or so
    function emission(uint256 _tokensCreatedInSTQ) external onlymanyowners(sha3(msg.data)) {
        emissionInternal(_tokensCreatedInSTQ.mul(uint256(10) ** uint256(decimals)));
    }


    // FIELDS

    string public constant name = 'Storiqa Token';
    string public constant symbol = 'STQ';
    uint8 public constant decimals = 18;
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"startCirculation","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_externalMintingEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"amIOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"detachController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensCreatedInSTQ","type":"uint256"}],"name":"emission","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_multiOwnedRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"m_emissions","outputs":[{"name":"created","type":"uint256"},{"name":"totalSupplyWas","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"requestDividends","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_isCirculating","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensCreated","type":"uint256"},{"indexed":false,"name":"totalSupplyWas","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Emission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"CirculationEnabled","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"},{"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":false,"name":"controller","type":"address"}],"name":"ControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"was","type":"address"}],"name":"ControllerRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"FinalConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052610109805461ff00191661010017905534156200002057600080fd5b60405162002419380380620024198339810160405280805190910190505b80600260005b8282825b82825b6000806000845160008111801562000064575060fa8111155b15156200007057600080fd5b848651600082118015620000845750808211155b15156200009057600080fd5b5b8751600155600087815595505b87518610156200016e57878681518110620000b557fe5b906020019060200201519450600160a060020a03851615801590620000f05750620000ee85640100000000620009916200028382021704565b155b1515620000fc57600080fd5b620001186001870164010000000062001560620002a482021704565b93508460028561010081106200012a57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905585166000908152610102602052604090208490555b8560010195506200009e565b6200018664010000000062001453620002c882021704565b5b5b50505b50506101058054600160a060020a031916600160a060020a0387811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79550169250604091505051600160a060020a03909116815260200160405180910390a15b505061010980546201000060b060020a0319166201000030600160a060020a0316021790555061010a8054600181016200022f83826200032c565b916000526020600020906002020160005b604080519081016040526000808252602082015291905081518155602082015181600101555050505b50505080516003146200027b57600080fd5b5b506200038b565b600160a060020a03811660009081526101026020526040812054115b919050565b60008115801590620002b7575060fa8211155b1515620002c057fe5b50805b919050565b60015460009011620002d657fe5b60015460fa901115620002e557fe5b600260005b0160005b9054600160a060020a036101009290920a900416156200030a57fe5b6000541580159062000320575060015460005411155b15156200032957fe5b5b565b8154818355818115116200035b576002028160020283600052602060002091820191016200035b919062000361565b5b505050565b6200038891905b8082111562000384576000808255600182015560020162000368565b5090565b90565b61207e806200039b6000396000f300606060405236156101935763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610198578063095ea7b314610223578063173825d91461025957806318160ddd1461027a57806320190ccd1461029f57806323b872dd146102b45780632f54bf6e146102f0578063313ce5671461032357806340c10f191461034c5780634123cb6b1461037057806344cc5f7e146103955780634e4ab830146103bc57806357d444fd146103e357806358292a3d146103f85780637065cb481461041057806370a0823114610431578063787d64e4146104625780637e5cd5c11461048757806392eefe9b1461049c57806395d89b41146104bd578063a0e67e2b14610548578063a9059cbb146105af578063af107749146105e5578063b75c7dc614610613578063ba51a6df1461062b578063c2cf732614610643578063c41a360a14610679578063d4a9991f146106ab578063d7311963146106c0578063d785e5c9146106ef578063dd62ed3e14610716578063f00d4b5d1461074d575b600080fd5b34156101a357600080fd5b6101ab610774565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022e57600080fd5b610245600160a060020a03600435166024356107ab565b604051901515815260200160405180910390f35b341561026457600080fd5b610278600160a060020a03600435166107d4565b005b341561028557600080fd5b61028d610931565b60405190815260200160405180910390f35b34156102aa57600080fd5b610278610938565b005b34156102bf57600080fd5b610245600160a060020a0360043581169060243516604435610968565b604051901515815260200160405180910390f35b34156102fb57600080fd5b610245600160a060020a0360043516610991565b604051901515815260200160405180910390f35b341561032e57600080fd5b6103366109b2565b60405160ff909116815260200160405180910390f35b341561035757600080fd5b610278600160a060020a03600435166024356109b7565b005b341561037b57600080fd5b61028d610a03565b60405190815260200160405180910390f35b34156103a057600080fd5b610245610a09565b604051901515815260200160405180910390f35b34156103c757600080fd5b610245610a18565b604051901515815260200160405180910390f35b34156103ee57600080fd5b610278610a36565b005b341561040357600080fd5b610278600435610ac1565b005b341561041b57600080fd5b610278600160a060020a0360043516610b14565b005b341561043c57600080fd5b61028d600160a060020a0360043516610c3b565b60405190815260200160405180910390f35b341561046d57600080fd5b61028d610c5b565b60405190815260200160405180910390f35b341561049257600080fd5b610278610c61565b005b34156104a757600080fd5b610278600160a060020a0360043516610ca4565b005b34156104c857600080fd5b6101ab610d44565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561055357600080fd5b61055b610d7b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561059b5780820151818401525b602001610582565b505050509050019250505060405180910390f35b34156105ba57600080fd5b610245600160a060020a0360043516602435610dfe565b604051901515815260200160405180910390f35b34156105f057600080fd5b6105fb600435610e25565b60405191825260208201526040908101905180910390f35b341561061e57600080fd5b610278600435610e54565b005b341561063657600080fd5b610278600435610f20565b005b341561064e57600080fd5b610245600435600160a060020a0360243516610fb5565b604051901515815260200160405180910390f35b341561068457600080fd5b61068f60043561100d565b604051600160a060020a03909116815260200160405180910390f35b34156106b657600080fd5b61027861103e565b005b34156106cb57600080fd5b61068f61104a565b604051600160a060020a03909116815260200160405180910390f35b34156106fa57600080fd5b61024561105a565b604051901515815260200160405180910390f35b341561072157600080fd5b61028d600160a060020a0360043581169060243516611064565b60405190815260200160405180910390f35b341561075857600080fd5b610278600160a060020a0360043581169060243516611092565b005b60408051908101604052600d81527f53746f7269716120546f6b656e00000000000000000000000000000000000000602082015281565b6101095460009060ff1615156107c057600080fd5b6107ca83836111ca565b90505b5b92915050565b6000816107e081610991565b15156107eb57600080fd5b6001805403600081118015610801575060fa8111155b151561080c57600080fd5b60005460018054036000821180156108245750808211155b151561082f57600080fd5b60003660405180838380828437820191505092505050604051809103902061085681611273565b1561092357610863611453565b61086b6114b2565b600160a060020a0387166000908152610102602052604090205461088e90611560565b9550600060028761010081106108a057fe5b0160005b8154600160a060020a039384166101009290920a91820291840219161790558716600090815261010260205260408120556108dd611582565b6108e5611453565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051600160a060020a03909116815260200160405180910390a15b5b5b505b50505b505b505050565b6101065481565b6101055433600160a060020a0390811691161461095457600080fd5b61095c611768565b151561096457fe5b5b5b565b6000610973846117c0565b61097c836117c0565b6109878484846118ca565b90505b9392505050565b600160a060020a03811660009081526101026020526040812054115b919050565b601281565b6101055433600160a060020a039081169116146109d357600080fd5b61010954610100900460ff1615156109ea57600080fd5b6109f3826117c0565b6109fd82826118f5565b5b5b5050565b60015481565b61010954610100900460ff1681565b6000610a2333610991565b1515610a2e57600080fd5b5060015b5b90565b6101055460009033600160a060020a03908116911614610a5557600080fd5b50610105805473ffffffffffffffffffffffffffffffffffffffff198116909155600160a060020a03167fc82cd8e6862d9c7b2c4c1d4f8dbac09a809e276399883e1070457f61a0f5349081604051600160a060020a03909116815260200160405180910390a15b5b50565b600036604051808383808284378201915050925050506040518091039020610ae881611273565b156109fd576109fd610b0883670de0b6b3a764000063ffffffff6119c016565b6119ef565b5b5b5b5050565b80610b1e81610991565b15610b2857600080fd5b600154600101600081118015610b3f575060fa8111155b1515610b4a57600080fd5b600036604051808383808284378201915050925050506040518091039020610b7181611273565b1561092a57610b7e611453565b610b866114b2565b6001805481019081905584906002906101008110610ba057fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610bd1600154611560565b600160a060020a03851660009081526101026020526040902055610bf3611453565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051600160a060020a03909116815260200160405180910390a15b5b5b505b505b5050565b600160a060020a038116600090815261010760205260409020545b919050565b60005481565b6101055433600160a060020a03908116911614610c7d57600080fd5b61010954610100900460ff161515610c9457600080fd5b610109805461ff00191690555b5b565b600036604051808383808284378201915050925050506040518091039020610ccb81611273565b156109fd57610105805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79116604051600160a060020a03909116815260200160405180910390a15b5b5b5050565b60408051908101604052600381527f5354510000000000000000000000000000000000000000000000000000000000602082015281565b610d83611f5a565b610d8b611f5a565b6000600154604051805910610d9d5750595b908082528060200260200182016040525b509150600090505b600154811015610df557610dc98161100d565b828281518110610dd557fe5b600160a060020a039092166020928302909101909101525b600101610db6565b8192505b505090565b6000610e09336117c0565b610e12836117c0565b6107ca8383611acc565b90505b92915050565b61010a805482908110610e3457fe5b906000526020600020906002020160005b50805460019091015490915082565b60008082610e6181611af5565b1515610e6c57600080fd5b610e7533610991565b1515610e8057600080fd5b610e8933611b0d565b6000858152610103602052604081206001810154929550935090841611610eaf57600080fd5b610eb884611b41565b815460019081018355820180548490039055610ed384611b41565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b50505050565b80600154600082118015610f345750808211155b1515610f3f57600080fd5b600036604051808383808284378201915050925050506040518091039020610f6681611273565b1561092a576000849055610f786114b2565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da8460405190815260200160405180910390a15b5b5b505b505050565b600082610fc181611af5565b1515610fcc57600080fd5b82610fd681610991565b1515610fe157600080fd5b610fea84611b0d565b6000868152610103602052604090206001015416151592505b5b505b5092915050565b6000600260018301610100811061102057fe5b0160005b9054906101000a9004600160a060020a031690505b919050565b610964336117c0565b5b565b61010554600160a060020a031681565b6101095460ff1681565b600160a060020a03808316600090815261010860209081526040808320938516835292905220545b92915050565b60008261109e81610991565b15156110a957600080fd5b826110b381610991565b156110bd57600080fd5b6000366040518083838082843782019150509250505060405180910390206110e481611273565b15610927576110f1611453565b6110f96114b2565b600160a060020a0386166000908152610102602052604090205461111c90611560565b935084600285610100811061112d57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905586811660009081526101026020526040808220829055918716815220849055611177611453565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051600160a060020a039283168152911660208201526040908101905180910390a15b5b5b505b505b50505050565b60008115806111fd5750600160a060020a0333811660009081526101086020908152604080832093871683529290522054155b151561120857600080fd5b600160a060020a0333811660008181526101086020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600061128133610991565b151561128c57600080fd5b6101045461020014156112a1576112a16114b2565b5b60008481526101036020526040902091506112bc84611af5565b1515611313576000805483556001808401919091556101048054916112e391908301611f6c565b60028301819055610104805486929081106112fa57fe5b906000526020600020900160005b505561131384611b41565b5b61131d33611b0d565b905080826001015416600014156114495781546000901161133a57fe5b8154600114156113e957600084815261010360205260409020600201546101048054909190811061136757fe5b906000526020600020900160005b50600090819055848152610103602052604080822082815560018101839055600201919091557f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd16903390869051600160a060020a03909216825260208201526040908101905180910390a160019250611449565b81546000190182556001820180548217905561140484611b41565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b5b5050919050565b6001546000901161146057fe5b60015460fa90111561146e57fe5b600260005b0160005b9054600160a060020a036101009290920a9004161561149257fe5b6000541580159061095c575060015460005411155b151561096457fe5b5b565b6000806114be33610991565b15156114c957600080fd5b50506101045460005b8181101561154d576101048054829081106114e957fe5b906000526020600020900160005b5054156115445761010360006101048381548110151561151357fe5b906000526020600020900160005b505481526020810191909152604001600090812081815560018101829055600201555b5b6001016114d2565b6109fd6101046000611f96565b5b5b5050565b60008115801590611572575060fa8211155b151561157a57fe5b50805b919050565b60015b600154811015610abd575b600154811080156115c5575060028161010081106115aa57fe5b0160005b9054600160a060020a036101009290920a90041615155b156115d257600101611590565b5b6001805411801561160a575060015460029061010081106115f057fe5b0160005b9054600160a060020a036101009290920a900416155b1561161e57600180546000190190556115d2565b600154811080156116565750600154600290610100811061163b57fe5b0160005b9054600160a060020a036101009290920a90041615155b80156116855750600281610100811061166b57fe5b0160005b9054600160a060020a036101009290920a900416155b1561175f57600154600290610100811061169b57fe5b0160005b9054906101000a9004600160a060020a0316600282610100811015156116c157fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550806101026000600284610100811015156116fd57fe5b0160005b905461010091820a9004600160a060020a031682526020820192909252604001600090812092909255600154600291811061173857fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b611585565b5b50565b6101095460009060ff161561177f57506000610a32565b610109805460ff191660011790557f61ff8191b26826d8bb82f4fa7cb8ef434fa4f34635af54cac08f7c476c5e279460405160405180910390a15060015b90565b6000806117cc83611b98565b915091508115156117dc5761092c565b80156118a25761010954620100009004600160a060020a03166000908152610107602052604090205461180f9082611d48565b61010954600160a060020a0362010000909104811660009081526101076020526040808220939093559085168152205461184f908263ffffffff611d5f16565b600160a060020a0380851660008181526101076020526040908190209390935561010954909262010000909104909116906000805160206120338339815191529084905190815260200160405180910390a35b6118aa611d79565b600160a060020a038416600090815261010b60205260409020555b505050565b6101095460009060ff1615156118df57600080fd5b610987848484611d85565b90505b5b9392505050565b61010654611909908263ffffffff611d5f16565b61010655600160a060020a03821660009081526101076020526040902054611937908263ffffffff611d5f16565b600160a060020a038084166000818152610107602052604090819020939093559130909116906000805160206120338339815191529084905190815260200160405180910390a381600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405190815260200160405180910390a25b5050565b60008282028315806119dc57508284828115156119d957fe5b04145b15156119e457fe5b8091505b5092915050565b60008115156119fd57600080fd5b610106546002905b048210611a1157600080fd5b506101065461010a805460018101611a298382611fb8565b916000526020600020906002020160005b6040805190810160405285815260208101859052919050815181556020820151600190910155505061010954611a8090600160a060020a036201000090910416836118f5565b7fb6d34f12e241bbb736de0a0cc42ddcb06ed877521d75a28e8c375794fadaf23582824260405180848152602001838152602001828152602001935050505060405180910390a15b5050565b6101095460009060ff161515611ae157600080fd5b6107ca8383611e8d565b90505b5b92915050565b6000818152610103602052604090205415155b919050565b600160a060020a038116600090815261010260205260408120548190611b3290611560565b90508060020a91505b50919050565b60008181526101036020526040902080541515611b5a57fe5b600281015461010480548492908110611b6f57fe5b906000526020600020900160005b505414611b8657fe5b600054815411156109fd57fe5b5b5050565b600080600080600080600080600061010960029054906101000a9004600160a060020a0316600160a060020a03168a600160a060020a031614151515611bda57fe5b611be2611d79565b600160a060020a038b16600090815261010b6020526040902054909750955086861115611c0b57fe5b86861415611c1f5760009850889750611d3c565b600160a060020a038a16600090815261010760205260409020549450841515611c4f576001985060009750611d3c565b8493508560010192505b868311611d255761010a805484908110611c6f57fe5b906000526020600020906002020160005b50805490925015801590611c975750600182015415155b1515611c9f57fe5b60018201548254611cc89190611cbc90879063ffffffff6119c016565b9063ffffffff611f3e16565b905089600160a060020a03167ff6a7e669306918b018d1eb595a21c8180bdecc0c90847daef23f9cf5fbd4902a8260405190815260200160405180910390a2611d17848263ffffffff611d5f16565b93505b600190920191611c59565b6001611d37858763ffffffff611d4816565b985098505b50505050505050915091565b600082821115611d5457fe5b508082035b92915050565b6000828201838110156119e457fe5b8091505b5092915050565b61010a54600019015b90565b600160a060020a0380841660009081526101086020908152604080832033851684528252808320549386168352610107909152812054909190611dce908463ffffffff611d5f16565b600160a060020a03808616600090815261010760205260408082209390935590871681522054611e04908463ffffffff611d4816565b600160a060020a03861660009081526101076020526040902055611e2e818463ffffffff611d4816565b600160a060020a0380871660008181526101086020908152604080832033861684529091529081902093909355908616916000805160206120338339815191529086905190815260200160405180910390a3600191505b509392505050565b600160a060020a03331660009081526101076020526040812054611eb7908363ffffffff611d4816565b600160a060020a03338116600090815261010760205260408082209390935590851681522054611eed908363ffffffff611d5f16565b600160a060020a038085166000818152610107602052604090819020939093559133909116906000805160206120338339815191529085905190815260200160405180910390a35060015b92915050565b6000808284811515611f4c57fe5b0490508091505b5092915050565b60206040519081016040526000815290565b81548183558181151161092c5760008381526020902061092c918101908301611fea565b5b505050565b5080546000825590600052602060002090810190610abd9190611fea565b5b50565b81548183558181151161092c5760020281600202836000526020600020918201910161092c919061200b565b5b505050565b610a3291905b808211156120045760008155600101611ff0565b5090565b90565b610a3291905b808211156120045760008082556001820155600201612011565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a002900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e70000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d

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

-----Decoded View---------------
Found 5 constructor arguments :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e
Arg [3] : 000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e7
Arg [4] : 0000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d


   Swarm Source:
bzzr://806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a

 

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