Contract 0x165cFb9cCf8b185E03205Ab4118eA6afBdbA9203

 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Contract Source Code Verified (Exact Match)
Contract Name: SolidStamp
Compiler Version: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.24;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}




/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() public onlyOwner whenPaused {
    paused = false;
    emit Unpause();
  }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure 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 _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}


contract Upgradable is Ownable, Pausable {
    // Set in case the core contract is broken and an upgrade is required
    address public newContractAddress;

    /// @dev Emited when contract is upgraded - See README.md for updgrade plan
    event ContractUpgrade(address newContract);

    /// @dev Used to mark the smart contract as upgraded, in case there is a serious
    ///  breaking bug. This method does nothing but keep track of the new contract and
    ///  emit a message indicating that the new address is set. It's up to clients of this
    ///  contract to update to the new contract address in that case. (This contract will
    ///  be paused indefinitely if such an upgrade takes place.)
    /// @param _v2Address new address
    function setNewAddress(address _v2Address) external onlyOwner whenPaused {
        require(_v2Address != 0x0);
        newContractAddress = _v2Address;
        emit ContractUpgrade(_v2Address);
    }

}


contract SolidStampRegister is Ownable
{
/// @dev address of the current SolidStamp contract which can add audits
    address public ContractSolidStamp;

    /// @dev const value to indicate the contract is not audited
    uint8 public constant NOT_AUDITED = 0x00;

    /// @dev const value to indicate the contract is audited and approved
    uint8 public constant AUDITED_AND_APPROVED = 0x01;

    /// @dev const value to indicate the contract is audited and rejected
    uint8 public constant AUDITED_AND_REJECTED = 0x02;

    /// @dev struct representing the audit report and the audit outcome
    struct Audit {
        /// @dev AUDITED_AND_APPROVED or AUDITED_AND_REJECTED
        uint8 outcome;
        /// @dev IPFS hash of the audit report
        bytes reportIPFS;
    }

    /// @dev Maps auditor and code hash to the Audit struct.
    /// Map key is: keccack256(auditor address, contract codeHash)
    /// @dev codeHash is a sha3 from the contract byte code
    mapping (bytes32 => Audit) public Audits;

    /// @dev event fired when a contract is sucessfully audited
    event AuditRegistered(address auditor, bytes32 codeHash, bytes reportIPFS, bool isApproved);

    /// @notice SolidStampRegister constructor
    constructor() public {
    }

    /// @notice returns the outcome of the audit or NOT_AUDITED (0) if none
    /// @param _auditor audtior address
    /// @param _codeHash contract code-hash
    function getAuditOutcome(address _auditor, bytes32 _codeHash) public view returns (uint8)
    {
        bytes32 hashAuditorCode = keccak256(abi.encodePacked(_auditor, _codeHash));
        return Audits[hashAuditorCode].outcome;
    }

    /// @notice returns the audit report IPFS of the audit or 0x0 if none
    /// @param _auditor audtior address
    /// @param _codeHash contract code-hash
    function getAuditReportIPFS(address _auditor, bytes32 _codeHash) public view returns (bytes)
    {
        bytes32 hashAuditorCode = keccak256(abi.encodePacked(_auditor, _codeHash));
        return Audits[hashAuditorCode].reportIPFS;
    }

    /// @notice marks contract as audited
    /// @param _codeHash the code hash of the stamped contract. _codeHash equals to sha3 of the contract byte-code
    /// @param _reportIPFS IPFS hash of the audit report
    /// @param _isApproved whether the contract is approved or rejected
    function registerAudit(bytes32 _codeHash, bytes _reportIPFS, bool _isApproved) public
    {
        require(_codeHash != 0x0, "codeHash cannot be 0x0");
        require(_reportIPFS.length != 0x0, "report IPFS cannot be 0x0");
        bytes32 hashAuditorCode = keccak256(abi.encodePacked(msg.sender, _codeHash));

        Audit storage audit = Audits[hashAuditorCode];
        require(audit.outcome == NOT_AUDITED, "already audited");

        if ( _isApproved )
            audit.outcome = AUDITED_AND_APPROVED;
        else
            audit.outcome = AUDITED_AND_REJECTED;
        audit.reportIPFS = _reportIPFS;
        SolidStamp(ContractSolidStamp).auditContract(msg.sender, _codeHash, _reportIPFS, _isApproved);
        emit AuditRegistered(msg.sender, _codeHash, _reportIPFS, _isApproved);
    }

    /// @notice marks multiple contracts as audited
    /// @param _codeHashes the code hashes of the stamped contracts. each _codeHash equals to sha3 of the contract byte-code
    /// @param _reportIPFS IPFS hash of the audit report
    /// @param _isApproved whether the contracts are approved or rejected
    function registerAudits(bytes32[] _codeHashes, bytes _reportIPFS, bool _isApproved) public
    {
        for(uint i=0; i<_codeHashes.length; i++ )
        {
            registerAudit(_codeHashes[i], _reportIPFS, _isApproved);
        }
    }


    event SolidStampContractChanged(address newSolidStamp);

    /// @dev Transfers SolidStamp contract a _newSolidStamp.
    /// @param _newSolidStamp The address to transfer SolidStamp address to.
    function changeSolidStampContract(address _newSolidStamp) public onlyOwner {
      require(_newSolidStamp != address(0), "SolidStamp contract cannot be 0x0");
      emit SolidStampContractChanged(_newSolidStamp);
      ContractSolidStamp = _newSolidStamp;
    }

    /// @notice We don't want your arbitrary ether
    function() payable public {
        revert();
    }    
}

