Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
ETHRV - ETH REVOLUTION!

ETHRV - ETH REVOLUTION!

Etherscan
0xCC70db1aC810677c06D9CC1CDD8c953B12eDD3FA
Следить за контрактом

Баланс

520.566 ETH.

Динамика пополнений
от общего пополнения за день

35.33%

Ввод

За последний час
0 ETH.
Всего
736.596 ETH.

Выводы

За последний час
0 ETH.
Всего
216.03 ETH.

Условия

В день
-
В час
-

Инвесторов

302

Повторные пополнения

За последний час
0 ETH.
Всего
87.655 ETH.

Средняя оценка аудиторов

8

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1167)
Выводы (1804)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
Сегодня 15:18 7248786 0x7ae13db3a938020269df1d988589737d550169d1509e449072bafb3364d16c10 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4223 Ether
Сегодня 15:14 7248771 0x345b5a255f3395e1448ab84d12351385813d603e05e45a9b89511963fab800da 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 12:08 7248227 0x3ddc4609dc5f29312f32cb856b7b67f881192e5d04976afc534bda6ecbd2236f 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.267 Ether
Сегодня 11:10 7248056 0x8713cbdbd777953893b266884bb1ea69ec88698bc721722c78930b4d667d4e03 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 00:48 7246195 0x8905dcf7259c3bd0f962895cd29b2f150c2fc4e5acdf1849a227fa9498c55092 0x7d7630b5f614a2eef47346057b7bf2de70fd990a 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 18:59 7245153 0x6c9f5d427627ebb10a5e79c73dce5824a8165936ed8ad92f03eed733d80fa0b0 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:48 7244627 0x31d7845aa61039a80fe2e07c5854db53478819471efd38d27dfcae4ac46e15ea 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:45 7244612 0x15595cc58925e7b6d43a89a3ee45cad42a9d72cd21d06b05ab6857bc7ea75feb 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:43 7244606 0x6b68c58d054fcedf7f8161cac0aea530e0f0f9c3ef6123a5654b4e0c02f83fbf 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4179 Ether
Вчера 15:11 7244507 0x9ce7b186c55dfd9d0af59435f58558f684dcb7029302bc1ee0c900999524e64d 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 12:03 7243971 0xab064f3e8fc054b16955758ed7cd24f44cda9cba0aa54fb3e51f4e8d213780b3 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 11:19 7243848 0x08998fe827dbd62e00196825e662e93f64be223012278f78eac2be9d66c53625 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.265 Ether
Вчера 10:34 7243705 0xc581e18b03286fcb2e8c5577d1ba227e4b8788197f1c774272cd0ae9c7e37332 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:05 7241491 0x9aafe7e9e41a3dbc93143d7642800da7c3d6796a57b5347fd6143297b244a81c 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0x11768565f3de7edb6034ba69663080aeb48a9274 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0x5923acdb724203c6f08bc63a9e270aae3842df10 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4136 Ether
19 фев. 15:06 7240266 0x70413233ca7e16bcceb08bb6cde55dc240aba20cfcb3e41937f3a4f88a854ffe 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.261 Ether
19 фев. 10:16 7239391 0x50b87761ea6508bcd211c6d723e4cea1d60c66175e413dddc18dde357cbec4ad 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 07:40 7238902 0xff8a9732d399f4153a7a7d3401de75c652ee1a29d8042fb1499f2450beb83d90 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Дата Блок parentTxHash От кого Кому Сумма
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0.12 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x11768565f3de7edb6034ba69663080aeb48a9274 0.651 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x5923acdb724203c6f08bc63a9e270aae3842df10 0.42 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.028952 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.006204 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.006204 Ether
19 фев. 15:06 7240266 0x70413233ca7e16bcceb08bb6cde55dc240aba20cfcb3e41937f3a4f88a854ffe 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.413600775 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01827 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.003915 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.003915 Ether
19 фев. 10:16 7239391 0x50b87761ea6508bcd211c6d723e4cea1d60c66175e413dddc18dde357cbec4ad 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.263193 Ether
19 фев. 07:40 7238902 0xff8a9732d399f4153a7a7d3401de75c652ee1a29d8042fb1499f2450beb83d90 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0.0015 Ether
18 фев. 22:01 7237199 0xf437115ee8b58dde6c171ff73e2000d6eb21d11f292921ba8f2cb047b77e1e0c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x3c421ed25b2bd3416de092425c2b2855210506ed 0.18 Ether
18 фев. 17:29 7236435 0x0381ebd26a55113257c214ae1f812de75c1651f4fa64a73f3ecc1bde7aa00474 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.00525 Ether
18 фев. 17:29 7236435 0x0381ebd26a55113257c214ae1f812de75c1651f4fa64a73f3ecc1bde7aa00474 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.001125 Ether
18 фев. 17:29 7236435 0x0381ebd26a55113257c214ae1f812de75c1651f4fa64a73f3ecc1bde7aa00474 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.001125 Ether
18 фев. 17:27 7236431 0x0c3b5594ffb713ac61da381bc580eaf55d17c2df8f5202f088af438dfc3f5253 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0.0081 Ether
18 фев. 15:05 7236007 0x0ecfa13ed876389a2344361171da5f9781766a59d43aa9af4f3c7ac852046a94 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.028651 Ether
18 фев. 15:05 7236007 0x0ecfa13ed876389a2344361171da5f9781766a59d43aa9af4f3c7ac852046a94 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0061395 Ether
18 фев. 15:05 7236007 0x0ecfa13ed876389a2344361171da5f9781766a59d43aa9af4f3c7ac852046a94 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0061395 Ether
18 фев. 14:59 7235992 0x1bcbfc018547109eb4532b1988e05bcbc7adccd706e5bb72794580a5a647886f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.409303125 Ether
18 фев. 13:35 7235731 0xa0994f220dbf4853d8693b62736401e0451f1ef0a4effc754614fabea4593b80 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xbf4e10fb6d08fa8669bd33723cf38e2efcf0341b 0.025 Ether
18 фев. 10:04 7235112 0x38f66927d34a7cd78cb6ccc142e5be79186843ebcb563c418331f89a95741f3d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.0182 Ether
18 фев. 10:04 7235112 0x38f66927d34a7cd78cb6ccc142e5be79186843ebcb563c418331f89a95741f3d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0039 Ether
18 фев. 10:04 7235112 0x38f66927d34a7cd78cb6ccc142e5be79186843ebcb563c418331f89a95741f3d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0039 Ether
Средняя оценка аудиторов 8
Contract Source Code </>
pragma solidity 0.4.25;


