Sponsored Link:   SHIFT.cash - smart-contract based car title lending platform, 30 billion market, 35+ employees. Join NOW.
Contract Overview | IDEX_1
ETH Balance: 11,483.641995920665620785 Ether
ETH USD Value: $10,682,887.64 (@ $930.27/ETH)
No Of Transactions: 446510 txns
Misc  
   
Address Watch Add To Watch List
Contract Creator 0x33daedabab9085bd1a94460a652e7ffff592dfe3at txn 0x24b99bebf8a908be3d09bb8101446350cc7d1bea467b5242352c9c53e85c5283
Token Tracker
  Latest 25 txns from a total Of 446510 transactions (+25 PendingTxns) View All

TxHash Age From To Value [TxFee]
0x5f568dce58fbb46dfd556b4ed45a0fb639d22ae0b991dc48bf7351a18d8457d0(pending) 6 secs ago0xe8438af0ba6f5c925835936f2b14f9166f6d7308  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080.48889884 Ether(pending)
0x252d405587ffb09a7726525c275b192f93b8f95a174650f7224e74231acf10b3(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x516f94dea769d5a15f63d491b254837747668bcbab19de87d5933d46ed5b6344(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x33e86f0456e4c4a527ab6aa1cc59426edbfd363158081f266600e2f94467a37a(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x36d63a7541aae4fa8c19d51cccbe2dc1d48401d43e2a5795539f6ae2afc1b296(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x574cd2ae703e9cd71ea393c9d506847d4b88ea233dca493eaeac592b2bb553d3(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x75dfa64a0f4b2d2a99a33c57a4782bb5efa554a5c52f490c04c24541845bfede(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xfac397cc9aa19b1c68b84110cb2bbaa7f4086a5d7e450ad73e94247668f31161(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x5d2bd1a77e187b9a983f3bd58c63920f2d004fe6a8d5f751936f6dc9af2b75a5(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x4bf9ba71e21ea903efd8aa153d9c1bffdd8626f7e42ecbcb1f6a3decf7edd7f1(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x5457814fe08a95c6e321f682d1ca0ee245db516783cfcd54b72ba0e5247b63ff(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xc900940b786230ede805d35933361fdd55e3145d003a9e010358f0cd8182eec7(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x0f9dbc7876433b2508cdcbf2847292cbe0e9fce0e501001ceacff90a3ed23bd0(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x2f6f76317c23517bf8392063b004d7537e4c5cce1cc1f2e4dca8632bd2f86851(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x967cd2b2b7238805b28158914bea9fb883e3cac8b6cadf48ddbfec96620df07c(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xc750272a9c33c9121252197da29cb52eec19c786d84ae8df64bc612f4e5d07c4(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x8f9d3879e4369048cb591b6f018140ed27732f86939188af827e524ccf090651(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x523353d1d7b066a571be746ba85ee1dfa6542a412986461756170ea5b14d68cb(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x89e337eb12b6ec35555492ad94b9c0e1dae0817c34c00cca07db2bce45e894e5(pending) 8 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xdabc759ec6f7ea4ad17650db185e32107f3916e22eafaa7310607babc80edc8d(pending) 9 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xead1d6684be376b359d0279ba994ec201dc55a32b28fd7623438773ae05f5735(pending) 9 secs ago0xceceaa8edc0830c7cec497e33bb3a3c28dd55a32  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0xacc6d581b3d91dd574af0f28ea3b029a2ba975848a70a8495a826c8be395bf0c(pending) 18 secs ago0x9096410692868ea33f77ff1ca3ae3d9948faf82c  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080 Ether(pending)
0x3f6cbb6f097ae9be0604d7e5dc5b0c0911836b9456fc7e3702ed1ef1f586dab4(pending) 21 secs ago0x02ed8586b730b8cbb5785a6412ec2aab96a66311  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080.2951332 Ether(pending)
0xf15bbf94ed91a35478f82ec721ab992bb0d489ae7b95f2539b1ef3fb7c313220(pending) 52 secs ago0x5c0f318407f37029f2a2b6b29468b79fbd178f2a  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080.3 Ether(pending)
0xa3303c914c186a19ed3ff2666adbc14a6bf3ece0a65cfcb013b6c737091fbfc8(pending)32 mins ago0xa7ded47c81f19e9d5538db20c09ef82618bd188d  IN  0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080.2634084025 Ether(pending)
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x1820ff03c00fa5aebdd0b64caae2cd8188eaa20cbac62f515504ea7879f5798e51150322 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xd5d09c4c5b4cee6bfe3d8dae713c2abbc1e903fe10.347411896415876127 Ether
0x81eef854b11929e3268d16a0ed83fcc9958c0ae2199334585914295d227fcd4951150302 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x265bb37de68a0ffe01df306c16d5891ec657cd110.3078 Ether
0xf6f9110d0707c9b863da2ffd199f7ed9432630d9cd6d1e02e16b1203613d8c1251150283 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xaf08f8a6a0002f8b55668e3985e4348c17acb2890.050102458000000001 Ether
0x921301064de39b8a184bbd2a907d77ffd4dcf62b981e508e3ea5ebe75a25f99d51150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xe39ff563ac398cdb556343e36cf3dbef4b51f45a0.14765 Ether
0xcbc4540a1b8ab193789ad3b37eadd60372fca1a87fca934c061c7cde860f32ce51150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x006c0f4699253170fcb6354428294fa1c6f2dfdf2.997800000000000001 Ether
0x0be9c7cd111dda1574324757a72aeff26c2b1e340c9e853ebe07586b1b9c62c451150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xf156d8eb5c850173266026b2f496c3370607dc9c0.104992699999999999 Ether
0xb3cb19698adc67fdf04ced2296d75bc3798ef552f031a57449eadbda6f427cf351150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xc274ab6627451106c3fec491fac072e1fd3f94b19.616989776434817279 Ether
0xd4eff12ea006f5a4cf670420d3df7a37fe9d2f5d2756195a888665aa4511a14751150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xf6a6e036a10f0475c16c202c20646b2a54171bb12.521539727328361876 Ether
0x3293692afeb47b13face83bd49db54e2638072350f1d6f25a6df011d7a3d11d751150253 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x91edaf6fee6c5802807fbd12da20b7b36d4b6f190.149190784000000001 Ether
0x82f860915d7d320e15d5bcb4dc48e08f8b8445c2e2cce8a8fbd36d5eb114820d51150234 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x48c5c486258fdd327e8a27d3aacbfaca5728cd9f2.038011967000000001 Ether
0x77e4aadc70719d26a247ca3b4eeaea3bafe73b30de19c7a67602d3c1a2f697ff51150234 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xd5e22daf02d9892f111bf3b8bcc5f1bb20e5b0245.997800000000000005 Ether
0x7a54afc80843790ad75e594f0684116c6d9be6763b90af1e1a5e4919411b9d8251150187 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x50a206e63f7eb5d24c1dff483a231600ccf8f8d80.064468878501500001 Ether
0xd364d8f7bc690105914aaa38b6f3cec1a82c6987978a75040fa17f1c4712b5b851150177 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x6a7ca5456f78c11c2766e66832b9643beda3febb0.128583062354114555 Ether
0x26476427ebecd8143cfafafda373d5301bf7d17ff8739bc833c1d244650bb53351150177 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x5f7b76863854407be50324468979bbc60a60125f1.2978 Ether
0xd3f1beb1d3685d0605e15f63359f5e3b2ae334727ae72370aebbb0886835070451150168 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x00f495d7ee99b8e5a948e899e4ec0290eac79ee65.254538000000049949 Ether
0xfa51d4047a2f6cc71d9aef3b12d838598f288c2e03fe711573cc065c421e0da951150168 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x2ddbca86af454a40f948032d72c8050e9edb6f2612.119725610000000007 Ether
0xe0e4d5321aba9adf708a4ac587e968c8a35721e0132ac16a1766134fae7e55e051150168 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x188c3f29fb3d7e6cf0a2ea879dff44f84485bc0c0.744790999999465111 Ether
0xdd3da265e72060c82a2b639c73c96ce9bcac67192441f6be1a9f08eaa765135851150168 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xfc0a537785f989fd7fa2d867181c0c400a12af240.090021017571481403 Ether
0xf1b64a2b5634f4926469c7d548b514274034e2eecf4d7bead894a637fa73ac70511496919 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x76ea764634031d4dd242e9b15cbb80147c0283e51.260168002575779109 Ether
0xa7a91054dc70fa249b3258071b165aaf5e2638b2fab84b494f464c0d872adcd5511496919 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xa0faa58e05f32d11637005f342b58f2f3e30ffb80.414383 Ether
0x3e303ae5c9c43fecd871186311bf4c30100e022e76f0a6b8dbfd170193d7e888511496619 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xbf5abeaf379beed8a21e6ea8dd3bc4a754860c081.779282400000000001 Ether
0xb5b9b302a0eb4d5b80e1cfc446b77443bb3d9b22da6125f83b35284de362cfed511496221 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x729fd1cc9ddaaebcf94447efa4c7b18262f3a3130.9978 Ether
0xa2d0a98a36e3174b84df01a950ce6056b4ee89a796467a3f1f938f01f7d65153511496221 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x87259f024aa77e0023d7b41e8b1eeebb0f38d50e1.118159483497609634 Ether
0xcdb687e74f3b7a8ecde583764f0765d73dcedba6756110ea93b6776c4f116eed511494723 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080xfae2f27f5ccd569e27a4d7acac46a32ed119ba2e58.51715679607360429 Ether
0xd79b623acd58c58c7883137a1bfebd82f2a5481453766d587341857bdf1024eb511494723 mins ago0x2a0c0dbecc7e4d658f48e01e3fa353f44050c2080x530fcf86e424b074249574672a1744ac4f59b0480.340137987821188678 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified
Contract Name: Exchange
Compiler Version: v0.4.16+commit.d7661dd9
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity ^0.4.16;

contract Token {
    bytes32 public standard;
    bytes32 public name;
    bytes32 public symbol;
    uint256 public totalSupply;
    uint8 public decimals;
    bool public allowTransactions;
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    function transfer(address _to, uint256 _value) returns (bool success);
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success);
    function approve(address _spender, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
}

contract Exchange {
  function assert(bool assertion) {
    if (!assertion) throw;
  }
  function safeMul(uint a, uint b) returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function safeSub(uint a, uint b) returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function safeAdd(uint a, uint b) returns (uint) {
    uint c = a + b;
    assert(c>=a && c>=b);
    return c;
  }
  address public owner;
  mapping (address => uint256) public invalidOrder;
  event SetOwner(address indexed previousOwner, address indexed newOwner);
  modifier onlyOwner {
    assert(msg.sender == owner);
    _;
  }
  function setOwner(address newOwner) onlyOwner {
    SetOwner(owner, newOwner);
    owner = newOwner;
  }
  function getOwner() returns (address out) {
    return owner;
  }
  function invalidateOrdersBefore(address user, uint256 nonce) onlyAdmin {
    if (nonce < invalidOrder[user]) throw;
    invalidOrder[user] = nonce;
  }

  mapping (address => mapping (address => uint256)) public tokens; //mapping of token addresses to mapping of account balances

  mapping (address => bool) public admins;
  mapping (address => uint256) public lastActiveTransaction;
  mapping (bytes32 => uint256) public orderFills;
  address public feeAccount;
  uint256 public inactivityReleasePeriod;
  mapping (bytes32 => bool) public traded;
  mapping (bytes32 => bool) public withdrawn;
  event Order(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s);
  event Cancel(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s);
  event Trade(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, address get, address give);
  event Deposit(address token, address user, uint256 amount, uint256 balance);
  event Withdraw(address token, address user, uint256 amount, uint256 balance);

  function setInactivityReleasePeriod(uint256 expiry) onlyAdmin returns (bool success) {
    if (expiry > 1000000) throw;
    inactivityReleasePeriod = expiry;
    return true;
  }

  function Exchange(address feeAccount_) {
    owner = msg.sender;
    feeAccount = feeAccount_;
    inactivityReleasePeriod = 100000;
  }

  function setAdmin(address admin, bool isAdmin) onlyOwner {
    admins[admin] = isAdmin;
  }

  modifier onlyAdmin {
    if (msg.sender != owner && !admins[msg.sender]) throw;
    _;
  }

  function() external {
    throw;
  }

  function depositToken(address token, uint256 amount) {
    tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount);
    lastActiveTransaction[msg.sender] = block.number;
    if (!Token(token).transferFrom(msg.sender, this, amount)) throw;
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
  }

  function deposit() payable {
    tokens[address(0)][msg.sender] = safeAdd(tokens[address(0)][msg.sender], msg.value);
    lastActiveTransaction[msg.sender] = block.number;
    Deposit(address(0), msg.sender, msg.value, tokens[address(0)][msg.sender]);
  }

  function withdraw(address token, uint256 amount) returns (bool success) {
    if (safeSub(block.number, lastActiveTransaction[msg.sender]) < inactivityReleasePeriod) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (token == address(0)) {
      if (!msg.sender.send(amount)) throw;
    } else {
      if (!Token(token).transfer(msg.sender, amount)) throw;
    }
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }

  function adminWithdraw(address token, uint256 amount, address user, uint256 nonce, uint8 v, bytes32 r, bytes32 s, uint256 feeWithdrawal) onlyAdmin returns (bool success) {
    bytes32 hash = keccak256(this, token, amount, user, nonce);
    if (withdrawn[hash]) throw;
    withdrawn[hash] = true;
    if (ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) != user) throw;
    if (feeWithdrawal > 50 finney) feeWithdrawal = 50 finney;
    if (tokens[token][user] < amount) throw;
    tokens[token][user] = safeSub(tokens[token][user], amount);
    tokens[token][feeAccount] = safeAdd(tokens[token][feeAccount], safeMul(feeWithdrawal, amount) / 1 ether);
    amount = safeMul((1 ether - feeWithdrawal), amount) / 1 ether;
    if (token == address(0)) {
      if (!user.send(amount)) throw;
    } else {
      if (!Token(token).transfer(user, amount)) throw;
    }
    lastActiveTransaction[user] = block.number;
    Withdraw(token, user, amount, tokens[token][user]);
  }

  function balanceOf(address token, address user) constant returns (uint256) {
    return tokens[token][user];
  }

  function trade(uint256[8] tradeValues, address[4] tradeAddresses, uint8[2] v, bytes32[4] rs) onlyAdmin returns (bool success) {
    /* amount is in amountBuy terms */
    /* tradeValues
       [0] amountBuy
       [1] amountSell
       [2] expires
       [3] nonce
       [4] amount
       [5] tradeNonce
       [6] feeMake
       [7] feeTake
     tradeAddressses
       [0] tokenBuy
       [1] tokenSell
       [2] maker
       [3] taker
     */
    if (invalidOrder[tradeAddresses[2]] > tradeValues[3]) throw;
    bytes32 orderHash = keccak256(this, tradeAddresses[0], tradeValues[0], tradeAddresses[1], tradeValues[1], tradeValues[2], tradeValues[3], tradeAddresses[2]);
    if (ecrecover(keccak256("\x19Ethereum Signed Message:\n32", orderHash), v[0], rs[0], rs[1]) != tradeAddresses[2]) throw;
    bytes32 tradeHash = keccak256(orderHash, tradeValues[4], tradeAddresses[3], tradeValues[5]); 
    if (ecrecover(keccak256("\x19Ethereum Signed Message:\n32", tradeHash), v[1], rs[2], rs[3]) != tradeAddresses[3]) throw;
    if (traded[tradeHash]) throw;
    traded[tradeHash] = true;
    if (tradeValues[6] > 100 finney) tradeValues[6] = 100 finney;
    if (tradeValues[7] > 100 finney) tradeValues[7] = 100 finney;
    if (safeAdd(orderFills[orderHash], tradeValues[4]) > tradeValues[0]) throw;
    if (tokens[tradeAddresses[0]][tradeAddresses[3]] < tradeValues[4]) throw;
    if (tokens[tradeAddresses[1]][tradeAddresses[2]] < (safeMul(tradeValues[1], tradeValues[4]) / tradeValues[0])) throw;
    tokens[tradeAddresses[0]][tradeAddresses[3]] = safeSub(tokens[tradeAddresses[0]][tradeAddresses[3]], tradeValues[4]);
    tokens[tradeAddresses[0]][tradeAddresses[2]] = safeAdd(tokens[tradeAddresses[0]][tradeAddresses[2]], safeMul(tradeValues[4], ((1 ether) - tradeValues[6])) / (1 ether));
    tokens[tradeAddresses[0]][feeAccount] = safeAdd(tokens[tradeAddresses[0]][feeAccount], safeMul(tradeValues[4], tradeValues[6]) / (1 ether));
    tokens[tradeAddresses[1]][tradeAddresses[2]] = safeSub(tokens[tradeAddresses[1]][tradeAddresses[2]], safeMul(tradeValues[1], tradeValues[4]) / tradeValues[0]);
    tokens[tradeAddresses[1]][tradeAddresses[3]] = safeAdd(tokens[tradeAddresses[1]][tradeAddresses[3]], safeMul(safeMul(((1 ether) - tradeValues[7]), tradeValues[1]), tradeValues[4]) / tradeValues[0] / (1 ether));
    tokens[tradeAddresses[1]][feeAccount] = safeAdd(tokens[tradeAddresses[1]][feeAccount], safeMul(safeMul(tradeValues[7], tradeValues[1]), tradeValues[4]) / tradeValues[0] / (1 ether));
    orderFills[orderHash] = safeAdd(orderFills[orderHash], tradeValues[4]);
    lastActiveTransaction[tradeAddresses[2]] = block.number;
    lastActiveTransaction[tradeAddresses[3]] = block.number;
  }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"assertion","type":"bool"}],"name":"assert","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"user","type":"address"},{"name":"nonce","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"feeWithdrawal","type":"uint256"}],"name":"adminWithdraw","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastActiveTransaction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"},{"name":"isAdmin","type":"bool"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"invalidOrder","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getOwner","outputs":[{"name":"out","type":"address"}],"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":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"nonce","type":"uint256"}],"name":"invalidateOrdersBefore","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeMul","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"traded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"expiry","type":"uint256"}],"name":"setInactivityReleasePeriod","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tradeValues","type":"uint256[8]"},{"name":"tradeAddresses","type":"address[4]"},{"name":"v","type":"uint8[2]"},{"name":"rs","type":"bytes32[4]"}],"name":"trade","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"inactivityReleasePeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"feeAccount_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"SetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenBuy","type":"address"},{"indexed":false,"name":"amountBuy","type":"uint256"},{"indexed":false,"name":"tokenSell","type":"address"},{"indexed":false,"name":"amountSell","type":"uint256"},{"indexed":false,"name":"expires","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"v","type":"uint8"},{"indexed":false,"name":"r","type":"bytes32"},{"indexed":false,"name":"s","type":"bytes32"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenBuy","type":"address"},{"indexed":false,"name":"amountBuy","type":"uint256"},{"indexed":false,"name":"tokenSell","type":"address"},{"indexed":false,"name":"amountSell","type":"uint256"},{"indexed":false,"name":"expires","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"v","type":"uint8"},{"indexed":false,"name":"r","type":"bytes32"},{"indexed":false,"name":"s","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenBuy","type":"address"},{"indexed":false,"name":"amountBuy","type":"uint256"},{"indexed":false,"name":"tokenSell","type":"address"},{"indexed":false,"name":"amountSell","type":"uint256"},{"indexed":false,"name":"get","type":"address"},{"indexed":false,"name":"give","type":"address"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b604051602080611d0c833981016040528080519150505b60008054600160a060020a03338116600160a060020a0319928316179092556006805492841692909116919091179055620186a06007555b505b611c9d8061006f6000396000f3006060604052361561012d5763ffffffff60e060020a6000350416630674763c811461014057806313af40351461015a5780632295115b1461017b578063254dcfe2146101ca578063338b5dea146101fb5780633823d66c1461021f578063429b62e5146102495780634b0bddd21461027c578063508493bc146102a257806365e17c9d146102d957806383dbb27b14610308578063893d20e8146103395780638da5cb5b14610368578063a293d1e814610397578063b12de559146103c2578063d05c78da146103e6578063d0e30db014610411578063d58133231461041b578063dd93c74a14610445578063e6cb90131461046f578063ef3435881461049a578063f31174ee14610566578063f3fef3a31461058b578063f7213db6146105c1578063f7888aec146105e9575b341561013857600080fd5b5b600080fd5b005b341561014b57600080fd5b61013e6004351515610620565b005b341561016557600080fd5b61013e600160a060020a0360043516610630565b005b341561018657600080fd5b6101b6600160a060020a03600435811690602435906044351660643560ff6084351660a43560c43560e4356106b4565b604051901515815260200160405180910390f35b34156101d557600080fd5b6101e9600160a060020a0360043516610ad9565b60405190815260200160405180910390f35b341561020657600080fd5b61013e600160a060020a0360043516602435610aeb565b005b341561022a57600080fd5b6101b6600435610c62565b604051901515815260200160405180910390f35b341561025457600080fd5b6101b6600160a060020a0360043516610c77565b604051901515815260200160405180910390f35b341561028757600080fd5b61013e600160a060020a03600435166024351515610c8c565b005b34156102ad57600080fd5b6101e9600160a060020a0360043581169060243516610cd1565b60405190815260200160405180910390f35b34156102e457600080fd5b6102ec610cee565b604051600160a060020a03909116815260200160405180910390f35b341561031357600080fd5b6101e9600160a060020a0360043516610cfd565b60405190815260200160405180910390f35b341561034457600080fd5b6102ec610d0f565b604051600160a060020a03909116815260200160405180910390f35b341561037357600080fd5b6102ec610d1f565b604051600160a060020a03909116815260200160405180910390f35b34156103a257600080fd5b6101e9600435602435610d2e565b60405190815260200160405180910390f35b34156103cd57600080fd5b61013e600160a060020a0360043516602435610d47565b005b34156103f157600080fd5b6101e9600435602435610dcf565b60405190815260200160405180910390f35b61013e610dfe565b005b341561042657600080fd5b6101b6600435610eea565b604051901515815260200160405180910390f35b341561045057600080fd5b6101b6600435610eff565b604051901515815260200160405180910390f35b341561047a57600080fd5b6101e9600435602435610f61565b60405190815260200160405180910390f35b34156104a557600080fd5b6101b6600461010481600861010060405190810160405291908282610100808284378201915050505050919080608001906004806020026040519081016040529190828260808082843782019150505050509190806040019060028060200260405190810160405280929190826002602002808284378201915050505050919080608001906004806020026040519081016040529190828260808082843750939550610f89945050505050565b604051901515815260200160405180910390f35b341561057157600080fd5b6101e9611a1a565b60405190815260200160405180910390f35b341561059657600080fd5b6101b6600160a060020a0360043516602435611a20565b604051901515815260200160405180910390f35b34156105cc57600080fd5b6101e9600435611c32565b60405190815260200160405180910390f35b34156105f457600080fd5b6101e9600160a060020a0360043581169060243516611c44565b60405190815260200160405180910390f35b80151561062c57600080fd5b5b50565b60005461064b9033600160a060020a03908116911614610620565b600054600160a060020a0380831691167fcbf985117192c8f614a58aaf97226bb80a754772f5f6edf06f87c675f2e6c66360405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60008054819033600160a060020a039081169116148015906106ef5750600160a060020a03331660009081526003602052604090205460ff16155b156106f957600080fd5b308a8a8a8a6040516c01000000000000000000000000600160a060020a039687168102825294861685026014820152602881019390935293169091026048820152605c810191909152607c0160405190819003902060008181526009602052604090205490915060ff161561076d57600080fd5b60008181526009602052604090819020805460ff19166001908117909155600160a060020a038a16918390517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208888886040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561083157600080fd5b505060206040510351600160a060020a03161461084d57600080fd5b66b1a2bc2ec500008311156108675766b1a2bc2ec5000092505b600160a060020a03808b166000908152600260209081526040808320938c16835292905220548990101561089a57600080fd5b600160a060020a03808b166000908152600260209081526040808320938c16835292905220546108ca908a610d2e565b600160a060020a038b811660009081526002602090815260408083208d85168452909152808220939093556006549091168152205461092590670de0b6b3a7640000610916868d610dcf565b81151561091f57fe5b04610f61565b600160a060020a03808c16600090815260026020908152604080832060065490941683529290522055670de0b6b3a76400006109638482038b610dcf565b81151561096c57fe5b049850600160a060020a038a1615156109b557600160a060020a03881689156108fc028a604051600060405180830381858888f1935050505015156109b057600080fd5b610a38565b89600160a060020a031663a9059cbb898b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a1257600080fd5b6102c65a03f11515610a2357600080fd5b505050604051805190501515610a3857600080fd5b5b600160a060020a038089166000818152600460209081526040808320439055938e1682526002815283822092825291909152819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918c918b918d919051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15b5b5098975050505050505050565b60046020526000908152604090205481565b600160a060020a0380831660009081526002602090815260408083203390941683529290522054610b1c9082610f61565b600160a060020a0380841660008181526002602090815260408083203395861684528252808320959095556004905283812043905590926323b872dd92913091869190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bb357600080fd5b6102c65a03f11515610bc457600080fd5b505050604051805190501515610bd957600080fd5b600160a060020a03808316600090815260026020908152604080832033948516845290915290819020547fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79285929091859151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15b5050565b60096020526000908152604090205460ff1681565b60036020526000908152604090205460ff1681565b600054610ca79033600160a060020a03908116911614610620565b600160a060020a0382166000908152600360205260409020805460ff19168215151790555b5b5050565b600260209081526000928352604080842090915290825290205481565b600654600160a060020a031681565b60016020526000908152604090205481565b600054600160a060020a03165b90565b600054600160a060020a031681565b6000610d3c83831115610620565b508082035b92915050565b60005433600160a060020a03908116911614801590610d7f5750600160a060020a03331660009081526003602052604090205460ff16155b15610d8957600080fd5b600160a060020a038216600090815260016020526040902054811015610dae57600080fd5b600160a060020a03821660009081526001602052604090208190555b5b5050565b6000828202610df3841580610dee5750838583811515610deb57fe5b04145b610620565b8091505b5092915050565b33600160a060020a031660009081527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020526040902054610e409034610f61565b33600160a060020a03811660008181527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b60208181526040808420968755600482528084204390559383525292547fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d793929134919051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15b565b60086020526000908152604090205460ff1681565b6000805433600160a060020a03908116911614801590610f385750600160a060020a03331660009081526003602052604090205460ff16155b15610f4257600080fd5b620f4240821115610f5257600080fd5b50600781905560015b5b919050565b6000828201610df3848210801590610dee5750838210155b610620565b8091505b5092915050565b600080548190819033600160a060020a03908116911614801590610fc65750600160a060020a03331660009081526003602052604090205460ff16155b15610fd057600080fd5b8660035b6020020151600160008860025b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002054111561101257600080fd5b308660005b60200201518860005b60200201518860015b60200201518a60015b60200201518b60025b60200201518c60035b60200201518c60025b60200201516040516c01000000000000000000000000600160a060020a03998a168102825297891688026014820152602881019690965293871686026048860152605c850192909252607c840152609c8301529092160260bc82015260d00160405190819003902091508560025b6020020151600160a060020a03166001836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c016040519081900390208760005b60200201518760005b60200201518860015b60200201516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561118057600080fd5b505060206040510351600160a060020a03161461119c57600080fd5b818760045b60200201518760035b60200201518960055b60200201516040519384526020840192909252600160a060020a03166c010000000000000000000000000260408084019190915260548301919091526074909101905190819003902090508560035b6020020151600160a060020a03166001826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c016040519081900390208760015b60200201518760025b60200201518860035b60200201516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156112c757600080fd5b505060206040510351600160a060020a0316146112e357600080fd5b60008181526008602052604090205460ff16156112ff57600080fd5b6000818152600860205260409020805460ff1916600117905567016345785d8a00008760065b602002015111156113435767016345785d8a00008760065b60200201525b67016345785d8a00008760075b6020020151111561136e5767016345785d8a00008760075b60200201525b8660005b6020020151600083815260056020526040902054611398908960045b6020020151610f61565b11156113a357600080fd5b8660045b60200201516002600088815b6020020151600160a060020a0316815260208101919091526040016000908120908860035b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002054101561140957600080fd5b8660005b602002015161142c8860015b60200201518960045b6020020151610dcf565b81151561143557fe5b04600260008860015b6020020151600160a060020a0316815260208101919091526040016000908120908860025b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002054101561149457600080fd5b6114f06002600088815b6020020151600160a060020a0316815260208101919091526040016000908120908860035b6020020151600160a060020a031681526020810191909152604001600020548860045b6020020151610d2e565b6002600088815b6020020151600160a060020a0316815260208101919091526040016000908120908860035b6020020151600160a060020a0316815260208101919091526040016000908120919091556115ca9060029088815b6020020151600160a060020a0316815260208101919091526040016000908120908860025b6020020151600160a060020a03168152602081019190915260400160002054670de0b6b3a76400006109168a60045b60200201518b60065b6020020151670de0b6b3a764000003610dcf565b81151561091f57fe5b04610f61565b6002600088815b6020020151600160a060020a0316815260208101919091526040016000908120908860025b6020020151600160a060020a03168152602081019190915260400160009081209190915561168c9060029088815b6020020151600160a060020a0390811682526020808301939093526040918201600090812060065490921681529252902054670de0b6b3a76400006109168a60045b60200201518b6006611422565b6020020151610dcf565b81151561091f57fe5b04610f61565b6002600088815b6020020151600160a060020a039081168252602080830193909352604091820160009081206006549092168152925281209190915561174f906002908860015b6020020151600160a060020a0316815260208101919091526040016000908120908860025b6020020151600160a060020a0316815260208101919091526040016000908120549089905b60200201516117408a60015b60200201518b6004611422565b6020020151610dcf565b81151561174957fe5b04610d2e565b600260008860015b6020020151600160a060020a0316815260208101919091526040016000908120908860025b6020020151600160a060020a03168152602081019190915260400160009081209190915561185a906002908860015b6020020151600160a060020a0316815260208101919091526040016000908120908860035b6020020151600160a060020a03168152602081019190915260400160009081205490670de0b6b3a7640000908a905b602002015161184161182f8c60075b6020020151670de0b6b3a7640000038d6001611422565b6020020151610dcf565b8c6004611422565b6020020151610dcf565b81151561184a57fe5b0481151561091f57fe5b04610f61565b600260008860015b6020020151600160a060020a0316815260208101919091526040016000908120908860035b6020020151600160a060020a031681526020810191909152604001600090812091909155611947906002908860015b6020020151600160a060020a039081168252602080830193909352604091820160009081206006549092168152925281205490670de0b6b3a7640000908a905b602002015161184161182f8c60075b60200201518d6001611422565b6020020151610dcf565b8c6004611422565b6020020151610dcf565b81151561184a57fe5b0481151561091f57fe5b04610f61565b600260008860015b6020020151600160a060020a0390811682526020808301939093526040918201600090812060065490921681529083528181209390935584835260059091529020546119a79088600461138e565b6020020151610f61565b60008381526005602052604081209190915543906004908860025b6020020151600160a060020a03168152602081019190915260400160009081209190915543906004908860035b6020020151600160a060020a031681526020810191909152604001600020555b5b5050949350505050565b60075481565b600754600160a060020a033316600090815260046020526040812054909190611a4a904390610d2e565b1015611a5557600080fd5b600160a060020a038084166000908152600260209081526040808320339094168352929052205482901015611a8957600080fd5b600160a060020a0380841660009081526002602090815260408083203390941683529290522054611aba9083610d2e565b600160a060020a03808516600081815260026020908152604080832033909516835293905291909120919091551515611b2357600160a060020a03331682156108fc0283604051600060405180830381858888f193505050501515611b1e57600080fd5b611ba6565b82600160a060020a031663a9059cbb338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611b8057600080fd5b6102c65a03f11515611b9157600080fd5b505050604051805190501515611ba657600080fd5b5b600160a060020a03808416600090815260026020908152604080832033948516845290915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679286929091869151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15b92915050565b60056020526000908152604090205481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b929150505600a165627a7a7230582011e441ee389dad20321e055f3c597af6c5b1c374e4c13ea473f285fc075e8dbc0029000000000000000000000000034767f3c519f361c5ecf46ebfc08981c629d381

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 000000000000000000000000034767f3c519f361c5ecf46ebfc08981c629d381


   Swarm Source:
bzzr://11e441ee389dad20321e055f3c597af6c5b1c374e4c13ea473f285fc075e8dbc

 

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.