POL Price: $0.437566 (+16.63%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer617774192024-09-13 14:21:4643 secs ago1726237306IN
Metahub: MEN Token
0 POL0.0083294961.35187878
Transfer617772572024-09-13 14:16:026 mins ago1726236962IN
Metahub: MEN Token
0 POL0.012850983.85197431
Approve617761732024-09-13 13:37:3844 mins ago1726234658IN
Metahub: MEN Token
0 POL0.00467339158.67308258
Approve617760172024-09-13 13:32:0850 mins ago1726234328IN
Metahub: MEN Token
0 POL0.01673974361.72918451
Transfer617758662024-09-13 13:26:4655 mins ago1726234006IN
Metahub: MEN Token
0 POL0.04272344313.80837849
Approve617758452024-09-13 13:26:0256 mins ago1726233962IN
Metahub: MEN Token
0 POL0.0118863255.3283568
Approve617743402024-09-13 12:32:441 hr ago1726230764IN
Metahub: MEN Token
0 POL0.0034895874.95945442
Transfer617741632024-09-13 12:26:281 hr ago1726230388IN
Metahub: MEN Token
0 POL0.0081965660.37270239
Approve617740942024-09-13 12:24:001 hr ago1726230240IN
Metahub: MEN Token
0 POL0.0031656268.00034746
Transfer617739052024-09-13 12:17:202 hrs ago1726229840IN
Metahub: MEN Token
0 POL0.0037718527.78204184
Transfer617737482024-09-13 12:11:462 hrs ago1726229506IN
Metahub: MEN Token
0 POL0.0039188128.86448041
Approve617735652024-09-13 12:05:162 hrs ago1726229116IN
Metahub: MEN Token
0 POL0.0016314935.04589831
Approve617735602024-09-13 12:05:062 hrs ago1726229106IN
Metahub: MEN Token
0 POL0.001648735.41555768
Transfer617735422024-09-13 12:04:282 hrs ago1726229068IN
Metahub: MEN Token
0 POL0.0047245334.79912562
Transfer617734512024-09-13 12:01:142 hrs ago1726228874IN
Metahub: MEN Token
0 POL0.0068078550
Transfer617733852024-09-13 11:58:542 hrs ago1726228734IN
Metahub: MEN Token
0 POL0.0044667432.90320135
Transfer617732042024-09-13 11:52:302 hrs ago1726228350IN
Metahub: MEN Token
0 POL0.0040231329.63548711
Approve617730412024-09-13 11:46:442 hrs ago1726228004IN
Metahub: MEN Token
0 POL0.0014443231.02541747
Transfer617729812024-09-13 11:44:362 hrs ago1726227876IN
Metahub: MEN Token
0 POL0.0040307429.68893572
Approve617728282024-09-13 11:39:092 hrs ago1726227549IN
Metahub: MEN Token
0 POL0.0014554831.26509256
Transfer617727622024-09-13 11:36:492 hrs ago1726227409IN
Metahub: MEN Token
0 POL0.0038689328.4995737
Approve617727502024-09-13 11:36:232 hrs ago1726227383IN
Metahub: MEN Token
0 POL0.0015178432.60464913
Approve617726702024-09-13 11:33:332 hrs ago1726227213IN
Metahub: MEN Token
0 POL0.0016527535.50262293
Transfer617726052024-09-13 11:31:152 hrs ago1726227075IN
Metahub: MEN Token
0 POL0.0053426739.3521148
Approve617725712024-09-13 11:30:032 hrs ago1726227003IN
Metahub: MEN Token
0 POL0.00204843.99291244
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
METAHUBToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : METAHUBToken.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

import "./libs/zeppelin/token/BEP20/IBEP20.sol";
import "./libs/app/TokenAuth.sol";
import "./interfaces/IAddressBook.sol";
import "./interfaces/ITaxManager.sol";
import "./interfaces/ILSD.sol";
import "./interfaces/IMENToken.sol";

contract METAHUBToken is IBEP20, TokenAuth {
  string public constant name = "MetaHub Finance";
  string public constant symbol = "MEN";
  uint public constant decimals = 6;

  uint public constant MINTING_ALLOCATION = 630e12;
  uint public constant CLS_ALLOCATION = 63e12;
  uint public constant DEVELOPMENT_ALLOCATION = 7e12;
  uint public constant MAX_SUPPLY = 700e12;
  uint public constant BLOCK_IN_ONE_MONTH = 1296000; // 30 * 24 * 60 * 30
  uint private constant DEVELOPMENT_VESTING_MONTH = 12;

  mapping (address => uint) internal _balances;
  mapping (address => mapping (address => uint)) private _allowed;
  mapping (address => bool) public waitingList;
  mapping (address => mapping (IMENToken.TaxType => WhitelistTax)) public whitelistTax;
  mapping (IMENToken.TaxType => uint) public lsdDiscountTaxPercentages; // decimal 3
  struct Config {
    uint secondsInADay;
    uint hardCapCashOut;
    uint cashOutTaxPercentage;
    bool wait;
    bool waitingFunctionEnabled;
    uint[] sharkCheckpoints;
    uint[] sharkTaxPercentages;
    mapping (address => uint) lastCashOut;
    mapping (address => uint) softCap;
  }

  struct WhitelistTax {
    uint percentage;
    bool status;
  }

  uint public totalSupply;
  uint public startVestingDevelopmentBlock;
  uint public lastReleaseDevelopmentBlock;
  uint public startVestingAdvisorAndTeamBlock;
  uint public maxMintingBeMinted;
  uint public developmentReleased;
  uint public maxCLSBeMinted;
  uint public clsReleased;
  IAddressBook public addressBook;
  ITaxManager public taxManager;
  ILSD public lsd;
  Config public config;
  uint private constant DECIMAL3 = 1000;
  uint private constant DECIMAL9 = 1000000000;
  uint constant oneHundredPercentageDecimal3 = 100000;
  mapping (address => bool) public twoWayTaxWhitelist;

  event ConfigUpdated(
    uint secondsInADay,
    uint hardCapCashOut,
    uint cashOutTaxPercentage,
    uint[] sharkCheckpoints,
    uint[] sharkTaxPercentages,
    uint timestamp
  );
  event WaitStatusUpdated(bool status, uint timestamp);
  event WaitingStatusUpdated(address user, bool status, uint timestamp);
  event TwoWayTaxWhitelistUpdated(address user, bool status, uint timestamp);

  constructor() TokenAuth() {
    config.hardCapCashOut = 100e6;
    config.cashOutTaxPercentage = 20;
    config.sharkCheckpoints = [0, 20000e6, 30000e6];
    config.sharkTaxPercentages = [0, 15000, 20000];
    config.waitingFunctionEnabled = true;
    maxMintingBeMinted = MINTING_ALLOCATION;
    maxCLSBeMinted = CLS_ALLOCATION;
  }

  function releaseMintingAllocation(uint _amount) external onlyVault returns (bool) {
    require(developmentReleased + _amount <= maxMintingBeMinted, "Max staking allocation had released");
    developmentReleased += _amount;
    _mint(msg.sender, _amount);
    return true;
  }

  function releaseCLSAllocation(uint _amount) external onlyCLS returns (bool) {
    require(clsReleased + _amount <= maxCLSBeMinted, "Max CLS allocation had reached");
    clsReleased += _amount;
    _mint(msg.sender, _amount);
    return true;
  }

  function startVestingDevelopment() external onlyMn {
    require(startVestingDevelopmentBlock == 0, "VestingDevelopment had started already");
    require(developmentAddress != address(0), "Please setup development address first");
    startVestingDevelopmentBlock = block.number + BLOCK_IN_ONE_MONTH * 1;
    lastReleaseDevelopmentBlock = startVestingDevelopmentBlock;
    _mint(developmentAddress, DEVELOPMENT_ALLOCATION * 20 / 100);
  }

  function releaseDevelopment() external onlyDevelopment {
    require(startVestingDevelopmentBlock > 0 && block.number > startVestingDevelopmentBlock, "Please wait more time");
    uint maxBlockNumber = startVestingDevelopmentBlock + BLOCK_IN_ONE_MONTH * DEVELOPMENT_VESTING_MONTH;
    require(maxBlockNumber > lastReleaseDevelopmentBlock, "Development allocation had released");
    uint blockPass;
    if (block.number < maxBlockNumber) {
      blockPass = block.number - lastReleaseDevelopmentBlock;
      lastReleaseDevelopmentBlock = block.number;
    } else {
      blockPass = maxBlockNumber - lastReleaseDevelopmentBlock;
      lastReleaseDevelopmentBlock = maxBlockNumber;
    }
    uint releaseAmount = DEVELOPMENT_ALLOCATION * 8 * blockPass / (BLOCK_IN_ONE_MONTH * DEVELOPMENT_VESTING_MONTH) / 10;
    _mint(msg.sender, releaseAmount);
  }

  function updateTwoWayTaxWhitelist(address _address, bool _status) external onlyMn {
    twoWayTaxWhitelist[_address] = _status;
    emit TwoWayTaxWhitelistUpdated(_address, _status, block.timestamp);
  }

  function balanceOf(address _owner) override external view returns (uint) {
    return _balances[_owner];
  }

  function getUserCap(address _owner) external view returns (uint, uint) {
    return (config.softCap[_owner], config.lastCashOut[_owner]);
  }

  function getSharkInfo() external view returns (uint[] memory, uint[] memory) {
    return (config.sharkCheckpoints, config.sharkTaxPercentages);
  }

  function allowance(address _owner, address _spender) override external view returns (uint) {
    return _allowed[_owner][_spender];
  }

  function transfer(address _to, uint _value) override external returns (bool) {
    _transfer(msg.sender, _to, _value);
    return true;
  }

  function approve(address _spender, uint _value) override external returns (bool) {
    _approve(msg.sender, _spender, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint _value) override external returns (bool) {
    _transfer(_from, _to, _value);
    _approve(_from, msg.sender, _allowed[_from][msg.sender] - _value);
    return true;
  }

  function increaseAllowance(address _spender, uint _addedValue) external returns (bool) {
    _approve(msg.sender, _spender, _allowed[msg.sender][_spender] + _addedValue);
    return true;
  }

  function decreaseAllowance(address _spender, uint _subtractedValue) external returns (bool) {
    _approve(msg.sender, _spender, _allowed[msg.sender][_spender] - _subtractedValue);
    return true;
  }

  function burn(uint _amount) external {
    _balances[msg.sender] = _balances[msg.sender] - _amount;
    totalSupply = totalSupply - _amount;
    emit Transfer(msg.sender, address(0), _amount);
  }

  function updateWaitStatus(bool _wait) external onlyMn {
    config.wait = _wait;
    emit WaitStatusUpdated(_wait, block.timestamp);
  }

  function updateWaitingStatus(address _address, bool _waited) external onlyMn {
    require(config.waitingFunctionEnabled, "Waiting function is disabled");
    waitingList[_address] = _waited;
  }

  function disableWaitingFunction() external onlyMn {
    config.waitingFunctionEnabled = false;
  }

  function updateMaxContractMinting(uint _maxMintingBeMinted, uint _maxCLSBeMinted) external onlyMn {
    require(maxMintingBeMinted <= MINTING_ALLOCATION, "Staking data invalid");
    require(maxCLSBeMinted <= CLS_ALLOCATION, "CLS data invalid");
    maxMintingBeMinted = _maxMintingBeMinted;
    maxCLSBeMinted = _maxCLSBeMinted;
  }

  function setAddressBook(address _addressBook) external onlyMn {
    addressBook = IAddressBook(_addressBook);
    _initDependentContracts();
  }

  function updateConfig(uint _secondsInDay, uint _hardCapCashOut, uint _cashOutTaxPercentage, uint[] calldata _sharkCheckpoints, uint[] calldata _sharkTaxPercentages) external onlyMn {
    require(_cashOutTaxPercentage <= 100, "Data invalid");
    require(_sharkCheckpoints.length == _sharkTaxPercentages.length, "Shark data invalid");
    config.secondsInADay = _secondsInDay;
    config.hardCapCashOut = _hardCapCashOut;
    config.cashOutTaxPercentage = _cashOutTaxPercentage;
    config.sharkCheckpoints = _sharkCheckpoints;
    config.sharkTaxPercentages = _sharkTaxPercentages;
    emit ConfigUpdated(_secondsInDay, _hardCapCashOut, _cashOutTaxPercentage, _sharkCheckpoints, _sharkTaxPercentages, block.timestamp);
  }

  function updateSoftCap(address _user, uint _softCap) external onlyMn {
    config.softCap[_user] = _softCap;
  }

  function updateTaxWhitelist(address _user, IMENToken.TaxType _type, uint _percentage, bool _whitelisted) external onlyMn {
    require(_percentage <= oneHundredPercentageDecimal3, "percentage invalid");
    whitelistTax[_user][_type] = WhitelistTax(_percentage, _whitelisted);
  }

  function updateLSDTaxDiscount(IMENToken.TaxType  _type, uint _percentage) external onlyMn {
    require(_percentage <= oneHundredPercentageDecimal3, "Data invalid");
    lsdDiscountTaxPercentages[_type] = _percentage;
  }

  function getWhitelistTax(address _to, IMENToken.TaxType _type) external view returns (uint, bool) {
    WhitelistTax memory userWhitelist = whitelistTax[_to][_type];
    return (userWhitelist.percentage, userWhitelist.status);
  }

  function _transfer(address _from, address _to, uint _value) private {
    _validateAbility(_from);
    _balances[_from] -= _value;

    uint tax = _calculateTax(_from, _to, _value);
    if (tax > 0) {
      _balances[_to] += _value - tax;
      _balances[address(taxManager)] += tax;
      emit Transfer(_from, address(taxManager), tax);
    } else {
      _balances[_to] += _value;
    }
    if (_to == address(0)) {
      totalSupply = totalSupply - _value;
    }

    if (_from == address(vault)) {
      vault.updateUserTotalClaimedInUSD(_to, _value * vault.getTokenPrice() / DECIMAL9);
    }

    emit Transfer(_from, _to, _value - tax);
  }

  function _approve(address _owner, address _spender, uint _value) private {
    require(_spender != address(0), "Can not approve for zero address");
    require(_owner != address(0));

    _allowed[_owner][_spender] = _value;
    emit Approval(_owner, _spender, _value);
  }

  function _mint(address _owner, uint _amount) private {
    _validateAbility(_owner);
    require(totalSupply + _amount <= MAX_SUPPLY, "Amount invalid");
    _balances[_owner] += _amount;
    totalSupply += _amount;
    emit Transfer(address(0), _owner, _amount);
  }

  function _validateAbility(address _owner) private view {
    if (config.waitingFunctionEnabled) {
      require(!waitingList[_owner] && !config.wait, "You can not do this at the moment");
    } else {
      require(!config.wait, "You can not do this at the moment");
    }
  }

  function _calculateTax(address _from, address _to, uint _value) private returns (uint) {
    if (
      twoWayTaxWhitelist[_from] || twoWayTaxWhitelist[_to] ||
      _to == addressBook.get("vault") ||
      _from == addressBook.get("cls") || _to == addressBook.get("cls") ||
      _from == addressBook.get("lsd") || _to == addressBook.get("lsd") ||
      _from == addressBook.get("shareManager") || _to == addressBook.get("shareManager") ||
      (_from == addressBook.get("swap") && _to == addressBook.get("lpToken")) ||
      (_from == addressBook.get("lpToken") && _to == addressBook.get("swap"))
    ) {
      return 0;
    }
    WhitelistTax storage userWhitelistTax;
    uint baseTax = _value * 1000 / taxManager.totalTaxPercentage();
    bool isBuyingToken = _from == addressBook.get("swap") || _from == addressBook.get("lpToken");
    if (isBuyingToken) {
      userWhitelistTax = whitelistTax[_to][IMENToken.TaxType.Buy];
      if (userWhitelistTax.status) {
        return userWhitelistTax.percentage > 0 ? _value * userWhitelistTax.percentage / oneHundredPercentageDecimal3 : 0;
      }
      if(lsd.isQualifiedForTaxDiscount(_to) && lsdDiscountTaxPercentages[IMENToken.TaxType.Buy] > 0) {
        return baseTax * (oneHundredPercentageDecimal3 - lsdDiscountTaxPercentages[IMENToken.TaxType.Buy]) / oneHundredPercentageDecimal3;
      }
    }
    if (_from == address(vault)) {
      userWhitelistTax = whitelistTax[_to][IMENToken.TaxType.Claim];
      if (userWhitelistTax.status) {
        return userWhitelistTax.percentage > 0 ? _value * userWhitelistTax.percentage / oneHundredPercentageDecimal3 : 0;
      }
      if (config.sharkCheckpoints.length > 0) {
        (, uint totalClaimed) = vault.getUserInfo(_to);
        uint checkpointIndex;
        for(uint i = 0; i < config.sharkCheckpoints.length; i++) {
          if (totalClaimed >= config.sharkCheckpoints[i]) {
            checkpointIndex = i;
          }
        }
        if (checkpointIndex > 0) {
          return _value * config.sharkTaxPercentages[checkpointIndex] / oneHundredPercentageDecimal3;
        }
      }

      if(lsd.isQualifiedForTaxDiscount(_to) && lsdDiscountTaxPercentages[IMENToken.TaxType.Claim] > 0) {
        return baseTax * (oneHundredPercentageDecimal3 - lsdDiscountTaxPercentages[IMENToken.TaxType.Claim]) / oneHundredPercentageDecimal3;
      }
    }
    bool isSellingToken = _to == addressBook.get("lpToken") || _to == addressBook.get("swap");
    if (isSellingToken) {
      userWhitelistTax = whitelistTax[_from][IMENToken.TaxType.Sell];
      if (userWhitelistTax.status) {
        return userWhitelistTax.percentage > 0 ? _value * userWhitelistTax.percentage / oneHundredPercentageDecimal3 : 0;
      }
      if (_from != address(taxManager)) {
        _validateSelling(_from, _value * vault.getTokenPrice() / DECIMAL9);
      }
      if(lsd.isQualifiedForTaxDiscount(_from) && lsdDiscountTaxPercentages[IMENToken.TaxType.Sell] > 0) {
        baseTax = baseTax * (oneHundredPercentageDecimal3 - lsdDiscountTaxPercentages[IMENToken.TaxType.Sell]) / oneHundredPercentageDecimal3;
      }
      (uint deposited,) = vault.getUserInfo(_from);
      if (_value >= deposited * config.cashOutTaxPercentage / 100) {
        baseTax = _value / 2;
      }
    } else if (_from != address(vault) && lsd.isQualifiedForTaxDiscount(_from) && lsdDiscountTaxPercentages[IMENToken.TaxType.Transfer] > 0) {
      baseTax = baseTax * (oneHundredPercentageDecimal3 - lsdDiscountTaxPercentages[IMENToken.TaxType.Transfer]) / oneHundredPercentageDecimal3;
    }

    userWhitelistTax = whitelistTax[_from][IMENToken.TaxType.Transfer];
    if (userWhitelistTax.status) {
      return userWhitelistTax.percentage > 0 ? _value * userWhitelistTax.percentage / oneHundredPercentageDecimal3 : 0;
    }

    return baseTax;
  }

  function _validateSelling(address _from, uint _valueInUsd) private {
    if (config.softCap[msg.sender] > 0) {
      require(_valueInUsd <= config.softCap[msg.sender], "MEN: amount reach soft cap");
    } else {
      require(_valueInUsd <= config.hardCapCashOut, "MEN: amount reach hard cap");
    }
    if (config.lastCashOut[_from] > 0) {
      require(block.timestamp - config.lastCashOut[_from] >= config.secondsInADay, "MEN: please wait more time");
    }
    config.lastCashOut[_from] = block.timestamp;
  }

  function _initDependentContracts() private {
    vault = IVault(addressBook.get("vault"));
    taxManager = ITaxManager(addressBook.get("taxManager"));
    lsd = ILSD(addressBook.get("lsd"));
    clsAddress = addressBook.get("cls");
    developmentAddress = addressBook.get("development");
  }
}

File 2 of 9 : IBEP20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

/**
 * @title ERC20 interface
 * @dev see https://eips.ethereum.org/EIPS/eip-20
 */
interface IBEP20 {

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 9 : TokenAuth.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

import "@openzeppelin/contracts/utils/Context.sol";
import "../../interfaces/IVault.sol";

contract TokenAuth is Context {
  address internal bk;
  address internal mn;
  address internal developmentAddress;
  address internal clsAddress;
  IVault public vault;

  constructor() {
    mn = msg.sender;
    bk = msg.sender;
  }

  modifier onlyMn() {
    require(isOwner(), "onlyMn");
    _;
  }

  modifier onlyBk() {
    require(isBk(), "onlyBk");
    _;
  }

  modifier onlyDevelopment() {
    require(_msgSender() == developmentAddress || isOwner(), "TokenAuth: invalid caller");
    _;
  }

  modifier onlyCLS() {
    require(msg.sender == clsAddress, "TokenAuth: invalid caller");
    _;
  }

  modifier onlyVault() {
    require(msg.sender == address(vault), "TokenAuth: invalid caller");
    _;
  }

  function updateBk(address _newBk) external onlyBk {
    require(_newBk != address(0), "TokenAuth: invalid new bk");
    bk = _newBk;
  }

  function updateMn(address _newMn) external onlyBk {
    require(_newMn != address(0), "TokenAuth: invalid new mn");
    mn = _newMn;
  }

  function isOwner() public view returns (bool) {
    return _msgSender() == mn;
  }

  function isBk() public view returns (bool) {
    return _msgSender() == bk;
  }
}

File 4 of 9 : IAddressBook.sol
// SPDX-License-Identifier: BSD 3-Clause

pragma solidity 0.8.9;

interface IAddressBook {
  function get(string calldata _name) external view returns (address);
}

File 5 of 9 : ITaxManager.sol
// SPDX-License-Identifier: BSD 3-Clause

pragma solidity 0.8.9;

interface ITaxManager {
  function totalTaxPercentage() external view returns (uint);
}

File 6 of 9 : ILSD.sol
// SPDX-License-Identifier: BSD 3-Clause

pragma solidity 0.8.9;

interface ILSD {
  function isQualifiedForTaxDiscount(address _user) external view returns (bool);
  function transfer(address _from, address _to, uint _stAmount) external;
  function mint(uint _tokenAmount, uint _duration) external;
  function burn(uint _stAmount) external;
}

File 7 of 9 : IMENToken.sol
// SPDX-License-Identifier: BSD 3-Clause

pragma solidity 0.8.9;

import "../libs/zeppelin/token/BEP20/IBEP20.sol";

interface IMENToken is IBEP20 {
  enum TaxType {
    Buy,
    Sell,
    Transfer,
    Claim
  }
  function releaseMintingAllocation(uint _amount) external returns (bool);
  function releaseCLSAllocation(uint _amount) external returns (bool);
  function burn(uint _amount) external;
  function mint(uint _amount) external returns (bool);
  function lsdDiscountTaxPercentages(TaxType _type) external returns (uint);
  function getWhitelistTax(address _to, TaxType _type) external returns (uint, bool);
}

File 8 of 9 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 9 of 9 : IVault.sol
// SPDX-License-Identifier: BSD 3-Clause

pragma solidity 0.8.9;

interface IVault {
  enum DepositType {
    vaultDeposit,
    swapUSDForToken,
    swapBuyDNO
  }

  function updateQualifiedLevel(address _user1Address, address _user2Address) external;
  function depositFor(address _userAddress, uint _amount, DepositType _depositType) external;
  function getUserInfo(address _user) external view returns (uint, uint);
  function getTokenPrice() external view returns (uint);
  function updateUserTotalClaimedInUSD(address _user, uint _usd) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"secondsInADay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hardCapCashOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cashOutTaxPercentage","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"sharkCheckpoints","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"sharkTaxPercentages","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TwoWayTaxWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"WaitStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"WaitingStatusUpdated","type":"event"},{"inputs":[],"name":"BLOCK_IN_ONE_MONTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLS_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEVELOPMENT_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTING_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressBook","outputs":[{"internalType":"contract IAddressBook","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clsReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint256","name":"secondsInADay","type":"uint256"},{"internalType":"uint256","name":"hardCapCashOut","type":"uint256"},{"internalType":"uint256","name":"cashOutTaxPercentage","type":"uint256"},{"internalType":"bool","name":"wait","type":"bool"},{"internalType":"bool","name":"waitingFunctionEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableWaitingFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSharkInfo","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getUserCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"enum IMENToken.TaxType","name":"_type","type":"uint8"}],"name":"getWhitelistTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBk","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastReleaseDevelopmentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lsd","outputs":[{"internalType":"contract ILSD","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IMENToken.TaxType","name":"","type":"uint8"}],"name":"lsdDiscountTaxPercentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCLSBeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintingBeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"releaseCLSAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"releaseMintingAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressBook","type":"address"}],"name":"setAddressBook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startVestingAdvisorAndTeamBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startVestingDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startVestingDevelopmentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxManager","outputs":[{"internalType":"contract ITaxManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"twoWayTaxWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newBk","type":"address"}],"name":"updateBk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_secondsInDay","type":"uint256"},{"internalType":"uint256","name":"_hardCapCashOut","type":"uint256"},{"internalType":"uint256","name":"_cashOutTaxPercentage","type":"uint256"},{"internalType":"uint256[]","name":"_sharkCheckpoints","type":"uint256[]"},{"internalType":"uint256[]","name":"_sharkTaxPercentages","type":"uint256[]"}],"name":"updateConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IMENToken.TaxType","name":"_type","type":"uint8"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"updateLSDTaxDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintingBeMinted","type":"uint256"},{"internalType":"uint256","name":"_maxCLSBeMinted","type":"uint256"}],"name":"updateMaxContractMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMn","type":"address"}],"name":"updateMn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_softCap","type":"uint256"}],"name":"updateSoftCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"enum IMENToken.TaxType","name":"_type","type":"uint8"},{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"updateTaxWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateTwoWayTaxWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_wait","type":"bool"}],"name":"updateWaitStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_waited","type":"bool"}],"name":"updateWaitingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"waitingList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"enum IMENToken.TaxType","name":"","type":"uint8"}],"name":"whitelistTax","outputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060018054336001600160a01b031991821681179092556000805490911690911781556305f5e1006016556014601755604080516060810182529182526404a817c80060208301526406fc23ac009082015262000073906019906003620000cf565b506040805160608101825260008152613a986020820152614e2091810191909152620000a490601a90600362000128565b506018805461ff00191661010017905566023cfb4e356000600e5565394c549ef00060105562000183565b82805482825590600052602060002090810192821562000116579160200282015b8281111562000116578251829064ffffffffff16905591602001919060010190620000f0565b50620001249291506200016c565b5090565b82805482825590600052602060002090810192821562000116579160200282015b8281111562000116578251829061ffff1690559160200191906001019062000149565b5b808211156200012457600081556001016200016d565b61394880620001936000396000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c806373b82fb0116101b8578063b4b511b511610104578063e0583e3b116100a2578063f5887cdd1161007c578063f5887cdd146107bd578063f8956bfe146107d0578063fa049973146107f0578063fbfa77cf1461081357600080fd5b8063e0583e3b14610795578063e1807b271461079d578063f167bffe146107aa57600080fd5b8063c390ef83116100de578063c390ef8314610723578063c64db93714610736578063dd62ed3e14610749578063de026dc71461078257600080fd5b8063b4b511b5146106f4578063b534863d14610707578063b705b9381461071057600080fd5b806390f5e8b611610171578063a457c2d71161014b578063a457c2d714610686578063a9059cbb14610699578063ab9a6171146106ac578063b2ed3e75146106e157600080fd5b806390f5e8b61461064757806395d89b411461065a578063967a29fd1461067c57600080fd5b806373b82fb014610577578063760721ff1461058a57806376b10b141461059357806379502c55146105a65780638b58c64c146105f45780638f32d59b1461063f57600080fd5b806324d34b30116102925780633a0ee33811610230578063531df5b51161020a578063531df5b51461050b57806359ed359c1461051e5780635dd857711461052657806370a082311461054e57600080fd5b80633a0ee338146104dc57806342966c68146104e55780634d237730146104f857600080fd5b8063313ce5671161026c578063313ce5671461049057806332cb6b0c1461049857806339509351146104a6578063397148d3146104b957600080fd5b806324d34b30146104715780632d47eda7146104795780632fa9b2991461048257600080fd5b806310fd272e116102ff5780631f587868116102d95780631f5878681461043a57806322e1f32b1461044d57806323b872dd14610456578063247fc62e1461046957600080fd5b806310fd272e1461040e57806313581aa31461041b57806318160ddd1461043157600080fd5b806306fdde0314610347578063077aa7e31461038b578063095ea7b3146103a2578063096844a6146103c55780630b3448a8146103ce5780630fe6c2a9146103e3575b600080fd5b6103756040518060400160405280600f81526020016e4d6574614875622046696e616e636560881b81525081565b6040516103829190613250565b60405180910390f35b610394600c5481565b604051908152602001610382565b6103b56103b03660046132ba565b610826565b6040519015158152602001610382565b610394600e5481565b6103e16103dc3660046132e6565b61083c565b005b6014546103f6906001600160a01b031681565b6040516001600160a01b039091168152602001610382565b61039465394c549ef00081565b61042361088f565b60405161038292919061333e565b610394600a5481565b6103b561044836600461336c565b610948565b610394600d5481565b6103b5610464366004613385565b610a0b565b6103e1610a5e565b6103e1610bfc565b61039460115481565b61039466023cfb4e35600081565b610394600681565b61039466027ca57357c00081565b6103b56104b43660046132ba565b610c2d565b6103b56104c73660046132e6565b60076020526000908152604090205460ff1681565b61039460105481565b6103e16104f336600461336c565b610c64565b6013546103f6906001600160a01b031681565b6103e16105193660046133d5565b610cc9565b6103b5610d6c565b6105396105343660046133f1565b610d8a565b60408051928352901515602083015201610382565b61039461055c3660046132e6565b6001600160a01b031660009081526005602052604090205490565b6103e1610585366004613434565b610e0a565b610394600f5481565b6103e16105a13660046134b2565b610e98565b6015546016546017546018546105c89392919060ff8082169161010090041685565b60408051958652602086019490945292840191909152151560608301521515608082015260a001610382565b61062a6106023660046132e6565b6001600160a01b03166000908152601c6020908152604080832054601b909252909120549091565b60408051928352602083019190915201610382565b6103b5610fb7565b6103e16106553660046132e6565b610fcc565b6103756040518060400160405280600381526020016226a2a760e91b81525081565b6103946213c68081565b6103b56106943660046132ba565b611081565b6103b56106a73660046132ba565b6110b8565b6105396106ba3660046133f1565b60086020908152600092835260408084209091529082529020805460019091015460ff1682565b6103e16106ef366004613434565b6110c5565b6103e161070236600461353f565b61116b565b610394600b5481565b6103e161071e3660046132ba565b61126a565b6103e1610731366004613590565b6112aa565b6103e16107443660046132e6565b61131a565b6103946107573660046135ad565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6103b561079036600461336c565b6113cf565b6103e161146d565b61039465065dd083700081565b6103e16107b83660046135db565b6115ab565b6012546103f6906001600160a01b031681565b6103946107de3660046135fd565b60096020526000908152604090205481565b6103b56107fe3660046132e6565b601d6020526000908152604090205460ff1681565b6004546103f6906001600160a01b031681565b6000610833338484611675565b50600192915050565b610844610fb7565b6108695760405162461bcd60e51b815260040161086090613618565b60405180910390fd5b601280546001600160a01b0319166001600160a01b03831617905561088c61173f565b50565b60608060156004016015600501818054806020026020016040519081016040528092919081815260200182805480156108e757602002820191906000526020600020905b8154815260200190600101908083116108d3575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561093957602002820191906000526020600020905b815481526020019060010190808311610925575b50505050509050915091509091565b6004546000906001600160a01b031633146109755760405162461bcd60e51b815260040161086090613638565b600e5482600f546109869190613685565b11156109e05760405162461bcd60e51b815260206004820152602360248201527f4d6178207374616b696e6720616c6c6f636174696f6e206861642072656c65616044820152621cd95960ea1b6064820152608401610860565b81600f60008282546109f29190613685565b90915550610a0290503383611a6e565b5060015b919050565b6000610a18848484611b45565b6001600160a01b038416600090815260066020908152604080832033808552925290912054610a53918691610a4e90869061369d565b611675565b5060015b9392505050565b6002546001600160a01b0316336001600160a01b03161480610a835750610a83610fb7565b610a9f5760405162461bcd60e51b815260040161086090613638565b6000600b54118015610ab25750600b5443115b610af65760405162461bcd60e51b8152602060048201526015602482015274506c656173652077616974206d6f72652074696d6560581b6044820152606401610860565b6000610b06600c6213c6806136b4565b600b54610b139190613685565b9050600c548111610b725760405162461bcd60e51b815260206004820152602360248201527f446576656c6f706d656e7420616c6c6f636174696f6e206861642072656c65616044820152621cd95960ea1b6064820152608401610860565b600081431015610b9457600c54610b89904361369d565b43600c559050610ba9565b600c54610ba1908361369d565b600c83905590505b6000600a610bbb600c6213c6806136b4565b83610bcd65065dd083700060086136b4565b610bd791906136b4565b610be191906136d3565b610beb91906136d3565b9050610bf73382611a6e565b505050565b610c04610fb7565b610c205760405162461bcd60e51b815260040161086090613618565b6018805461ff0019169055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610833918590610a4e908690613685565b33600090815260056020526040902054610c7f90829061369d565b33600090815260056020526040902055600a54610c9d90829061369d565b600a5560405181815260009033906000805160206138f38339815191529060200160405180910390a350565b610cd1610fb7565b610ced5760405162461bcd60e51b815260040161086090613618565b620186a0811115610d2f5760405162461bcd60e51b815260206004820152600c60248201526b11185d18481a5b9d985b1a5960a21b6044820152606401610860565b8060096000846003811115610d4657610d466136f5565b6003811115610d5757610d576136f5565b81526020810191909152604001600020555050565b600080546001600160a01b0316335b6001600160a01b031614905090565b6001600160a01b03821660009081526008602052604081208190819081856003811115610db957610db96136f5565b6003811115610dca57610dca6136f5565b815260208082019290925260409081016000208151808301909252805480835260019091015460ff161515919092018190529093509150505b9250929050565b610e12610fb7565b610e2e5760405162461bcd60e51b815260040161086090613618565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915582519384529083015242908201527feee8fef4362fd10f32dff2866711b0d994609b21908388f341b56ed959d72f139060600160405180910390a15050565b610ea0610fb7565b610ebc5760405162461bcd60e51b815260040161086090613618565b6064851115610efc5760405162461bcd60e51b815260206004820152600c60248201526b11185d18481a5b9d985b1a5960a21b6044820152606401610860565b828114610f405760405162461bcd60e51b815260206004820152601260248201527114da185c9ac819185d18481a5b9d985b1a5960721b6044820152606401610860565b601587905560168690556017859055610f5b601985856131f0565b50610f68601a83836131f0565b507f2e85128c73c4d09fa6895cb2c37f1de464fe07688108f4a95e17f29e2f5d77728787878787878742604051610fa6989796959493929190613741565b60405180910390a150505050505050565b6001546000906001600160a01b031633610d7b565b610fd4610d6c565b6110095760405162461bcd60e51b81526020600482015260066024820152656f6e6c79426b60d01b6044820152606401610860565b6001600160a01b03811661105f5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e417574683a20696e76616c6964206e6577206d6e000000000000006044820152606401610860565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610833918590610a4e90869061369d565b6000610833338484611b45565b6110cd610fb7565b6110e95760405162461bcd60e51b815260040161086090613618565b601854610100900460ff166111405760405162461bcd60e51b815260206004820152601c60248201527f57616974696e672066756e6374696f6e2069732064697361626c6564000000006044820152606401610860565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b611173610fb7565b61118f5760405162461bcd60e51b815260040161086090613618565b620186a08211156111d75760405162461bcd60e51b81526020600482015260126024820152711c195c98d95b9d1859d9481a5b9d985b1a5960721b6044820152606401610860565b604051806040016040528083815260200182151581525060086000866001600160a01b03166001600160a01b031681526020019081526020016000206000856003811115611227576112276136f5565b6003811115611238576112386136f5565b8152602080820192909252604001600020825181559101516001909101805460ff191691151591909117905550505050565b611272610fb7565b61128e5760405162461bcd60e51b815260040161086090613618565b6001600160a01b039091166000908152601c6020526040902055565b6112b2610fb7565b6112ce5760405162461bcd60e51b815260040161086090613618565b6018805460ff1916821515908117909155604080519182524260208301527f16ee87eb79321397c0527468f5396e8233c7575357c435efb18a33edcf7d8189910160405180910390a150565b611322610d6c565b6113575760405162461bcd60e51b81526020600482015260066024820152656f6e6c79426b60d01b6044820152606401610860565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e417574683a20696e76616c6964206e657720626b000000000000006044820152606401610860565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546000906001600160a01b031633146113fc5760405162461bcd60e51b815260040161086090613638565b6010548260115461140d9190613685565b111561145b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820434c5320616c6c6f636174696f6e20686164207265616368656400006044820152606401610860565b81601160008282546109f29190613685565b611475610fb7565b6114915760405162461bcd60e51b815260040161086090613618565b600b54156114f05760405162461bcd60e51b815260206004820152602660248201527f56657374696e67446576656c6f706d656e7420686164207374617274656420616044820152656c726561647960d01b6064820152608401610860565b6002546001600160a01b03166115575760405162461bcd60e51b815260206004820152602660248201527f506c6561736520736574757020646576656c6f706d656e74206164647265737360448201526508199a5c9cdd60d21b6064820152608401610860565b6115656213c68060016136b4565b61156f9043613685565b600b819055600c556002546115a9906001600160a01b0316606461159a65065dd083700060146136b4565b6115a491906136d3565b611a6e565b565b6115b3610fb7565b6115cf5760405162461bcd60e51b815260040161086090613618565b66023cfb4e356000600e54111561161f5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99c819185d18481a5b9d985b1a5960621b6044820152606401610860565b65394c549ef000601054111561166a5760405162461bcd60e51b815260206004820152601060248201526f10d314c819185d18481a5b9d985b1a5960821b6044820152606401610860565b600e91909155601055565b6001600160a01b0382166116cb5760405162461bcd60e51b815260206004820181905260248201527f43616e206e6f7420617070726f766520666f72207a65726f20616464726573736044820152606401610860565b6001600160a01b0383166116de57600080fd5b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60125460405163349f642f60e11b81526020600482015260056024820152641d985d5b1d60da1b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b15801561179857600080fd5b505afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d09190613790565b600480546001600160a01b039283166001600160a01b031990911617815560125460405163349f642f60e11b815292169163693ec85e9161183091016020808252600a90820152693a30bc26b0b730b3b2b960b11b604082015260600190565b60206040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190613790565b601380546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815291169063693ec85e906118c1906004016137ad565b60206040518083038186803b1580156118d957600080fd5b505afa1580156118ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119119190613790565b601480546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815291169063693ec85e90611952906004016137ca565b60206040518083038186803b15801561196a57600080fd5b505afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190613790565b600380546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815260206004820152600b60248201526a19195d995b1bdc1b595b9d60aa1b604482015291169063693ec85e9060640160206040518083038186803b158015611a1457600080fd5b505afa158015611a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613790565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611a7782611dce565b66027ca57357c00081600a54611a8d9190613685565b1115611acc5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b6044820152606401610860565b6001600160a01b03821660009081526005602052604081208054839290611af4908490613685565b9250508190555080600a6000828254611b0d9190613685565b90915550506040518181526001600160a01b038316906000906000805160206138f38339815191529060200160405180910390a35050565b611b4e83611dce565b6001600160a01b03831660009081526005602052604081208054839290611b7690849061369d565b9091555060009050611b89848484611e49565b90508015611c2f57611b9b818361369d565b6001600160a01b03841660009081526005602052604081208054909190611bc3908490613685565b90915550506013546001600160a01b031660009081526005602052604081208054839290611bf2908490613685565b90915550506013546040518281526001600160a01b03918216918616906000805160206138f38339815191529060200160405180910390a3611c5d565b6001600160a01b03831660009081526005602052604081208054849290611c57908490613685565b90915550505b6001600160a01b038316611c7d5781600a54611c79919061369d565b600a555b6004546001600160a01b0385811691161415611d905760048054604080516325ca7a8760e11b815290516001600160a01b0390921692633202699d928792633b9aca00928692634b94f50e928083019260209291829003018186803b158015611ce557600080fd5b505afa158015611cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1d91906137e7565b611d2790876136b4565b611d3191906136d3565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b505050505b6001600160a01b038084169085166000805160206138f3833981519152611db7848661369d565b60405190815260200160405180910390a350505050565b601854610100900460ff1615611e26576001600160a01b03811660009081526007602052604090205460ff16158015611e0a575060185460ff16155b61088c5760405162461bcd60e51b815260040161086090613800565b60185460ff161561088c5760405162461bcd60e51b815260040161086090613800565b6001600160a01b0383166000908152601d602052604081205460ff1680611e8857506001600160a01b0383166000908152601d602052604090205460ff165b80611f34575060125460405163349f642f60e11b81526020600482015260056024820152641d985d5b1d60da1b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b158015611ee757600080fd5b505afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f9190613790565b6001600160a01b0316836001600160a01b0316145b80611fcd575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90611f68906004016137ca565b60206040518083038186803b158015611f8057600080fd5b505afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190613790565b6001600160a01b0316846001600160a01b0316145b80612066575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612001906004016137ca565b60206040518083038186803b15801561201957600080fd5b505afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190613790565b6001600160a01b0316836001600160a01b0316145b806120ff575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e9061209a906004016137ad565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190613790565b6001600160a01b0316846001600160a01b0316145b80612198575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612133906004016137ad565b60206040518083038186803b15801561214b57600080fd5b505afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121839190613790565b6001600160a01b0316836001600160a01b0316145b8061224b575060125460405163349f642f60e11b815260206004820152600c60248201526b39b430b932a6b0b730b3b2b960a11b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b1580156121fe57600080fd5b505afa158015612212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122369190613790565b6001600160a01b0316846001600160a01b0316145b806122fe575060125460405163349f642f60e11b815260206004820152600c60248201526b39b430b932a6b0b730b3b2b960a11b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190613790565b6001600160a01b0316836001600160a01b0316145b80612430575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e9061233290600401613841565b60206040518083038186803b15801561234a57600080fd5b505afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123829190613790565b6001600160a01b0316846001600160a01b0316148015612430575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906123cb9060040161385f565b60206040518083038186803b1580156123e357600080fd5b505afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613790565b6001600160a01b0316836001600160a01b0316145b80612562575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906124649060040161385f565b60206040518083038186803b15801561247c57600080fd5b505afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190613790565b6001600160a01b0316846001600160a01b0316148015612562575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906124fd90600401613841565b60206040518083038186803b15801561251557600080fd5b505afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190613790565b6001600160a01b0316836001600160a01b0316145b1561256f57506000610a57565b600080601360009054906101000a90046001600160a01b03166001600160a01b031663fff5a9fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c057600080fd5b505afa1580156125d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f891906137e7565b612604856103e86136b4565b61260e91906136d3565b60125460405163349f642f60e11b81529192506000916001600160a01b039091169063693ec85e9061264290600401613841565b60206040518083038186803b15801561265a57600080fd5b505afa15801561266e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126929190613790565b6001600160a01b0316876001600160a01b0316148061273f575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906126da9060040161385f565b60206040518083038186803b1580156126f257600080fd5b505afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190613790565b6001600160a01b0316876001600160a01b0316145b905080156128a5576001600160a01b03861660009081526008602090815260408083208380529091529020600181015490935060ff16156127ac5782546127875760006127a2565b8254620186a09061279890876136b4565b6127a291906136d3565b9350505050610a57565b60145460405163b941bf9f60e01b81526001600160a01b0388811660048301529091169063b941bf9f9060240160206040518083038186803b1580156127f157600080fd5b505afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190613880565b801561285e57506000805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5415155b156128a557620186a060096000805b600381111561287e5761287e6136f5565b815260200190815260200160002054620186a061289b919061369d565b61279890846136b4565b6004546001600160a01b0388811691161415612aea576001600160a01b0386166000908152600860209081526040808320600384529091529020600181015490935060ff16156128fc5782546127875760006127a2565b60195415612a235760048054604051636386c1c760e01b81526001600160a01b038981169382019390935260009290911690636386c1c790602401604080518083038186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612986919061389d565b915060009050805b6019548110156129d35760198054829081106129ac576129ac6138c1565b906000526020600020015483106129c1578091505b806129cb816138d7565b91505061298e565b508015612a2057620186a0601560050182815481106129f4576129f46138c1565b906000526020600020015488612a0a91906136b4565b612a1491906136d3565b95505050505050610a57565b50505b60145460405163b941bf9f60e01b81526001600160a01b0388811660048301529091169063b941bf9f9060240160206040518083038186803b158015612a6857600080fd5b505afa158015612a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa09190613880565b8015612ad65750600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75415155b15612aea57620186a060096000600361286d565b60125460405163349f642f60e11b81526000916001600160a01b03169063693ec85e90612b199060040161385f565b60206040518083038186803b158015612b3157600080fd5b505afa158015612b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b699190613790565b6001600160a01b0316876001600160a01b03161480612c16575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612bb190600401613841565b60206040518083038186803b158015612bc957600080fd5b505afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c019190613790565b6001600160a01b0316876001600160a01b0316145b90508015612f06576001600160a01b0388166000908152600860209081526040808320600180855292529091209081015490945060ff1615612c85578354612c5f576000612c7a565b8354620186a090612c7090886136b4565b612c7a91906136d3565b945050505050610a57565b6013546001600160a01b03898116911614612d4257612d4288633b9aca00600460009054906101000a90046001600160a01b03166001600160a01b0316634b94f50e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2991906137e7565b612d33908a6136b4565b612d3d91906136d3565b613076565b60145460405163b941bf9f60e01b81526001600160a01b038a811660048301529091169063b941bf9f9060240160206040518083038186803b158015612d8757600080fd5b505afa158015612d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbf9190613880565b8015612df55750600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365415155b15612e4c57600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3654620186a090612e35908261369d565b612e3f90856136b4565b612e4991906136d3565b92505b60048054604051636386c1c760e01b81526001600160a01b038b81169382019390935260009290911690636386c1c790602401604080518083038186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ece919061389d565b50601754909150606490612ee290836136b4565b612eec91906136d3565b8710612f0057612efd6002886136d3565b93505b50613029565b6004546001600160a01b03898116911614801590612f9c575060145460405163b941bf9f60e01b81526001600160a01b038a811660048301529091169063b941bf9f9060240160206040518083038186803b158015612f6457600080fd5b505afa158015612f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9c9190613880565b8015612fd25750600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35415155b1561302957600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c354620186a090613012908261369d565b61301c90856136b4565b61302691906136d3565b92505b6001600160a01b0388166000908152600860209081526040808320600284529091529020600181015490945060ff161561306a578354612c5f576000612c7a565b50909695505050505050565b336000908152601c6020526040902054156130ef57336000908152601c60205260409020548111156130ea5760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20616d6f756e7420726561636820736f6674206361700000000000006044820152606401610860565b613141565b6016548111156131415760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20616d6f756e742072656163682068617264206361700000000000006044820152606401610860565b6001600160a01b0382166000908152601b6020526040902054156131d3576015546001600160a01b0383166000908152601b6020526040902054613185904261369d565b10156131d35760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20706c656173652077616974206d6f72652074696d650000000000006044820152606401610860565b506001600160a01b03166000908152601b60205260409020429055565b82805482825590600052602060002090810192821561322b579160200282015b8281111561322b578235825591602001919060010190613210565b5061323792915061323b565b5090565b5b80821115613237576000815560010161323c565b600060208083528351808285015260005b8181101561327d57858101830151858201604001528201613261565b8181111561328f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461088c57600080fd5b600080604083850312156132cd57600080fd5b82356132d8816132a5565b946020939093013593505050565b6000602082840312156132f857600080fd5b8135610a57816132a5565b600081518084526020808501945080840160005b8381101561333357815187529582019590820190600101613317565b509495945050505050565b6040815260006133516040830185613303565b82810360208401526133638185613303565b95945050505050565b60006020828403121561337e57600080fd5b5035919050565b60008060006060848603121561339a57600080fd5b83356133a5816132a5565b925060208401356133b5816132a5565b929592945050506040919091013590565b803560048110610a0657600080fd5b600080604083850312156133e857600080fd5b6132d8836133c6565b6000806040838503121561340457600080fd5b823561340f816132a5565b915061341d602084016133c6565b90509250929050565b801515811461088c57600080fd5b6000806040838503121561344757600080fd5b8235613452816132a5565b9150602083013561346281613426565b809150509250929050565b60008083601f84011261347f57600080fd5b50813567ffffffffffffffff81111561349757600080fd5b6020830191508360208260051b8501011115610e0357600080fd5b600080600080600080600060a0888a0312156134cd57600080fd5b873596506020880135955060408801359450606088013567ffffffffffffffff808211156134fa57600080fd5b6135068b838c0161346d565b909650945060808a013591508082111561351f57600080fd5b5061352c8a828b0161346d565b989b979a50959850939692959293505050565b6000806000806080858703121561355557600080fd5b8435613560816132a5565b935061356e602086016133c6565b925060408501359150606085013561358581613426565b939692955090935050565b6000602082840312156135a257600080fd5b8135610a5781613426565b600080604083850312156135c057600080fd5b82356135cb816132a5565b91506020830135613462816132a5565b600080604083850312156135ee57600080fd5b50508035926020909101359150565b60006020828403121561360f57600080fd5b610a57826133c6565b60208082526006908201526537b7363ca6b760d11b604082015260600190565b60208082526019908201527f546f6b656e417574683a20696e76616c69642063616c6c657200000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156136985761369861366f565b500190565b6000828210156136af576136af61366f565b500390565b60008160001904831182151516156136ce576136ce61366f565b500290565b6000826136f057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b81835260006001600160fb1b0383111561372457600080fd5b8260051b8083602087013760009401602001938452509192915050565b88815287602082015286604082015260c06060820152600061376760c08301878961370b565b828103608084015261377a81868861370b565b9150508260a08301529998505050505050505050565b6000602082840312156137a257600080fd5b8151610a57816132a5565b6020808252600390820152621b1cd960ea1b604082015260600190565b602080825260039082015262636c7360e81b604082015260600190565b6000602082840312156137f957600080fd5b5051919050565b60208082526021908201527f596f752063616e206e6f7420646f207468697320617420746865206d6f6d656e6040820152601d60fa1b606082015260800190565b6020808252600490820152630737761760e41b604082015260600190565b60208082526007908201526636382a37b5b2b760c91b604082015260600190565b60006020828403121561389257600080fd5b8151610a5781613426565b600080604083850312156138b057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b60006000198214156138eb576138eb61366f565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a2e0961bd11270be85118c47a56b8459c8cde204e4c8ab8b26ad5447ce70d1a064736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103425760003560e01c806373b82fb0116101b8578063b4b511b511610104578063e0583e3b116100a2578063f5887cdd1161007c578063f5887cdd146107bd578063f8956bfe146107d0578063fa049973146107f0578063fbfa77cf1461081357600080fd5b8063e0583e3b14610795578063e1807b271461079d578063f167bffe146107aa57600080fd5b8063c390ef83116100de578063c390ef8314610723578063c64db93714610736578063dd62ed3e14610749578063de026dc71461078257600080fd5b8063b4b511b5146106f4578063b534863d14610707578063b705b9381461071057600080fd5b806390f5e8b611610171578063a457c2d71161014b578063a457c2d714610686578063a9059cbb14610699578063ab9a6171146106ac578063b2ed3e75146106e157600080fd5b806390f5e8b61461064757806395d89b411461065a578063967a29fd1461067c57600080fd5b806373b82fb014610577578063760721ff1461058a57806376b10b141461059357806379502c55146105a65780638b58c64c146105f45780638f32d59b1461063f57600080fd5b806324d34b30116102925780633a0ee33811610230578063531df5b51161020a578063531df5b51461050b57806359ed359c1461051e5780635dd857711461052657806370a082311461054e57600080fd5b80633a0ee338146104dc57806342966c68146104e55780634d237730146104f857600080fd5b8063313ce5671161026c578063313ce5671461049057806332cb6b0c1461049857806339509351146104a6578063397148d3146104b957600080fd5b806324d34b30146104715780632d47eda7146104795780632fa9b2991461048257600080fd5b806310fd272e116102ff5780631f587868116102d95780631f5878681461043a57806322e1f32b1461044d57806323b872dd14610456578063247fc62e1461046957600080fd5b806310fd272e1461040e57806313581aa31461041b57806318160ddd1461043157600080fd5b806306fdde0314610347578063077aa7e31461038b578063095ea7b3146103a2578063096844a6146103c55780630b3448a8146103ce5780630fe6c2a9146103e3575b600080fd5b6103756040518060400160405280600f81526020016e4d6574614875622046696e616e636560881b81525081565b6040516103829190613250565b60405180910390f35b610394600c5481565b604051908152602001610382565b6103b56103b03660046132ba565b610826565b6040519015158152602001610382565b610394600e5481565b6103e16103dc3660046132e6565b61083c565b005b6014546103f6906001600160a01b031681565b6040516001600160a01b039091168152602001610382565b61039465394c549ef00081565b61042361088f565b60405161038292919061333e565b610394600a5481565b6103b561044836600461336c565b610948565b610394600d5481565b6103b5610464366004613385565b610a0b565b6103e1610a5e565b6103e1610bfc565b61039460115481565b61039466023cfb4e35600081565b610394600681565b61039466027ca57357c00081565b6103b56104b43660046132ba565b610c2d565b6103b56104c73660046132e6565b60076020526000908152604090205460ff1681565b61039460105481565b6103e16104f336600461336c565b610c64565b6013546103f6906001600160a01b031681565b6103e16105193660046133d5565b610cc9565b6103b5610d6c565b6105396105343660046133f1565b610d8a565b60408051928352901515602083015201610382565b61039461055c3660046132e6565b6001600160a01b031660009081526005602052604090205490565b6103e1610585366004613434565b610e0a565b610394600f5481565b6103e16105a13660046134b2565b610e98565b6015546016546017546018546105c89392919060ff8082169161010090041685565b60408051958652602086019490945292840191909152151560608301521515608082015260a001610382565b61062a6106023660046132e6565b6001600160a01b03166000908152601c6020908152604080832054601b909252909120549091565b60408051928352602083019190915201610382565b6103b5610fb7565b6103e16106553660046132e6565b610fcc565b6103756040518060400160405280600381526020016226a2a760e91b81525081565b6103946213c68081565b6103b56106943660046132ba565b611081565b6103b56106a73660046132ba565b6110b8565b6105396106ba3660046133f1565b60086020908152600092835260408084209091529082529020805460019091015460ff1682565b6103e16106ef366004613434565b6110c5565b6103e161070236600461353f565b61116b565b610394600b5481565b6103e161071e3660046132ba565b61126a565b6103e1610731366004613590565b6112aa565b6103e16107443660046132e6565b61131a565b6103946107573660046135ad565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6103b561079036600461336c565b6113cf565b6103e161146d565b61039465065dd083700081565b6103e16107b83660046135db565b6115ab565b6012546103f6906001600160a01b031681565b6103946107de3660046135fd565b60096020526000908152604090205481565b6103b56107fe3660046132e6565b601d6020526000908152604090205460ff1681565b6004546103f6906001600160a01b031681565b6000610833338484611675565b50600192915050565b610844610fb7565b6108695760405162461bcd60e51b815260040161086090613618565b60405180910390fd5b601280546001600160a01b0319166001600160a01b03831617905561088c61173f565b50565b60608060156004016015600501818054806020026020016040519081016040528092919081815260200182805480156108e757602002820191906000526020600020905b8154815260200190600101908083116108d3575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561093957602002820191906000526020600020905b815481526020019060010190808311610925575b50505050509050915091509091565b6004546000906001600160a01b031633146109755760405162461bcd60e51b815260040161086090613638565b600e5482600f546109869190613685565b11156109e05760405162461bcd60e51b815260206004820152602360248201527f4d6178207374616b696e6720616c6c6f636174696f6e206861642072656c65616044820152621cd95960ea1b6064820152608401610860565b81600f60008282546109f29190613685565b90915550610a0290503383611a6e565b5060015b919050565b6000610a18848484611b45565b6001600160a01b038416600090815260066020908152604080832033808552925290912054610a53918691610a4e90869061369d565b611675565b5060015b9392505050565b6002546001600160a01b0316336001600160a01b03161480610a835750610a83610fb7565b610a9f5760405162461bcd60e51b815260040161086090613638565b6000600b54118015610ab25750600b5443115b610af65760405162461bcd60e51b8152602060048201526015602482015274506c656173652077616974206d6f72652074696d6560581b6044820152606401610860565b6000610b06600c6213c6806136b4565b600b54610b139190613685565b9050600c548111610b725760405162461bcd60e51b815260206004820152602360248201527f446576656c6f706d656e7420616c6c6f636174696f6e206861642072656c65616044820152621cd95960ea1b6064820152608401610860565b600081431015610b9457600c54610b89904361369d565b43600c559050610ba9565b600c54610ba1908361369d565b600c83905590505b6000600a610bbb600c6213c6806136b4565b83610bcd65065dd083700060086136b4565b610bd791906136b4565b610be191906136d3565b610beb91906136d3565b9050610bf73382611a6e565b505050565b610c04610fb7565b610c205760405162461bcd60e51b815260040161086090613618565b6018805461ff0019169055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610833918590610a4e908690613685565b33600090815260056020526040902054610c7f90829061369d565b33600090815260056020526040902055600a54610c9d90829061369d565b600a5560405181815260009033906000805160206138f38339815191529060200160405180910390a350565b610cd1610fb7565b610ced5760405162461bcd60e51b815260040161086090613618565b620186a0811115610d2f5760405162461bcd60e51b815260206004820152600c60248201526b11185d18481a5b9d985b1a5960a21b6044820152606401610860565b8060096000846003811115610d4657610d466136f5565b6003811115610d5757610d576136f5565b81526020810191909152604001600020555050565b600080546001600160a01b0316335b6001600160a01b031614905090565b6001600160a01b03821660009081526008602052604081208190819081856003811115610db957610db96136f5565b6003811115610dca57610dca6136f5565b815260208082019290925260409081016000208151808301909252805480835260019091015460ff161515919092018190529093509150505b9250929050565b610e12610fb7565b610e2e5760405162461bcd60e51b815260040161086090613618565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915582519384529083015242908201527feee8fef4362fd10f32dff2866711b0d994609b21908388f341b56ed959d72f139060600160405180910390a15050565b610ea0610fb7565b610ebc5760405162461bcd60e51b815260040161086090613618565b6064851115610efc5760405162461bcd60e51b815260206004820152600c60248201526b11185d18481a5b9d985b1a5960a21b6044820152606401610860565b828114610f405760405162461bcd60e51b815260206004820152601260248201527114da185c9ac819185d18481a5b9d985b1a5960721b6044820152606401610860565b601587905560168690556017859055610f5b601985856131f0565b50610f68601a83836131f0565b507f2e85128c73c4d09fa6895cb2c37f1de464fe07688108f4a95e17f29e2f5d77728787878787878742604051610fa6989796959493929190613741565b60405180910390a150505050505050565b6001546000906001600160a01b031633610d7b565b610fd4610d6c565b6110095760405162461bcd60e51b81526020600482015260066024820152656f6e6c79426b60d01b6044820152606401610860565b6001600160a01b03811661105f5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e417574683a20696e76616c6964206e6577206d6e000000000000006044820152606401610860565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610833918590610a4e90869061369d565b6000610833338484611b45565b6110cd610fb7565b6110e95760405162461bcd60e51b815260040161086090613618565b601854610100900460ff166111405760405162461bcd60e51b815260206004820152601c60248201527f57616974696e672066756e6374696f6e2069732064697361626c6564000000006044820152606401610860565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b611173610fb7565b61118f5760405162461bcd60e51b815260040161086090613618565b620186a08211156111d75760405162461bcd60e51b81526020600482015260126024820152711c195c98d95b9d1859d9481a5b9d985b1a5960721b6044820152606401610860565b604051806040016040528083815260200182151581525060086000866001600160a01b03166001600160a01b031681526020019081526020016000206000856003811115611227576112276136f5565b6003811115611238576112386136f5565b8152602080820192909252604001600020825181559101516001909101805460ff191691151591909117905550505050565b611272610fb7565b61128e5760405162461bcd60e51b815260040161086090613618565b6001600160a01b039091166000908152601c6020526040902055565b6112b2610fb7565b6112ce5760405162461bcd60e51b815260040161086090613618565b6018805460ff1916821515908117909155604080519182524260208301527f16ee87eb79321397c0527468f5396e8233c7575357c435efb18a33edcf7d8189910160405180910390a150565b611322610d6c565b6113575760405162461bcd60e51b81526020600482015260066024820152656f6e6c79426b60d01b6044820152606401610860565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e417574683a20696e76616c6964206e657720626b000000000000006044820152606401610860565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546000906001600160a01b031633146113fc5760405162461bcd60e51b815260040161086090613638565b6010548260115461140d9190613685565b111561145b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820434c5320616c6c6f636174696f6e20686164207265616368656400006044820152606401610860565b81601160008282546109f29190613685565b611475610fb7565b6114915760405162461bcd60e51b815260040161086090613618565b600b54156114f05760405162461bcd60e51b815260206004820152602660248201527f56657374696e67446576656c6f706d656e7420686164207374617274656420616044820152656c726561647960d01b6064820152608401610860565b6002546001600160a01b03166115575760405162461bcd60e51b815260206004820152602660248201527f506c6561736520736574757020646576656c6f706d656e74206164647265737360448201526508199a5c9cdd60d21b6064820152608401610860565b6115656213c68060016136b4565b61156f9043613685565b600b819055600c556002546115a9906001600160a01b0316606461159a65065dd083700060146136b4565b6115a491906136d3565b611a6e565b565b6115b3610fb7565b6115cf5760405162461bcd60e51b815260040161086090613618565b66023cfb4e356000600e54111561161f5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99c819185d18481a5b9d985b1a5960621b6044820152606401610860565b65394c549ef000601054111561166a5760405162461bcd60e51b815260206004820152601060248201526f10d314c819185d18481a5b9d985b1a5960821b6044820152606401610860565b600e91909155601055565b6001600160a01b0382166116cb5760405162461bcd60e51b815260206004820181905260248201527f43616e206e6f7420617070726f766520666f72207a65726f20616464726573736044820152606401610860565b6001600160a01b0383166116de57600080fd5b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60125460405163349f642f60e11b81526020600482015260056024820152641d985d5b1d60da1b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b15801561179857600080fd5b505afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d09190613790565b600480546001600160a01b039283166001600160a01b031990911617815560125460405163349f642f60e11b815292169163693ec85e9161183091016020808252600a90820152693a30bc26b0b730b3b2b960b11b604082015260600190565b60206040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190613790565b601380546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815291169063693ec85e906118c1906004016137ad565b60206040518083038186803b1580156118d957600080fd5b505afa1580156118ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119119190613790565b601480546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815291169063693ec85e90611952906004016137ca565b60206040518083038186803b15801561196a57600080fd5b505afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190613790565b600380546001600160a01b0319166001600160a01b0392831617905560125460405163349f642f60e11b815260206004820152600b60248201526a19195d995b1bdc1b595b9d60aa1b604482015291169063693ec85e9060640160206040518083038186803b158015611a1457600080fd5b505afa158015611a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613790565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611a7782611dce565b66027ca57357c00081600a54611a8d9190613685565b1115611acc5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b6044820152606401610860565b6001600160a01b03821660009081526005602052604081208054839290611af4908490613685565b9250508190555080600a6000828254611b0d9190613685565b90915550506040518181526001600160a01b038316906000906000805160206138f38339815191529060200160405180910390a35050565b611b4e83611dce565b6001600160a01b03831660009081526005602052604081208054839290611b7690849061369d565b9091555060009050611b89848484611e49565b90508015611c2f57611b9b818361369d565b6001600160a01b03841660009081526005602052604081208054909190611bc3908490613685565b90915550506013546001600160a01b031660009081526005602052604081208054839290611bf2908490613685565b90915550506013546040518281526001600160a01b03918216918616906000805160206138f38339815191529060200160405180910390a3611c5d565b6001600160a01b03831660009081526005602052604081208054849290611c57908490613685565b90915550505b6001600160a01b038316611c7d5781600a54611c79919061369d565b600a555b6004546001600160a01b0385811691161415611d905760048054604080516325ca7a8760e11b815290516001600160a01b0390921692633202699d928792633b9aca00928692634b94f50e928083019260209291829003018186803b158015611ce557600080fd5b505afa158015611cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1d91906137e7565b611d2790876136b4565b611d3191906136d3565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b505050505b6001600160a01b038084169085166000805160206138f3833981519152611db7848661369d565b60405190815260200160405180910390a350505050565b601854610100900460ff1615611e26576001600160a01b03811660009081526007602052604090205460ff16158015611e0a575060185460ff16155b61088c5760405162461bcd60e51b815260040161086090613800565b60185460ff161561088c5760405162461bcd60e51b815260040161086090613800565b6001600160a01b0383166000908152601d602052604081205460ff1680611e8857506001600160a01b0383166000908152601d602052604090205460ff165b80611f34575060125460405163349f642f60e11b81526020600482015260056024820152641d985d5b1d60da1b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b158015611ee757600080fd5b505afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f9190613790565b6001600160a01b0316836001600160a01b0316145b80611fcd575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90611f68906004016137ca565b60206040518083038186803b158015611f8057600080fd5b505afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190613790565b6001600160a01b0316846001600160a01b0316145b80612066575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612001906004016137ca565b60206040518083038186803b15801561201957600080fd5b505afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190613790565b6001600160a01b0316836001600160a01b0316145b806120ff575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e9061209a906004016137ad565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190613790565b6001600160a01b0316846001600160a01b0316145b80612198575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612133906004016137ad565b60206040518083038186803b15801561214b57600080fd5b505afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121839190613790565b6001600160a01b0316836001600160a01b0316145b8061224b575060125460405163349f642f60e11b815260206004820152600c60248201526b39b430b932a6b0b730b3b2b960a11b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b1580156121fe57600080fd5b505afa158015612212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122369190613790565b6001600160a01b0316846001600160a01b0316145b806122fe575060125460405163349f642f60e11b815260206004820152600c60248201526b39b430b932a6b0b730b3b2b960a11b60448201526001600160a01b039091169063693ec85e9060640160206040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190613790565b6001600160a01b0316836001600160a01b0316145b80612430575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e9061233290600401613841565b60206040518083038186803b15801561234a57600080fd5b505afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123829190613790565b6001600160a01b0316846001600160a01b0316148015612430575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906123cb9060040161385f565b60206040518083038186803b1580156123e357600080fd5b505afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613790565b6001600160a01b0316836001600160a01b0316145b80612562575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906124649060040161385f565b60206040518083038186803b15801561247c57600080fd5b505afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190613790565b6001600160a01b0316846001600160a01b0316148015612562575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906124fd90600401613841565b60206040518083038186803b15801561251557600080fd5b505afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190613790565b6001600160a01b0316836001600160a01b0316145b1561256f57506000610a57565b600080601360009054906101000a90046001600160a01b03166001600160a01b031663fff5a9fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c057600080fd5b505afa1580156125d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f891906137e7565b612604856103e86136b4565b61260e91906136d3565b60125460405163349f642f60e11b81529192506000916001600160a01b039091169063693ec85e9061264290600401613841565b60206040518083038186803b15801561265a57600080fd5b505afa15801561266e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126929190613790565b6001600160a01b0316876001600160a01b0316148061273f575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e906126da9060040161385f565b60206040518083038186803b1580156126f257600080fd5b505afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190613790565b6001600160a01b0316876001600160a01b0316145b905080156128a5576001600160a01b03861660009081526008602090815260408083208380529091529020600181015490935060ff16156127ac5782546127875760006127a2565b8254620186a09061279890876136b4565b6127a291906136d3565b9350505050610a57565b60145460405163b941bf9f60e01b81526001600160a01b0388811660048301529091169063b941bf9f9060240160206040518083038186803b1580156127f157600080fd5b505afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190613880565b801561285e57506000805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5415155b156128a557620186a060096000805b600381111561287e5761287e6136f5565b815260200190815260200160002054620186a061289b919061369d565b61279890846136b4565b6004546001600160a01b0388811691161415612aea576001600160a01b0386166000908152600860209081526040808320600384529091529020600181015490935060ff16156128fc5782546127875760006127a2565b60195415612a235760048054604051636386c1c760e01b81526001600160a01b038981169382019390935260009290911690636386c1c790602401604080518083038186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612986919061389d565b915060009050805b6019548110156129d35760198054829081106129ac576129ac6138c1565b906000526020600020015483106129c1578091505b806129cb816138d7565b91505061298e565b508015612a2057620186a0601560050182815481106129f4576129f46138c1565b906000526020600020015488612a0a91906136b4565b612a1491906136d3565b95505050505050610a57565b50505b60145460405163b941bf9f60e01b81526001600160a01b0388811660048301529091169063b941bf9f9060240160206040518083038186803b158015612a6857600080fd5b505afa158015612a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa09190613880565b8015612ad65750600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75415155b15612aea57620186a060096000600361286d565b60125460405163349f642f60e11b81526000916001600160a01b03169063693ec85e90612b199060040161385f565b60206040518083038186803b158015612b3157600080fd5b505afa158015612b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b699190613790565b6001600160a01b0316876001600160a01b03161480612c16575060125460405163349f642f60e11b81526001600160a01b039091169063693ec85e90612bb190600401613841565b60206040518083038186803b158015612bc957600080fd5b505afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c019190613790565b6001600160a01b0316876001600160a01b0316145b90508015612f06576001600160a01b0388166000908152600860209081526040808320600180855292529091209081015490945060ff1615612c85578354612c5f576000612c7a565b8354620186a090612c7090886136b4565b612c7a91906136d3565b945050505050610a57565b6013546001600160a01b03898116911614612d4257612d4288633b9aca00600460009054906101000a90046001600160a01b03166001600160a01b0316634b94f50e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cf157600080fd5b505afa158015612d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2991906137e7565b612d33908a6136b4565b612d3d91906136d3565b613076565b60145460405163b941bf9f60e01b81526001600160a01b038a811660048301529091169063b941bf9f9060240160206040518083038186803b158015612d8757600080fd5b505afa158015612d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbf9190613880565b8015612df55750600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365415155b15612e4c57600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3654620186a090612e35908261369d565b612e3f90856136b4565b612e4991906136d3565b92505b60048054604051636386c1c760e01b81526001600160a01b038b81169382019390935260009290911690636386c1c790602401604080518083038186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ece919061389d565b50601754909150606490612ee290836136b4565b612eec91906136d3565b8710612f0057612efd6002886136d3565b93505b50613029565b6004546001600160a01b03898116911614801590612f9c575060145460405163b941bf9f60e01b81526001600160a01b038a811660048301529091169063b941bf9f9060240160206040518083038186803b158015612f6457600080fd5b505afa158015612f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9c9190613880565b8015612fd25750600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35415155b1561302957600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c354620186a090613012908261369d565b61301c90856136b4565b61302691906136d3565b92505b6001600160a01b0388166000908152600860209081526040808320600284529091529020600181015490945060ff161561306a578354612c5f576000612c7a565b50909695505050505050565b336000908152601c6020526040902054156130ef57336000908152601c60205260409020548111156130ea5760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20616d6f756e7420726561636820736f6674206361700000000000006044820152606401610860565b613141565b6016548111156131415760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20616d6f756e742072656163682068617264206361700000000000006044820152606401610860565b6001600160a01b0382166000908152601b6020526040902054156131d3576015546001600160a01b0383166000908152601b6020526040902054613185904261369d565b10156131d35760405162461bcd60e51b815260206004820152601a60248201527f4d454e3a20706c656173652077616974206d6f72652074696d650000000000006044820152606401610860565b506001600160a01b03166000908152601b60205260409020429055565b82805482825590600052602060002090810192821561322b579160200282015b8281111561322b578235825591602001919060010190613210565b5061323792915061323b565b5090565b5b80821115613237576000815560010161323c565b600060208083528351808285015260005b8181101561327d57858101830151858201604001528201613261565b8181111561328f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461088c57600080fd5b600080604083850312156132cd57600080fd5b82356132d8816132a5565b946020939093013593505050565b6000602082840312156132f857600080fd5b8135610a57816132a5565b600081518084526020808501945080840160005b8381101561333357815187529582019590820190600101613317565b509495945050505050565b6040815260006133516040830185613303565b82810360208401526133638185613303565b95945050505050565b60006020828403121561337e57600080fd5b5035919050565b60008060006060848603121561339a57600080fd5b83356133a5816132a5565b925060208401356133b5816132a5565b929592945050506040919091013590565b803560048110610a0657600080fd5b600080604083850312156133e857600080fd5b6132d8836133c6565b6000806040838503121561340457600080fd5b823561340f816132a5565b915061341d602084016133c6565b90509250929050565b801515811461088c57600080fd5b6000806040838503121561344757600080fd5b8235613452816132a5565b9150602083013561346281613426565b809150509250929050565b60008083601f84011261347f57600080fd5b50813567ffffffffffffffff81111561349757600080fd5b6020830191508360208260051b8501011115610e0357600080fd5b600080600080600080600060a0888a0312156134cd57600080fd5b873596506020880135955060408801359450606088013567ffffffffffffffff808211156134fa57600080fd5b6135068b838c0161346d565b909650945060808a013591508082111561351f57600080fd5b5061352c8a828b0161346d565b989b979a50959850939692959293505050565b6000806000806080858703121561355557600080fd5b8435613560816132a5565b935061356e602086016133c6565b925060408501359150606085013561358581613426565b939692955090935050565b6000602082840312156135a257600080fd5b8135610a5781613426565b600080604083850312156135c057600080fd5b82356135cb816132a5565b91506020830135613462816132a5565b600080604083850312156135ee57600080fd5b50508035926020909101359150565b60006020828403121561360f57600080fd5b610a57826133c6565b60208082526006908201526537b7363ca6b760d11b604082015260600190565b60208082526019908201527f546f6b656e417574683a20696e76616c69642063616c6c657200000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156136985761369861366f565b500190565b6000828210156136af576136af61366f565b500390565b60008160001904831182151516156136ce576136ce61366f565b500290565b6000826136f057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b81835260006001600160fb1b0383111561372457600080fd5b8260051b8083602087013760009401602001938452509192915050565b88815287602082015286604082015260c06060820152600061376760c08301878961370b565b828103608084015261377a81868861370b565b9150508260a08301529998505050505050505050565b6000602082840312156137a257600080fd5b8151610a57816132a5565b6020808252600390820152621b1cd960ea1b604082015260600190565b602080825260039082015262636c7360e81b604082015260600190565b6000602082840312156137f957600080fd5b5051919050565b60208082526021908201527f596f752063616e206e6f7420646f207468697320617420746865206d6f6d656e6040820152601d60fa1b606082015260800190565b6020808252600490820152630737761760e41b604082015260600190565b60208082526007908201526636382a37b5b2b760c91b604082015260600190565b60006020828403121561389257600080fd5b8151610a5781613426565b600080604083850312156138b057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b60006000198214156138eb576138eb61366f565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a2e0961bd11270be85118c47a56b8459c8cde204e4c8ab8b26ad5447ce70d1a064736f6c63430008090033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

OVERVIEW

MetaHub is an advanced technology platform that brings forth Web3 infrastructure integrated with AI technology, focusing on optimizing the Crowdsourcing model.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.