/// @title The main SolidStamp.com contract
contract SolidStamp is Ownable, Pausable, Upgradable {
    using SafeMath for uint;

    /// @dev const value to indicate the contract is audited and approved
    uint8 public constant NOT_AUDITED = 0x00;

    /// @dev minimum amount of time for an audit request
    uint public constant MIN_AUDIT_TIME = 24 hours;

    /// @dev maximum amount of time for an audit request
    uint public constant MAX_AUDIT_TIME = 28 days;

    /// @dev aggregated amount of audit requests
    uint public TotalRequestsAmount = 0;

    // @dev amount of collected commision available to withdraw
    uint public AvailableCommission = 0;

    // @dev commission percentage, initially 1%
    uint public Commission = 1;

    /// @dev event fired when the service commission is changed
    event NewCommission(uint commmission);

    address public SolidStampRegisterAddress;

    /// @notice SolidStamp constructor
    constructor(address _addressRegistrySolidStamp) public {
        SolidStampRegisterAddress = _addressRegistrySolidStamp;
    }

    /// @notice Audit request
    struct AuditRequest {
        // amount of Ethers offered by a particular requestor for an audit
        uint amount;
        // request expiration date
        uint expireDate;
    }

    /// @dev Maps auditor and code hash to the total reward offered for auditing
    /// the particular contract by the particular auditor.
    /// Map key is: keccack256(auditor address, contract codeHash)
    /// @dev codeHash is a sha3 from the contract byte code
    mapping (bytes32 => uint) public Rewards;

    /// @dev Maps requestor, auditor and codeHash to an AuditRequest
    /// Map key is: keccack256(auditor address, requestor address, contract codeHash)
    mapping (bytes32 => AuditRequest) public AuditRequests;

    /// @dev event fired upon successul audit request
    event AuditRequested(address auditor, address bidder, bytes32 codeHash, uint amount, uint expireDate);
    /// @dev event fired when an request is sucessfully withdrawn
    event RequestWithdrawn(address auditor, address bidder, bytes32 codeHash, uint amount);
    /// @dev event fired when a contract is sucessfully audited
    event ContractAudited(address auditor, bytes32 codeHash, bytes reportIPFS, bool isApproved, uint reward);

    /// @notice registers an audit request
    /// @param _auditor the address of the auditor the request is directed to
    /// @param _codeHash the code hash of the contract to audit. _codeHash equals to sha3 of the contract byte-code
    /// @param _auditTime the amount of time after which the requestor can withdraw the request
    function requestAudit(address _auditor, bytes32 _codeHash, uint _auditTime)
    public whenNotPaused payable
    {
        require(_auditor != 0x0, "_auditor cannot be 0x0");
        // audit request cannot expire too quickly or last too long
        require(_auditTime >= MIN_AUDIT_TIME, "_auditTime should be >= MIN_AUDIT_TIME");
        require(_auditTime <= MAX_AUDIT_TIME, "_auditTime should be <= MIN_AUDIT_TIME");
        require(msg.value > 0, "msg.value should be >0");

        // revert if the contract is already audited by the auditor
        uint8 outcome = SolidStampRegister(SolidStampRegisterAddress).getAuditOutcome(_auditor, _codeHash);
        require(outcome == NOT_AUDITED, "contract already audited");

        bytes32 hashAuditorCode = keccak256(abi.encodePacked(_auditor, _codeHash));
        uint currentReward = Rewards[hashAuditorCode];
        uint expireDate = now.add(_auditTime);
        Rewards[hashAuditorCode] = currentReward.add(msg.value);
        TotalRequestsAmount = TotalRequestsAmount.add(msg.value);

        bytes32 hashAuditorRequestorCode = keccak256(abi.encodePacked(_auditor, msg.sender, _codeHash));
        AuditRequest storage request = AuditRequests[hashAuditorRequestorCode];
        if ( request.amount == 0 ) {
            // first request from msg.sender to audit contract _codeHash by _auditor
            AuditRequests[hashAuditorRequestorCode] = AuditRequest({
                amount : msg.value,
                expireDate : expireDate
            });
            emit AuditRequested(_auditor, msg.sender, _codeHash, msg.value, expireDate);
        } else {
            // Request already exists. Increasing value
            request.amount = request.amount.add(msg.value);
            // if new expireDate is later than existing one - increase the existing one
            if ( expireDate > request.expireDate )
                request.expireDate = expireDate;
            // event returns the total request value and its expireDate
            emit AuditRequested(_auditor, msg.sender, _codeHash, request.amount, request.expireDate);
        }
    }

    /// @notice withdraws an audit request
    /// @param _auditor the address of the auditor the request is directed to
    /// @param _codeHash the code hash of the contract to audit. _codeHash equals to sha3 of the contract byte-code
    function withdrawRequest(address _auditor, bytes32 _codeHash)
    public
    {
        bytes32 hashAuditorCode = keccak256(abi.encodePacked(_auditor, _codeHash));

        // revert if the contract is already audited by the auditor
        uint8 outcome = SolidStampRegister(SolidStampRegisterAddress).getAuditOutcome(_auditor, _codeHash);
        require(outcome == NOT_AUDITED, "contract already audited");

        bytes32 hashAuditorRequestorCode = keccak256(abi.encodePacked(_auditor, msg.sender, _codeHash));
        AuditRequest storage request = AuditRequests[hashAuditorRequestorCode];
        require(request.amount > 0, "nothing to withdraw");
        require(now > request.expireDate, "cannot withdraw before request.expireDate");

        uint amount = request.amount;
        delete request.amount;
        delete request.expireDate;
        Rewards[hashAuditorCode] = Rewards[hashAuditorCode].sub(amount);
        TotalRequestsAmount = TotalRequestsAmount.sub(amount);
        emit RequestWithdrawn(_auditor, msg.sender, _codeHash, amount);
        msg.sender.transfer(amount);
    }

    /// @notice transfers reward to the auditor. Called by SolidStampRegister after the contract is audited
    /// @param _auditor the auditor who audited the contract
    /// @param _codeHash the code hash of the stamped contract. _codeHash equals to sha3 of the contract byte-code
    /// @param _reportIPFS IPFS hash of the audit report
    /// @param _isApproved whether the contract is approved or rejected
    function auditContract(address _auditor, bytes32 _codeHash, bytes _reportIPFS, bool _isApproved)
    public whenNotPaused onlySolidStampRegisterContract
    {
        bytes32 hashAuditorCode = keccak256(abi.encodePacked(_auditor, _codeHash));
        uint reward = Rewards[hashAuditorCode];
        TotalRequestsAmount = TotalRequestsAmount.sub(reward);
        uint commissionKept = calcCommission(reward);
        AvailableCommission = AvailableCommission.add(commissionKept);
        emit ContractAudited(_auditor, _codeHash, _reportIPFS, _isApproved, reward);
        _auditor.transfer(reward.sub(commissionKept));
    }

    /**
     * @dev Throws if called by any account other than the contractSolidStamp
     */
    modifier onlySolidStampRegisterContract() {
      require(msg.sender == SolidStampRegisterAddress, "can be only run by SolidStampRegister contract");
      _;
    }

    /// @dev const value to indicate the maximum commision service owner can set
    uint public constant MAX_COMMISSION = 9;

    /// @notice ability for owner to change the service commmission
    /// @param _newCommission new commision percentage
    function changeCommission(uint _newCommission) public onlyOwner whenNotPaused {
        require(_newCommission <= MAX_COMMISSION, "commission should be <= MAX_COMMISSION");
        require(_newCommission != Commission, "_newCommission==Commmission");
        Commission = _newCommission;
        emit NewCommission(Commission);
    }

    /// @notice calculates the SolidStamp commmission
    /// @param _amount amount to calcuate the commission from
    function calcCommission(uint _amount) private view returns(uint) {
        return _amount.mul(Commission)/100; // service commision
    }

    /// @notice ability for owner to withdraw the commission
    /// @param _amount amount to withdraw
    function withdrawCommission(uint _amount) public onlyOwner {
        // cannot withdraw money reserved for requests
        require(_amount <= AvailableCommission, "Cannot withdraw more than available");
        AvailableCommission = AvailableCommission.sub(_amount);
        msg.sender.transfer(_amount);
    }

    /// @dev Override unpause so we can't have newContractAddress set,
    ///  because then the contract was upgraded.
    /// @notice This is public rather than external so we can call super.unpause
    ///  without using an expensive CALL.
    function unpause() public onlyOwner whenPaused {
        require(newContractAddress == address(0), "new contract cannot be 0x0");

        // Actually unpause the contract.
        super.unpause();
    }

    /// @notice We don't want your arbitrary ether
    function() payable public {
        revert();
    }
}

