ETH Price: $1,971.39 (-2.05%)
 

More Info

Private Name Tags

TokenTracker

Multichain Info

Transaction Hash
Method
Block
From
To
Transfer245663922026-03-02 1:10:1123 mins ago1772413811IN
Destra Network: DSync Token
0 ETH0.000067451.0884847
Transfer245655192026-03-01 22:15:113 hrs ago1772403311IN
Destra Network: DSync Token
0 ETH0.000095771.54544779
Transfer245654692026-03-01 22:05:113 hrs ago1772402711IN
Destra Network: DSync Token
0 ETH0.000095771.54544779
Transfer245651802026-03-01 21:07:234 hrs ago1772399243IN
Destra Network: DSync Token
0 ETH0.000065971.15378048
Approve245651602026-03-01 21:03:234 hrs ago1772399003IN
Destra Network: DSync Token
0 ETH0.000012890.27860742
Approve245650592026-03-01 20:43:114 hrs ago1772397791IN
Destra Network: DSync Token
0 ETH0.000100252.15650657
Approve245649212026-03-01 20:15:355 hrs ago1772396135IN
Destra Network: DSync Token
0 ETH0.000010080.21661013
Approve245648332026-03-01 19:57:475 hrs ago1772395067IN
Destra Network: DSync Token
0 ETH0.000095292.05036414
Approve245647502026-03-01 19:41:115 hrs ago1772394071IN
Destra Network: DSync Token
0 ETH0.000006750.14589671
Approve245646022026-03-01 19:11:356 hrs ago1772392295IN
Destra Network: DSync Token
0 ETH0.000002210.0478594
Approve245645192026-03-01 18:54:596 hrs ago1772391299IN
Destra Network: DSync Token
0 ETH0.000094852.04990744
Transfer245642892026-03-01 18:08:597 hrs ago1772388539IN
Destra Network: DSync Token
0 ETH0.00006831.10216704
Approve245642282026-03-01 17:56:477 hrs ago1772387807IN
Destra Network: DSync Token
0 ETH0.000095692.06753362
Transfer245641892026-03-01 17:48:597 hrs ago1772387339IN
Destra Network: DSync Token
0 ETH0.000123942
Transfer245641452026-03-01 17:40:117 hrs ago1772386811IN
Destra Network: DSync Token
0 ETH0.000123922
Transfer245641102026-03-01 17:33:118 hrs ago1772386391IN
Destra Network: DSync Token
0 ETH0.000123922
Transfer245640952026-03-01 17:30:118 hrs ago1772386211IN
Destra Network: DSync Token
0 ETH0.000004850.07840563
Transfer245640082026-03-01 17:12:478 hrs ago1772385167IN
Destra Network: DSync Token
0 ETH0.000004040.07069321
Transfer245639702026-03-01 17:05:118 hrs ago1772384711IN
Destra Network: DSync Token
0 ETH0.000158122
Transfer245639632026-03-01 17:03:478 hrs ago1772384627IN
Destra Network: DSync Token
0 ETH0.000006740.1179107
Transfer245639302026-03-01 16:57:118 hrs ago1772384231IN
Destra Network: DSync Token
0 ETH0.000095771.54544779
Approve245636332026-03-01 15:57:359 hrs ago1772380655IN
Destra Network: DSync Token
0 ETH0.000002620.05670264
Approve245633992026-03-01 15:10:3510 hrs ago1772377835IN
Destra Network: DSync Token
0 ETH0.000006520.14042642
Transfer245630452026-03-01 13:59:1111 hrs ago1772373551IN
Destra Network: DSync Token
0 ETH0.000017540.28316112
Transfer245630252026-03-01 13:54:5911 hrs ago1772373299IN
Destra Network: DSync Token
0 ETH0.000065991.06492677
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer218980062025-02-21 23:30:11373 days ago1740180611
Destra Network: DSync Token
0.03727181 ETH
Transfer215526732025-01-04 17:41:11421 days ago1736012471
Destra Network: DSync Token
0.05336326 ETH
Transfer215318632025-01-01 20:00:11424 days ago1735761611
Destra Network: DSync Token
0.14939264 ETH
Transfer215241682024-12-31 18:13:59425 days ago1735668839
Destra Network: DSync Token
1.6410837 ETH
Transfer215241682024-12-31 18:13:59425 days ago1735668839
Destra Network: DSync Token
1.6410837 ETH
Transfer215221862024-12-31 11:34:11425 days ago1735644851
Destra Network: DSync Token
1.6383208 ETH
Transfer215221862024-12-31 11:34:11425 days ago1735644851
Destra Network: DSync Token
1.6383208 ETH
Transfer215189542024-12-31 0:44:47426 days ago1735605887
Destra Network: DSync Token
2.01622304 ETH
Transfer215189542024-12-31 0:44:47426 days ago1735605887
Destra Network: DSync Token
2.01622304 ETH
Transfer215179042024-12-30 21:13:23426 days ago1735593203
Destra Network: DSync Token
0.61431653 ETH
Transfer215179042024-12-30 21:13:23426 days ago1735593203
Destra Network: DSync Token
0.61431653 ETH
Transfer215178422024-12-30 21:00:59426 days ago1735592459
Destra Network: DSync Token
1.94688663 ETH
Transfer215178422024-12-30 21:00:59426 days ago1735592459
Destra Network: DSync Token
1.94688663 ETH
Transfer215149142024-12-30 11:12:47426 days ago1735557167
Destra Network: DSync Token
1.849334 ETH
Transfer215149142024-12-30 11:12:47426 days ago1735557167
Destra Network: DSync Token
1.849334 ETH
Transfer215108842024-12-29 21:41:59427 days ago1735508519
Destra Network: DSync Token
1.96816248 ETH
Transfer215108842024-12-29 21:41:59427 days ago1735508519
Destra Network: DSync Token
1.96816248 ETH
Transfer215078062024-12-29 11:23:59427 days ago1735471439
Destra Network: DSync Token
1.80211771 ETH
Transfer215078062024-12-29 11:23:59427 days ago1735471439
Destra Network: DSync Token
1.80211771 ETH
Transfer215071112024-12-29 9:03:59427 days ago1735463039
Destra Network: DSync Token
0.5190703 ETH
Transfer215071112024-12-29 9:03:59427 days ago1735463039
Destra Network: DSync Token
0.5190703 ETH
Transfer215035622024-12-28 21:10:59428 days ago1735420259
Destra Network: DSync Token
1.8824188 ETH
Transfer215035622024-12-28 21:10:59428 days ago1735420259
Destra Network: DSync Token
1.8824188 ETH
Transfer215035552024-12-28 21:09:35428 days ago1735420175
Destra Network: DSync Token
1.8824188 ETH
Transfer215035552024-12-28 21:09:35428 days ago1735420175
Destra Network: DSync Token
1.8824188 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DestraNetwork

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-03-11
*/