contract EthRV {
  using SafeMath for uint;

  struct Investor {
    uint deposit;
    uint paymentTime;
    uint withdrawal;
    uint boostStartup;
    bool isParticipant;
  }

  mapping (address => Investor) public investors;
  address public admin1Address;
  address public admin2Address;
  address public admin3Address;
  address public owner;
  uint public investmentsNumber;
  uint public investorsNumber;

  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  event OnRefLink(address indexed referral, uint referrarBonus, address indexed referrer,  uint referrerBonus, uint time);
  event OnNewInvestor(address indexed addr, uint time);
  event OnInvesment(address indexed addr, uint deposit, uint time);
  event OnBoostChanged(address indexed addr, bool isActive, uint time);
  event OnEarlyWithdrawal(address indexed addr, uint withdrawal, uint time);
  event OnDeleteInvestor(address indexed addr, uint time);
  event OnWithdraw(address indexed addr, uint withdrawal, uint time);
  event OnBoostBonus(address indexed addr, uint bonus, uint time);
  event OnNotEnoughBalance(uint time);

  constructor() public {
    owner = msg.sender;
    admin1Address = msg.sender;
    admin2Address = msg.sender;
    admin3Address = msg.sender;
  }

  function() external payable {
    if (msg.value == 0) {
      withdraw();
    } else if (msg.value == 0.0077777 ether) {
      boost();
    } else if (msg.value == 0.0088888 ether) {
      earlyWithdrawal();
    } else {
      deposit(bytes2address(msg.data));
    }
  }

  function disown() public onlyOwner {
    owner = address(0x0);
  }

  function setAdminsAddress(uint n, address addr) public onlyOwner {
    require(n >= 1 && n <= 3, "invalid number of admin`s address");
    if (n == 1) {
      admin1Address = addr;
    } else if (n == 2) {
      admin2Address = addr;
    } else {
      admin3Address = addr;
    }
  }

  function investorDividends(address investorAddr) public view returns(uint dividends, uint boostBonus) {
    return getDividends(investorAddr);
  }

  function withdraw() public {
    address investorAddr = msg.sender;
    (uint dividends, uint boostBonus) = getDividends(investorAddr);
    require(dividends > 0, "cannot to pay zero dividends");
    require(address(this).balance > 0, "fund is empty");
    uint withdrawal = dividends + boostBonus;

    // fund limit
    if (address(this).balance <= withdrawal) {
      emit OnNotEnoughBalance(now);
      withdrawal = address(this).balance;
    }

    Investor storage investor = investors[investorAddr];
    uint withdrawalLimit = investor.deposit * 200 / 100; // 200%
    uint totalWithdrawal = withdrawal + investor.withdrawal;

    // withdrawal limit - 200%
    if (totalWithdrawal >= withdrawalLimit) {
      withdrawal = withdrawalLimit.sub(investor.withdrawal);
      if (boostBonus > 0 ) {
        emit OnBoostBonus(investorAddr, boostBonus, now);
      }
      deleteInvestor(investorAddr);
    } else {
      // normal withdraw - dont use boostBonus
      if (withdrawal > dividends) {
        withdrawal = dividends;
      }
      investor.withdrawal += withdrawal;
      investor.paymentTime = now;
      if (investor.boostStartup > 0) {
        investor.boostStartup = 0;
        emit OnBoostChanged(investorAddr, false, now);
      }
    }

    investorAddr.transfer(withdrawal);
    emit OnWithdraw(investorAddr, withdrawal, now);
  }

  function earlyWithdrawal() public {
    address investorAddr = msg.sender;
    Investor storage investor = investors[investorAddr];
    require(investor.deposit > 0, "sender must be an investor");

    uint earlyWithdrawalLimit = investor.deposit * 70 / 100; // 70%
    require(earlyWithdrawalLimit > investor.withdrawal, "early withdraw only before 70% deposit`s withdrawal");

    uint withdrawal = earlyWithdrawalLimit.sub(investor.withdrawal); 
    investorAddr.transfer(withdrawal);
    emit OnEarlyWithdrawal(investorAddr, withdrawal, now);

    deleteInvestor(investorAddr);
  }

  function boost() public {
    Investor storage investor = investors[msg.sender];
    require(investor.deposit > 0, "sender must be an investor");
    require(investor.boostStartup == 0, "boost is already activated");
    investor.boostStartup = now;
    emit OnBoostChanged(msg.sender, true, now);
  }

  function deposit(address referrerAddr) public payable {
    uint depositAmount = msg.value;
    address investorAddr = msg.sender;
    require(isNotContract(investorAddr), "invest from contracts is not supported");
    require(depositAmount > 0, "deposit amount cannot be zero");

    admin1Address.send(depositAmount * 70 / 1000); //   7%
    admin2Address.send(depositAmount * 15 / 1000); // 1.5%
    admin3Address.send(depositAmount * 15 / 1000); // 1.5%

    Investor storage investor = investors[investorAddr];
    bool senderIsNotPaticipant = !investor.isParticipant;
    bool referrerIsParticipant = investors[referrerAddr].isParticipant;

    // ref link
    if (senderIsNotPaticipant && referrerIsParticipant && referrerAddr != investorAddr) {
      uint referrerBonus = depositAmount * 3 / 100; // 3%
      uint referralBonus = depositAmount * 1 / 100; // 1%
      referrerAddr.transfer(referrerBonus);
      investorAddr.transfer(referralBonus);
      emit OnRefLink(investorAddr, referralBonus, referrerAddr, referrerBonus, now);
    }

    if (investor.deposit == 0) {
      investorsNumber++;
      investor.isParticipant = true;
      emit OnNewInvestor(investorAddr, now);
    }

    investor.deposit += depositAmount;
    investor.paymentTime = now;

    investmentsNumber++;
    emit OnInvesment(investorAddr, depositAmount, now);
  }

  function getDividends(address investorAddr) internal view returns(uint dividends, uint boostBonus) {
    Investor storage investor = investors[investorAddr];
    if (investor.deposit == 0) {
      return (0, 0);
    }

    if (investor.boostStartup > 0) {
      uint boostDays = now.sub(investor.boostStartup).div(24 hours);
      boostBonus = boostDays * investor.deposit * 5 / 100000; // 0.005%
    }

    uint depositDays = now.sub(investor.paymentTime).div(24 hours);
    dividends = depositDays * investor.deposit * 1 / 100; // 1%

    uint depositAmountBonus;
    if (10 ether <= investor.deposit && investor.deposit <= 50 ether) {
      depositAmountBonus = depositDays * investor.deposit * 5 / 10000; // 0.05%
    } else if (50 ether < investor.deposit) {
      depositAmountBonus = depositDays * investor.deposit * 11 / 10000; // 0.11%
    }

    dividends += depositAmountBonus;
  }

  function isNotContract(address addr) internal view returns (bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }

  function bytes2address(bytes memory source) internal pure returns(address addr) {
    assembly { addr := mload(add(source, 0x14)) }
    return addr;
  }

  function deleteInvestor(address investorAddr) private {
    delete investors[investorAddr].deposit;
    delete investors[investorAddr].paymentTime;
    delete investors[investorAddr].withdrawal;
    delete investors[investorAddr].boostStartup;
    emit OnDeleteInvestor(investorAddr, now);
    investorsNumber--;
  }
}

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

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring '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;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts 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;
  }

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

    return c;
  }

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

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.