Contract ABI
[{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"Rewards","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawCommission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"AuditRequests","outputs":[{"name":"amount","type":"uint256"},{"name":"expireDate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Commission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NOT_AUDITED","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SolidStampRegisterAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AvailableCommission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_v2Address","type":"address"}],"name":"setNewAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_auditor","type":"address"},{"name":"_codeHash","type":"bytes32"},{"name":"_auditTime","type":"uint256"}],"name":"requestAudit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"TotalRequestsAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_COMMISSION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_AUDIT_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_auditor","type":"address"},{"name":"_codeHash","type":"bytes32"},{"name":"_reportIPFS","type":"bytes"},{"name":"_isApproved","type":"bool"}],"name":"auditContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_AUDIT_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCommission","type":"uint256"}],"name":"changeCommission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_auditor","type":"address"},{"name":"_codeHash","type":"bytes32"}],"name":"withdrawRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_addressRegistrySolidStamp","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commmission","type":"uint256"}],"name":"NewCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auditor","type":"address"},{"indexed":false,"name":"bidder","type":"address"},{"indexed":false,"name":"codeHash","type":"bytes32"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"expireDate","type":"uint256"}],"name":"AuditRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auditor","type":"address"},{"indexed":false,"name":"bidder","type":"address"},{"indexed":false,"name":"codeHash","type":"bytes32"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"RequestWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auditor","type":"address"},{"indexed":false,"name":"codeHash","type":"bytes32"},{"indexed":false,"name":"reportIPFS","type":"bytes"},{"indexed":false,"name":"isApproved","type":"bool"},{"indexed":false,"name":"reward","type":"uint256"}],"name":"ContractAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code
60806040526000805460a060020a60ff02191681556002819055600355600160045534801561002d57600080fd5b5060405160208061176f833981016040525160008054600160a060020a0319908116331790915560058054600160a060020a03909316929091169190911790556116f38061007c6000396000f3006080604052600436106101325763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663173bb69d811461013757806317face84146101615780631e9b12bd1461017b57806327a2aee2146101ac578063291194b2146101c15780632ed5016a146101ec5780633f4ba83a1461021d5780635c975abb14610232578063605a8ea31461025b5780636af04a5714610270578063715018a614610285578063715879881461029a5780638456cb59146102bb5780638da5cb5b146102d05780639bf1f148146102e55780639eea480f146102ff578063ae97dde814610314578063c16bca1314610329578063d682b6011461033e578063dc1abb6e146103ab578063df922f3a146103c0578063ea212b1e146103d8578063f2fde38b146103fc575b600080fd5b34801561014357600080fd5b5061014f60043561041d565b60408051918252519081900360200190f35b34801561016d57600080fd5b5061017960043561042f565b005b34801561018757600080fd5b5061019360043561050d565b6040805192835260208301919091528051918290030190f35b3480156101b857600080fd5b5061014f610526565b3480156101cd57600080fd5b506101d661052c565b6040805160ff9092168252519081900360200190f35b3480156101f857600080fd5b50610201610531565b60408051600160a060020a039092168252519081900360200190f35b34801561022957600080fd5b50610179610540565b34801561023e57600080fd5b506102476105da565b604080519115158252519081900360200190f35b34801561026757600080fd5b5061014f6105ea565b34801561027c57600080fd5b506102016105f0565b34801561029157600080fd5b506101796105ff565b3480156102a657600080fd5b50610179600160a060020a036004351661066b565b3480156102c757600080fd5b50610179610710565b3480156102dc57600080fd5b5061020161078b565b610179600160a060020a036004351660243560443561079a565b34801561030b57600080fd5b5061014f610d3a565b34801561032057600080fd5b5061014f610d40565b34801561033557600080fd5b5061014f610d45565b34801561034a57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610179948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750505050913515159250610d4c915050565b3480156103b757600080fd5b5061014f610fed565b3480156103cc57600080fd5b50610179600435610ff4565b3480156103e457600080fd5b50610179600160a060020a0360043516602435611136565b34801561040857600080fd5b50610179600160a060020a036004351661153b565b60066020526000908152604090205481565b600054600160a060020a0316331461044657600080fd5b6003548111156104c6576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f74207769746864726177206d6f7265207468616e20617661696c6160448201527f626c650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6003546104d9908263ffffffff61155e16565b600355604051339082156108fc029083906000818181858888f19350505050158015610509573d6000803e3d6000fd5b5050565b6007602052600090815260409020805460019091015482565b60045481565b600081565b600554600160a060020a031681565b600054600160a060020a0316331461055757600080fd5b60005460a060020a900460ff16151561056f57600080fd5b600154600160a060020a0316156105d0576040805160e560020a62461bcd02815260206004820152601a60248201527f6e657720636f6e74726163742063616e6e6f7420626520307830000000000000604482015290519081900360640190fd5b6105d8611575565b565b60005460a060020a900460ff1681565b60035481565b600154600160a060020a031681565b600054600160a060020a0316331461061657600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a0316331461068257600080fd5b60005460a060020a900460ff16151561069a57600080fd5b600160a060020a03811615156106af57600080fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa4461993059181900360200190a150565b600054600160a060020a0316331461072757600080fd5b60005460a060020a900460ff161561073e57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600080600080600080600060149054906101000a900460ff161515156107bf57600080fd5b600160a060020a038916151561081f576040805160e560020a62461bcd02815260206004820152601660248201527f5f61756469746f722063616e6e6f742062652030783000000000000000000000604482015290519081900360640190fd5b620151808710156108a0576040805160e560020a62461bcd02815260206004820152602660248201527f5f617564697454696d652073686f756c64206265203e3d204d494e5f4155444960448201527f545f54494d450000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6224ea00871115610921576040805160e560020a62461bcd02815260206004820152602660248201527f5f617564697454696d652073686f756c64206265203c3d204d494e5f4155444960448201527f545f54494d450000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60003411610979576040805160e560020a62461bcd02815260206004820152601660248201527f6d73672e76616c75652073686f756c64206265203e3000000000000000000000604482015290519081900360640190fd5b600554604080517f1f74de51000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152602482018c905291519190921691631f74de519160448083019260209291908290030181600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b5051955060ff861615610a6f576040805160e560020a62461bcd02815260206004820152601860248201527f636f6e747261637420616c726561647920617564697465640000000000000000604482015290519081900360640190fd5b604080516c01000000000000000000000000600160a060020a038c160260208083019190915260348083018c905283518084039091018152605490920192839052815191929182918401908083835b60208310610add5780518252601f199092019160209182019101610abe565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600690925292902054919850909650610b2992504291508990506115eb565b9250610b3b843463ffffffff6115eb16565b600086815260066020526040902055600254610b5d903463ffffffff6115eb16565b600255604080516c01000000000000000000000000600160a060020a038c1681026020808401919091523391909102603483015260488083018c905283518084039091018152606890920192839052815191929182918401908083835b60208310610bd95780518252601f199092019160209182019101610bba565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526007909252929020805492965094505015159150610ca890505760408051808201825234808252602080830187815260008781526007835285902093518455516001909301929092558251600160a060020a038d16815233928101929092528183018b905260608201526080810185905290517ff93e0332dc516d58e202ee300414682802c478032c94c3edb27b078e13dcf9da9181900360a00190a1610d2f565b8054610cba903463ffffffff6115eb16565b81556001810154831115610cd057600181018390555b8054600182015460408051600160a060020a038d1681523360208201528082018c905260608101939093526080830191909152517ff93e0332dc516d58e202ee300414682802c478032c94c3edb27b078e13dcf9da9181900360a00190a15b505050505050505050565b60025481565b600981565b6201518081565b600080548190819060a060020a900460ff1615610d6857600080fd5b600554600160a060020a03163314610df0576040805160e560020a62461bcd02815260206004820152602e60248201527f63616e206265206f6e6c792072756e20627920536f6c69645374616d7052656760448201527f697374657220636f6e7472616374000000000000000000000000000000000000606482015290519081900360840190fd5b604080516c01000000000000000000000000600160a060020a038a160260208083019190915260348083018a905283518084039091018152605490920192839052815191929182918401908083835b60208310610e5e5780518252601f199092019160209182019101610e3f565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526006909252929020546002549297509550610eac935090915084905061155e565b600255610eb8826115f8565b600354909150610ece908263ffffffff6115eb16565b60035560408051600160a060020a0389168152602080820189905286151560608301526080820185905260a092820183815288519383019390935287517f80ccbecf8255fa299ae49c92a7b870d8a8d7fcc7275c7a18c19cbd368f4d4c12938b938b938b938b938a9392909160c084019187019080838360005b83811015610f60578181015183820152602001610f48565b50505050905090810190601f168015610f8d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1600160a060020a0387166108fc610fbb848463ffffffff61155e16565b6040518115909202916000818181858888f19350505050158015610fe3573d6000803e3d6000fd5b5050505050505050565b6224ea0081565b600054600160a060020a0316331461100b57600080fd5b60005460a060020a900460ff161561102257600080fd5b60098111156110a1576040805160e560020a62461bcd02815260206004820152602660248201527f636f6d6d697373696f6e2073686f756c64206265203c3d204d41585f434f4d4d60448201527f495353494f4e0000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004548114156110fb576040805160e560020a62461bcd02815260206004820152601b60248201527f5f6e6577436f6d6d697373696f6e3d3d436f6d6d6d697373696f6e0000000000604482015290519081900360640190fd5b60048190556040805182815290517f2700a5758402e407360dc5b208b6a2fe3a892995603588353018a707273691999181900360200190a150565b600080600080600086866040516020018083600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106111be5780518252601f19909201916020918201910161119f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206005547f1f74de51000000000000000000000000000000000000000000000000000000008452600160a060020a038f81166004860152602485018f90529551919c50949094169550631f74de51945060448083019491935090918290030181600087803b15801561125557600080fd5b505af1158015611269573d6000803e3d6000fd5b505050506040513d602081101561127f57600080fd5b5051935060ff8416156112dc576040805160e560020a62461bcd02815260206004820152601860248201527f636f6e747261637420616c726561647920617564697465640000000000000000604482015290519081900360640190fd5b604080516c01000000000000000000000000600160a060020a038a1681026020808401919091523391909102603483015260488083018a905283518084039091018152606890920192839052815191929182918401908083835b602083106113555780518252601f199092019160209182019101611336565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260079092529281208054939850965090911192506113ed915050576040805160e560020a62461bcd02815260206004820152601360248201527f6e6f7468696e6720746f20776974686472617700000000000000000000000000604482015290519081900360640190fd5b6001820154421161146e576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207769746864726177206265666f726520726571756573742e6560448201527f7870697265446174650000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5080546000808355600183018190558581526006602052604090205461149a908263ffffffff61155e16565b6000868152600660205260409020556002546114bc908263ffffffff61155e16565b60025560408051600160a060020a03891681523360208201528082018890526060810183905290517f4f9b098b0f5f310cddfc3a97cd032f19f96f796df399b747621e82ece5dc18739181900360800190a1604051339082156108fc029083906000818181858888f19350505050158015610fe3573d6000803e3d6000fd5b600054600160a060020a0316331461155257600080fd5b61155b81611621565b50565b60008282111561156a57fe5b508082035b92915050565b600054600160a060020a0316331461158c57600080fd5b60005460a060020a900460ff1615156115a457600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b8181018281101561156f57fe5b600060646116116004548461169e90919063ffffffff16565b81151561161a57fe5b0492915050565b600160a060020a038116151561163657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008215156116af5750600061156f565b508181028183828115156116bf57fe5b041461156f57fe00a165627a7a72305820048e32ac976491c1b7317c8944eb1daad36cc2eb644910bf623c3363bd12738f002900000000000000000000000039b46de96cfe29ffcf225e899b8ffe1f7fbba59e


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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000039b46de96cfe29ffcf225e899b8ffe1f7fbba59e


   Swarm Source:
bzzr://048e32ac976491c1b7317c8944eb1daad36cc2eb644910bf623c3363bd12738f
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.