ETH Price: $2,476.06 (+2.49%)
 
Transaction Hash
Method
Block
From
To
Approve226487592025-06-06 23:14:112 mins ago1749251651IN
Destra Network: DSync Token
0 ETH0.000092221.98428008
Approve226487282025-06-06 23:07:598 mins ago1749251279IN
Destra Network: DSync Token
0 ETH0.000125472.6995507
Transfer226487242025-06-06 23:07:119 mins ago1749251231IN
Destra Network: DSync Token
0 ETH0.000444915.62674413
Transfer226487242025-06-06 23:07:119 mins ago1749251231IN
Destra Network: DSync Token
0 ETH0.00034875.62674413
Approve226486512025-06-06 22:52:3523 mins ago1749250355IN
Destra Network: DSync Token
0 ETH0.000205384.43947648
Approve226486362025-06-06 22:49:3526 mins ago1749250175IN
Destra Network: DSync Token
0 ETH0.000290216.24242436
Approve226485822025-06-06 22:38:4737 mins ago1749249527IN
Destra Network: DSync Token
0 ETH0.000322456.98264268
Approve226485482025-06-06 22:31:5944 mins ago1749249119IN
Destra Network: DSync Token
0 ETH0.000592812.73457376
Approve226485422025-06-06 22:30:4745 mins ago1749249047IN
Destra Network: DSync Token
0 ETH0.0006418213.87693638
Transfer226484732025-06-06 22:16:591 hrs ago1749248219IN
Destra Network: DSync Token
0 ETH0.0007870312.70727916
Approve226484272025-06-06 22:07:471 hr ago1749247667IN
Destra Network: DSync Token
0 ETH0.000061621.33196434
Approve226483362025-06-06 21:49:351 hr ago1749246575IN
Destra Network: DSync Token
0 ETH0.00006161.32544039
Transfer226482372025-06-06 21:29:471 hr ago1749245387IN
Destra Network: DSync Token
0 ETH0.000439287.68039427
Transfer226482082025-06-06 21:23:591 hr ago1749245039IN
Destra Network: DSync Token
0 ETH0.000221593.5770989
Transfer226481952025-06-06 21:21:231 hr ago1749244883IN
Destra Network: DSync Token
0 ETH0.0002423.90733768
Transfer226481122025-06-06 21:04:472 hrs ago1749243887IN
Destra Network: DSync Token
0 ETH0.000193592.60619241
Transfer226479562025-06-06 20:33:232 hrs ago1749242003IN
Destra Network: DSync Token
0 ETH0.000128482.07445145
Transfer226479532025-06-06 20:32:472 hrs ago1749241967IN
Destra Network: DSync Token
0 ETH0.000445037.78409547
Transfer226479412025-06-06 20:30:232 hrs ago1749241823IN
Destra Network: DSync Token
0 ETH0.000175142.21497845
Approve226477862025-06-06 19:59:113 hrs ago1749239951IN
Destra Network: DSync Token
0 ETH0.000077821.68126884
Approve226477712025-06-06 19:56:113 hrs ago1749239771IN
Destra Network: DSync Token
0 ETH0.000071162.44227636
Approve226477282025-06-06 19:47:353 hrs ago1749239255IN
Destra Network: DSync Token
0 ETH0.000118692.56493045
Transfer226477252025-06-06 19:46:593 hrs ago1749239219IN
Destra Network: DSync Token
0 ETH0.000123962
Transfer226476012025-06-06 19:22:113 hrs ago1749237731IN
Destra Network: DSync Token
0 ETH0.000182253.18722925
Transfer226475342025-06-06 19:08:354 hrs ago1749236915IN
Destra Network: DSync Token
0 ETH0.000189443.05642672
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer218980062025-02-21 23:30:11104 days ago1740180611
Destra Network: DSync Token
0.03727181 ETH
Transfer215526732025-01-04 17:41:11153 days ago1736012471
Destra Network: DSync Token
0.05336326 ETH
Transfer215318632025-01-01 20:00:11156 days ago1735761611
Destra Network: DSync Token
0.14939264 ETH
Transfer215241682024-12-31 18:13:59157 days ago1735668839
Destra Network: DSync Token
1.6410837 ETH
Transfer215241682024-12-31 18:13:59157 days ago1735668839
Destra Network: DSync Token
1.6410837 ETH
Transfer215221862024-12-31 11:34:11157 days ago1735644851
Destra Network: DSync Token
1.6383208 ETH
Transfer215221862024-12-31 11:34:11157 days ago1735644851
Destra Network: DSync Token
1.6383208 ETH
Transfer215189542024-12-31 0:44:47157 days ago1735605887
Destra Network: DSync Token
2.01622304 ETH
Transfer215189542024-12-31 0:44:47157 days ago1735605887
Destra Network: DSync Token
2.01622304 ETH
Transfer215179042024-12-30 21:13:23158 days ago1735593203
Destra Network: DSync Token
0.61431653 ETH
Transfer215179042024-12-30 21:13:23158 days ago1735593203
Destra Network: DSync Token
0.61431653 ETH
Transfer215178422024-12-30 21:00:59158 days ago1735592459
Destra Network: DSync Token
1.94688663 ETH
Transfer215178422024-12-30 21:00:59158 days ago1735592459
Destra Network: DSync Token
1.94688663 ETH
Transfer215149142024-12-30 11:12:47158 days ago1735557167
Destra Network: DSync Token
1.849334 ETH
Transfer215149142024-12-30 11:12:47158 days ago1735557167
Destra Network: DSync Token
1.849334 ETH
Transfer215108842024-12-29 21:41:59159 days ago1735508519
Destra Network: DSync Token
1.96816248 ETH
Transfer215108842024-12-29 21:41:59159 days ago1735508519
Destra Network: DSync Token
1.96816248 ETH
Transfer215078062024-12-29 11:23:59159 days ago1735471439
Destra Network: DSync Token
1.80211771 ETH
Transfer215078062024-12-29 11:23:59159 days ago1735471439
Destra Network: DSync Token
1.80211771 ETH
Transfer215071112024-12-29 9:03:59159 days ago1735463039
Destra Network: DSync Token
0.5190703 ETH
Transfer215071112024-12-29 9:03:59159 days ago1735463039
Destra Network: DSync Token
0.5190703 ETH
Transfer215035622024-12-28 21:10:59160 days ago1735420259
Destra Network: DSync Token
1.8824188 ETH
Transfer215035622024-12-28 21:10:59160 days ago1735420259
Destra Network: DSync Token
1.8824188 ETH
Transfer215035552024-12-28 21:09:35160 days ago1735420175
Destra Network: DSync Token
1.8824188 ETH
Transfer215035552024-12-28 21:09:35160 days ago1735420175
Destra Network: DSync Token
1.8824188 ETH
View All Internal 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.

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.