/** 
Website: https://destra.network
Telegram: https://t.me/DestraNetwork
Twitter: https://x.com/destranetwork
**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library Address {
  function isContract(address account) internal view returns (bool) {
    return account.code.length > 0;
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    (bool success, ) = recipient.call{value: amount}("");
    require(
      success,
      "Address: unable to send value, recipient may have reverted"
    );
  }

  function functionCall(
    address target,
    bytes memory data
  ) internal returns (bytes memory) {
    return
      functionCallWithValue(target, data, 0, "Address: low-level call failed");
  }

  function functionCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    return functionCallWithValue(target, data, 0, errorMessage);
  }

  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value
  ) internal returns (bytes memory) {
    return
      functionCallWithValue(
        target,
        data,
        value,
        "Address: low-level call with value failed"
      );
  }

  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value,
    string memory errorMessage
  ) internal returns (bytes memory) {
    require(
      address(this).balance >= value,
      "Address: insufficient balance for call"
    );
    (bool success, bytes memory returndata) = target.call{value: value}(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionStaticCall(
    address target,
    bytes memory data
  ) internal view returns (bytes memory) {
    return
      functionStaticCall(target, data, "Address: low-level static call failed");
  }

  function functionStaticCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    (bool success, bytes memory returndata) = target.staticcall(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionDelegateCall(
    address target,
    bytes memory data
  ) internal returns (bytes memory) {
    return
      functionDelegateCall(
        target,
        data,
        "Address: low-level delegate call failed"
      );
  }

  function functionDelegateCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    (bool success, bytes memory returndata) = target.delegatecall(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function verifyCallResultFromTarget(
    address target,
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    if (success) {
      if (returndata.length == 0) {
        // only check isContract if the call was successful and the return data is empty
        // otherwise we already know that it was a contract
        require(isContract(target), "Address: call to non-contract");
      }
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function verifyCallResult(
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal pure returns (bytes memory) {
    if (success) {
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function _revert(
    bytes memory returndata,
    string memory errorMessage
  ) private pure {
    // Look for revert reason and bubble it up if present
    if (returndata.length > 0) {
      // The easiest way to bubble the revert reason is using memory via assembly
      /// @solidity memory-safe-assembly
      assembly {
        let returndata_size := mload(returndata)
        revert(add(32, returndata), returndata_size)
      }
    } else {
      revert(errorMessage);
    }
  }
}

abstract contract Context {
  function _msgSender() internal view virtual returns (address) {
    return msg.sender;
  }

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

interface IERC20 {
  function totalSupply() external view returns (uint256);

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

  function transfer(address recipient, uint256 amount) external returns (bool);

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

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

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external returns (bool);

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

interface IDEXFactory {
  function createPair(
    address tokenA,
    address tokenB
  ) external returns (address pair);
}

interface IDEXRouter {
  function factory() external pure returns (address);

  function WETH() external pure returns (address);

  function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
  ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external;
}

abstract contract Ownable is Context {
  address private _owner;

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

  constructor() {
    _transferOwnership(_msgSender());
  }

  modifier onlyOwner() {
    _checkOwner();
    _;
  }

  function owner() public view virtual returns (address) {
    return _owner;
  }

  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

contract DestraNetwork is IERC20, Ownable {
  using Address for address;

  address DEAD = 0x000000000000000000000000000000000000dEaD;
  address ZERO = 0x0000000000000000000000000000000000000000;

  string constant _name = "Destra Network";
  string constant _symbol = "DSync";
  uint8 constant _decimals = 18;

  uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
  uint256 _maxBuyTxAmount = (_totalSupply * 1) / 100;
  uint256 _maxSellTxAmount = (_totalSupply * 1) / 100;
  uint256 _maxWalletSize = (_totalSupply * 1) / 100;

  mapping(address => uint256) _balances;
  mapping(address => mapping(address => uint256)) _allowances;

  mapping(uint256 => uint256) public swapBackCounter;
  uint256 public swapBackRateLimit = 3;

  mapping(address => bool) public isFeeExempt;
  mapping(address => bool) public isTxLimitExempt;
  mapping(address => bool) public isLiquidityCreator;

  uint256 marketingBuyFee = 500;
  uint256 marketingSellFee = 6000;
  uint256 liquidityBuyFee = 0;
  uint256 liquiditySellFee = 0;
  uint256 totalBuyFee = marketingBuyFee + liquidityBuyFee;
  uint256 totalSellFee = marketingSellFee + liquiditySellFee;
  uint256 feeDenominator = 10000;

  bool public transferTax = false;

  address payable public liquidityFeeReceiver = payable(0xa75bFFD82FFE8A5064A5b6122448221aCEbCf950);
  address payable public marketingFeeReceiver = payable(0xa75bFFD82FFE8A5064A5b6122448221aCEbCf950);

  IDEXRouter public router;
  address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
  mapping(address => bool) liquidityPools;
  address public pair;

  mapping(address => uint256) public blacklist;
  uint256 public blacklistCount;

  uint256 public launchBlock;
  uint256 public launchTimestamp;
  bool isTradingEnabled = false;

  bool public swapEnabled = false;
  uint256 public swapThreshold = _totalSupply / 1000;
  uint256 public swapAtMinimum = _totalSupply / 10000;
  bool inSwap;

  modifier swapping() {
    inSwap = true;
    _;
    inSwap = false;
  }

  mapping(address => bool) teamMembers;

  modifier onlyTeam() {
    require(
      teamMembers[_msgSender()] || msg.sender == owner(),
      "Caller is not a team member"
    );
    _;
  }

  event WalletBlacklisted(address, address, uint256);

  constructor() {
    router = IDEXRouter(routerAddress);
    pair = IDEXFactory(router.factory()).createPair(
      router.WETH(),
      address(this)
    );
    liquidityPools[pair] = true;
    _allowances[owner()][routerAddress] = type(uint256).max;
    _allowances[address(this)][routerAddress] = type(uint256).max;

    isFeeExempt[owner()] = true;
    isLiquidityCreator[owner()] = true;

    isTxLimitExempt[address(this)] = true;
    isTxLimitExempt[owner()] = true;
    isTxLimitExempt[routerAddress] = true;
    isTxLimitExempt[DEAD] = true;

    _balances[owner()] = _totalSupply;

    emit Transfer(address(0), owner(), _totalSupply);
  }

  receive() external payable {}

  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

  function decimals() external pure returns (uint8) {
    return _decimals;
  }

  function symbol() external pure returns (string memory) {
    return _symbol;
  }

  function name() external pure returns (string memory) {
    return _name;
  }

  function getOwner() external view returns (address) {
    return owner();
  }

  function maxBuyTxTokens() external view returns (uint256) {
    return _maxBuyTxAmount / (10 ** _decimals);
  }

  function maxSellTxTokens() external view returns (uint256) {
    return _maxSellTxAmount / (10 ** _decimals);
  }

  function maxWalletTokens() external view returns (uint256) {
    return _maxWalletSize / (10 ** _decimals);
  }

  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account];
  }

  function allowance(
    address holder,
    address spender
  ) external view override returns (uint256) {
    return _allowances[holder][spender];
  }

  function approve(
    address spender,
    uint256 amount
  ) public override returns (bool) {
    _allowances[msg.sender][spender] = amount;
    emit Approval(msg.sender, spender, amount);
    return true;
  }

  function approveMaxAmount(address spender) external returns (bool) {
    return approve(spender, type(uint256).max);
  }

  function setTeamMember(address _team, bool _enabled) external onlyOwner {
    teamMembers[_team] = _enabled;
  }

  function airdrop(
    address[] calldata addresses,
    uint256[] calldata amounts
  ) external onlyOwner {
    require(addresses.length > 0 && amounts.length == addresses.length);
    address from = msg.sender;

    for (uint i = 0; i < addresses.length; i++) {
      if (!liquidityPools[addresses[i]] && !isLiquidityCreator[addresses[i]]) {
        _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
      }
    }
  }

  function clearStuckBalance(
    uint256 amountPercentage,
    address adr
  ) external onlyTeam {
    uint256 amountETH = address(this).balance;

    if (amountETH > 0) {
      (bool sent, ) = adr.call{value: (amountETH * amountPercentage) / 100}("");
      require(sent, "Failed to transfer funds");
    }
  }

  function blacklistWallets(
    address[] calldata _wallets,
    bool _blacklist
  ) external onlyTeam {
    for (uint i = 0; i < _wallets.length; i++) {
      if (_blacklist) {
        blacklistCount++;
        emit WalletBlacklisted(tx.origin, _wallets[i], block.number);
      } else {
        if (blacklist[_wallets[i]] != 0) blacklistCount--;
      }
      blacklist[_wallets[i]] = _blacklist ? block.number : 0;
    }
  }

  function transfer(
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    return _transferFrom(msg.sender, recipient, amount);
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    if (_allowances[sender][msg.sender] != type(uint256).max) {
      _allowances[sender][msg.sender] =
        _allowances[sender][msg.sender] -
        amount;
    }

    return _transferFrom(sender, recipient, amount);
  }

  function _transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) internal returns (bool) {
    require(sender != address(0), "ERC20: transfer from 0x0");
    require(recipient != address(0), "ERC20: transfer to 0x0");
    require(amount > 0, "Amount must be > zero");
    require(_balances[sender] >= amount, "Insufficient balance");
    if (!launched() && liquidityPools[recipient]) {
      require(isLiquidityCreator[sender], "Liquidity not added yet.");
      launch();
    }
    if (!isTradingEnabled) {
      require(
        isLiquidityCreator[sender] || isLiquidityCreator[recipient],
        "Trading is not launched yet."
      );
    }

    checkTxLimit(sender, recipient, amount);

    if (!liquidityPools[recipient] && recipient != DEAD) {
      if (!isTxLimitExempt[recipient]) {
        checkWalletLimit(recipient, amount);
      }
    }

    if (inSwap) {
      return _basicTransfer(sender, recipient, amount);
    }

    _balances[sender] = _balances[sender] - amount;

    uint256 amountReceived = amount;

    if (shouldTakeFee(sender, recipient)) {
      amountReceived = takeFee(recipient, amount);
      if (shouldSwapBack(recipient) && amount > 0) swapBack(amount);
    }

    _balances[recipient] = _balances[recipient] + amountReceived;

    emit Transfer(sender, recipient, amountReceived);
    return true;
  }

  function launched() internal view returns (bool) {
    return launchBlock != 0;
  }

  function launch() internal {
    launchBlock = block.number;
    launchTimestamp = block.timestamp;
  }

  function openTrading() external onlyTeam {
    require(!isTradingEnabled, "Can't re-open trading");
    isTradingEnabled = true;
    swapEnabled = true;
  }

  function _basicTransfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal returns (bool) {
    _balances[sender] = _balances[sender] - amount;
    _balances[recipient] = _balances[recipient] + amount;
    emit Transfer(sender, recipient, amount);
    return true;
  }

  function checkWalletLimit(address recipient, uint256 amount) internal view {
    uint256 walletLimit = _maxWalletSize;
    require(
      _balances[recipient] + amount <= walletLimit,
      "Amount exceeds the max wallet size."
    );
  }

  function checkTxLimit(
    address sender,
    address recipient,
    uint256 amount
  ) internal view {
    if (isTxLimitExempt[sender] || isTxLimitExempt[recipient]) return;

    require(
      amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount),
      "Amount exceeds the tx limit."
    );

    require(blacklist[sender] == 0, "Wallet blacklisted!");
  }

  function shouldTakeFee(
    address sender,
    address recipient
  ) public view returns (bool) {
    if (!transferTax && !liquidityPools[recipient] && !liquidityPools[sender])
      return false;
    return !isFeeExempt[sender] && !isFeeExempt[recipient];
  }

  function getTotalFee(bool selling) public view returns (uint256) {
    if (selling) return totalSellFee;
    return totalBuyFee;
  }

  function takeFee(
    address recipient,
    uint256 amount
  ) internal returns (uint256) {
    bool selling = liquidityPools[recipient];
    uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;

    _balances[address(this)] += feeAmount;

    return amount - feeAmount;
  }

  function shouldSwapBack(address recipient) internal view returns (bool) {
    return
      !liquidityPools[msg.sender] &&
      !inSwap &&
      swapEnabled &&
      swapBackCounter[block.number] < swapBackRateLimit &&
      liquidityPools[recipient] &&
      _balances[address(this)] >= swapAtMinimum &&
      totalBuyFee + totalSellFee > 0;
  }

  function swapBack(uint256 amount) internal swapping {
    uint256 totalFee = totalBuyFee + totalSellFee;
    uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
    if (_balances[address(this)] < amountToSwap)
      amountToSwap = _balances[address(this)];

    uint256 totalLiquidityFee = liquidityBuyFee + liquiditySellFee;
    uint256 amountToLiquify = ((amountToSwap * totalLiquidityFee) / 2) /
      totalFee;
    amountToSwap -= amountToLiquify;

    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = router.WETH();

    uint256 balanceBefore = address(this).balance;

    router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      amountToSwap,
      0,
      path,
      address(this),
      block.timestamp
    );

    uint256 amountETH = address(this).balance - balanceBefore;
    uint256 totalETHFee = totalFee - (totalLiquidityFee / 2);

    uint256 amountETHLiquidity = ((amountETH * totalLiquidityFee) / 2) /
      totalETHFee;
    uint256 amountETHMarketing = amountETH - amountETHLiquidity;

    if (amountETHMarketing > 0) {
      (bool sentMarketing, ) = marketingFeeReceiver.call{
        value: amountETHMarketing
      }("");
      if (!sentMarketing) {
        //Failed to transfer to marketing wallet
      }
    }

    if (amountToLiquify > 0) {
      router.addLiquidityETH{value: amountETHLiquidity}(
        address(this),
        amountToLiquify,
        0,
        0,
        liquidityFeeReceiver,
        block.timestamp
      );
    }
    swapBackCounter[block.number] = swapBackCounter[block.number] + 1;
    emit FundsDistributed(
      amountETHMarketing,
      amountETHLiquidity,
      amountToLiquify
    );
  }

  function addLiquidityPool(address lp, bool isPool) external onlyOwner {
    require(lp != pair, "Can't alter current liquidity pair");
    liquidityPools[lp] = isPool;
  }

  function setSwapBackRateLimit(uint256 rate) external onlyOwner {
    swapBackRateLimit = rate;
  }

  function setTxLimit(
    uint256 buyNumerator,
    uint256 sellNumerator,
    uint256 divisor
  ) external onlyOwner {
    require(
      buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000
    );
    _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
    _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
  }

  function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner {
    require(numerator > 0 && divisor > 0 && divisor <= 10000);
    _maxWalletSize = (_totalSupply * numerator) / divisor;
  }

  function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
    isFeeExempt[holder] = exempt;
  }

  function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
    isTxLimitExempt[holder] = exempt;
  }

  function setFees(
    uint256 _liquidityBuyFee,
    uint256 _liquiditySellFee,
    uint256 _marketingBuyFee,
    uint256 _marketingSellFee,
    uint256 _feeDenominator
  ) external onlyOwner {
    require(
      ((_liquidityBuyFee + _liquiditySellFee) / 2) * 2 ==
        (_liquidityBuyFee + _liquiditySellFee),
      "Liquidity fee must be an even number for rounding compatibility."
    );
    liquidityBuyFee = _liquidityBuyFee;
    liquiditySellFee = _liquiditySellFee;
    marketingBuyFee = _marketingBuyFee;
    marketingSellFee = _marketingSellFee;
    totalBuyFee = _liquidityBuyFee + _marketingBuyFee;
    totalSellFee = _liquiditySellFee + _marketingSellFee;
    feeDenominator = _feeDenominator;
    emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
  }

  function toggleTransferTax() external onlyOwner {
    transferTax = !transferTax;
  }

  function setFeeReceivers(
    address _liquidityFeeReceiver,
    address _marketingFeeReceiver
  ) external onlyOwner {
    liquidityFeeReceiver = payable(_liquidityFeeReceiver);
    marketingFeeReceiver = payable(_marketingFeeReceiver);
  }

  function setSwapBackSettings(
    bool _enabled,
    uint256 _denominator,
    uint256 _swapAtMinimum
  ) external onlyOwner {
    require(_denominator > 0);
    swapEnabled = _enabled;
    swapThreshold = _totalSupply / _denominator;
    swapAtMinimum = _swapAtMinimum * (10 ** _decimals);
  }

  function getCirculatingSupply() public view returns (uint256) {
    return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
  }

  event FundsDistributed(
    uint256 marketingETH,
    uint256 liquidityETH,
    uint256 liquidityTokens
  );
  event FeesSet(
    uint256 totalBuyFees,
    uint256 totalSellFees,
    uint256 denominator
  );
}

Contract Security Audit

Contract ABI

API
[{"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":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"WalletBlacklisted","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"blacklistWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityCreator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingBuyFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setSwapBackRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapAtMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"shouldTakeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"swapBackCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackRateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326012600a620005ff565b6200004290633b9aca0062000617565b6003556064600354600162000058919062000617565b62000064919062000631565b600455606460035460016200007a919062000617565b62000086919062000631565b600555606460035460016200009c919062000617565b620000a8919062000631565b6006556003600a556101f4600e55611770600f5560006010556000601155601054600e54620000d8919062000654565b601255601154600f54620000ed919062000654565b6013556127106014556015805474a75bffd82ffe8a5064a5b6122448221acebcf950006001600160a81b0319909116179055601680546001600160a01b031990811673a75bffd82ffe8a5064a5b6122448221acebcf9501790915560188054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601f805461ffff1916905560035462000184906103e89062000631565b60205561271060035462000199919062000631565b602155348015620001a957600080fd5b50620001b5336200049a565b601854601780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023891906200066a565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200066a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033391906200066a565b601a80546001600160a01b0319166001600160a01b039290921691821790556000908152601960205260408120805460ff1916600117905560001990600890620003856000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601880548416835290855283822095909555308082526008855283822086548416835285528382206000199055815483168252600b85528382208054600160ff199182168117909255835485168452600d87528584208054821683179055918352600c865284832080548316821790558254841683528483208054831682179055955483168252838220805482168717905585548316825283822080549091169095179094556003548454821685526007845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000695565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000541578160001904821115620005255762000525620004ea565b808516156200053357918102915b93841c939080029062000505565b509250929050565b6000826200055a57506001620005f9565b816200056957506000620005f9565b81600181146200058257600281146200058d57620005ad565b6001915050620005f9565b60ff841115620005a157620005a1620004ea565b50506001821b620005f9565b5060208310610133831016604e8410600b8410161715620005d2575081810a620005f9565b620005de838362000500565b8060001904821115620005f557620005f5620004ea565b0290505b92915050565b60006200061060ff84168362000549565b9392505050565b8082028115828204841417620005f957620005f9620004ea565b6000826200064f57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005f957620005f9620004ea565b6000602082840312156200067d57600080fd5b81516001600160a01b03811681146200061057600080fd5b6127e380620006a56000396000f3fe6080604052600436106103035760003560e01c8063893d20e811610190578063c9567bf9116100dc578063e8b574f211610095578063f2fde38b1161006f578063f2fde38b14610951578063f84ba65d14610971578063f887ea4014610991578063f9f92be4146109b157600080fd5b8063e8b574f2146108e4578063e96fada214610911578063f1f3bca31461093157600080fd5b8063c9567bf91461081e578063d00efb2f14610833578063d088935814610849578063d58d850c14610869578063d912b2ce14610889578063dd62ed3e1461089e57600080fd5b8063a845bd8611610149578063abe57e7011610123578063abe57e70146107a4578063bafe446b146107c4578063bb2188b4146107d9578063bfa21d6a146107f957600080fd5b8063a845bd861461074e578063a8aa1b3114610764578063a9059cbb1461078457600080fd5b8063893d20e8146106605780638b42507f146106925780638da5cb5b146106c257806395d89b41146106e05780639fdc80051461070e578063a4b45c001461072e57600080fd5b8063492a937b1161024f578063658d4b7f116102085780636ddd1713116101e25780636ddd1713146105dc57806370a08231146105fb578063715018a6146106315780638124f7ac1461064657600080fd5b8063658d4b7f1461058657806365cf7c9b146105a657806367243482146105bc57600080fd5b8063492a937b146104c157806350713935146104e157806356a227f21461050157806360bba03d1461052157806360eef7411461054157806363a803e11461057157600080fd5b8063188d1644116102bc5780632b112e49116102965780632b112e4914610440578063313ce56714610455578063332402f8146104715780633f4218e01461049157600080fd5b8063188d1644146103f5578063234e94941461040b57806323b872dd1461042057600080fd5b80630445b6671461030f57806304a66b481461033857806306fdde031461035a578063095ea7b31461039a578063178a18ce146103ca57806318160ddd146103e057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560205481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b5061035861035336600461217b565b6109de565b005b34801561036657600080fd5b5060408051808201909152600e81526d446573747261204e6574776f726b60901b60208201525b60405161032f91906121b6565b3480156103a657600080fd5b506103ba6103b5366004612219565b610b0c565b604051901515815260200161032f565b3480156103d657600080fd5b50610325600a5481565b3480156103ec57600080fd5b50600354610325565b34801561040157600080fd5b50610325601c5481565b34801561041757600080fd5b50610325610b79565b34801561042c57600080fd5b506103ba61043b366004612245565b610b99565b34801561044c57600080fd5b50610325610c2e565b34801561046157600080fd5b506040516012815260200161032f565b34801561047d57600080fd5b506103ba61048c366004612286565b610c6f565b34801561049d57600080fd5b506103ba6104ac3660046122bf565b600b6020526000908152604090205460ff1681565b3480156104cd57600080fd5b506103586104dc3660046122f1565b610d16565b3480156104ed57600080fd5b506103586104fc366004612326565b610db2565b34801561050d57600080fd5b5061035861051c366004612352565b610e2b565b34801561052d57600080fd5b5061035861053c3660046122f1565b610f31565b34801561054d57600080fd5b506103ba61055c3660046122bf565b600d6020526000908152604090205460ff1681565b34801561057d57600080fd5b50610325610f64565b34801561059257600080fd5b506103586105a13660046122f1565b610f7f565b3480156105b257600080fd5b50610325601e5481565b3480156105c857600080fd5b506103586105d73660046123c3565b610fb2565b3480156105e857600080fd5b50601f546103ba90610100900460ff1681565b34801561060757600080fd5b506103256106163660046122bf565b6001600160a01b031660009081526007602052604090205490565b34801561063d57600080fd5b506103586110f7565b34801561065257600080fd5b506015546103ba9060ff1681565b34801561066c57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161032f565b34801561069e57600080fd5b506103ba6106ad3660046122bf565b600c6020526000908152604090205460ff1681565b3480156106ce57600080fd5b506000546001600160a01b031661067a565b3480156106ec57600080fd5b506040805180820190915260058152644453796e6360d81b602082015261038d565b34801561071a57600080fd5b506103ba6107293660046122bf565b61110b565b34801561073a57600080fd5b50610358610749366004612286565b611119565b34801561075a57600080fd5b5061032560215481565b34801561077057600080fd5b50601a5461067a906001600160a01b031681565b34801561079057600080fd5b506103ba61079f366004612219565b611159565b3480156107b057600080fd5b506103586107bf36600461242f565b611166565b3480156107d057600080fd5b506103256111b5565b3480156107e557600080fd5b506103586107f4366004612451565b6111d0565b34801561080557600080fd5b5060155461067a9061010090046001600160a01b031681565b34801561082a57600080fd5b50610358611377565b34801561083f57600080fd5b50610325601d5481565b34801561085557600080fd5b506103586108643660046124a5565b611417565b34801561087557600080fd5b506103586108843660046124d8565b61146e565b34801561089557600080fd5b5061035861147b565b3480156108aa57600080fd5b506103256108b9366004612286565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108f057600080fd5b506103256108ff3660046124d8565b60096020526000908152604090205481565b34801561091d57600080fd5b5060165461067a906001600160a01b031681565b34801561093d57600080fd5b5061032561094c3660046124f1565b611497565b34801561095d57600080fd5b5061035861096c3660046122bf565b6114af565b34801561097d57600080fd5b5061035861098c3660046122f1565b611528565b34801561099d57600080fd5b5060175461067a906001600160a01b031681565b3480156109bd57600080fd5b506103256109cc3660046122bf565b601b6020526000908152604090205481565b6109e661155b565b6109f08486612522565b60026109fc8688612522565b610a069190612535565b610a11906002612557565b14610a8b576040805162461bcd60e51b81526020600482015260248101919091527f4c697175696469747920666565206d75737420626520616e206576656e206e7560448201527f6d62657220666f7220726f756e64696e6720636f6d7061746962696c6974792e60648201526084015b60405180910390fd5b60108590556011849055600e839055600f829055610aa98386612522565b601255610ab68285612522565b601381905560148290556012546040805191825260208201929092529081018290527f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459060600160405180910390a15050505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b679086815260200190565b60405180910390a35060015b92915050565b6000610b876012600a612652565b600554610b949190612535565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610c19576001600160a01b0384166000908152600860209081526040808320338452909152902054610bf4908390612661565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610c248484846115b5565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610c6291612522565b600354610b949190612661565b60155460009060ff16158015610c9e57506001600160a01b03821660009081526019602052604090205460ff16155b8015610cc357506001600160a01b03831660009081526019602052604090205460ff16155b15610cd057506000610b73565b6001600160a01b0383166000908152600b602052604090205460ff16158015610c275750506001600160a01b03166000908152600b602052604090205460ff1615919050565b610d1e61155b565b601a546001600160a01b0390811690831603610d875760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610a82565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b610dba61155b565b600083118015610dca5750600082115b8015610dd65750600081115b8015610de457506127108111155b610ded57600080fd5b8083600354610dfc9190612557565b610e069190612535565b6004556003548190610e19908490612557565b610e239190612535565b600555505050565b3360009081526023602052604090205460ff1680610e5357506000546001600160a01b031633145b610e6f5760405162461bcd60e51b8152600401610a8290612674565b478015610f2c5760006001600160a01b0383166064610e8e8685612557565b610e989190612535565b604051600081818185875af1925050503d8060008114610ed4576040519150601f19603f3d011682016040523d82523d6000602084013e610ed9565b606091505b5050905080610f2a5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610a82565b505b505050565b610f3961155b565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000610f726012600a612652565b600654610b949190612535565b610f8761155b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610fba61155b565b8215801590610fc857508083145b610fd157600080fd5b3360005b848110156110ef5760196000878784818110610ff357610ff36126ab565b905060200201602081019061100891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff161580156110775750600d6000878784818110611043576110436126ab565b905060200201602081019061105891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff16155b156110dd576110db82878784818110611092576110926126ab565b90506020020160208101906110a791906122bf565b6110b36012600a612652565b8787868181106110c5576110c56126ab565b905060200201356110d69190612557565b6119cf565b505b806110e7816126c1565b915050610fd5565b505050505050565b6110ff61155b565b6111096000611a89565b565b6000610b7382600019610b0c565b61112161155b565b60158054610100600160a81b0319166101006001600160a01b0394851602179055601680546001600160a01b03191691909216179055565b6000610c273384846115b5565b61116e61155b565b60008211801561117e5750600081115b801561118c57506127108111155b61119557600080fd5b80826003546111a49190612557565b6111ae9190612535565b6006555050565b60006111c36012600a612652565b600454610b949190612535565b3360009081526023602052604090205460ff16806111f857506000546001600160a01b031633145b6112145760405162461bcd60e51b8152600401610a8290612674565b60005b82811015610f2a5781156112b257601c8054906000611235836126c1565b91905055507f80e51449b76c50e375a3b72e31ca76d6ed586f0a7ff8fa6f310da7dbbcc338633285858481811061126e5761126e6126ab565b905060200201602081019061128391906122bf565b604080516001600160a01b039384168152929091166020830152439082015260600160405180910390a1611312565b601b60008585848181106112c8576112c86126ab565b90506020020160208101906112dd91906122bf565b6001600160a01b031681526020810191909152604001600020541561131257601c805490600061130c836126da565b91905055505b8161131e576000611320565b435b601b6000868685818110611336576113366126ab565b905060200201602081019061134b91906122bf565b6001600160a01b031681526020810191909152604001600020558061136f816126c1565b915050611217565b3360009081526023602052604090205460ff168061139f57506000546001600160a01b031633145b6113bb5760405162461bcd60e51b8152600401610a8290612674565b601f5460ff16156114065760405162461bcd60e51b815260206004820152601560248201527443616e27742072652d6f70656e2074726164696e6760581b6044820152606401610a82565b601f805461ffff1916610101179055565b61141f61155b565b6000821161142c57600080fd5b601f805461ff0019166101008515150217905560035461144d908390612535565b60205561145c6012600a612652565b6114669082612557565b602155505050565b61147661155b565b600a55565b61148361155b565b6015805460ff19811660ff90911615179055565b600081156114a757505060135490565b505060125490565b6114b761155b565b6001600160a01b03811661151c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a82565b61152581611a89565b50565b61153061155b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a82565b60006001600160a01b03841661160d5760405162461bcd60e51b815260206004820152601860248201527f45524332303a207472616e736665722066726f6d2030783000000000000000006044820152606401610a82565b6001600160a01b03831661165c5760405162461bcd60e51b8152602060048201526016602482015275045524332303a207472616e7366657220746f203078360541b6044820152606401610a82565b600082116116a45760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610a82565b6001600160a01b0384166000908152600760205260409020548211156117035760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a82565b601d5415801561172b57506001600160a01b03831660009081526019602052604090205460ff165b156117a5576001600160a01b0384166000908152600d602052604090205460ff166117985760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610a82565b6117a543601d5542601e55565b601f5460ff1661183a576001600160a01b0384166000908152600d602052604090205460ff16806117ee57506001600160a01b0383166000908152600d602052604090205460ff165b61183a5760405162461bcd60e51b815260206004820152601c60248201527f54726164696e67206973206e6f74206c61756e63686564207965742e000000006044820152606401610a82565b611845848484611ad9565b6001600160a01b03831660009081526019602052604090205460ff1615801561187c57506001546001600160a01b03848116911614155b156118ab576001600160a01b0383166000908152600c602052604090205460ff166118ab576118ab8383611bf9565b60225460ff16156118c8576118c18484846119cf565b9050610c27565b6001600160a01b0384166000908152600760205260409020546118ec908390612661565b6001600160a01b038516600090815260076020526040902055816119108585610c6f565b156119445761191f8484611c7c565b905061192a84611cfa565b80156119365750600083115b156119445761194483611dad565b6001600160a01b038416600090815260076020526040902054611968908290612522565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119bc9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600760205260408120546119f3908390612661565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611a23908390612522565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a779086815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600c602052604090205460ff1680611b1857506001600160a01b0382166000908152600c602052604090205460ff165b15611b2257505050565b6001600160a01b03831660009081526019602052604090205460ff16611b4a57600554611b4e565b6004545b811115611b9d5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206578636565647320746865207478206c696d69742e000000006044820152606401610a82565b6001600160a01b0383166000908152601b602052604090205415610f2c5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420626c61636b6c69737465642160681b6044820152606401610a82565b6006546001600160a01b0383166000908152600760205260409020548190611c22908490612522565b1115610f2c5760405162461bcd60e51b815260206004820152602360248201527f416d6f756e74206578636565647320746865206d61782077616c6c65742073696044820152623d329760e91b6064820152608401610a82565b6001600160a01b03821660009081526019602052604081205460145460ff909116908290611ca983611497565b611cb39086612557565b611cbd9190612535565b30600090815260076020526040812080549293508392909190611ce1908490612522565b90915550611cf190508185612661565b95945050505050565b3360009081526019602052604081205460ff16158015611d1d575060225460ff16155b8015611d305750601f54610100900460ff165b8015611d4c5750600a5443600090815260096020526040902054105b8015611d7057506001600160a01b03821660009081526019602052604090205460ff165b8015611d8d57506021543060009081526007602052604090205410155b8015610b7357506000601354601254611da69190612522565b1192915050565b6022805460ff19166001179055601354601254600091611dcc91612522565b905060006020548310611de157602054611de3565b825b30600090815260076020526040902054909150811115611e0f5750306000908152600760205260409020545b6000601154601054611e219190612522565b90506000836002611e328486612557565b611e3c9190612535565b611e469190612535565b9050611e528184612661565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611e8c57611e8c6126ab565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906126f1565b81600181518110611f1c57611f1c6126ab565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b81524792919091169063791ac94790611f6690889060009087903090429060040161270e565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b5050505060008147611fa69190612661565b90506000611fb5600287612535565b611fbf9089612661565b90506000816002611fd08986612557565b611fda9190612535565b611fe49190612535565b90506000611ff28285612661565b90508015612051576016546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b505050505b86156120f55760175460155460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af11580156120cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120f1919061277f565b5050505b43600090815260096020526040902054612110906001612522565b4360009081526009602090815260409182902092909255805183815291820184905281018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506022805460ff19169055505050505050505050565b600080600080600060a0868803121561219357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156121e3578581018301518582016040015282016121c7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461152557600080fd5b6000806040838503121561222c57600080fd5b823561223781612204565b946020939093013593505050565b60008060006060848603121561225a57600080fd5b833561226581612204565b9250602084013561227581612204565b929592945050506040919091013590565b6000806040838503121561229957600080fd5b82356122a481612204565b915060208301356122b481612204565b809150509250929050565b6000602082840312156122d157600080fd5b8135610c2781612204565b803580151581146122ec57600080fd5b919050565b6000806040838503121561230457600080fd5b823561230f81612204565b915061231d602084016122dc565b90509250929050565b60008060006060848603121561233b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236557600080fd5b8235915060208301356122b481612204565b60008083601f84011261238957600080fd5b50813567ffffffffffffffff8111156123a157600080fd5b6020830191508360208260051b85010111156123bc57600080fd5b9250929050565b600080600080604085870312156123d957600080fd5b843567ffffffffffffffff808211156123f157600080fd5b6123fd88838901612377565b9096509450602087013591508082111561241657600080fd5b5061242387828801612377565b95989497509550505050565b6000806040838503121561244257600080fd5b50508035926020909101359150565b60008060006040848603121561246657600080fd5b833567ffffffffffffffff81111561247d57600080fd5b61248986828701612377565b909450925061249c9050602085016122dc565b90509250925092565b6000806000606084860312156124ba57600080fd5b6124c3846122dc565b95602085013595506040909401359392505050565b6000602082840312156124ea57600080fd5b5035919050565b60006020828403121561250357600080fd5b610c27826122dc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b7357610b7361250c565b60008261255257634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b7357610b7361250c565b600181815b808511156125a957816000190482111561258f5761258f61250c565b8085161561259c57918102915b93841c9390800290612573565b509250929050565b6000826125c057506001610b73565b816125cd57506000610b73565b81600181146125e357600281146125ed57612609565b6001915050610b73565b60ff8411156125fe576125fe61250c565b50506001821b610b73565b5060208310610133831016604e8410600b841016171561262c575081810a610b73565b612636838361256e565b806000190482111561264a5761264a61250c565b029392505050565b6000610c2760ff8416836125b1565b81810381811115610b7357610b7361250c565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016126d3576126d361250c565b5060010190565b6000816126e9576126e961250c565b506000190190565b60006020828403121561270357600080fd5b8151610c2781612204565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561275e5784516001600160a01b031683529383019391830191600101612739565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561279457600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122022b94021eab2175421fad102ac836f5e7d71d53e10ad6828e6dc296941b6d21364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063893d20e811610190578063c9567bf9116100dc578063e8b574f211610095578063f2fde38b1161006f578063f2fde38b14610951578063f84ba65d14610971578063f887ea4014610991578063f9f92be4146109b157600080fd5b8063e8b574f2146108e4578063e96fada214610911578063f1f3bca31461093157600080fd5b8063c9567bf91461081e578063d00efb2f14610833578063d088935814610849578063d58d850c14610869578063d912b2ce14610889578063dd62ed3e1461089e57600080fd5b8063a845bd8611610149578063abe57e7011610123578063abe57e70146107a4578063bafe446b146107c4578063bb2188b4146107d9578063bfa21d6a146107f957600080fd5b8063a845bd861461074e578063a8aa1b3114610764578063a9059cbb1461078457600080fd5b8063893d20e8146106605780638b42507f146106925780638da5cb5b146106c257806395d89b41146106e05780639fdc80051461070e578063a4b45c001461072e57600080fd5b8063492a937b1161024f578063658d4b7f116102085780636ddd1713116101e25780636ddd1713146105dc57806370a08231146105fb578063715018a6146106315780638124f7ac1461064657600080fd5b8063658d4b7f1461058657806365cf7c9b146105a657806367243482146105bc57600080fd5b8063492a937b146104c157806350713935146104e157806356a227f21461050157806360bba03d1461052157806360eef7411461054157806363a803e11461057157600080fd5b8063188d1644116102bc5780632b112e49116102965780632b112e4914610440578063313ce56714610455578063332402f8146104715780633f4218e01461049157600080fd5b8063188d1644146103f5578063234e94941461040b57806323b872dd1461042057600080fd5b80630445b6671461030f57806304a66b481461033857806306fdde031461035a578063095ea7b31461039a578063178a18ce146103ca57806318160ddd146103e057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560205481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b5061035861035336600461217b565b6109de565b005b34801561036657600080fd5b5060408051808201909152600e81526d446573747261204e6574776f726b60901b60208201525b60405161032f91906121b6565b3480156103a657600080fd5b506103ba6103b5366004612219565b610b0c565b604051901515815260200161032f565b3480156103d657600080fd5b50610325600a5481565b3480156103ec57600080fd5b50600354610325565b34801561040157600080fd5b50610325601c5481565b34801561041757600080fd5b50610325610b79565b34801561042c57600080fd5b506103ba61043b366004612245565b610b99565b34801561044c57600080fd5b50610325610c2e565b34801561046157600080fd5b506040516012815260200161032f565b34801561047d57600080fd5b506103ba61048c366004612286565b610c6f565b34801561049d57600080fd5b506103ba6104ac3660046122bf565b600b6020526000908152604090205460ff1681565b3480156104cd57600080fd5b506103586104dc3660046122f1565b610d16565b3480156104ed57600080fd5b506103586104fc366004612326565b610db2565b34801561050d57600080fd5b5061035861051c366004612352565b610e2b565b34801561052d57600080fd5b5061035861053c3660046122f1565b610f31565b34801561054d57600080fd5b506103ba61055c3660046122bf565b600d6020526000908152604090205460ff1681565b34801561057d57600080fd5b50610325610f64565b34801561059257600080fd5b506103586105a13660046122f1565b610f7f565b3480156105b257600080fd5b50610325601e5481565b3480156105c857600080fd5b506103586105d73660046123c3565b610fb2565b3480156105e857600080fd5b50601f546103ba90610100900460ff1681565b34801561060757600080fd5b506103256106163660046122bf565b6001600160a01b031660009081526007602052604090205490565b34801561063d57600080fd5b506103586110f7565b34801561065257600080fd5b506015546103ba9060ff1681565b34801561066c57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161032f565b34801561069e57600080fd5b506103ba6106ad3660046122bf565b600c6020526000908152604090205460ff1681565b3480156106ce57600080fd5b506000546001600160a01b031661067a565b3480156106ec57600080fd5b506040805180820190915260058152644453796e6360d81b602082015261038d565b34801561071a57600080fd5b506103ba6107293660046122bf565b61110b565b34801561073a57600080fd5b50610358610749366004612286565b611119565b34801561075a57600080fd5b5061032560215481565b34801561077057600080fd5b50601a5461067a906001600160a01b031681565b34801561079057600080fd5b506103ba61079f366004612219565b611159565b3480156107b057600080fd5b506103586107bf36600461242f565b611166565b3480156107d057600080fd5b506103256111b5565b3480156107e557600080fd5b506103586107f4366004612451565b6111d0565b34801561080557600080fd5b5060155461067a9061010090046001600160a01b031681565b34801561082a57600080fd5b50610358611377565b34801561083f57600080fd5b50610325601d5481565b34801561085557600080fd5b506103586108643660046124a5565b611417565b34801561087557600080fd5b506103586108843660046124d8565b61146e565b34801561089557600080fd5b5061035861147b565b3480156108aa57600080fd5b506103256108b9366004612286565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108f057600080fd5b506103256108ff3660046124d8565b60096020526000908152604090205481565b34801561091d57600080fd5b5060165461067a906001600160a01b031681565b34801561093d57600080fd5b5061032561094c3660046124f1565b611497565b34801561095d57600080fd5b5061035861096c3660046122bf565b6114af565b34801561097d57600080fd5b5061035861098c3660046122f1565b611528565b34801561099d57600080fd5b5060175461067a906001600160a01b031681565b3480156109bd57600080fd5b506103256109cc3660046122bf565b601b6020526000908152604090205481565b6109e661155b565b6109f08486612522565b60026109fc8688612522565b610a069190612535565b610a11906002612557565b14610a8b576040805162461bcd60e51b81526020600482015260248101919091527f4c697175696469747920666565206d75737420626520616e206576656e206e7560448201527f6d62657220666f7220726f756e64696e6720636f6d7061746962696c6974792e60648201526084015b60405180910390fd5b60108590556011849055600e839055600f829055610aa98386612522565b601255610ab68285612522565b601381905560148290556012546040805191825260208201929092529081018290527f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459060600160405180910390a15050505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b679086815260200190565b60405180910390a35060015b92915050565b6000610b876012600a612652565b600554610b949190612535565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610c19576001600160a01b0384166000908152600860209081526040808320338452909152902054610bf4908390612661565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610c248484846115b5565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610c6291612522565b600354610b949190612661565b60155460009060ff16158015610c9e57506001600160a01b03821660009081526019602052604090205460ff16155b8015610cc357506001600160a01b03831660009081526019602052604090205460ff16155b15610cd057506000610b73565b6001600160a01b0383166000908152600b602052604090205460ff16158015610c275750506001600160a01b03166000908152600b602052604090205460ff1615919050565b610d1e61155b565b601a546001600160a01b0390811690831603610d875760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610a82565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b610dba61155b565b600083118015610dca5750600082115b8015610dd65750600081115b8015610de457506127108111155b610ded57600080fd5b8083600354610dfc9190612557565b610e069190612535565b6004556003548190610e19908490612557565b610e239190612535565b600555505050565b3360009081526023602052604090205460ff1680610e5357506000546001600160a01b031633145b610e6f5760405162461bcd60e51b8152600401610a8290612674565b478015610f2c5760006001600160a01b0383166064610e8e8685612557565b610e989190612535565b604051600081818185875af1925050503d8060008114610ed4576040519150601f19603f3d011682016040523d82523d6000602084013e610ed9565b606091505b5050905080610f2a5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610a82565b505b505050565b610f3961155b565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000610f726012600a612652565b600654610b949190612535565b610f8761155b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610fba61155b565b8215801590610fc857508083145b610fd157600080fd5b3360005b848110156110ef5760196000878784818110610ff357610ff36126ab565b905060200201602081019061100891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff161580156110775750600d6000878784818110611043576110436126ab565b905060200201602081019061105891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff16155b156110dd576110db82878784818110611092576110926126ab565b90506020020160208101906110a791906122bf565b6110b36012600a612652565b8787868181106110c5576110c56126ab565b905060200201356110d69190612557565b6119cf565b505b806110e7816126c1565b915050610fd5565b505050505050565b6110ff61155b565b6111096000611a89565b565b6000610b7382600019610b0c565b61112161155b565b60158054610100600160a81b0319166101006001600160a01b0394851602179055601680546001600160a01b03191691909216179055565b6000610c273384846115b5565b61116e61155b565b60008211801561117e5750600081115b801561118c57506127108111155b61119557600080fd5b80826003546111a49190612557565b6111ae9190612535565b6006555050565b60006111c36012600a612652565b600454610b949190612535565b3360009081526023602052604090205460ff16806111f857506000546001600160a01b031633145b6112145760405162461bcd60e51b8152600401610a8290612674565b60005b82811015610f2a5781156112b257601c8054906000611235836126c1565b91905055507f80e51449b76c50e375a3b72e31ca76d6ed586f0a7ff8fa6f310da7dbbcc338633285858481811061126e5761126e6126ab565b905060200201602081019061128391906122bf565b604080516001600160a01b039384168152929091166020830152439082015260600160405180910390a1611312565b601b60008585848181106112c8576112c86126ab565b90506020020160208101906112dd91906122bf565b6001600160a01b031681526020810191909152604001600020541561131257601c805490600061130c836126da565b91905055505b8161131e576000611320565b435b601b6000868685818110611336576113366126ab565b905060200201602081019061134b91906122bf565b6001600160a01b031681526020810191909152604001600020558061136f816126c1565b915050611217565b3360009081526023602052604090205460ff168061139f57506000546001600160a01b031633145b6113bb5760405162461bcd60e51b8152600401610a8290612674565b601f5460ff16156114065760405162461bcd60e51b815260206004820152601560248201527443616e27742072652d6f70656e2074726164696e6760581b6044820152606401610a82565b601f805461ffff1916610101179055565b61141f61155b565b6000821161142c57600080fd5b601f805461ff0019166101008515150217905560035461144d908390612535565b60205561145c6012600a612652565b6114669082612557565b602155505050565b61147661155b565b600a55565b61148361155b565b6015805460ff19811660ff90911615179055565b600081156114a757505060135490565b505060125490565b6114b761155b565b6001600160a01b03811661151c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a82565b61152581611a89565b50565b61153061155b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a82565b60006001600160a01b03841661160d5760405162461bcd60e51b815260206004820152601860248201527f45524332303a207472616e736665722066726f6d2030783000000000000000006044820152606401610a82565b6001600160a01b03831661165c5760405162461bcd60e51b8152602060048201526016602482015275045524332303a207472616e7366657220746f203078360541b6044820152606401610a82565b600082116116a45760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610a82565b6001600160a01b0384166000908152600760205260409020548211156117035760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a82565b601d5415801561172b57506001600160a01b03831660009081526019602052604090205460ff165b156117a5576001600160a01b0384166000908152600d602052604090205460ff166117985760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610a82565b6117a543601d5542601e55565b601f5460ff1661183a576001600160a01b0384166000908152600d602052604090205460ff16806117ee57506001600160a01b0383166000908152600d602052604090205460ff165b61183a5760405162461bcd60e51b815260206004820152601c60248201527f54726164696e67206973206e6f74206c61756e63686564207965742e000000006044820152606401610a82565b611845848484611ad9565b6001600160a01b03831660009081526019602052604090205460ff1615801561187c57506001546001600160a01b03848116911614155b156118ab576001600160a01b0383166000908152600c602052604090205460ff166118ab576118ab8383611bf9565b60225460ff16156118c8576118c18484846119cf565b9050610c27565b6001600160a01b0384166000908152600760205260409020546118ec908390612661565b6001600160a01b038516600090815260076020526040902055816119108585610c6f565b156119445761191f8484611c7c565b905061192a84611cfa565b80156119365750600083115b156119445761194483611dad565b6001600160a01b038416600090815260076020526040902054611968908290612522565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119bc9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600760205260408120546119f3908390612661565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611a23908390612522565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a779086815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600c602052604090205460ff1680611b1857506001600160a01b0382166000908152600c602052604090205460ff165b15611b2257505050565b6001600160a01b03831660009081526019602052604090205460ff16611b4a57600554611b4e565b6004545b811115611b9d5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206578636565647320746865207478206c696d69742e000000006044820152606401610a82565b6001600160a01b0383166000908152601b602052604090205415610f2c5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420626c61636b6c69737465642160681b6044820152606401610a82565b6006546001600160a01b0383166000908152600760205260409020548190611c22908490612522565b1115610f2c5760405162461bcd60e51b815260206004820152602360248201527f416d6f756e74206578636565647320746865206d61782077616c6c65742073696044820152623d329760e91b6064820152608401610a82565b6001600160a01b03821660009081526019602052604081205460145460ff909116908290611ca983611497565b611cb39086612557565b611cbd9190612535565b30600090815260076020526040812080549293508392909190611ce1908490612522565b90915550611cf190508185612661565b95945050505050565b3360009081526019602052604081205460ff16158015611d1d575060225460ff16155b8015611d305750601f54610100900460ff165b8015611d4c5750600a5443600090815260096020526040902054105b8015611d7057506001600160a01b03821660009081526019602052604090205460ff165b8015611d8d57506021543060009081526007602052604090205410155b8015610b7357506000601354601254611da69190612522565b1192915050565b6022805460ff19166001179055601354601254600091611dcc91612522565b905060006020548310611de157602054611de3565b825b30600090815260076020526040902054909150811115611e0f5750306000908152600760205260409020545b6000601154601054611e219190612522565b90506000836002611e328486612557565b611e3c9190612535565b611e469190612535565b9050611e528184612661565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611e8c57611e8c6126ab565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906126f1565b81600181518110611f1c57611f1c6126ab565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b81524792919091169063791ac94790611f6690889060009087903090429060040161270e565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b5050505060008147611fa69190612661565b90506000611fb5600287612535565b611fbf9089612661565b90506000816002611fd08986612557565b611fda9190612535565b611fe49190612535565b90506000611ff28285612661565b90508015612051576016546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b505050505b86156120f55760175460155460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af11580156120cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120f1919061277f565b5050505b43600090815260096020526040902054612110906001612522565b4360009081526009602090815260409182902092909255805183815291820184905281018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506022805460ff19169055505050505050505050565b600080600080600060a0868803121561219357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156121e3578581018301518582016040015282016121c7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461152557600080fd5b6000806040838503121561222c57600080fd5b823561223781612204565b946020939093013593505050565b60008060006060848603121561225a57600080fd5b833561226581612204565b9250602084013561227581612204565b929592945050506040919091013590565b6000806040838503121561229957600080fd5b82356122a481612204565b915060208301356122b481612204565b809150509250929050565b6000602082840312156122d157600080fd5b8135610c2781612204565b803580151581146122ec57600080fd5b919050565b6000806040838503121561230457600080fd5b823561230f81612204565b915061231d602084016122dc565b90509250929050565b60008060006060848603121561233b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236557600080fd5b8235915060208301356122b481612204565b60008083601f84011261238957600080fd5b50813567ffffffffffffffff8111156123a157600080fd5b6020830191508360208260051b85010111156123bc57600080fd5b9250929050565b600080600080604085870312156123d957600080fd5b843567ffffffffffffffff808211156123f157600080fd5b6123fd88838901612377565b9096509450602087013591508082111561241657600080fd5b5061242387828801612377565b95989497509550505050565b6000806040838503121561244257600080fd5b50508035926020909101359150565b60008060006040848603121561246657600080fd5b833567ffffffffffffffff81111561247d57600080fd5b61248986828701612377565b909450925061249c9050602085016122dc565b90509250925092565b6000806000606084860312156124ba57600080fd5b6124c3846122dc565b95602085013595506040909401359392505050565b6000602082840312156124ea57600080fd5b5035919050565b60006020828403121561250357600080fd5b610c27826122dc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b7357610b7361250c565b60008261255257634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b7357610b7361250c565b600181815b808511156125a957816000190482111561258f5761258f61250c565b8085161561259c57918102915b93841c9390800290612573565b509250929050565b6000826125c057506001610b73565b816125cd57506000610b73565b81600181146125e357600281146125ed57612609565b6001915050610b73565b60ff8411156125fe576125fe61250c565b50506001821b610b73565b5060208310610133831016604e8410600b841016171561262c575081810a610b73565b612636838361256e565b806000190482111561264a5761264a61250c565b029392505050565b6000610c2760ff8416836125b1565b81810381811115610b7357610b7361250c565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016126d3576126d361250c565b5060010190565b6000816126e9576126e961250c565b506000190190565b60006020828403121561270357600080fd5b8151610c2781612204565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561275e5784516001600160a01b031683529383019391830191600101612739565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561279457600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122022b94021eab2175421fad102ac836f5e7d71d53e10ad6828e6dc296941b6d21364736f6c63430008110033

Deployed Bytecode Sourcemap

6957:14856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8804:50;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8804:50:0;;;;;;;;20004:791;;;;;;;;;;-1:-1:-1;20004:791:0;;;;;:::i;:::-;;:::i;:::-;;10258:79;;;;;;;;;;-1:-1:-1;10326:5:0;;;;;;;;;;;;-1:-1:-1;;;10326:5:0;;;;10258:79;;;;;;;:::i;11068:217::-;;;;;;;;;;-1:-1:-1;11068:217:0;;;;;:::i;:::-;;:::i;:::-;;;1829:14:1;;1822:22;1804:41;;1792:2;1777:18;11068:217:0;1664:187:1;7672:36:0;;;;;;;;;;;;;;;;9982:96;;;;;;;;;;-1:-1:-1;10060:12:0;;9982:96;;8630:29;;;;;;;;;;;;;;;;10547:115;;;;;;;;;;;;;:::i;12935:361::-;;;;;;;;;;-1:-1:-1;12935:361:0;;;;;:::i;:::-;;:::i;21456:132::-;;;;;;;;;;;;;:::i;10084:79::-;;;;;;;;;;-1:-1:-1;10084:79:0;;7272:2;2459:36:1;;2447:2;2432:18;10084:79:0;2317:184:1;16038:268:0;;;;;;;;;;-1:-1:-1;16038:268:0;;;;;:::i;:::-;;:::i;7715:43::-;;;;;;;;;;-1:-1:-1;7715:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18894:174;;;;;;;;;;-1:-1:-1;18894:174:0;;;;;:::i;:::-;;:::i;19180:359::-;;;;;;;;;;-1:-1:-1;19180:359:0;;;;;:::i;:::-;;:::i;11993:320::-;;;;;;;;;;-1:-1:-1;11993:320:0;;;;;:::i;:::-;;:::i;11419:114::-;;;;;;;;;;-1:-1:-1;11419:114:0;;;;;:::i;:::-;;:::i;7815:50::-;;;;;;;;;;-1:-1:-1;7815:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10668:113;;;;;;;;;;;;;:::i;19758:::-;;;;;;;;;;-1:-1:-1;19758:113:0;;;;;:::i;:::-;;:::i;8697:30::-;;;;;;;;;;;;;;;;11539:448;;;;;;;;;;-1:-1:-1;11539:448:0;;;;;:::i;:::-;;:::i;8768:31::-;;;;;;;;;;-1:-1:-1;8768:31:0;;;;;;;;;;;10787:113;;;;;;;;;;-1:-1:-1;10787:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;10876:18:0;10853:7;10876:18;;;:9;:18;;;;;;;10787:113;6473:97;;;;;;;;;;;;;:::i;8167:31::-;;;;;;;;;;-1:-1:-1;8167:31:0;;;;;;;;10343:79;;;;;;;;;;-1:-1:-1;10386:7:0;6323:6;-1:-1:-1;;;;;6323:6:0;10343:79;;;-1:-1:-1;;;;;5591:32:1;;;5573:51;;5561:2;5546:18;10343:79:0;5427:203:1;7763:47:0;;;;;;;;;;-1:-1:-1;7763:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6254:81;;;;;;;;;;-1:-1:-1;6300:7:0;6323:6;-1:-1:-1;;;;;6323:6:0;6254:81;;10169:83;;;;;;;;;;-1:-1:-1;10239:7:0;;;;;;;;;;;;-1:-1:-1;;;10239:7:0;;;;10169:83;;11291:122;;;;;;;;;;-1:-1:-1;11291:122:0;;;;;:::i;:::-;;:::i;20894:247::-;;;;;;;;;;-1:-1:-1;20894:247:0;;;;;:::i;:::-;;:::i;8859:51::-;;;;;;;;;;;;;;;;8555:19;;;;;;;;;;-1:-1:-1;8555:19:0;;;;-1:-1:-1;;;;;8555:19:0;;;12764:165;;;;;;;;;;-1:-1:-1;12764:165:0;;;;;:::i;:::-;;:::i;19545:207::-;;;;;;;;;;-1:-1:-1;19545:207:0;;;;;:::i;:::-;;:::i;10428:113::-;;;;;;;;;;;;;:::i;12319:439::-;;;;;;;;;;-1:-1:-1;12319:439:0;;;;;:::i;:::-;;:::i;8205:97::-;;;;;;;;;;-1:-1:-1;8205:97:0;;;;;;;-1:-1:-1;;;;;8205:97:0;;;14918:160;;;;;;;;;;;;;:::i;8666:26::-;;;;;;;;;;;;;;;;21147:303;;;;;;;;;;-1:-1:-1;21147:303:0;;;;;:::i;:::-;;:::i;19074:100::-;;;;;;;;;;-1:-1:-1;19074:100:0;;;;;:::i;:::-;;:::i;20801:87::-;;;;;;;;;;;;;:::i;10906:156::-;;;;;;;;;;-1:-1:-1;10906:156:0;;;;;:::i;:::-;-1:-1:-1;;;;;11028:19:0;;;11005:7;11028:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10906:156;7617:50;;;;;;;;;;-1:-1:-1;7617:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;8307:97;;;;;;;;;;-1:-1:-1;8307:97:0;;;;-1:-1:-1;;;;;8307:97:0;;;16312:135;;;;;;;;;;-1:-1:-1;16312:135:0;;;;;:::i;:::-;;:::i;6576:191::-;;;;;;;;;;-1:-1:-1;6576:191:0;;;;;:::i;:::-;;:::i;19877:121::-;;;;;;;;;;-1:-1:-1;19877:121:0;;;;;:::i;:::-;;:::i;8411:24::-;;;;;;;;;;-1:-1:-1;8411:24:0;;;;-1:-1:-1;;;;;8411:24:0;;;8581:44;;;;;;;;;;-1:-1:-1;8581:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;20004:791;6221:13;:11;:13::i;:::-;20286:36:::1;20305:17:::0;20286:16;:36:::1;:::i;:::-;20266:1;20226:36;20245:17:::0;20226:16;:36:::1;:::i;:::-;20225:42;;;;:::i;:::-;20224:48;::::0;20271:1:::1;20224:48;:::i;:::-;:99;20208:197;;;::::0;;-1:-1:-1;;;20208:197:0;;8398:2:1;20208:197:0::1;::::0;::::1;8380:21:1::0;8417:18;;;8410:30;;;;8476:34;8456:18;;;8449:62;8547:34;8527:18;;;8520:62;8599:19;;20208:197:0::1;;;;;;;;;20412:15;:34:::0;;;20453:16:::1;:36:::0;;;20496:15:::1;:34:::0;;;20537:16:::1;:36:::0;;;20594:35:::1;20514:16:::0;20430;20594:35:::1;:::i;:::-;20580:11;:49:::0;20651:37:::1;20671:17:::0;20651;:37:::1;:::i;:::-;20636:12;:52:::0;;;20695:14:::1;:32:::0;;;20747:11:::1;::::0;20739:50:::1;::::0;;8831:25:1;;;8887:2;8872:18;;8865:34;;;;8915:18;;;8908:34;;;20739:50:0::1;::::0;8819:2:1;8804:18;20739:50:0::1;;;;;;;20004:791:::0;;;;;:::o;11068:217::-;11183:10;11158:4;11171:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11171:32:0;;;;;;;;;;:41;;;11224:37;11158:4;;11171:32;;11224:37;;;;11206:6;160:25:1;;148:2;133:18;;14:177;11224:37:0;;;;;;;;-1:-1:-1;11275:4:0;11068:217;;;;;:::o;10547:115::-;10597:7;10640:15;7272:2;10640;:15;:::i;:::-;10620:16;;:36;;;;:::i;:::-;10613:43;;10547:115;:::o;12935:361::-;-1:-1:-1;;;;;13072:19:0;;13055:4;13072:19;;;:11;:19;;;;;;;;13092:10;13072:31;;;;;;;;-1:-1:-1;;13072:52:0;13068:167;;-1:-1:-1;;;;;13178:19:0;;;;;;:11;:19;;;;;;;;13198:10;13178:31;;;;;;;;:49;;13221:6;;13178:49;:::i;:::-;-1:-1:-1;;;;;13135:19:0;;;;;;:11;:19;;;;;;;;13155:10;13135:31;;;;;;;:92;13068:167;13250:40;13264:6;13272:9;13283:6;13250:13;:40::i;:::-;13243:47;;12935:361;;;;;;:::o;21456:132::-;21576:4;;-1:-1:-1;;;;;21576:4:0;;;21509:7;10876:18;;;:9;:18;;;;;;;21558:4;;;;;10876:18;;;;;21509:7;;21548:33;;;:::i;:::-;21532:12;;:50;;;;:::i;16038:268::-;16150:11;;16132:4;;16150:11;;16149:12;:42;;;;-1:-1:-1;;;;;;16166:25:0;;;;;;:14;:25;;;;;;;;16165:26;16149:42;:69;;;;-1:-1:-1;;;;;;16196:22:0;;;;;;:14;:22;;;;;;;;16195:23;16149:69;16145:94;;;-1:-1:-1;16234:5:0;16227:12;;16145:94;-1:-1:-1;;;;;16254:19:0;;;;;;:11;:19;;;;;;;;16253:20;:47;;;;-1:-1:-1;;;;;;;16278:22:0;;;;;:11;:22;;;;;;;;16277:23;;16246:54;-1:-1:-1;16038:268:0:o;18894:174::-;6221:13;:11;:13::i;:::-;18985:4:::1;::::0;-1:-1:-1;;;;;18985:4:0;;::::1;18979:10:::0;;::::1;::::0;18971:57:::1;;;::::0;-1:-1:-1;;;18971:57:0;;10671:2:1;18971:57:0::1;::::0;::::1;10653:21:1::0;10710:2;10690:18;;;10683:30;10749:34;10729:18;;;10722:62;-1:-1:-1;;;10800:18:1;;;10793:32;10842:19;;18971:57:0::1;10469:398:1::0;18971:57:0::1;-1:-1:-1::0;;;;;19035:18:0;;;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;19035:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18894:174::o;19180:359::-;6221:13;:11;:13::i;:::-;19339:1:::1;19324:12;:16;:37;;;;;19360:1;19344:13;:17;19324:37;:52;;;;;19375:1;19365:7;:11;19324:52;:72;;;;;19391:5;19380:7;:16;;19324:72;19308:95;;;::::0;::::1;;19460:7;19444:12;19429;;:27;;;;:::i;:::-;19428:39;;;;:::i;:::-;19410:15;:57:::0;19494:12:::1;::::0;19526:7;;19494:28:::1;::::0;19509:13;;19494:28:::1;:::i;:::-;19493:40;;;;:::i;:::-;19474:16;:59:::0;-1:-1:-1;;;19180:359:0:o;11993:320::-;4409:10;9100:25;;;;:11;:25;;;;;;;;;:50;;-1:-1:-1;6300:7:0;6323:6;-1:-1:-1;;;;;6323:6:0;9129:10;:21;9100:50;9084:111;;;;-1:-1:-1;;;9084:111:0;;;;;;;:::i;:::-;12119:21:::1;12153:13:::0;;12149:159:::1;;12178:9;-1:-1:-1::0;;;;;12193:8:0;::::1;12242:3;12210:28;12222:16:::0;12210:9;:28:::1;:::i;:::-;12209:36;;;;:::i;:::-;12193:57;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12177:73;;;12267:4;12259:41;;;::::0;-1:-1:-1;;;12259:41:0;;11640:2:1;12259:41:0::1;::::0;::::1;11622:21:1::0;11679:2;11659:18;;;11652:30;11718:26;11698:18;;;11691:54;11762:18;;12259:41:0::1;11438:348:1::0;12259:41:0::1;12168:140;12149:159;12092:221;11993:320:::0;;:::o;11419:114::-;6221:13;:11;:13::i;:::-;-1:-1:-1;;;;;11498:18:0;;;::::1;;::::0;;;:11:::1;:18;::::0;;;;:29;;-1:-1:-1;;11498:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11419:114::o;10668:113::-;10718:7;10759:15;7272:2;10759;:15;:::i;:::-;10741:14;;:34;;;;:::i;19758:113::-;6221:13;:11;:13::i;:::-;-1:-1:-1;;;;;19837:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;19837:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19758:113::o;11539:448::-;6221:13;:11;:13::i;:::-;11663:20;;;;;:58:::1;;-1:-1:-1::0;11687:34:0;;::::1;11663:58;11655:67;;;::::0;::::1;;11744:10;11729:12;11763:219;11780:20:::0;;::::1;11763:219;;;11821:14;:28;11836:9;;11846:1;11836:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11821:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11821:28:0;;::::1;;11820:29;:66:::0;::::1;;;;11854:18;:32;11873:9;;11883:1;11873:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11854:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11854:32:0;;::::1;;11853:33;11820:66;11816:159;;;11899:66;11914:4;11920:9;;11930:1;11920:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11948:15;7272:2;11948;:15;:::i;:::-;11934:7;;11942:1;11934:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;11899:14;:66::i;:::-;;11816:159;11802:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11763:219;;;;11648:339;11539:448:::0;;;;:::o;6473:97::-;6221:13;:11;:13::i;:::-;6534:30:::1;6561:1;6534:18;:30::i;:::-;6473:97::o:0;11291:122::-;11352:4;11372:35;11380:7;-1:-1:-1;;11372:7:0;:35::i;20894:247::-;6221:13;:11;:13::i;:::-;21022:20:::1;:53:::0;;-1:-1:-1;;;;;;21022:53:0::1;;-1:-1:-1::0;;;;;21022:53:0;;::::1;;;::::0;;21082:20:::1;:53:::0;;-1:-1:-1;;;;;;21082:53:0::1;::::0;;;::::1;;::::0;;20894:247::o;12764:165::-;12859:4;12879:44;12893:10;12905:9;12916:6;12879:13;:44::i;19545:207::-;6221:13;:11;:13::i;:::-;19649:1:::1;19637:9;:13;:28;;;;;19664:1;19654:7;:11;19637:28;:48;;;;;19680:5;19669:7;:16;;19637:48;19629:57;;;::::0;::::1;;19739:7;19726:9;19711:12;;:24;;;;:::i;:::-;19710:36;;;;:::i;:::-;19693:14;:53:::0;-1:-1:-1;;19545:207:0:o;10428:113::-;10477:7;10519:15;7272:2;10519;:15;:::i;:::-;10500;;:35;;;;:::i;12319:439::-;4409:10;9100:25;;;;:11;:25;;;;;;;;;:50;;-1:-1:-1;6300:7:0;6323:6;-1:-1:-1;;;;;6323:6:0;9129:10;:21;9100:50;9084:111;;;;-1:-1:-1;;;9084:111:0;;;;;;;:::i;:::-;12436:6:::1;12431:322;12448:19:::0;;::::1;12431:322;;;12487:10;12483:200;;;12510:14;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;12542:55;12560:9;12571:8;;12580:1;12571:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12542:55;::::0;;-1:-1:-1;;;;;12321:15:1;;;12303:34;;12373:15;;;;12368:2;12353:18;;12346:43;12584:12:0::1;12405:18:1::0;;;12398:34;12253:2;12238:18;12542:55:0::1;;;;;;;12483:200;;;12628:9;:22;12638:8;;12647:1;12638:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12628:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12628:22:0;;:27;12624:49:::1;;12657:14;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;12624:49;12716:10;:29;;12744:1;12716:29;;;12729:12;12716:29;12691:9;:22;12701:8;;12710:1;12701:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12691:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12691:22:0;:54;12469:3;::::1;::::0;::::1;:::i;:::-;;;;12431:322;;14918:160:::0;4409:10;9100:25;;;;:11;:25;;;;;;;;;:50;;-1:-1:-1;6300:7:0;6323:6;-1:-1:-1;;;;;6323:6:0;9129:10;:21;9100:50;9084:111;;;;-1:-1:-1;;;9084:111:0;;;;;;;:::i;:::-;14975:16:::1;::::0;::::1;;14974:17;14966:51;;;::::0;-1:-1:-1;;;14966:51:0;;12786:2:1;14966:51:0::1;::::0;::::1;12768:21:1::0;12825:2;12805:18;;;12798:30;-1:-1:-1;;;12844:18:1;;;12837:51;12905:18;;14966:51:0::1;12584:345:1::0;14966:51:0::1;15024:16;:23:::0;;-1:-1:-1;;15054:18:0;;;;;14918:160::o;21147:303::-;6221:13;:11;:13::i;:::-;21306:1:::1;21291:12;:16;21283:25;;;::::0;::::1;;21315:11;:22:::0;;-1:-1:-1;;21315:22:0::1;;::::0;::::1;;;;::::0;;21360:12:::1;::::0;:27:::1;::::0;21375:12;;21360:27:::1;:::i;:::-;21344:13;:43:::0;21428:15:::1;7272:2;21428;:15;:::i;:::-;21410:34;::::0;:14;:34:::1;:::i;:::-;21394:13;:50:::0;-1:-1:-1;;;21147:303:0:o;19074:100::-;6221:13;:11;:13::i;:::-;19144:17:::1;:24:::0;19074:100::o;20801:87::-;6221:13;:11;:13::i;:::-;20871:11:::1;::::0;;-1:-1:-1;;20856:26:0;::::1;20871:11;::::0;;::::1;20870:12;20856:26;::::0;;20801:87::o;16312:135::-;16368:7;16388;16384:32;;;-1:-1:-1;;16404:12:0;;;16312:135::o;16384:32::-;-1:-1:-1;;16430:11:0;;;16312:135::o;6576:191::-;6221:13;:11;:13::i;:::-;-1:-1:-1;;;;;6661:22:0;::::1;6653:73;;;::::0;-1:-1:-1;;;6653:73:0;;13136:2:1;6653:73:0::1;::::0;::::1;13118:21:1::0;13175:2;13155:18;;;13148:30;13214:34;13194:18;;;13187:62;-1:-1:-1;;;13265:18:1;;;13258:36;13311:19;;6653:73:0::1;12934:402:1::0;6653:73:0::1;6733:28;6752:8;6733:18;:28::i;:::-;6576:191:::0;:::o;19877:121::-;6221:13;:11;:13::i;:::-;-1:-1:-1;;;;;19960:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;19960:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19877:121::o;6341:126::-;6300:7;6323:6;-1:-1:-1;;;;;6323:6:0;4409:10;6401:23;6393:68;;;;-1:-1:-1;;;6393:68:0;;13543:2:1;6393:68:0;;;13525:21:1;;;13562:18;;;13555:30;13621:34;13601:18;;;13594:62;13673:18;;6393:68:0;13341:356:1;13302:1407:0;13414:4;-1:-1:-1;;;;;13435:20:0;;13427:57;;;;-1:-1:-1;;;13427:57:0;;13904:2:1;13427:57:0;;;13886:21:1;13943:2;13923:18;;;13916:30;13982:26;13962:18;;;13955:54;14026:18;;13427:57:0;13702:348:1;13427:57:0;-1:-1:-1;;;;;13499:23:0;;13491:58;;;;-1:-1:-1;;;13491:58:0;;14257:2:1;13491:58:0;;;14239:21:1;14296:2;14276:18;;;14269:30;-1:-1:-1;;;14315:18:1;;;14308:52;14377:18;;13491:58:0;14055:346:1;13491:58:0;13573:1;13564:6;:10;13556:44;;;;-1:-1:-1;;;13556:44:0;;14608:2:1;13556:44:0;;;14590:21:1;14647:2;14627:18;;;14620:30;-1:-1:-1;;;14666:18:1;;;14659:51;14727:18;;13556:44:0;14406:345:1;13556:44:0;-1:-1:-1;;;;;13615:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;13615:27:0;13607:60;;;;-1:-1:-1;;;13607:60:0;;14958:2:1;13607:60:0;;;14940:21:1;14997:2;14977:18;;;14970:30;-1:-1:-1;;;15016:18:1;;;15009:50;15076:18;;13607:60:0;14756:344:1;13607:60:0;14778:11;;:16;;;13678:40;;-1:-1:-1;;;;;;13693:25:0;;;;;;:14;:25;;;;;;;;13678:40;13674:143;;;-1:-1:-1;;;;;13737:26:0;;;;;;:18;:26;;;;;;;;13729:63;;;;-1:-1:-1;;;13729:63:0;;15307:2:1;13729:63:0;;;15289:21:1;15346:2;15326:18;;;15319:30;15385:26;15365:18;;;15358:54;15429:18;;13729:63:0;15105:348:1;13729:63:0;13801:8;14854:12;14840:11;:26;14891:15;14873;:33;14806:106;13801:8;13828:16;;;;13823:167;;-1:-1:-1;;;;;13873:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;13903:29:0;;;;;;:18;:29;;;;;;;;13873:59;13855:127;;;;-1:-1:-1;;;13855:127:0;;15660:2:1;13855:127:0;;;15642:21:1;15699:2;15679:18;;;15672:30;15738;15718:18;;;15711:58;15786:18;;13855:127:0;15458:352:1;13855:127:0;13998:39;14011:6;14019:9;14030:6;13998:12;:39::i;:::-;-1:-1:-1;;;;;14051:25:0;;;;;;:14;:25;;;;;;;;14050:26;:47;;;;-1:-1:-1;14093:4:0;;-1:-1:-1;;;;;14080:17:0;;;14093:4;;14080:17;;14050:47;14046:158;;;-1:-1:-1;;;;;14113:26:0;;;;;;:15;:26;;;;;;;;14108:89;;14152:35;14169:9;14180:6;14152:16;:35::i;:::-;14216:6;;;;14212:77;;;14240:41;14255:6;14263:9;14274:6;14240:14;:41::i;:::-;14233:48;;;;14212:77;-1:-1:-1;;;;;14317:17:0;;;;;;:9;:17;;;;;;:26;;14337:6;;14317:26;:::i;:::-;-1:-1:-1;;;;;14297:17:0;;;;;;:9;:17;;;;;:46;14377:6;14396:32;14307:6;14418:9;14396:13;:32::i;:::-;14392:168;;;14456:26;14464:9;14475:6;14456:7;:26::i;:::-;14439:43;;14495:25;14510:9;14495:14;:25::i;:::-;:39;;;;;14533:1;14524:6;:10;14495:39;14491:61;;;14536:16;14545:6;14536:8;:16::i;:::-;-1:-1:-1;;;;;14591:20:0;;;;;;:9;:20;;;;;;:37;;14614:14;;14591:37;:::i;:::-;-1:-1:-1;;;;;14568:20:0;;;;;;;:9;:20;;;;;;;:60;;;;14642:43;;;;;;;;;;14670:14;160:25:1;;148:2;133:18;;14:177;14642:43:0;;;;;;;;-1:-1:-1;14699:4:0;;13302:1407;-1:-1:-1;;;;13302:1407:0:o;15084:302::-;-1:-1:-1;;;;;15230:17:0;;15197:4;15230:17;;;:9;:17;;;;;;:26;;15250:6;;15230:26;:::i;:::-;-1:-1:-1;;;;;15210:17:0;;;;;;;:9;:17;;;;;;:46;;;;15286:20;;;;;;;:29;;15309:6;;15286:29;:::i;:::-;-1:-1:-1;;;;;15263:20:0;;;;;;;:9;:20;;;;;;;:52;;;;15327:35;;;;;;;;;;15355:6;160:25:1;;148:2;133:18;;14:177;15327:35:0;;;;;;;;-1:-1:-1;15376:4:0;15084:302;;;;;:::o;6773:177::-;6843:16;6862:6;;-1:-1:-1;;;;;6875:17:0;;;-1:-1:-1;;;;;;6875:17:0;;;;;;6904:40;;6862:6;;;;;;;6904:40;;6843:16;6904:40;6836:114;6773:177;:::o;15642:390::-;-1:-1:-1;;;;;15760:23:0;;;;;;:15;:23;;;;;;;;;:53;;-1:-1:-1;;;;;;15787:26:0;;;;;;:15;:26;;;;;;;;15760:53;15756:66;;;15642:390;;;:::o;15756:66::-;-1:-1:-1;;;;;15857:22:0;;;;;;:14;:22;;;;;;;;:59;;15900:16;;15857:59;;;15882:15;;15857:59;15846:6;:71;;15830:133;;;;-1:-1:-1;;;15830:133:0;;16017:2:1;15830:133:0;;;15999:21:1;16056:2;16036:18;;;16029:30;16095;16075:18;;;16068:58;16143:18;;15830:133:0;15815:352:1;15830:133:0;-1:-1:-1;;;;;15980:17:0;;;;;;:9;:17;;;;;;:22;15972:54;;;;-1:-1:-1;;;15972:54:0;;16374:2:1;15972:54:0;;;16356:21:1;16413:2;16393:18;;;16386:30;-1:-1:-1;;;16432:18:1;;;16425:49;16491:18;;15972:54:0;16172:343:1;15392:244:0;15496:14;;-1:-1:-1;;;;;15533:20:0;;15474:19;15533:20;;;:9;:20;;;;;;15496:14;;15533:29;;15556:6;;15533:29;:::i;:::-;:44;;15517:113;;;;-1:-1:-1;;;15517:113:0;;16722:2:1;15517:113:0;;;16704:21:1;16761:2;16741:18;;;16734:30;16800:34;16780:18;;;16773:62;-1:-1:-1;;;16851:18:1;;;16844:33;16894:19;;15517:113:0;16520:399:1;16453:302:0;-1:-1:-1;;;;;16569:25:0;;16538:7;16569:25;;;:14;:25;;;;;;16655:14;;16569:25;;;;;16538:7;;16631:20;16569:25;16631:11;:20::i;:::-;16622:29;;:6;:29;:::i;:::-;16621:48;;;;:::i;:::-;16696:4;16678:24;;;;:9;:24;;;;;:37;;16601:68;;-1:-1:-1;16601:68:0;;16678:24;;;:37;;16601:68;;16678:37;:::i;:::-;;;;-1:-1:-1;16731:18:0;;-1:-1:-1;16740:9:0;16731:6;:18;:::i;:::-;16724:25;16453:302;-1:-1:-1;;;;;16453:302:0:o;16761:355::-;16870:10;16827:4;16855:26;;;:14;:26;;;;;;;;16854:27;:45;;;;-1:-1:-1;16893:6:0;;;;16892:7;16854:45;:67;;;;-1:-1:-1;16910:11:0;;;;;;;16854:67;:127;;;;-1:-1:-1;16964:17:0;;16948:12;16932:29;;;;:15;:29;;;;;;:49;16854:127;:163;;;;-1:-1:-1;;;;;;16992:25:0;;;;;;:14;:25;;;;;;;;16854:163;:215;;;;-1:-1:-1;17056:13:0;;17046:4;17028:24;;;;:9;:24;;;;;;:41;;16854:215;:256;;;;;17109:1;17094:12;;17080:11;;:26;;;;:::i;:::-;:30;16840:270;16761:355;-1:-1:-1;;16761:355:0:o;17122:1766::-;8960:6;:13;;-1:-1:-1;;8960:13:0;8969:4;8960:13;;;17214:12:::1;::::0;17200:11:::1;::::0;8960:6;;17200:26:::1;::::0;::::1;:::i;:::-;17181:45;;17233:20;17265:13;;17256:6;:22;:47;;17290:13;;17256:47;;;17281:6;17256:47;17332:4;17314:24;::::0;;;:9:::1;:24;::::0;;;;;17233:70;;-1:-1:-1;17314:39:0;-1:-1:-1;17310:91:0::1;;;-1:-1:-1::0;17395:4:0::1;17377:24;::::0;;;:9:::1;:24;::::0;;;;;17310:91:::1;17410:25;17456:16;;17438:15;;:34;;;;:::i;:::-;17410:62:::0;-1:-1:-1;17479:23:0::1;17555:8:::0;17543:1:::1;17507:32;17410:62:::0;17507:12;:32:::1;:::i;:::-;17506:38;;;;:::i;:::-;17505:58;;;;:::i;:::-;17479:84:::0;-1:-1:-1;17570:31:0::1;17479:84:::0;17570:31;::::1;:::i;:::-;17634:16;::::0;;17648:1:::1;17634:16:::0;;;;;::::1;::::0;;17570:31;;-1:-1:-1;17610:21:0::1;::::0;17634:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17634:16:0::1;17610:40;;17675:4;17657;17662:1;17657:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17657:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;17697:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;17697:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;17657:7;;17697:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17687:4;17692:1;17687:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17687:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17773:6:::1;::::0;:154:::1;::::0;-1:-1:-1;;;17773:154:0;;17743:21:::1;::::0;17773:6;;;::::1;::::0;:57:::1;::::0;:154:::1;::::0;17839:12;;17719:21:::1;::::0;17870:4;;17891::::1;::::0;17905:15:::1;::::0;17773:154:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17936:17;17980:13;17956:21;:37;;;;:::i;:::-;17936:57:::0;-1:-1:-1;18000:19:0::1;18034:21;18054:1;18034:17:::0;:21:::1;:::i;:::-;18022:34;::::0;:8;:34:::1;:::i;:::-;18000:56:::0;-1:-1:-1;18065:26:0::1;18000:56:::0;18129:1:::1;18096:29;18108:17:::0;18096:9;:29:::1;:::i;:::-;18095:35;;;;:::i;:::-;18094:58;;;;:::i;:::-;18065:87:::0;-1:-1:-1;18159:26:0::1;18188:30;18065:87:::0;18188:9;:30:::1;:::i;:::-;18159:59:::0;-1:-1:-1;18231:22:0;;18227:232:::1;;18289:20;::::0;:74:::1;::::0;18265:18:::1;::::0;-1:-1:-1;;;;;18289:20:0::1;::::0;18332:18;;18265;18289:74;18265:18;18289:74;18332:18;18289:20;:74:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;18227:232:0::1;18471:19:::0;;18467:231:::1;;18501:6;::::0;18635:20:::1;::::0;18501:189:::1;::::0;-1:-1:-1;;;18501:189:0;;18569:4:::1;18501:189;::::0;::::1;18646:34:1::0;18696:18;;;18689:34;;;-1:-1:-1;18739:18:1;;;18732:34;;;18782:18;;;18775:34;-1:-1:-1;;;;;18501:6:0::1;18635:20:::0;;::::1;::::0;::::1;18825:19:1::0;;;18818:44;18666:15:0::1;18878:19:1::0;;;18871:35;18501:6:0;::::1;::::0;:22:::1;::::0;18531:18;;18580:19:1;;18501:189:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18467:231;18752:12;18736:29;::::0;;;:15:::1;:29;::::0;;;;;:33:::1;::::0;18768:1:::1;18736:33;:::i;:::-;18720:12;18704:29;::::0;;;:15:::1;:29;::::0;;;;;;;;:65;;;;18781:101;;8831:25:1;;;8872:18;;;8865:34;;;8915:18;;8908:34;;;18781:101:0::1;::::0;8819:2:1;8804:18;18781:101:0::1;;;;;;;-1:-1:-1::0;;8988:6:0;:14;;-1:-1:-1;;8988:14:0;;;-1:-1:-1;;;;;;;;;17122:1766:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:548::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;939:3;1124:1;1119:2;1110:6;1099:9;1095:22;1091:31;1084:42;1194:2;1187;1183:7;1178:2;1170:6;1166:15;1162:29;1151:9;1147:45;1143:54;1135:62;;;;655:548;;;;:::o;1208:131::-;-1:-1:-1;;;;;1283:31:1;;1273:42;;1263:70;;1329:1;1326;1319:12;1344:315;1412:6;1420;1473:2;1461:9;1452:7;1448:23;1444:32;1441:52;;;1489:1;1486;1479:12;1441:52;1528:9;1515:23;1547:31;1572:5;1547:31;:::i;:::-;1597:5;1649:2;1634:18;;;;1621:32;;-1:-1:-1;;;1344:315:1:o;1856:456::-;1933:6;1941;1949;2002:2;1990:9;1981:7;1977:23;1973:32;1970:52;;;2018:1;2015;2008:12;1970:52;2057:9;2044:23;2076:31;2101:5;2076:31;:::i;:::-;2126:5;-1:-1:-1;2183:2:1;2168:18;;2155:32;2196:33;2155:32;2196:33;:::i;:::-;1856:456;;2248:7;;-1:-1:-1;;;2302:2:1;2287:18;;;;2274:32;;1856:456::o;2506:388::-;2574:6;2582;2635:2;2623:9;2614:7;2610:23;2606:32;2603:52;;;2651:1;2648;2641:12;2603:52;2690:9;2677:23;2709:31;2734:5;2709:31;:::i;:::-;2759:5;-1:-1:-1;2816:2:1;2801:18;;2788:32;2829:33;2788:32;2829:33;:::i;:::-;2881:7;2871:17;;;2506:388;;;;;:::o;2899:247::-;2958:6;3011:2;2999:9;2990:7;2986:23;2982:32;2979:52;;;3027:1;3024;3017:12;2979:52;3066:9;3053:23;3085:31;3110:5;3085:31;:::i;3151:160::-;3216:20;;3272:13;;3265:21;3255:32;;3245:60;;3301:1;3298;3291:12;3245:60;3151:160;;;:::o;3316:315::-;3381:6;3389;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;3497:9;3484:23;3516:31;3541:5;3516:31;:::i;:::-;3566:5;-1:-1:-1;3590:35:1;3621:2;3606:18;;3590:35;:::i;:::-;3580:45;;3316:315;;;;;:::o;3636:316::-;3713:6;3721;3729;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;-1:-1:-1;;3821:23:1;;;3891:2;3876:18;;3863:32;;-1:-1:-1;3942:2:1;3927:18;;;3914:32;;3636:316;-1:-1:-1;3636:316:1:o;3957:315::-;4025:6;4033;4086:2;4074:9;4065:7;4061:23;4057:32;4054:52;;;4102:1;4099;4092:12;4054:52;4138:9;4125:23;4115:33;;4198:2;4187:9;4183:18;4170:32;4211:31;4236:5;4211:31;:::i;4277:367::-;4340:8;4350:6;4404:3;4397:4;4389:6;4385:17;4381:27;4371:55;;4422:1;4419;4412:12;4371:55;-1:-1:-1;4445:20:1;;4488:18;4477:30;;4474:50;;;4520:1;4517;4510:12;4474:50;4557:4;4549:6;4545:17;4533:29;;4617:3;4610:4;4600:6;4597:1;4593:14;4585:6;4581:27;4577:38;4574:47;4571:67;;;4634:1;4631;4624:12;4571:67;4277:367;;;;;:::o;4649:773::-;4771:6;4779;4787;4795;4848:2;4836:9;4827:7;4823:23;4819:32;4816:52;;;4864:1;4861;4854:12;4816:52;4904:9;4891:23;4933:18;4974:2;4966:6;4963:14;4960:34;;;4990:1;4987;4980:12;4960:34;5029:70;5091:7;5082:6;5071:9;5067:22;5029:70;:::i;:::-;5118:8;;-1:-1:-1;5003:96:1;-1:-1:-1;5206:2:1;5191:18;;5178:32;;-1:-1:-1;5222:16:1;;;5219:36;;;5251:1;5248;5241:12;5219:36;;5290:72;5354:7;5343:8;5332:9;5328:24;5290:72;:::i;:::-;4649:773;;;;-1:-1:-1;5381:8:1;-1:-1:-1;;;;4649:773:1:o;5635:248::-;5703:6;5711;5764:2;5752:9;5743:7;5739:23;5735:32;5732:52;;;5780:1;5777;5770:12;5732:52;-1:-1:-1;;5803:23:1;;;5873:2;5858:18;;;5845:32;;-1:-1:-1;5635:248:1:o;5888:505::-;5980:6;5988;5996;6049:2;6037:9;6028:7;6024:23;6020:32;6017:52;;;6065:1;6062;6055:12;6017:52;6105:9;6092:23;6138:18;6130:6;6127:30;6124:50;;;6170:1;6167;6160:12;6124:50;6209:70;6271:7;6262:6;6251:9;6247:22;6209:70;:::i;:::-;6298:8;;-1:-1:-1;6183:96:1;-1:-1:-1;6352:35:1;;-1:-1:-1;6383:2:1;6368:18;;6352:35;:::i;:::-;6342:45;;5888:505;;;;;:::o;6622:316::-;6696:6;6704;6712;6765:2;6753:9;6744:7;6740:23;6736:32;6733:52;;;6781:1;6778;6771:12;6733:52;6804:26;6820:9;6804:26;:::i;:::-;6794:36;6877:2;6862:18;;6849:32;;-1:-1:-1;6928:2:1;6913:18;;;6900:32;;6622:316;-1:-1:-1;;;6622:316:1:o;6943:180::-;7002:6;7055:2;7043:9;7034:7;7030:23;7026:32;7023:52;;;7071:1;7068;7061:12;7023:52;-1:-1:-1;7094:23:1;;6943:180;-1:-1:-1;6943:180:1:o;7128:::-;7184:6;7237:2;7225:9;7216:7;7212:23;7208:32;7205:52;;;7253:1;7250;7243:12;7205:52;7276:26;7292:9;7276:26;:::i;7539:127::-;7600:10;7595:3;7591:20;7588:1;7581:31;7631:4;7628:1;7621:15;7655:4;7652:1;7645:15;7671:125;7736:9;;;7757:10;;;7754:36;;;7770:18;;:::i;7801:217::-;7841:1;7867;7857:132;;7911:10;7906:3;7902:20;7899:1;7892:31;7946:4;7943:1;7936:15;7974:4;7971:1;7964:15;7857:132;-1:-1:-1;8003:9:1;;7801:217::o;8023:168::-;8096:9;;;8127;;8144:15;;;8138:22;;8124:37;8114:71;;8165:18;;:::i;8953:422::-;9042:1;9085:5;9042:1;9099:270;9120:7;9110:8;9107:21;9099:270;;;9179:4;9175:1;9171:6;9167:17;9161:4;9158:27;9155:53;;;9188:18;;:::i;:::-;9238:7;9228:8;9224:22;9221:55;;;9258:16;;;;9221:55;9337:22;;;;9297:15;;;;9099:270;;;9103:3;8953:422;;;;;:::o;9380:806::-;9429:5;9459:8;9449:80;;-1:-1:-1;9500:1:1;9514:5;;9449:80;9548:4;9538:76;;-1:-1:-1;9585:1:1;9599:5;;9538:76;9630:4;9648:1;9643:59;;;;9716:1;9711:130;;;;9623:218;;9643:59;9673:1;9664:10;;9687:5;;;9711:130;9748:3;9738:8;9735:17;9732:43;;;9755:18;;:::i;:::-;-1:-1:-1;;9811:1:1;9797:16;;9826:5;;9623:218;;9925:2;9915:8;9912:16;9906:3;9900:4;9897:13;9893:36;9887:2;9877:8;9874:16;9869:2;9863:4;9860:12;9856:35;9853:77;9850:159;;;-1:-1:-1;9962:19:1;;;9994:5;;9850:159;10041:34;10066:8;10060:4;10041:34;:::i;:::-;10111:6;10107:1;10103:6;10099:19;10090:7;10087:32;10084:58;;;10122:18;;:::i;:::-;10160:20;;9380:806;-1:-1:-1;;;9380:806:1:o;10191:140::-;10249:5;10278:47;10319:4;10309:8;10305:19;10299:4;10278:47;:::i;10336:128::-;10403:9;;;10424:11;;;10421:37;;;10438:18;;:::i;10872:351::-;11074:2;11056:21;;;11113:2;11093:18;;;11086:30;11152:29;11147:2;11132:18;;11125:57;11214:2;11199:18;;10872:351::o;11791:127::-;11852:10;11847:3;11843:20;11840:1;11833:31;11883:4;11880:1;11873:15;11907:4;11904:1;11897:15;11923:135;11962:3;11983:17;;;11980:43;;12003:18;;:::i;:::-;-1:-1:-1;12050:1:1;12039:13;;11923:135::o;12443:136::-;12482:3;12510:5;12500:39;;12519:18;;:::i;:::-;-1:-1:-1;;;12555:18:1;;12443:136::o;17056:251::-;17126:6;17179:2;17167:9;17158:7;17154:23;17150:32;17147:52;;;17195:1;17192;17185:12;17147:52;17227:9;17221:16;17246:31;17271:5;17246:31;:::i;17312:980::-;17574:4;17622:3;17611:9;17607:19;17653:6;17642:9;17635:25;17679:2;17717:6;17712:2;17701:9;17697:18;17690:34;17760:3;17755:2;17744:9;17740:18;17733:31;17784:6;17819;17813:13;17850:6;17842;17835:22;17888:3;17877:9;17873:19;17866:26;;17927:2;17919:6;17915:15;17901:29;;17948:1;17958:195;17972:6;17969:1;17966:13;17958:195;;;18037:13;;-1:-1:-1;;;;;18033:39:1;18021:52;;18128:15;;;;18093:12;;;;18069:1;17987:9;17958:195;;;-1:-1:-1;;;;;;;18209:32:1;;;;18204:2;18189:18;;18182:60;-1:-1:-1;;;18273:3:1;18258:19;18251:35;18170:3;17312:980;-1:-1:-1;;;17312:980:1:o;18917:306::-;19005:6;19013;19021;19074:2;19062:9;19053:7;19049:23;19045:32;19042:52;;;19090:1;19087;19080:12;19042:52;19119:9;19113:16;19103:26;;19169:2;19158:9;19154:18;19148:25;19138:35;;19213:2;19202:9;19198:18;19192:25;19182:35;;18917:306;;;;;:::o

Swarm Source

ipfs://22b94021eab2175421fad102ac836f5e7d71d53e10ad6828e6dc296941b6d213

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

OVERVIEW

Destra Network offers a one-step solution for all your DePIN and AI computing needs.

0xf94e7d0710709388bCe3161C32B4eEA56d3f91CC
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.