ETH Price: $1,601.33 (+1.52%)
 

Overview

ETH Balance

0.001400247308090696 ETH

Eth Value

$2.24 (@ $1,601.33/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve220466192025-03-14 17:30:5933 days ago1741973459IN
Depicted: DPT Token
0 ETH0.000133552.87144449
Transfer220466132025-03-14 17:29:4733 days ago1741973387IN
Depicted: DPT Token
0 ETH0.00007911.31678537
Transfer220466072025-03-14 17:28:3533 days ago1741973315IN
Depicted: DPT Token
0 ETH0.000079271.31971708
Approve220052012025-03-08 22:41:4739 days ago1741473707IN
Depicted: DPT Token
0 ETH0.000117182.5195948
Approve220051472025-03-08 22:30:5939 days ago1741473059IN
Depicted: DPT Token
0 ETH0.000116342.50137765
Exclude From Tra...220045282025-03-08 20:26:3539 days ago1741465595IN
Depicted: DPT Token
0 ETH0.000030181.07764854
Exclude From Tra...220045252025-03-08 20:25:5939 days ago1741465559IN
Depicted: DPT Token
0 ETH0.000051321.07127992
Exclude From Tra...220045062025-03-08 20:22:1139 days ago1741465331IN
Depicted: DPT Token
0 ETH0.000052871.10369054
Exclude From Tra...220044762025-03-08 20:16:1139 days ago1741464971IN
Depicted: DPT Token
0 ETH0.000050761.05966582
Approve220044412025-03-08 20:08:4739 days ago1741464527IN
Depicted: DPT Token
0 ETH0.000119422.56762122
Exclude From Tra...220044252025-03-08 20:05:2339 days ago1741464323IN
Depicted: DPT Token
0 ETH0.000048711.01685856
Approve220043912025-03-08 19:58:3539 days ago1741463915IN
Depicted: DPT Token
0 ETH0.000116572.5063135
Approve220043742025-03-08 19:55:1139 days ago1741463711IN
Depicted: DPT Token
0 ETH0.000116742.51003286
Set Is Fee Exemp...220043082025-03-08 19:41:4739 days ago1741462907IN
Depicted: DPT Token
0 ETH0.000049151.02697731
Exclude From Tra...220041942025-03-08 19:18:4739 days ago1741461527IN
Depicted: DPT Token
0 ETH0.000050591.05607395
Approve219312152025-02-26 14:50:2349 days ago1740581423IN
Depicted: DPT Token
0 ETH0.000161783.47392992
Clear ETH219309242025-02-26 13:51:5949 days ago1740577919IN
Depicted: DPT Token
0 ETH0.000074812.35539209
Approve219113882025-02-23 20:24:1152 days ago1740342251IN
Depicted: DPT Token
0 ETH0.000061151.3148747
Approve218817732025-02-19 17:01:2356 days ago1739984483IN
Depicted: DPT Token
0 ETH0.000140353.01766413
Approve218718242025-02-18 7:39:4758 days ago1739864387IN
Depicted: DPT Token
0 ETH0.000060771.3066791
Approve218717552025-02-18 7:25:5958 days ago1739863559IN
Depicted: DPT Token
0 ETH0.000058791.26416686
Approve218012792025-02-08 10:44:3568 days ago1739011475IN
Depicted: DPT Token
0 ETH0.000065511.41485875
Approve218012782025-02-08 10:44:2368 days ago1739011463IN
Depicted: DPT Token
0 ETH0.00003551.34460634
Approve218012772025-02-08 10:44:1168 days ago1739011451IN
Depicted: DPT Token
0 ETH0.000040181.37578936
Approve217967872025-02-07 19:41:4768 days ago1738957307IN
Depicted: DPT Token
0 ETH0.000133042.86052544
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.00114499 ETH
Add Liquidity ET...220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.0026708 ETH
Transfer220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.00214789 ETH
Transfer220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.00214789 ETH
Transfer220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.00325255 ETH
Transfer220044842025-03-08 20:17:4739 days ago1741465067
Depicted: DPT Token
0.01021915 ETH
Transfer219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00025525 ETH
Add Liquidity ET...219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00060329 ETH
Transfer219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00047147 ETH
Transfer219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00047147 ETH
Transfer219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00074993 ETH
Transfer219312722025-02-26 15:01:4749 days ago1740582107
Depicted: DPT Token
0.00229618 ETH
Transfer219309242025-02-26 13:51:5949 days ago1740577919
Depicted: DPT Token
0.01604191 ETH
Transfer219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00025446 ETH
Add Liquidity ET...219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00060145 ETH
Transfer219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00046959 ETH
Transfer219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00046959 ETH
Transfer219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00074814 ETH
Transfer219113982025-02-23 20:26:1152 days ago1740342371
Depicted: DPT Token
0.00228879 ETH
Transfer219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00029865 ETH
Add Liquidity ET...219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00070582 ETH
Transfer219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00055057 ETH
Transfer219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00055057 ETH
Transfer219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00087853 ETH
Transfer219007782025-02-22 8:48:1154 days ago1740214091
Depicted: DPT Token
0.00268552 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Depicted

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-24
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {return msg.sender;}
    function _msgData() internal view virtual returns (bytes memory) {this; return msg.data;}
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {_name = name_; _symbol = symbol_;}
    function name() public view virtual override returns (string memory) {return _name;}
    function symbol() public view virtual override returns (string memory) {return _symbol;}
    function decimals() public view virtual override returns (uint8) {return 18;}
    function totalSupply() public view virtual override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view virtual override returns (uint256) {return _balances[account];}
    function transfer(address to, uint256 amount) public virtual override returns (bool) {_transfer(_msgSender(), to, amount); return true;}
    function allowance(address owner, address spender) public view virtual override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public virtual override returns (bool) {_approve(_msgSender(), spender, amount); return true;}
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {_spendAllowance(from, _msgSender(), amount); _transfer(from, to, amount); return true;}
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {_approve(_msgSender(), spender, allowance(_msgSender(), spender) + addedValue); return true;}
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = allowance(_msgSender(), spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {_approve(_msgSender(), spender, currentAllowance - subtractedValue);}
        return true;
    }
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "ERC20: transfer from/to the zero address");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {_balances[account] += amount;}
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            _totalSupply -= amount;
        }
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "ERC20: approve from/to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {_approve(owner, spender, currentAllowance - amount);}
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

interface IUniswapV2Pair {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Sync(uint112 reserve0, uint112 reserve1);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function sync() external;
}
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router01 {
    function factory() external view returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) { return _owner; }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "You are not owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Use renounce function");
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }
}

contract Depicted is IERC20, Ownable {
    string private constant _name = "Depicted";
    string private constant _symbol = "DPT";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply = 250000000 * (10**_decimals); // 250,000,000

    address public WETH;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant ZERO = 0x0000000000000000000000000000000000000000;

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

    // Remove from fee collection mapping
    mapping(address => bool) public isFeeExempt;

    // Blacklist mapping
    mapping(address => bool) public isBlacklisted;

    // Remove from trading enabled check
    mapping(address => bool) public isAuthorized;
    
    // Remove from transaction and wallet limits mapping
    mapping (address => bool) public isExcludedFromTransactionLimitChecks;

    // Buy fees
    uint256 public buyWallet1Fee = 2;
    uint256 public buyWallet2Fee = 2;
    uint256 public buyWallet3Fee = 1;
    uint256 public buyLiquidityFee = 1;
    uint256 public buyTotalFees = 6;

    // Sell fees
    uint256 public sellWallet1Fee = 2;
    uint256 public sellLiquidityFee = 2;
    uint256 public sellWallet2Fee = 1;
    uint256 public sellWallet3Fee = 1;
    uint256 public sellTotalFees = 6;

    // Tax collection counter
    uint256 public tokenForWallet1 = 0;
    uint256 public tokenForWallet2 = 0;
    uint256 public tokenForWallet3 = 0;
    uint256 public tokenForLiquidity = 0;

    // Fee receiver
    address public wallet1FeeReceiver;
    address public wallet2FeeReceiver;
    address public wallet3FeeReceiver;

    IUniswapV2Router02 public router;
    address public pair;

    bool public tradingOpen = false;
    uint256 public maxTransactionLimitBuy;
    uint256 public maxTransactionLimitSell;
    uint256 public maxWalletLimit;

    bool public swapEnabled = true;
    uint256 public swapThreshold = (_totalSupply * 1) / 10000; // 0.01% of supply
    bool private inSwap;
    bool public transactionLimitsInEffect = true;

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

    // Events
    event TradingEnabled(bool enabled);
    event BlacklistUpdated(address indexed _address, bool isBlacklisted);
    event ETHCleared(address indexed wallet, uint256 amount);
    event TokensCleared(address indexed tokenAddress, address indexed wallet, uint256 amount);
    event BuyFeesUpdated(uint256 wallet1, uint256 liquidity, uint256 wallet2, uint256 wallet3);
    event SellFeesUpdated(uint256 wallet1, uint256 liquidity, uint256 wallet2, uint256 wallet3);
    event MaxTransactionLimitUpdated(uint256 maxTransactionLimitBuy, uint256 maxTransactionLimitSell);
    event MaxWalletLimitUpdated(uint256 newMaxWalletLimit);
    event TransactionLimitsRemovedForever();
    event TaxCounterReset();
    event AuthorizationStatusUpdated(address indexed account, bool isAuthorized);
    event FeeExemptionStatusUpdated(address indexed holder, bool isFeeExempt);
    event ExcludedFromTransactionLimitChecks(address indexed holder, bool exempt);
    event Wallet1ReceiverUpdated(address indexed newReceiver);
    event Wallet2ReceiverUpdated(address indexed newReceiver);
    event Wallet3ReceiverUpdated(address indexed newReceiver);
    event SwapBackSettingsUpdated(bool enabled, uint256 amount);
    event SwapFailed(string message);
    event LiquidityAddedFailed(string message);

    constructor() {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap 
        WETH = router.WETH(); // WETH on Ethereum
        pair = IUniswapV2Factory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;
        maxTransactionLimitBuy = _totalSupply * 1 / 100; // 1% of total supply is maxTransactionLimitBuy
        maxTransactionLimitSell = _totalSupply * 1 / 100; // 1% of total supply is maxTransactionLimitSell
        maxWalletLimit = _totalSupply * 2 / 100; // 2% of total supply is maxWalletLimit

        isFeeExempt[msg.sender] = true;
        isFeeExempt[owner()] = true;
        isAuthorized[owner()] = true;
        isExcludedFromTransactionLimitChecks[address(this)] = true;
        isExcludedFromTransactionLimitChecks[owner()] = true;
        isExcludedFromTransactionLimitChecks[DEAD] = true;
        isExcludedFromTransactionLimitChecks[ZERO] = true;
        wallet1FeeReceiver = 0x04662A7067d9Af5bd87fBcf7ec82574a8BB60Df4;
        wallet2FeeReceiver = 0x982FB4769216023fAce96a4e6Aa700a9cF4d0cC5;
        wallet3FeeReceiver = 0x7A3b40CB8B1ADDb9BFCF2BD8D1F1CB91c0AE279d;
        // One time supply transfer
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    // Fallback
    receive() external payable {}

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

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

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

    function decimals() public pure returns (uint8) {
        return _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 _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

    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] -= amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    // Burn tokens from the owner's balance
    function burn(uint256 amount) external onlyOwner {
        require(amount > 0, "Amount must be greater than zero");
        require(_balances[msg.sender] >= amount, "Insufficient balance to burn");
        _totalSupply -= amount;
        _balances[msg.sender] -= amount;
        emit Transfer(msg.sender, address(0), amount);
    }

    // Open trading function
    function enableTrading() external onlyOwner {
        require(!tradingOpen, "Trading is already open");
        tradingOpen = true;
        emit TradingEnabled(true);
    }

    // Update blacklist status
    function updateBlacklistStatus(address _address, bool _isBlacklisted) external onlyOwner {
        require(_address != address(0), "Invalid address");
        require(_address != owner(), "Cannot blacklist the owner");
        isBlacklisted[_address] = _isBlacklisted;
        emit BlacklistUpdated(_address, _isBlacklisted);
    }

    function clearETH() external onlyOwner {
        uint256 amount = address(this).balance;
        require(amount > 0, "No ETH in contract");
        payable(msg.sender).transfer(amount);
        emit ETHCleared(msg.sender, amount);
    }

    // WARNING: Use this function with trusted tokens only
    function clearTokens(address tokenAddress) external onlyOwner {
        require(tokenAddress != address(this), "Cannot clear native tokens");
        IERC20 token = IERC20(tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0, "No token in contract");
        token.transfer(msg.sender, balance);
        emit TokensCleared(tokenAddress, msg.sender, balance);
    }

    // Buy fees setter
    function updateBuyFees(uint256 wallet1, uint256 liquidity, uint256 wallet2, uint256 wallet3) external onlyOwner {
        buyWallet1Fee = wallet1;
        buyLiquidityFee = liquidity;
        buyWallet2Fee = wallet2;
        buyWallet3Fee = wallet3;
        buyTotalFees = wallet1 + liquidity + wallet2 + wallet3;
        require(buyTotalFees <= 10, "Buy fees can not be greater than 10%");
        emit BuyFeesUpdated(wallet1, liquidity, wallet2, wallet3);
    }

    // Sell fees setter
    function updateSellFees(uint256 wallet1, uint256 liquidity, uint256 wallet2, uint256 wallet3) external onlyOwner {
        sellWallet1Fee = wallet1;
        sellLiquidityFee = liquidity;
        sellWallet2Fee = wallet2;
        sellWallet3Fee = wallet3;
        sellTotalFees = wallet1 + liquidity + wallet2 + wallet3;
        require(sellTotalFees <= 10, "Sell fees can not be greater than 10%");
        emit SellFeesUpdated(wallet1, liquidity, wallet2, wallet3);
    }

    // Maximum transaction limits setter for both buy and sell
    function updateMaxTransactionLimits(uint256 _amountBuy, uint256 _amountSell) external onlyOwner {
        uint256 minimumLimit = (_totalSupply * 1 / 1000) / (10**_decimals);
        require(_amountBuy >= minimumLimit, "Cannot set maxTransactionLimitBuy lower than 0.1% of total supply");
        require(_amountSell >= minimumLimit, "Cannot set maxTransactionLimitSell lower than 0.1% of total supply");
        maxTransactionLimitBuy = _amountBuy * (10**_decimals);
        maxTransactionLimitSell = _amountSell * (10**_decimals);
        emit MaxTransactionLimitUpdated(maxTransactionLimitBuy, maxTransactionLimitSell);
    }

    // Maximum wallet limit setter
    function updateMaxWalletLimit(uint256 _amount) external onlyOwner {
        require(_amount >= (_totalSupply * 1 / 100) / (10**_decimals), "Cannot set maxWalletLimit lower than 1% of total supply");
        maxWalletLimit = _amount * (10**_decimals);
        emit MaxWalletLimitUpdated(maxWalletLimit);
    }

    // Reset tax counter to zero
    function resetTaxCounter() external onlyOwner {
        tokenForWallet1 = 0;
        tokenForWallet2 = 0;
        tokenForWallet3 = 0;
        tokenForLiquidity = 0;
        emit TaxCounterReset();
    }

    // Clear transaction and wallet limits forever
    function removeTransactionLimitsForever() external onlyOwner {
        require(transactionLimitsInEffect, "Transaction limits already removed");
        transactionLimitsInEffect = false;
        emit TransactionLimitsRemovedForever();
    }

    // Exemptions
    function setIsAuthorized(address value, bool exempt) external onlyOwner {
        isAuthorized[value] = exempt;
        emit AuthorizationStatusUpdated(value, exempt);
    }

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

    function excludeFromTransactionLimitChecks(address holder, bool exempt) public onlyOwner {
        isExcludedFromTransactionLimitChecks[holder] = exempt;
        emit ExcludedFromTransactionLimitChecks(holder, exempt);
    }

    // Receivers
    function setWallet1Receiver(address _wallet1FeeReceiver) external onlyOwner {
        wallet1FeeReceiver = _wallet1FeeReceiver;
        emit Wallet1ReceiverUpdated(_wallet1FeeReceiver);
    }

    function setWallet2Receiver(address _wallet2FeeReceiver) external onlyOwner {
        wallet2FeeReceiver = _wallet2FeeReceiver;
        emit Wallet2ReceiverUpdated(_wallet2FeeReceiver);
    }

    function setWallet3Receiver(address _wallet3FeeReceiver) external onlyOwner {
        wallet3FeeReceiver = _wallet3FeeReceiver;
        emit Wallet3ReceiverUpdated(_wallet3FeeReceiver);
    }

    // Swapback settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        require(_amount > 2500, "Swap threshold must be greater than 2500");
        swapEnabled = _enabled;
        swapThreshold = _amount;
        emit SwapBackSettingsUpdated(_enabled, _amount);
    }

    // Manually trigger tax distribution
    function manualTaxSwap() external onlyOwner {
        uint256 contractTokenBalance = _balances[address(this)];
        require(contractTokenBalance > 0, "No tokens to swap");
        require(!inSwap, "Already in swap");
        swapBack();
    }

    // Internal and Private functions
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender], "Sender is blacklisted");
        require(!isBlacklisted[recipient], "Recipient is blacklisted");
        if (inSwap) {return _basicTransfer(sender, recipient, amount);}
        require(isAuthorized[sender] || isAuthorized[recipient] || tradingOpen, "Trading is not open yet");
        if (shouldSwapBack()) {swapBack();}

        if (transactionLimitsInEffect && !isAuthorized[sender] && !isAuthorized[recipient]) {
            require(sender != owner() && recipient != owner() && recipient != address(0) && recipient != address(DEAD), "Invalid addresses");
            if (sender == pair) { // Buy transaction
                if (!isExcludedFromTransactionLimitChecks[recipient]) {
                    require(amount <= maxTransactionLimitBuy, "Buy exceeds limit");
                    require(_balances[recipient] + amount <= maxWalletLimit, "Wallet exceeds limit");
                }
            } else if (recipient == pair) { // Sell transaction
                if (!isExcludedFromTransactionLimitChecks[sender]) {
                    require(amount <= maxTransactionLimitSell, "Sell exceeds limit");
                }
            } else { // For other transfers
                if (!isExcludedFromTransactionLimitChecks[recipient]) {
                    require(_balances[recipient] + amount <= maxWalletLimit, "Transfer exceeds limit");
                }
            }
        }

        _balances[sender] -= amount;
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount, recipient) : amount;
        _balances[recipient] += amountReceived;
        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function takeFee(address sender, uint256 amount, address to) internal returns (uint256) {
        uint256 feeAmount = (to == pair) ? (amount * sellTotalFees) / 100 : (sender == pair ? (amount * buyTotalFees) / 100 : 0);
        if (feeAmount == 0) return amount;
        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        distributeFee(feeAmount, to == pair);
        return amount - feeAmount;
    }

    function distributeFee(uint256 feeAmount, bool isSell) internal {
        uint256 wallet1Part = (feeAmount * (isSell ? sellWallet1Fee : buyWallet1Fee)) / (isSell ? sellTotalFees : buyTotalFees);
        uint256 wallet2Part = (feeAmount * (isSell ? sellWallet2Fee : buyWallet2Fee)) / (isSell ? sellTotalFees : buyTotalFees);
        uint256 wallet3Part = (feeAmount * (isSell ? sellWallet3Fee : buyWallet3Fee)) / (isSell ? sellTotalFees : buyTotalFees);
        uint256 liquidityPart = feeAmount - (wallet1Part + wallet2Part + wallet3Part);

        tokenForWallet1 += wallet1Part;
        tokenForWallet2 += wallet2Part;
        tokenForWallet3 += wallet3Part;
        tokenForLiquidity += liquidityPart;
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            tradingOpen &&
            _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 totalTokensToSwap = tokenForWallet1 + tokenForWallet2 + tokenForWallet3 + tokenForLiquidity;
        if (totalTokensToSwap == 0) return;  // If there's nothing to swap, just return
        uint256 liquidityTokens = (tokenForLiquidity * _balances[address(this)]) / (2 * totalTokensToSwap);
        uint256 amountToSwapForETH = _balances[address(this)] - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);
        uint256 newETHBalance = address(this).balance;
        uint256 ethBalanceChange = newETHBalance - initialETHBalance;
        distributeETH(ethBalanceChange, liquidityTokens, totalTokensToSwap);
    }

    function distributeETH(uint256 ethBalance, uint256 liquidityTokens, uint256 totalTokensToSwap) private {
        uint256 ethForWallet1 = ethBalance * tokenForWallet1 / totalTokensToSwap;
        uint256 ethForWallet2 = ethBalance * tokenForWallet2 / totalTokensToSwap;
        uint256 ethForWallet3 = ethBalance * tokenForWallet3 / totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - (ethForWallet1 + ethForWallet2 + ethForWallet3);

        sendETH(wallet1FeeReceiver, ethForWallet1);
        sendETH(wallet2FeeReceiver, ethForWallet2);
        sendETH(wallet3FeeReceiver, ethForWallet3);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    function sendETH(address to, uint256 amount) private {
        (bool success, ) = payable(to).call{value: amount}("");
        require(success, "ETH Transfer failed");
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        try router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        ) {} catch {emit SwapFailed("Failed to swap tokens for ETH");}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);
        try router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        ) {} catch {emit LiquidityAddedFailed("Failed to add liquidity");}
    }
}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"AuthorizationStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"wallet1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wallet2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wallet3","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"ExcludedFromTransactionLimitChecks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"isFeeExempt","type":"bool"}],"name":"FeeExemptionStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"LiquidityAddedFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionLimitBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionLimitSell","type":"uint256"}],"name":"MaxTransactionLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"MaxWalletLimitUpdated","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":false,"internalType":"uint256","name":"wallet1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wallet2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wallet3","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[],"name":"TaxCounterReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TransactionLimitsRemovedForever","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":true,"internalType":"address","name":"newReceiver","type":"address"}],"name":"Wallet1ReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newReceiver","type":"address"}],"name":"Wallet2ReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newReceiver","type":"address"}],"name":"Wallet3ReceiverUpdated","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWallet1Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWallet2Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWallet3Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"clearTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"excludeFromTransactionLimitChecks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTransactionLimitChecks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionLimitBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"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":"removeTransactionLimitsForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWallet1Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWallet2Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellWallet3Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"value","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsAuthorized","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":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet1FeeReceiver","type":"address"}],"name":"setWallet1Receiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet2FeeReceiver","type":"address"}],"name":"setWallet2Receiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet3FeeReceiver","type":"address"}],"name":"setWallet3Receiver","outputs":[],"stateMutability":"nonpayable","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":"tokenForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenForWallet1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenForWallet2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenForWallet3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionLimitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"updateBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wallet1","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"wallet2","type":"uint256"},{"internalType":"uint256","name":"wallet3","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountBuy","type":"uint256"},{"internalType":"uint256","name":"_amountSell","type":"uint256"}],"name":"updateMaxTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wallet1","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"wallet2","type":"uint256"},{"internalType":"uint256","name":"wallet3","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet1FeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet2FeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet3FeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526100106012600a6105fd565b61001e90630ee6b280610612565b600181815560026009819055600a819055600b829055600c8290556006600d819055600e829055600f91909155601082905560118290556012555f601381905560148190556015819055601655601b805460ff60a01b19169055601f805460ff1916821790556127109161009191610612565b61009b9190610629565b6020556021805461ff0019166101001790553480156100b8575f80fd5b505f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015610159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017d9190610648565b600280546001600160a01b0319166001600160a01b03928316179055601a546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa1580156101d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610648565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af115801561024b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026f9190610648565b601b80546001600160a01b0319166001600160a01b03928316179055305f908152600460209081526040808320601a549094168352929052205f199055600180546064916102bd9190610612565b6102c79190610629565b601c55600180546064916102db9190610612565b6102e59190610629565b601d556001546064906102f9906002610612565b6103039190610629565b601e55335f9081526005602081905260408220805460ff19166001908117909155916103365f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805460ff1916921515929092179091556001906007906103775f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff19958616179055308152600892839052908120805490931660019081179093556103cc5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c780549095168117909455601780546001600160a01b03199081167304662a7067d9af5bd87fbcf7ec82574a8bb60df41790915560188054821673982fb4769216023face96a4e6aa700a9cf4d0cc517905560198054909116737a3b40cb8b1addb9bfcf2bd8d1f1cb91c0ae279d179055925433808552600390935281842081905590519192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916104fa9190815260200190565b60405180910390a361066e565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561055557815f190482111561053b5761053b610507565b8085161561054857918102915b93841c9390800290610520565b509250929050565b5f8261056b575060016105f7565b8161057757505f6105f7565b816001811461058d5760028114610597576105b3565b60019150506105f7565b60ff8411156105a8576105a8610507565b50506001821b6105f7565b5060208310610133831016604e8410600b84101617156105d6575081810a6105f7565b6105e0838361051b565b805f19048211156105f3576105f3610507565b0290505b92915050565b5f61060b60ff84168361055d565b9392505050565b80820281158282048414176105f7576105f7610507565b5f8261064357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610658575f80fd5b81516001600160a01b038116811461060b575f80fd5b6131668061067b5f395ff3fe6080604052600436106103b6575f3560e01c80638a8c523c116101e9578063dd62ed3e11610108578063f11a24d31161009d578063f887ea401161006d578063f887ea4014610a9b578063fe575a8714610aba578063fe9fbb8014610ae8578063ffb54a9914610b16575f80fd5b8063f11a24d314610a33578063f2fde38b14610a48578063f491288114610a67578063f637434214610a86575f80fd5b8063e303e662116100d8578063e303e662146109c1578063e3a4d134146109e0578063e7ad9fcd146109ff578063e9483f2514610a1e575f80fd5b8063dd62ed3e1461092b578063dea687311461096f578063df20fd4914610984578063e12d729c146109a3575f80fd5b8063a9059cbb1161017e578063b7e15da91161014e578063b7e15da9146108c3578063b8360806146108e2578063bbcdf22c14610901578063d85ba06314610916575f80fd5b8063a9059cbb14610852578063ad5c464814610871578063b48bd37014610890578063b5d2703c146108a4575f80fd5b80639ebe6908116101b95780639ebe6908146107f55780639f93910a14610809578063a0cb25f51461081e578063a8aa1b3114610833575f80fd5b80638a8c523c146107855780638da5cb5b1461079957806395d89b41146107b55780639a82d756146107e0575f80fd5b806358fa63ca116102d55780636b53c8751161026a578063724436131161023a578063724436131461072757806379fd9355146107465780637fc34ab11461075b5780638340bfa614610770575f80fd5b80636b53c875146106a75780636ddd1713146106c657806370a08231146106df578063715018a614610713575f80fd5b8063616eb638116102a5578063616eb6381461064a578063658d4b7f1461065e57806366a88d961461067d5780636a486a8e14610692575f80fd5b806358fa63ca146105d55780635d23273f146105e85780635d33f90c146106075780635f069ed514610635575f80fd5b80632e6ed7ef1161034b57806342966c681161031b57806342966c68146105645780634324deae146105835780634f006763146105a257806350c3a065146105c1575f80fd5b80632e6ed7ef146104e557806330ee928614610506578063313ce5671461051b5780633f4218e014610536575f80fd5b80630ea2290e116103865780630ea2290e1461047e57806318160ddd1461049d5780631afc8058146104b157806323b872dd146104c6575f80fd5b806303fd2a45146103c15780630445b667146103f357806306fdde0314610416578063095ea7b31461044f575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fe575f80fd5b5061040860205481565b6040519081526020016103ea565b348015610421575f80fd5b5060408051808201909152600881526711195c1a58dd195960c21b60208201525b6040516103ea9190612ccc565b34801561045a575f80fd5b5061046e610469366004612d15565b610b36565b60405190151581526020016103ea565b348015610489575f80fd5b506018546103d6906001600160a01b031681565b3480156104a8575f80fd5b50600154610408565b3480156104bc575f80fd5b5061040860155481565b3480156104d1575f80fd5b5061046e6104e0366004612d3f565b610ba2565b3480156104f0575f80fd5b506105046104ff366004612d7d565b610c19565b005b348015610511575f80fd5b50610408600b5481565b348015610526575f80fd5b50604051601281526020016103ea565b348015610541575f80fd5b5061046e610550366004612dac565b60056020525f908152604090205460ff1681565b34801561056f575f80fd5b5061050461057e366004612dc7565b610d2f565b34801561058e575f80fd5b5061050461059d366004612dc7565b610e65565b3480156105ad575f80fd5b506105046105bc366004612dde565b610f85565b3480156105cc575f80fd5b5061050461115e565b3480156105e0575f80fd5b506103d65f81565b3480156105f3575f80fd5b50610504610602366004612e0b565b611227565b348015610612575f80fd5b5061046e610621366004612dac565b60086020525f908152604090205460ff1681565b348015610640575f80fd5b5061040860105481565b348015610655575f80fd5b506105046112af565b348015610669575f80fd5b50610504610678366004612e0b565b61137e565b348015610688575f80fd5b50610408601e5481565b34801561069d575f80fd5b5061040860125481565b3480156106b2575f80fd5b506105046106c1366004612dac565b6113fe565b3480156106d1575f80fd5b50601f5461046e9060ff1681565b3480156106ea575f80fd5b506104086106f9366004612dac565b6001600160a01b03165f9081526003602052604090205490565b34801561071e575f80fd5b50610504611470565b348015610732575f80fd5b506019546103d6906001600160a01b031681565b348015610751575f80fd5b50610408600a5481565b348015610766575f80fd5b50610408600e5481565b34801561077b575f80fd5b50610408601c5481565b348015610790575f80fd5b506105046114d4565b3480156107a4575f80fd5b505f546001600160a01b03166103d6565b3480156107c0575f80fd5b5060408051808201909152600381526211141560ea1b6020820152610442565b3480156107eb575f80fd5b5061040860145481565b348015610800575f80fd5b506105046115a0565b348015610814575f80fd5b5061040860095481565b348015610829575f80fd5b5061040860115481565b34801561083e575f80fd5b50601b546103d6906001600160a01b031681565b34801561085d575f80fd5b5061046e61086c366004612d15565b611607565b34801561087c575f80fd5b506002546103d6906001600160a01b031681565b34801561089b575f80fd5b50610504611613565b3480156108af575f80fd5b506105046108be366004612e0b565b6116d3565b3480156108ce575f80fd5b506105046108dd366004612dac565b611753565b3480156108ed575f80fd5b506105046108fc366004612e0b565b6117c5565b34801561090c575f80fd5b5061040860165481565b348015610921575f80fd5b50610408600d5481565b348015610936575f80fd5b50610408610945366004612e42565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b34801561097a575f80fd5b5061040860135481565b34801561098f575f80fd5b5061050461099e366004612e6e565b6118f8565b3480156109ae575f80fd5b5060215461046e90610100900460ff1681565b3480156109cc575f80fd5b506105046109db366004612dac565b6119d6565b3480156109eb575f80fd5b506017546103d6906001600160a01b031681565b348015610a0a575f80fd5b50610504610a19366004612d7d565b611bbe565b348015610a29575f80fd5b50610408601d5481565b348015610a3e575f80fd5b50610408600c5481565b348015610a53575f80fd5b50610504610a62366004612dac565b611cc3565b348015610a72575f80fd5b50610504610a81366004612dac565b611d84565b348015610a91575f80fd5b50610408600f5481565b348015610aa6575f80fd5b50601a546103d6906001600160a01b031681565b348015610ac5575f80fd5b5061046e610ad4366004612dac565b60066020525f908152604090205460ff1681565b348015610af3575f80fd5b5061046e610b02366004612dac565b60076020525f908152604090205460ff1681565b348015610b21575f80fd5b50601b5461046e90600160a01b900460ff1681565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b909086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1914610c04576001600160a01b0384165f90815260046020908152604080832033845290915281208054849290610bfe908490612e9e565b90915550505b610c0f848484611df6565b90505b9392505050565b5f546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610c4290612eb1565b60405180910390fd5b6009849055600c839055600a829055600b8190558082610c6b8587612edc565b610c759190612edc565b610c7f9190612edc565b600d819055600a1015610ce05760405162461bcd60e51b8152602060048201526024808201527f42757920666565732063616e206e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610c42565b6040805185815260208101859052908101839052606081018290527f892b2caa2d791bf7b8d9a49c4db7a4513ff1ae2e0e068ed217f9d5ab4c1a28f0906080015b60405180910390a150505050565b5f546001600160a01b03163314610d585760405162461bcd60e51b8152600401610c4290612eb1565b5f8111610da75760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610c42565b335f90815260036020526040902054811115610e055760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742062616c616e636520746f206275726e000000006044820152606401610c42565b8060015f828254610e169190612e9e565b9091555050335f9081526003602052604081208054839290610e39908490612e9e565b90915550506040518181525f9033905f805160206131118339815191529060200160405180910390a350565b5f546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610c4290612eb1565b610e9a6012600a612fcf565b60646001546001610eab9190612fdd565b610eb59190612ff4565b610ebf9190612ff4565b811015610f345760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f7765722060448201527f7468616e203125206f6620746f74616c20737570706c790000000000000000006064820152608401610c42565b610f406012600a612fcf565b610f4a9082612fdd565b601e8190556040519081527fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c9060200160405180910390a150565b5f546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610c4290612eb1565b5f610fbb6012600a612fcf565b6103e86001546001610fcd9190612fdd565b610fd79190612ff4565b610fe19190612ff4565b9050808310156110635760405162461bcd60e51b815260206004820152604160248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974427560448201527f79206c6f776572207468616e20302e3125206f6620746f74616c20737570706c6064820152607960f81b608482015260a401610c42565b808210156110e45760405162461bcd60e51b815260206004820152604260248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974536560448201527f6c6c206c6f776572207468616e20302e3125206f6620746f74616c20737570706064820152616c7960f01b608482015260a401610c42565b6110f06012600a612fcf565b6110fa9084612fdd565b601c556111096012600a612fcf565b6111139083612fdd565b601d819055601c546040517f8c783a77c5aa395c8a91cbc5151561b3e731af22c701db3f250e9f63726b488092611151928252602082015260400190565b60405180910390a1505050565b5f546001600160a01b031633146111875760405162461bcd60e51b8152600401610c4290612eb1565b305f90815260036020526040902054806111d75760405162461bcd60e51b815260206004820152601160248201527004e6f20746f6b656e7320746f207377617607c1b6044820152606401610c42565b60215460ff161561121c5760405162461bcd60e51b815260206004820152600f60248201526e0416c726561647920696e207377617608c1b6044820152606401610c42565b611224612332565b50565b5f546001600160a01b031633146112505760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260076020908152604091829020805460ff191685151590811790915591519182527fb1efe852be30e7167f7516f06975288bb90db091d44bb7a9af30947600cc88e691015b60405180910390a25050565b5f546001600160a01b031633146112d85760405162461bcd60e51b8152600401610c4290612eb1565b478061131b5760405162461bcd60e51b8152602060048201526012602482015271139bc8115512081a5b8818dbdb9d1c9858dd60721b6044820152606401610c42565b604051339082156108fc029083905f818181858888f19350505050158015611345573d5f803e3d5ffd5b5060405181815233907fb04a5c4bad0471e14274f37daa3837a36ec3eb247e07c385b164ceb3aca699ae9060200160405180910390a250565b5f546001600160a01b031633146113a75760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260056020908152604091829020805460ff191685151590811790915591519182527f7f6f5fb51391452770326385e3346a0f01613c59fb90ca223cf38a74796df38e91016112a3565b5f546001600160a01b031633146114275760405162461bcd60e51b8152600401610c4290612eb1565b601880546001600160a01b0319166001600160a01b0383169081179091556040517fbbb21d3193bc05d347de5f275b917079ea7032e862b75e419055583b1f26a97d905f90a250565b5f546001600160a01b031633146114995760405162461bcd60e51b8152600401610c4290612eb1565b5f80546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b5f546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610c4290612eb1565b601b54600160a01b900460ff16156115575760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610c42565b601b805460ff60a01b1916600160a01b179055604051600181527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b5f546001600160a01b031633146115c95760405162461bcd60e51b8152600401610c4290612eb1565b5f60138190556014819055601581905560168190556040517f88a2eaf8279b4700c41049eef111b3cf995af0f05743dc0ebacef57d8199b3e89190a1565b5f610c12338484611df6565b5f546001600160a01b0316331461163c5760405162461bcd60e51b8152600401610c4290612eb1565b602154610100900460ff1661169e5760405162461bcd60e51b815260206004820152602260248201527f5472616e73616374696f6e206c696d69747320616c72656164792072656d6f76604482015261195960f21b6064820152608401610c42565b6021805461ff00191690556040517f501b52b2e87d4f95f50c13f7b22c6a69c776eea1da388bc5d5bca2c92f0a0259905f90a1565b5f546001600160a01b031633146116fc5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260086020908152604091829020805460ff191685151590811790915591519182527f5e2fbd7e4595cc665b7c4ac07e2f0fd6fd9c6150fbcb6239a698edf8ea5d035f91016112a3565b5f546001600160a01b0316331461177c5760405162461bcd60e51b8152600401610c4290612eb1565b601780546001600160a01b0319166001600160a01b0383169081179091556040517f2066f27514d1fa80d57c52f882f9514de9a57157a5742181e53d973dc3258f25905f90a250565b5f546001600160a01b031633146117ee5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382166118365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c42565b5f546001600160a01b03166001600160a01b0316826001600160a01b0316036118a15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c69737420746865206f776e65720000000000006044820152606401610c42565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac91016112a3565b5f546001600160a01b031633146119215760405162461bcd60e51b8152600401610c4290612eb1565b6109c481116119835760405162461bcd60e51b815260206004820152602860248201527f53776170207468726573686f6c64206d75737420626520677265617465722074604482015267068616e20323530360c41b6064820152608401610c42565b601f805460ff19168315159081179091556020828155604080519283529082018390527f30e0f7c488b6c70123097f13cf387e140b0e0b8c9d9e3473e502f35b035d377c91015b60405180910390a15050565b5f546001600160a01b031633146119ff5760405162461bcd60e51b8152600401610c4290612eb1565b306001600160a01b03821603611a575760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420636c656172206e617469766520746f6b656e730000000000006044820152606401610c42565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac19190613013565b90505f8111611b095760405162461bcd60e51b8152602060048201526014602482015273139bc81d1bdad95b881a5b8818dbdb9d1c9858dd60621b6044820152606401610c42565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611b53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b77919061302a565b5060405181815233906001600160a01b038516907f29f092f0132733eafea5bfaa3a548578cf46b1ed811bdd2d76ee4603aa888b6b906020015b60405180910390a3505050565b5f546001600160a01b03163314611be75760405162461bcd60e51b8152600401610c4290612eb1565b600e849055600f839055601082905560118190558082611c078587612edc565b611c119190612edc565b611c1b9190612edc565b6012819055600a1015611c7e5760405162461bcd60e51b815260206004820152602560248201527f53656c6c20666565732063616e206e6f742062652067726561746572207468616044820152646e2031302560d81b6064820152608401610c42565b6040805185815260208101859052908101839052606081018290527f439932620c72dddea29980c098bca1a482729646d1216b226d723c6d278a30d190608001610d21565b5f546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b038116611d3a5760405162461bcd60e51b81526020600482015260156024820152742ab9b2903932b737bab731b290333ab731ba34b7b760591b6044820152606401610c42565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b03163314611dad5760405162461bcd60e51b8152600401610c4290612eb1565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f41c4b0dd16ccfd8e6812e80870e3042cdf16e8a38135050fffa9d51e6f51c62e905f90a250565b6001600160a01b0383165f9081526006602052604081205460ff1615611e565760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610c42565b6001600160a01b0383165f9081526006602052604090205460ff1615611ebe5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610c42565b60215460ff1615611edb57611ed4848484612403565b9050610c12565b6001600160a01b0384165f9081526007602052604090205460ff1680611f1857506001600160a01b0383165f9081526007602052604090205460ff165b80611f2c5750601b54600160a01b900460ff165b611f785760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f74206f70656e207965740000000000000000006044820152606401610c42565b611f806124a3565b15611f8d57611f8d612332565b602154610100900460ff168015611fbc57506001600160a01b0384165f9081526007602052604090205460ff16155b8015611fe057506001600160a01b0383165f9081526007602052604090205460ff16155b1561226d575f546001600160a01b0385811691161480159061200f57505f546001600160a01b03848116911614155b801561202357506001600160a01b03831615155b801561203a57506001600160a01b03831661dead14155b61207a5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610c42565b601b546001600160a01b0390811690851603612165576001600160a01b0383165f9081526008602052604090205460ff1661216057601c548211156120f55760405162461bcd60e51b8152602060048201526011602482015270109d5e48195e18d959591cc81b1a5b5a5d607a1b6044820152606401610c42565b601e546001600160a01b0384165f9081526003602052604090205461211b908490612edc565b11156121605760405162461bcd60e51b815260206004820152601460248201527315d85b1b195d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610c42565b61226d565b601b546001600160a01b03908116908416036121e1576001600160a01b0384165f9081526008602052604090205460ff1661216057601d548211156121605760405162461bcd60e51b815260206004820152601260248201527114d95b1b08195e18d959591cc81b1a5b5a5d60721b6044820152606401610c42565b6001600160a01b0383165f9081526008602052604090205460ff1661226d57601e546001600160a01b0384165f90815260036020526040902054612226908490612edc565b111561226d5760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c88195e18d959591cc81b1a5b5a5d60521b6044820152606401610c42565b6001600160a01b0384165f9081526003602052604081208054849290612294908490612e9e565b909155505f90506122a58585612509565b6122af57826122ba565b6122ba85848661254d565b6001600160a01b0385165f908152600360205260408120805492935083929091906122e6908490612edc565b92505081905550836001600160a01b0316856001600160a01b03165f805160206131118339815191528360405161231f91815260200190565b60405180910390a3506001949350505050565b6021805460ff191660011790556016546015546014546013545f93929161235891612edc565b6123629190612edc565b61236c9190612edc565b9050805f0361237b57506123f7565b5f612387826002612fdd565b305f908152600360205260409020546016546123a39190612fdd565b6123ad9190612ff4565b305f90815260036020526040812054919250906123cb908390612e9e565b9050476123d78261264b565b475f6123e38383612e9e565b90506123f08186886127f9565b5050505050505b6021805460ff19169055565b6001600160a01b0383165f9081526003602052604081208054839190839061242c908490612e9e565b90915550506001600160a01b0383165f9081526003602052604081208054849290612458908490612edc565b92505081905550826001600160a01b0316846001600160a01b03165f805160206131118339815191528460405161249191815260200190565b60405180910390a35060019392505050565b601b545f906001600160a01b031633148015906124c3575060215460ff16155b80156124d15750601f5460ff165b80156124e65750601b54600160a01b900460ff165b8015612504575060208054305f908152600390925260409091205410155b905090565b6001600160a01b0382165f9081526005602052604081205460ff16158015610c125750506001600160a01b03165f9081526005602052604090205460ff1615919050565b601b545f9081906001600160a01b038481169116146125a057601b546001600160a01b03868116911614612581575f6125ba565b6064600d54856125919190612fdd565b61259b9190612ff4565b6125ba565b6064601254856125b09190612fdd565b6125ba9190612ff4565b9050805f036125cc5783915050610c12565b305f90815260036020526040812080548392906125ea908490612edc565b909155505060405181815230906001600160a01b038716905f805160206131118339815191529060200160405180910390a3601b546126389082906001600160a01b038681169116146128d8565b6126428185612e9e565b95945050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061267e5761267e613045565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f99190613059565b8160018151811061270c5761270c613045565b6001600160a01b039283166020918202929092010152601a546127329130911684612a0b565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061276a9085905f90869030904290600401613074565b5f604051808303815f87803b158015612781575f80fd5b505af1925050508015612792575060015b6127f5577f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516119ca906020808252601d908201527f4661696c656420746f207377617020746f6b656e7320666f7220455448000000604082015260600190565b5050565b5f81601354856128099190612fdd565b6128139190612ff4565b90505f82601454866128259190612fdd565b61282f9190612ff4565b90505f83601554876128419190612fdd565b61284b9190612ff4565b90505f816128598486612edc565b6128639190612edc565b61286d9088612e9e565b601754909150612886906001600160a01b031685612b26565b60185461289c906001600160a01b031684612b26565b6019546128b2906001600160a01b031683612b26565b5f861180156128c057505f81115b156128cf576128cf8682612bc0565b50505050505050565b5f816128e657600d546128ea565b6012545b826128f7576009546128fb565b600e545b6129059085612fdd565b61290f9190612ff4565b90505f8261291f57600d54612923565b6012545b8361293057600a54612934565b6010545b61293e9086612fdd565b6129489190612ff4565b90505f8361295857600d5461295c565b6012545b8461296957600b5461296d565b6011545b6129779087612fdd565b6129819190612ff4565b90505f8161298f8486612edc565b6129999190612edc565b6129a39087612e9e565b90508360135f8282546129b69190612edc565b925050819055508260145f8282546129ce9190612edc565b925050819055508160155f8282546129e69190612edc565b925050819055508060165f8282546129fe9190612edc565b9091555050505050505050565b6001600160a01b038316612a6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c42565b6001600160a01b038216612ace5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c42565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611bb1565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612b6f576040519150601f19603f3d011682016040523d82523d5f602084013e612b74565b606091505b5050905080612bbb5760405162461bcd60e51b815260206004820152601360248201527211551208151c985b9cd9995c8819985a5b1959606a1b6044820152606401610c42565b505050565b601a54612bd89030906001600160a01b031684612a0b565b601a5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af193505050508015612c62575060408051601f3d908101601f19168201909252612c5f918101906130e5565b60015b612cc5577f64fb7f56dc3c30cbc51de6b01b5c5db1150d07b45c9c633b8b70667484b392c76040516119ca9060208082526017908201527f4661696c656420746f20616464206c6971756964697479000000000000000000604082015260600190565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611224575f80fd5b5f8060408385031215612d26575f80fd5b8235612d3181612d01565b946020939093013593505050565b5f805f60608486031215612d51575f80fd5b8335612d5c81612d01565b92506020840135612d6c81612d01565b929592945050506040919091013590565b5f805f8060808587031215612d90575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612dbc575f80fd5b8135610c1281612d01565b5f60208284031215612dd7575f80fd5b5035919050565b5f8060408385031215612def575f80fd5b50508035926020909101359150565b8015158114611224575f80fd5b5f8060408385031215612e1c575f80fd5b8235612e2781612d01565b91506020830135612e3781612dfe565b809150509250929050565b5f8060408385031215612e53575f80fd5b8235612e5e81612d01565b91506020830135612e3781612d01565b5f8060408385031215612e7f575f80fd5b8235612d3181612dfe565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b9c57610b9c612e8a565b6020808252601190820152702cb7ba9030b932903737ba1037bbb732b960791b604082015260600190565b80820180821115610b9c57610b9c612e8a565b600181815b80851115612f2957815f1904821115612f0f57612f0f612e8a565b80851615612f1c57918102915b93841c9390800290612ef4565b509250929050565b5f82612f3f57506001610b9c565b81612f4b57505f610b9c565b8160018114612f615760028114612f6b57612f87565b6001915050610b9c565b60ff841115612f7c57612f7c612e8a565b50506001821b610b9c565b5060208310610133831016604e8410600b8410161715612faa575081810a610b9c565b612fb48383612eef565b805f1904821115612fc757612fc7612e8a565b029392505050565b5f610c1260ff841683612f31565b8082028115828204841417610b9c57610b9c612e8a565b5f8261300e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613023575f80fd5b5051919050565b5f6020828403121561303a575f80fd5b8151610c1281612dfe565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613069575f80fd5b8151610c1281612d01565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156130c45784516001600160a01b03168352938301939183019160010161309f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156130f7575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bb25d09cf0d1e771abeb1b7e5a53d6ff9208f9ae62e3b4d84c2eb9a4814f5b1a64736f6c63430008190033

Deployed Bytecode

0x6080604052600436106103b6575f3560e01c80638a8c523c116101e9578063dd62ed3e11610108578063f11a24d31161009d578063f887ea401161006d578063f887ea4014610a9b578063fe575a8714610aba578063fe9fbb8014610ae8578063ffb54a9914610b16575f80fd5b8063f11a24d314610a33578063f2fde38b14610a48578063f491288114610a67578063f637434214610a86575f80fd5b8063e303e662116100d8578063e303e662146109c1578063e3a4d134146109e0578063e7ad9fcd146109ff578063e9483f2514610a1e575f80fd5b8063dd62ed3e1461092b578063dea687311461096f578063df20fd4914610984578063e12d729c146109a3575f80fd5b8063a9059cbb1161017e578063b7e15da91161014e578063b7e15da9146108c3578063b8360806146108e2578063bbcdf22c14610901578063d85ba06314610916575f80fd5b8063a9059cbb14610852578063ad5c464814610871578063b48bd37014610890578063b5d2703c146108a4575f80fd5b80639ebe6908116101b95780639ebe6908146107f55780639f93910a14610809578063a0cb25f51461081e578063a8aa1b3114610833575f80fd5b80638a8c523c146107855780638da5cb5b1461079957806395d89b41146107b55780639a82d756146107e0575f80fd5b806358fa63ca116102d55780636b53c8751161026a578063724436131161023a578063724436131461072757806379fd9355146107465780637fc34ab11461075b5780638340bfa614610770575f80fd5b80636b53c875146106a75780636ddd1713146106c657806370a08231146106df578063715018a614610713575f80fd5b8063616eb638116102a5578063616eb6381461064a578063658d4b7f1461065e57806366a88d961461067d5780636a486a8e14610692575f80fd5b806358fa63ca146105d55780635d23273f146105e85780635d33f90c146106075780635f069ed514610635575f80fd5b80632e6ed7ef1161034b57806342966c681161031b57806342966c68146105645780634324deae146105835780634f006763146105a257806350c3a065146105c1575f80fd5b80632e6ed7ef146104e557806330ee928614610506578063313ce5671461051b5780633f4218e014610536575f80fd5b80630ea2290e116103865780630ea2290e1461047e57806318160ddd1461049d5780631afc8058146104b157806323b872dd146104c6575f80fd5b806303fd2a45146103c15780630445b667146103f357806306fdde0314610416578063095ea7b31461044f575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fe575f80fd5b5061040860205481565b6040519081526020016103ea565b348015610421575f80fd5b5060408051808201909152600881526711195c1a58dd195960c21b60208201525b6040516103ea9190612ccc565b34801561045a575f80fd5b5061046e610469366004612d15565b610b36565b60405190151581526020016103ea565b348015610489575f80fd5b506018546103d6906001600160a01b031681565b3480156104a8575f80fd5b50600154610408565b3480156104bc575f80fd5b5061040860155481565b3480156104d1575f80fd5b5061046e6104e0366004612d3f565b610ba2565b3480156104f0575f80fd5b506105046104ff366004612d7d565b610c19565b005b348015610511575f80fd5b50610408600b5481565b348015610526575f80fd5b50604051601281526020016103ea565b348015610541575f80fd5b5061046e610550366004612dac565b60056020525f908152604090205460ff1681565b34801561056f575f80fd5b5061050461057e366004612dc7565b610d2f565b34801561058e575f80fd5b5061050461059d366004612dc7565b610e65565b3480156105ad575f80fd5b506105046105bc366004612dde565b610f85565b3480156105cc575f80fd5b5061050461115e565b3480156105e0575f80fd5b506103d65f81565b3480156105f3575f80fd5b50610504610602366004612e0b565b611227565b348015610612575f80fd5b5061046e610621366004612dac565b60086020525f908152604090205460ff1681565b348015610640575f80fd5b5061040860105481565b348015610655575f80fd5b506105046112af565b348015610669575f80fd5b50610504610678366004612e0b565b61137e565b348015610688575f80fd5b50610408601e5481565b34801561069d575f80fd5b5061040860125481565b3480156106b2575f80fd5b506105046106c1366004612dac565b6113fe565b3480156106d1575f80fd5b50601f5461046e9060ff1681565b3480156106ea575f80fd5b506104086106f9366004612dac565b6001600160a01b03165f9081526003602052604090205490565b34801561071e575f80fd5b50610504611470565b348015610732575f80fd5b506019546103d6906001600160a01b031681565b348015610751575f80fd5b50610408600a5481565b348015610766575f80fd5b50610408600e5481565b34801561077b575f80fd5b50610408601c5481565b348015610790575f80fd5b506105046114d4565b3480156107a4575f80fd5b505f546001600160a01b03166103d6565b3480156107c0575f80fd5b5060408051808201909152600381526211141560ea1b6020820152610442565b3480156107eb575f80fd5b5061040860145481565b348015610800575f80fd5b506105046115a0565b348015610814575f80fd5b5061040860095481565b348015610829575f80fd5b5061040860115481565b34801561083e575f80fd5b50601b546103d6906001600160a01b031681565b34801561085d575f80fd5b5061046e61086c366004612d15565b611607565b34801561087c575f80fd5b506002546103d6906001600160a01b031681565b34801561089b575f80fd5b50610504611613565b3480156108af575f80fd5b506105046108be366004612e0b565b6116d3565b3480156108ce575f80fd5b506105046108dd366004612dac565b611753565b3480156108ed575f80fd5b506105046108fc366004612e0b565b6117c5565b34801561090c575f80fd5b5061040860165481565b348015610921575f80fd5b50610408600d5481565b348015610936575f80fd5b50610408610945366004612e42565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b34801561097a575f80fd5b5061040860135481565b34801561098f575f80fd5b5061050461099e366004612e6e565b6118f8565b3480156109ae575f80fd5b5060215461046e90610100900460ff1681565b3480156109cc575f80fd5b506105046109db366004612dac565b6119d6565b3480156109eb575f80fd5b506017546103d6906001600160a01b031681565b348015610a0a575f80fd5b50610504610a19366004612d7d565b611bbe565b348015610a29575f80fd5b50610408601d5481565b348015610a3e575f80fd5b50610408600c5481565b348015610a53575f80fd5b50610504610a62366004612dac565b611cc3565b348015610a72575f80fd5b50610504610a81366004612dac565b611d84565b348015610a91575f80fd5b50610408600f5481565b348015610aa6575f80fd5b50601a546103d6906001600160a01b031681565b348015610ac5575f80fd5b5061046e610ad4366004612dac565b60066020525f908152604090205460ff1681565b348015610af3575f80fd5b5061046e610b02366004612dac565b60076020525f908152604090205460ff1681565b348015610b21575f80fd5b50601b5461046e90600160a01b900460ff1681565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b909086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1914610c04576001600160a01b0384165f90815260046020908152604080832033845290915281208054849290610bfe908490612e9e565b90915550505b610c0f848484611df6565b90505b9392505050565b5f546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610c4290612eb1565b60405180910390fd5b6009849055600c839055600a829055600b8190558082610c6b8587612edc565b610c759190612edc565b610c7f9190612edc565b600d819055600a1015610ce05760405162461bcd60e51b8152602060048201526024808201527f42757920666565732063616e206e6f742062652067726561746572207468616e6044820152632031302560e01b6064820152608401610c42565b6040805185815260208101859052908101839052606081018290527f892b2caa2d791bf7b8d9a49c4db7a4513ff1ae2e0e068ed217f9d5ab4c1a28f0906080015b60405180910390a150505050565b5f546001600160a01b03163314610d585760405162461bcd60e51b8152600401610c4290612eb1565b5f8111610da75760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610c42565b335f90815260036020526040902054811115610e055760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742062616c616e636520746f206275726e000000006044820152606401610c42565b8060015f828254610e169190612e9e565b9091555050335f9081526003602052604081208054839290610e39908490612e9e565b90915550506040518181525f9033905f805160206131118339815191529060200160405180910390a350565b5f546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610c4290612eb1565b610e9a6012600a612fcf565b60646001546001610eab9190612fdd565b610eb59190612ff4565b610ebf9190612ff4565b811015610f345760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f7765722060448201527f7468616e203125206f6620746f74616c20737570706c790000000000000000006064820152608401610c42565b610f406012600a612fcf565b610f4a9082612fdd565b601e8190556040519081527fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c9060200160405180910390a150565b5f546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610c4290612eb1565b5f610fbb6012600a612fcf565b6103e86001546001610fcd9190612fdd565b610fd79190612ff4565b610fe19190612ff4565b9050808310156110635760405162461bcd60e51b815260206004820152604160248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974427560448201527f79206c6f776572207468616e20302e3125206f6620746f74616c20737570706c6064820152607960f81b608482015260a401610c42565b808210156110e45760405162461bcd60e51b815260206004820152604260248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974536560448201527f6c6c206c6f776572207468616e20302e3125206f6620746f74616c20737570706064820152616c7960f01b608482015260a401610c42565b6110f06012600a612fcf565b6110fa9084612fdd565b601c556111096012600a612fcf565b6111139083612fdd565b601d819055601c546040517f8c783a77c5aa395c8a91cbc5151561b3e731af22c701db3f250e9f63726b488092611151928252602082015260400190565b60405180910390a1505050565b5f546001600160a01b031633146111875760405162461bcd60e51b8152600401610c4290612eb1565b305f90815260036020526040902054806111d75760405162461bcd60e51b815260206004820152601160248201527004e6f20746f6b656e7320746f207377617607c1b6044820152606401610c42565b60215460ff161561121c5760405162461bcd60e51b815260206004820152600f60248201526e0416c726561647920696e207377617608c1b6044820152606401610c42565b611224612332565b50565b5f546001600160a01b031633146112505760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260076020908152604091829020805460ff191685151590811790915591519182527fb1efe852be30e7167f7516f06975288bb90db091d44bb7a9af30947600cc88e691015b60405180910390a25050565b5f546001600160a01b031633146112d85760405162461bcd60e51b8152600401610c4290612eb1565b478061131b5760405162461bcd60e51b8152602060048201526012602482015271139bc8115512081a5b8818dbdb9d1c9858dd60721b6044820152606401610c42565b604051339082156108fc029083905f818181858888f19350505050158015611345573d5f803e3d5ffd5b5060405181815233907fb04a5c4bad0471e14274f37daa3837a36ec3eb247e07c385b164ceb3aca699ae9060200160405180910390a250565b5f546001600160a01b031633146113a75760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260056020908152604091829020805460ff191685151590811790915591519182527f7f6f5fb51391452770326385e3346a0f01613c59fb90ca223cf38a74796df38e91016112a3565b5f546001600160a01b031633146114275760405162461bcd60e51b8152600401610c4290612eb1565b601880546001600160a01b0319166001600160a01b0383169081179091556040517fbbb21d3193bc05d347de5f275b917079ea7032e862b75e419055583b1f26a97d905f90a250565b5f546001600160a01b031633146114995760405162461bcd60e51b8152600401610c4290612eb1565b5f80546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b5f546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610c4290612eb1565b601b54600160a01b900460ff16156115575760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610c42565b601b805460ff60a01b1916600160a01b179055604051600181527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b5f546001600160a01b031633146115c95760405162461bcd60e51b8152600401610c4290612eb1565b5f60138190556014819055601581905560168190556040517f88a2eaf8279b4700c41049eef111b3cf995af0f05743dc0ebacef57d8199b3e89190a1565b5f610c12338484611df6565b5f546001600160a01b0316331461163c5760405162461bcd60e51b8152600401610c4290612eb1565b602154610100900460ff1661169e5760405162461bcd60e51b815260206004820152602260248201527f5472616e73616374696f6e206c696d69747320616c72656164792072656d6f76604482015261195960f21b6064820152608401610c42565b6021805461ff00191690556040517f501b52b2e87d4f95f50c13f7b22c6a69c776eea1da388bc5d5bca2c92f0a0259905f90a1565b5f546001600160a01b031633146116fc5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382165f81815260086020908152604091829020805460ff191685151590811790915591519182527f5e2fbd7e4595cc665b7c4ac07e2f0fd6fd9c6150fbcb6239a698edf8ea5d035f91016112a3565b5f546001600160a01b0316331461177c5760405162461bcd60e51b8152600401610c4290612eb1565b601780546001600160a01b0319166001600160a01b0383169081179091556040517f2066f27514d1fa80d57c52f882f9514de9a57157a5742181e53d973dc3258f25905f90a250565b5f546001600160a01b031633146117ee5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b0382166118365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c42565b5f546001600160a01b03166001600160a01b0316826001600160a01b0316036118a15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c69737420746865206f776e65720000000000006044820152606401610c42565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac91016112a3565b5f546001600160a01b031633146119215760405162461bcd60e51b8152600401610c4290612eb1565b6109c481116119835760405162461bcd60e51b815260206004820152602860248201527f53776170207468726573686f6c64206d75737420626520677265617465722074604482015267068616e20323530360c41b6064820152608401610c42565b601f805460ff19168315159081179091556020828155604080519283529082018390527f30e0f7c488b6c70123097f13cf387e140b0e0b8c9d9e3473e502f35b035d377c91015b60405180910390a15050565b5f546001600160a01b031633146119ff5760405162461bcd60e51b8152600401610c4290612eb1565b306001600160a01b03821603611a575760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420636c656172206e617469766520746f6b656e730000000000006044820152606401610c42565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac19190613013565b90505f8111611b095760405162461bcd60e51b8152602060048201526014602482015273139bc81d1bdad95b881a5b8818dbdb9d1c9858dd60621b6044820152606401610c42565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611b53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b77919061302a565b5060405181815233906001600160a01b038516907f29f092f0132733eafea5bfaa3a548578cf46b1ed811bdd2d76ee4603aa888b6b906020015b60405180910390a3505050565b5f546001600160a01b03163314611be75760405162461bcd60e51b8152600401610c4290612eb1565b600e849055600f839055601082905560118190558082611c078587612edc565b611c119190612edc565b611c1b9190612edc565b6012819055600a1015611c7e5760405162461bcd60e51b815260206004820152602560248201527f53656c6c20666565732063616e206e6f742062652067726561746572207468616044820152646e2031302560d81b6064820152608401610c42565b6040805185815260208101859052908101839052606081018290527f439932620c72dddea29980c098bca1a482729646d1216b226d723c6d278a30d190608001610d21565b5f546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610c4290612eb1565b6001600160a01b038116611d3a5760405162461bcd60e51b81526020600482015260156024820152742ab9b2903932b737bab731b290333ab731ba34b7b760591b6044820152606401610c42565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b03163314611dad5760405162461bcd60e51b8152600401610c4290612eb1565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f41c4b0dd16ccfd8e6812e80870e3042cdf16e8a38135050fffa9d51e6f51c62e905f90a250565b6001600160a01b0383165f9081526006602052604081205460ff1615611e565760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610c42565b6001600160a01b0383165f9081526006602052604090205460ff1615611ebe5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610c42565b60215460ff1615611edb57611ed4848484612403565b9050610c12565b6001600160a01b0384165f9081526007602052604090205460ff1680611f1857506001600160a01b0383165f9081526007602052604090205460ff165b80611f2c5750601b54600160a01b900460ff165b611f785760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f74206f70656e207965740000000000000000006044820152606401610c42565b611f806124a3565b15611f8d57611f8d612332565b602154610100900460ff168015611fbc57506001600160a01b0384165f9081526007602052604090205460ff16155b8015611fe057506001600160a01b0383165f9081526007602052604090205460ff16155b1561226d575f546001600160a01b0385811691161480159061200f57505f546001600160a01b03848116911614155b801561202357506001600160a01b03831615155b801561203a57506001600160a01b03831661dead14155b61207a5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610c42565b601b546001600160a01b0390811690851603612165576001600160a01b0383165f9081526008602052604090205460ff1661216057601c548211156120f55760405162461bcd60e51b8152602060048201526011602482015270109d5e48195e18d959591cc81b1a5b5a5d607a1b6044820152606401610c42565b601e546001600160a01b0384165f9081526003602052604090205461211b908490612edc565b11156121605760405162461bcd60e51b815260206004820152601460248201527315d85b1b195d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610c42565b61226d565b601b546001600160a01b03908116908416036121e1576001600160a01b0384165f9081526008602052604090205460ff1661216057601d548211156121605760405162461bcd60e51b815260206004820152601260248201527114d95b1b08195e18d959591cc81b1a5b5a5d60721b6044820152606401610c42565b6001600160a01b0383165f9081526008602052604090205460ff1661226d57601e546001600160a01b0384165f90815260036020526040902054612226908490612edc565b111561226d5760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c88195e18d959591cc81b1a5b5a5d60521b6044820152606401610c42565b6001600160a01b0384165f9081526003602052604081208054849290612294908490612e9e565b909155505f90506122a58585612509565b6122af57826122ba565b6122ba85848661254d565b6001600160a01b0385165f908152600360205260408120805492935083929091906122e6908490612edc565b92505081905550836001600160a01b0316856001600160a01b03165f805160206131118339815191528360405161231f91815260200190565b60405180910390a3506001949350505050565b6021805460ff191660011790556016546015546014546013545f93929161235891612edc565b6123629190612edc565b61236c9190612edc565b9050805f0361237b57506123f7565b5f612387826002612fdd565b305f908152600360205260409020546016546123a39190612fdd565b6123ad9190612ff4565b305f90815260036020526040812054919250906123cb908390612e9e565b9050476123d78261264b565b475f6123e38383612e9e565b90506123f08186886127f9565b5050505050505b6021805460ff19169055565b6001600160a01b0383165f9081526003602052604081208054839190839061242c908490612e9e565b90915550506001600160a01b0383165f9081526003602052604081208054849290612458908490612edc565b92505081905550826001600160a01b0316846001600160a01b03165f805160206131118339815191528460405161249191815260200190565b60405180910390a35060019392505050565b601b545f906001600160a01b031633148015906124c3575060215460ff16155b80156124d15750601f5460ff165b80156124e65750601b54600160a01b900460ff165b8015612504575060208054305f908152600390925260409091205410155b905090565b6001600160a01b0382165f9081526005602052604081205460ff16158015610c125750506001600160a01b03165f9081526005602052604090205460ff1615919050565b601b545f9081906001600160a01b038481169116146125a057601b546001600160a01b03868116911614612581575f6125ba565b6064600d54856125919190612fdd565b61259b9190612ff4565b6125ba565b6064601254856125b09190612fdd565b6125ba9190612ff4565b9050805f036125cc5783915050610c12565b305f90815260036020526040812080548392906125ea908490612edc565b909155505060405181815230906001600160a01b038716905f805160206131118339815191529060200160405180910390a3601b546126389082906001600160a01b038681169116146128d8565b6126428185612e9e565b95945050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061267e5761267e613045565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f99190613059565b8160018151811061270c5761270c613045565b6001600160a01b039283166020918202929092010152601a546127329130911684612a0b565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061276a9085905f90869030904290600401613074565b5f604051808303815f87803b158015612781575f80fd5b505af1925050508015612792575060015b6127f5577f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516119ca906020808252601d908201527f4661696c656420746f207377617020746f6b656e7320666f7220455448000000604082015260600190565b5050565b5f81601354856128099190612fdd565b6128139190612ff4565b90505f82601454866128259190612fdd565b61282f9190612ff4565b90505f83601554876128419190612fdd565b61284b9190612ff4565b90505f816128598486612edc565b6128639190612edc565b61286d9088612e9e565b601754909150612886906001600160a01b031685612b26565b60185461289c906001600160a01b031684612b26565b6019546128b2906001600160a01b031683612b26565b5f861180156128c057505f81115b156128cf576128cf8682612bc0565b50505050505050565b5f816128e657600d546128ea565b6012545b826128f7576009546128fb565b600e545b6129059085612fdd565b61290f9190612ff4565b90505f8261291f57600d54612923565b6012545b8361293057600a54612934565b6010545b61293e9086612fdd565b6129489190612ff4565b90505f8361295857600d5461295c565b6012545b8461296957600b5461296d565b6011545b6129779087612fdd565b6129819190612ff4565b90505f8161298f8486612edc565b6129999190612edc565b6129a39087612e9e565b90508360135f8282546129b69190612edc565b925050819055508260145f8282546129ce9190612edc565b925050819055508160155f8282546129e69190612edc565b925050819055508060165f8282546129fe9190612edc565b9091555050505050505050565b6001600160a01b038316612a6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c42565b6001600160a01b038216612ace5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c42565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611bb1565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612b6f576040519150601f19603f3d011682016040523d82523d5f602084013e612b74565b606091505b5050905080612bbb5760405162461bcd60e51b815260206004820152601360248201527211551208151c985b9cd9995c8819985a5b1959606a1b6044820152606401610c42565b505050565b601a54612bd89030906001600160a01b031684612a0b565b601a5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af193505050508015612c62575060408051601f3d908101601f19168201909252612c5f918101906130e5565b60015b612cc5577f64fb7f56dc3c30cbc51de6b01b5c5db1150d07b45c9c633b8b70667484b392c76040516119ca9060208082526017908201527f4661696c656420746f20616464206c6971756964697479000000000000000000604082015260600190565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611224575f80fd5b5f8060408385031215612d26575f80fd5b8235612d3181612d01565b946020939093013593505050565b5f805f60608486031215612d51575f80fd5b8335612d5c81612d01565b92506020840135612d6c81612d01565b929592945050506040919091013590565b5f805f8060808587031215612d90575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612dbc575f80fd5b8135610c1281612d01565b5f60208284031215612dd7575f80fd5b5035919050565b5f8060408385031215612def575f80fd5b50508035926020909101359150565b8015158114611224575f80fd5b5f8060408385031215612e1c575f80fd5b8235612e2781612d01565b91506020830135612e3781612dfe565b809150509250929050565b5f8060408385031215612e53575f80fd5b8235612e5e81612d01565b91506020830135612e3781612d01565b5f8060408385031215612e7f575f80fd5b8235612d3181612dfe565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b9c57610b9c612e8a565b6020808252601190820152702cb7ba9030b932903737ba1037bbb732b960791b604082015260600190565b80820180821115610b9c57610b9c612e8a565b600181815b80851115612f2957815f1904821115612f0f57612f0f612e8a565b80851615612f1c57918102915b93841c9390800290612ef4565b509250929050565b5f82612f3f57506001610b9c565b81612f4b57505f610b9c565b8160018114612f615760028114612f6b57612f87565b6001915050610b9c565b60ff841115612f7c57612f7c612e8a565b50506001821b610b9c565b5060208310610133831016604e8410600b8410161715612faa575081810a610b9c565b612fb48383612eef565b805f1904821115612fc757612fc7612e8a565b029392505050565b5f610c1260ff841683612f31565b8082028115828204841417610b9c57610b9c612e8a565b5f8261300e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613023575f80fd5b5051919050565b5f6020828403121561303a575f80fd5b8151610c1281612dfe565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613069575f80fd5b8151610c1281612d01565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156130c45784516001600160a01b03168352938301939183019160010161309f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156130f7575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bb25d09cf0d1e771abeb1b7e5a53d6ff9208f9ae62e3b4d84c2eb9a4814f5b1a64736f6c63430008190033

Deployed Bytecode Sourcemap

8194:19645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8485:73;;;;;;;;;;;;8516:42;8485:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;8485:73:0;;;;;;;;10232:57;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;10232:57:0;222:177:1;13401:83:0;;;;;;;;;;-1:-1:-1;13471:5:0;;;;;;;;;;;;-1:-1:-1;;;13471:5:0;;;;13401:83;;;;;;;:::i;13960:216::-;;;;;;;;;;-1:-1:-1;13960:216:0;;;;;:::i;:::-;;:::i;:::-;;;1448:14:1;;1441:22;1423:41;;1411:2;1396:18;13960:216:0;1283:187:1;9881:33:0;;;;;;;;;;-1:-1:-1;9881:33:0;;;;-1:-1:-1;;;;;9881:33:0;;;13291:102;;;;;;;;;;-1:-1:-1;13373:12:0;;13291:102;;9734:34;;;;;;;;;;;;;;;;15097:308;;;;;;;;;;-1:-1:-1;15097:308:0;;;;;:::i;:::-;;:::i;17153:471::-;;;;;;;;;;-1:-1:-1;17153:471:0;;;;;:::i;:::-;;:::i;:::-;;9280:32;;;;;;;;;;;;;;;;13587:83;;;;;;;;;;-1:-1:-1;13587:83:0;;8368:2;2468:36:1;;2456:2;2441:18;13587:83:0;2326:184:1;8818:43:0;;;;;;;;;;-1:-1:-1;8818:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15458:337;;;;;;;;;;-1:-1:-1;15458:337:0;;;;;:::i;:::-;;:::i;18887:312::-;;;;;;;;;;-1:-1:-1;18887:312:0;;;;;:::i;:::-;;:::i;18209:634::-;;;;;;;;;;-1:-1:-1;18209:634:0;;;;;:::i;:::-;;:::i;21376:250::-;;;;;;;;;;;;;:::i;8565:73::-;;;;;;;;;;;;8596:42;8565:73;;19782:176;;;;;;;;;;-1:-1:-1;19782:176:0;;;;;:::i;:::-;;:::i;9107:69::-;;;;;;;;;;-1:-1:-1;9107:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9500:33;;;;;;;;;;;;;;;;16393:241;;;;;;;;;;;;;:::i;19966:176::-;;;;;;;;;;-1:-1:-1;19966:176:0;;;;;:::i;:::-;;:::i;10157:29::-;;;;;;;;;;;;;;;;9580:32;;;;;;;;;;;;;;;;20605:194;;;;;;;;;;-1:-1:-1;20605:194:0;;;;;:::i;:::-;;:::i;10195:30::-;;;;;;;;;;-1:-1:-1;10195:30:0;;;;;;;;13678:119;;;;;;;;;;-1:-1:-1;13678:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13771:18:0;13744:7;13771:18;;;:9;:18;;;;;;;13678:119;7806:148;;;;;;;;;;;;;:::i;9921:33::-;;;;;;;;;;-1:-1:-1;9921:33:0;;;;-1:-1:-1;;;;;9921:33:0;;;9241:32;;;;;;;;;;;;;;;;9418:33;;;;;;;;;;;;;;;;10068:37;;;;;;;;;;;;;;;;15833:176;;;;;;;;;;;;;:::i;7625:65::-;;;;;;;;;;-1:-1:-1;7663:7:0;7681:6;-1:-1:-1;;;;;7681:6:0;7625:65;;13492:87;;;;;;;;;;-1:-1:-1;13564:7:0;;;;;;;;;;;;-1:-1:-1;;;13564:7:0;;;;13492:87;;9693:34;;;;;;;;;;;;;;;;19241:209;;;;;;;;;;;;;:::i;9202:32::-;;;;;;;;;;;;;;;;9540:33;;;;;;;;;;;;;;;;10002:19;;;;;;;;;;-1:-1:-1;10002:19:0;;;;-1:-1:-1;;;;;10002:19:0;;;14933:156;;;;;;;;;;-1:-1:-1;14933:156:0;;;;;:::i;:::-;;:::i;8459:19::-;;;;;;;;;;-1:-1:-1;8459:19:0;;;;-1:-1:-1;;;;;8459:19:0;;;19510:245;;;;;;;;;;;;;:::i;20150:227::-;;;;;;;;;;-1:-1:-1;20150:227:0;;;;;:::i;:::-;;:::i;20403:194::-;;;;;;;;;;-1:-1:-1;20403:194:0;;;;;:::i;:::-;;:::i;16049:336::-;;;;;;;;;;-1:-1:-1;16049:336:0;;;;;:::i;:::-;;:::i;9775:36::-;;;;;;;;;;;;;;;;9360:31;;;;;;;;;;;;;;;;13805:147;;;;;;;;;;-1:-1:-1;13805:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;13916:19:0;;;13889:7;13916:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13805:147;9652:34;;;;;;;;;;;;;;;;21035:291;;;;;;;;;;-1:-1:-1;21035:291:0;;;;;:::i;:::-;;:::i;10341:44::-;;;;;;;;;;-1:-1:-1;10341:44:0;;;;;;;;;;;16702:419;;;;;;;;;;-1:-1:-1;16702:419:0;;;;;:::i;:::-;;:::i;9841:33::-;;;;;;;;;;-1:-1:-1;9841:33:0;;;;-1:-1:-1;;;;;9841:33:0;;;17657:480;;;;;;;;;;-1:-1:-1;17657:480:0;;;;;:::i;:::-;;:::i;10112:38::-;;;;;;;;;;;;;;;;9319:34;;;;;;;;;;;;;;;;7960:227;;;;;;;;;;-1:-1:-1;7960:227:0;;;;;:::i;:::-;;:::i;20807:194::-;;;;;;;;;;-1:-1:-1;20807:194:0;;;;;:::i;:::-;;:::i;9458:35::-;;;;;;;;;;;;;;;;9963:32;;;;;;;;;;-1:-1:-1;9963:32:0;;;;-1:-1:-1;;;;;9963:32:0;;;8896:45;;;;;;;;;;-1:-1:-1;8896:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8992:44;;;;;;;;;;-1:-1:-1;8992:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10030:31;;;;;;;;;;-1:-1:-1;10030:31:0;;;;-1:-1:-1;;;10030:31:0;;;;;;13960:216;14064:10;14035:4;14052:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14052:32:0;;;;;;;;;;:41;;;14109:37;14035:4;;14052:32;;14109:37;;;;14087:6;368:25:1;;356:2;341:18;;222:177;14109:37:0;;;;;;;;-1:-1:-1;14164:4:0;13960:216;;;;;:::o;15097:308::-;-1:-1:-1;;;;;15218:19:0;;15197:4;15218:19;;;:11;:19;;;;;;;;15238:10;15218:31;;;;;;;;-1:-1:-1;;15218:52:0;15214:126;;-1:-1:-1;;;;;15287:19:0;;;;;;:11;:19;;;;;;;;15307:10;15287:31;;;;;;;:41;;15322:6;;15287:19;:41;;15322:6;;15287:41;:::i;:::-;;;;-1:-1:-1;;15214:126:0;15357:40;15371:6;15379:9;15390:6;15357:13;:40::i;:::-;15350:47;;15097:308;;;;;;:::o;17153:471::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;;;;;;;;;17276:13:::1;:23:::0;;;17310:15:::1;:27:::0;;;17348:13:::1;:23:::0;;;17382:13:::1;:23:::0;;;17398:7;17364;17431:19:::1;17328:9:::0;17292:7;17431:19:::1;:::i;:::-;:29;;;;:::i;:::-;:39;;;;:::i;:::-;17416:12;:54:::0;;;17505:2:::1;-1:-1:-1::0;17489:18:0::1;17481:67;;;::::0;-1:-1:-1;;;17481:67:0;;5599:2:1;17481:67:0::1;::::0;::::1;5581:21:1::0;5638:2;5618:18;;;5611:30;5677:34;5657:18;;;5650:62;-1:-1:-1;;;5728:18:1;;;5721:34;5772:19;;17481:67:0::1;5397:400:1::0;17481:67:0::1;17564:52;::::0;;6033:25:1;;;6089:2;6074:18;;6067:34;;;6117:18;;;6110:34;;;6175:2;6160:18;;6153:34;;;17564:52:0::1;::::0;6020:3:1;6005:19;17564:52:0::1;;;;;;;;17153:471:::0;;;;:::o;15458:337::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;15535:1:::1;15526:6;:10;15518:55;;;::::0;-1:-1:-1;;;15518:55:0;;6400:2:1;15518:55:0::1;::::0;::::1;6382:21:1::0;;;6419:18;;;6412:30;6478:34;6458:18;;;6451:62;6530:18;;15518:55:0::1;6198:356:1::0;15518:55:0::1;15602:10;15592:21;::::0;;;:9:::1;:21;::::0;;;;;:31;-1:-1:-1;15592:31:0::1;15584:72;;;::::0;-1:-1:-1;;;15584:72:0;;6761:2:1;15584:72:0::1;::::0;::::1;6743:21:1::0;6800:2;6780:18;;;6773:30;6839;6819:18;;;6812:58;6887:18;;15584:72:0::1;6559:352:1::0;15584:72:0::1;15683:6;15667:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15710:10:0::1;15700:21;::::0;;;:9:::1;:21;::::0;;;;:31;;15725:6;;15700:21;:31:::1;::::0;15725:6;;15700:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;15747:40:0::1;::::0;368:25:1;;;15776:1:0::1;::::0;15756:10:::1;::::0;-1:-1:-1;;;;;;;;;;;15747:40:0;356:2:1;341:18;15747:40:0::1;;;;;;;15458:337:::0;:::o;18887:312::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;19011:13:::1;8368:2;19011;:13;:::i;:::-;19003:3;18984:12;;18999:1;18984:16;;;;:::i;:::-;:22;;;;:::i;:::-;18983:42;;;;:::i;:::-;18972:7;:53;;18964:121;;;::::0;-1:-1:-1;;;18964:121:0;;8890:2:1;18964:121:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;8968:34;8948:18;;;8941:62;9039:25;9019:18;;;9012:53;9082:19;;18964:121:0::1;8688:419:1::0;18964:121:0::1;19124:13;8368:2;19124;:13;:::i;:::-;19113:25;::::0;:7;:25:::1;:::i;:::-;19096:14;:42:::0;;;19154:37:::1;::::0;368:25:1;;;19154:37:0::1;::::0;356:2:1;341:18;19154:37:0::1;;;;;;;18887:312:::0;:::o;18209:634::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;18316:20:::1;18368:13;8368:2;18368;:13;:::i;:::-;18359:4;18340:12;;18355:1;18340:16;;;;:::i;:::-;:23;;;;:::i;:::-;18339:43;;;;:::i;:::-;18316:66;;18415:12;18401:10;:26;;18393:104;;;::::0;-1:-1:-1;;;18393:104:0;;9314:2:1;18393:104:0::1;::::0;::::1;9296:21:1::0;9353:2;9333:18;;;9326:30;9392:34;9372:18;;;9365:62;9463:34;9443:18;;;9436:62;-1:-1:-1;;;9514:19:1;;;9507:32;9556:19;;18393:104:0::1;9112:469:1::0;18393:104:0::1;18531:12;18516:11;:27;;18508:106;;;::::0;-1:-1:-1;;;18508:106:0;;9788:2:1;18508:106:0::1;::::0;::::1;9770:21:1::0;9827:2;9807:18;;;9800:30;9866:34;9846:18;;;9839:62;9937:34;9917:18;;;9910:62;-1:-1:-1;;;9988:19:1;;;9981:33;10031:19;;18508:106:0::1;9586:470:1::0;18508:106:0::1;18664:13;8368:2;18664;:13;:::i;:::-;18650:28;::::0;:10;:28:::1;:::i;:::-;18625:22;:53:::0;18730:13:::1;8368:2;18730;:13;:::i;:::-;18715:29;::::0;:11;:29:::1;:::i;:::-;18689:23;:55:::0;;;18787:22:::1;::::0;18760:75:::1;::::0;::::1;::::0;::::1;::::0;10235:25:1;;10291:2;10276:18;;10269:34;10223:2;10208:18;;10061:248;18760:75:0::1;;;;;;;;18305:538;18209:634:::0;;:::o;21376:250::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;21480:4:::1;21431:28;21462:24:::0;;;:9:::1;:24;::::0;;;;;21505;21497:54:::1;;;::::0;-1:-1:-1;;;21497:54:0;;10516:2:1;21497:54:0::1;::::0;::::1;10498:21:1::0;10555:2;10535:18;;;10528:30;-1:-1:-1;;;10574:18:1;;;10567:47;10631:18;;21497:54:0::1;10314:341:1::0;21497:54:0::1;21571:6;::::0;::::1;;21570:7;21562:35;;;::::0;-1:-1:-1;;;21562:35:0;;10862:2:1;21562:35:0::1;::::0;::::1;10844:21:1::0;10901:2;10881:18;;;10874:30;-1:-1:-1;;;10920:18:1;;;10913:45;10975:18;;21562:35:0::1;10660:339:1::0;21562:35:0::1;21608:10;:8;:10::i;:::-;21420:206;21376:250::o:0;19782:176::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19865:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;19865:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19909:41;;1423::1;;;19909::0::1;::::0;1396:18:1;19909:41:0::1;;;;;;;;19782:176:::0;;:::o;16393:241::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;16460:21:::1;16500:10:::0;16492:41:::1;;;::::0;-1:-1:-1;;;16492:41:0;;11206:2:1;16492:41:0::1;::::0;::::1;11188:21:1::0;11245:2;11225:18;;;11218:30;-1:-1:-1;;;11264:18:1;;;11257:48;11322:18;;16492:41:0::1;11004:342:1::0;16492:41:0::1;16544:36;::::0;16552:10:::1;::::0;16544:36;::::1;;;::::0;16573:6;;16544:36:::1;::::0;;;16573:6;16552:10;16544:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;16596:30:0::1;::::0;368:25:1;;;16607:10:0::1;::::0;16596:30:::1;::::0;356:2:1;341:18;16596:30:0::1;;;;;;;16432:202;16393:241::o:0;19966:176::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20049:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;20049:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20093:41;;1423::1;;;20093::0::1;::::0;1396:18:1;20093:41:0::1;1283:187:1::0;20605:194:0;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;20692:18:::1;:40:::0;;-1:-1:-1;;;;;;20692:40:0::1;-1:-1:-1::0;;;;;20692:40:0;::::1;::::0;;::::1;::::0;;;20748:43:::1;::::0;::::1;::::0;-1:-1:-1;;20748:43:0::1;20605:194:::0;:::o;7806:148::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;7888:1:::1;7871:19:::0;;-1:-1:-1;;;;;;7871:19:0::1;::::0;;7906:40:::1;::::0;7888:1;;7906:40:::1;::::0;7888:1;;7906:40:::1;7806:148::o:0;15833:176::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;15897:11:::1;::::0;-1:-1:-1;;;15897:11:0;::::1;;;15896:12;15888:48;;;::::0;-1:-1:-1;;;15888:48:0;;11553:2:1;15888:48:0::1;::::0;::::1;11535:21:1::0;11592:2;11572:18;;;11565:30;11631:25;11611:18;;;11604:53;11674:18;;15888:48:0::1;11351:347:1::0;15888:48:0::1;15947:11;:18:::0;;-1:-1:-1;;;;15947:18:0::1;-1:-1:-1::0;;;15947:18:0::1;::::0;;15981:20:::1;::::0;-1:-1:-1;1423:41:1;;15981:20:0::1;::::0;1411:2:1;1396:18;15981:20:0::1;;;;;;;15833:176::o:0;19241:209::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;19316:1:::1;19298:15;:19:::0;;;19328:15:::1;:19:::0;;;19358:15:::1;:19:::0;;;19388:17:::1;:21:::0;;;19425:17:::1;::::0;::::1;::::0;19316:1;19425:17:::1;19241:209::o:0;14933:156::-;15013:4;15037:44;15051:10;15063:9;15074:6;15037:13;:44::i;19510:245::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;19590:25:::1;::::0;::::1;::::0;::::1;;;19582:72;;;::::0;-1:-1:-1;;;19582:72:0;;11905:2:1;19582:72:0::1;::::0;::::1;11887:21:1::0;11944:2;11924:18;;;11917:30;11983:34;11963:18;;;11956:62;-1:-1:-1;;;12034:18:1;;;12027:32;12076:19;;19582:72:0::1;11703:398:1::0;19582:72:0::1;19665:25;:33:::0;;-1:-1:-1;;19665:33:0::1;::::0;;19714::::1;::::0;::::1;::::0;19693:5:::1;::::0;19714:33:::1;19510:245::o:0;20150:227::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20250:44:0;::::1;;::::0;;;:36:::1;:44;::::0;;;;;;;;:53;;-1:-1:-1;;20250:53:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20319:50;;1423:41:1;;;20319:50:0::1;::::0;1396:18:1;20319:50:0::1;1283:187:1::0;20403:194:0;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;20490:18:::1;:40:::0;;-1:-1:-1;;;;;;20490:40:0::1;-1:-1:-1::0;;;;;20490:40:0;::::1;::::0;;::::1;::::0;;;20546:43:::1;::::0;::::1;::::0;-1:-1:-1;;20546:43:0::1;20403:194:::0;:::o;16049:336::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16157:22:0;::::1;16149:50;;;::::0;-1:-1:-1;;;16149:50:0;;12308:2:1;16149:50:0::1;::::0;::::1;12290:21:1::0;12347:2;12327:18;;;12320:30;-1:-1:-1;;;12366:18:1;;;12359:45;12421:18;;16149:50:0::1;12106:339:1::0;16149:50:0::1;7663:7:::0;7681:6;-1:-1:-1;;;;;7681:6:0;-1:-1:-1;;;;;16218:19:0::1;:8;-1:-1:-1::0;;;;;16218:19:0::1;::::0;16210:58:::1;;;::::0;-1:-1:-1;;;16210:58:0;;12652:2:1;16210:58:0::1;::::0;::::1;12634:21:1::0;12691:2;12671:18;;;12664:30;12730:28;12710:18;;;12703:56;12776:18;;16210:58:0::1;12450:350:1::0;16210:58:0::1;-1:-1:-1::0;;;;;16279:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;;:40;;-1:-1:-1;;16279:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16335:42;;1423:41:1;;;16335:42:0::1;::::0;1396:18:1;16335:42:0::1;1283:187:1::0;21035:291:0;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;21144:4:::1;21134:7;:14;21126:67;;;::::0;-1:-1:-1;;;21126:67:0;;13007:2:1;21126:67:0::1;::::0;::::1;12989:21:1::0;13046:2;13026:18;;;13019:30;13085:34;13065:18;;;13058:62;-1:-1:-1;;;13136:18:1;;;13129:38;13184:19;;21126:67:0::1;12805:404:1::0;21126:67:0::1;21204:11;:22:::0;;-1:-1:-1;;21204:22:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21237:13:::1;:23:::0;;;21276:42:::1;::::0;;13382:41:1;;;13439:18;;;13432:34;;;21276:42:0::1;::::0;13355:18:1;21276:42:0::1;;;;;;;;21035:291:::0;;:::o;16702:419::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;16807:4:::1;-1:-1:-1::0;;;;;16783:29:0;::::1;::::0;16775:68:::1;;;::::0;-1:-1:-1;;;16775:68:0;;13679:2:1;16775:68:0::1;::::0;::::1;13661:21:1::0;13718:2;13698:18;;;13691:30;13757:28;13737:18;;;13730:56;13803:18;;16775:68:0::1;13477:350:1::0;16775:68:0::1;16918:30;::::0;-1:-1:-1;;;16918:30:0;;16942:4:::1;16918:30;::::0;::::1;160:51:1::0;16876:12:0;;16854::::1;::::0;-1:-1:-1;;;;;16918:15:0;::::1;::::0;::::1;::::0;133:18:1;;16918:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16900:48;;16977:1;16967:7;:11;16959:44;;;::::0;-1:-1:-1;;;16959:44:0;;14223:2:1;16959:44:0::1;::::0;::::1;14205:21:1::0;14262:2;14242:18;;;14235:30;-1:-1:-1;;;14281:18:1;;;14274:50;14341:18;;16959:44:0::1;14021:344:1::0;16959:44:0::1;17014:35;::::0;-1:-1:-1;;;17014:35:0;;17029:10:::1;17014:35;::::0;::::1;14544:51:1::0;14611:18;;;14604:34;;;-1:-1:-1;;;;;17014:14:0;::::1;::::0;::::1;::::0;14517:18:1;;17014:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17065:48:0::1;::::0;368:25:1;;;17093:10:0::1;::::0;-1:-1:-1;;;;;17065:48:0;::::1;::::0;::::1;::::0;356:2:1;341:18;17065:48:0::1;;;;;;;;16764:357;;16702:419:::0;:::o;17657:480::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;17781:14:::1;:24:::0;;;17816:16:::1;:28:::0;;;17855:14:::1;:24:::0;;;17890:14:::1;:24:::0;;;17907:7;17872;17941:19:::1;17835:9:::0;17798:7;17941:19:::1;:::i;:::-;:29;;;;:::i;:::-;:39;;;;:::i;:::-;17925:13;:55:::0;;;18016:2:::1;-1:-1:-1::0;17999:19:0::1;17991:69;;;::::0;-1:-1:-1;;;17991:69:0;;15101:2:1;17991:69:0::1;::::0;::::1;15083:21:1::0;15140:2;15120:18;;;15113:30;15179:34;15159:18;;;15152:62;-1:-1:-1;;;15230:18:1;;;15223:35;15275:19;;17991:69:0::1;14899:401:1::0;17991:69:0::1;18076:53;::::0;;6033:25:1;;;6089:2;6074:18;;6067:34;;;6117:18;;;6110:34;;;6175:2;6160:18;;6153:34;;;18076:53:0::1;::::0;6020:3:1;6005:19;18076:53:0::1;5802:391:1::0;7960:227:0;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8049:22:0;::::1;8041:56;;;::::0;-1:-1:-1;;;8041:56:0;;15507:2:1;8041:56:0::1;::::0;::::1;15489:21:1::0;15546:2;15526:18;;;15519:30;-1:-1:-1;;;15565:18:1;;;15558:51;15626:18;;8041:56:0::1;15305:345:1::0;8041:56:0::1;8108:6;:17:::0;;-1:-1:-1;;;;;;8108:17:0::1;-1:-1:-1::0;;;;;8108:17:0;::::1;::::0;;::::1;::::0;;8141:38:::1;::::0;8108:17;;;;8141:38:::1;::::0;8108:6;8141:38:::1;7960:227:::0;:::o;20807:194::-;7736:6;;-1:-1:-1;;;;;7736:6:0;163:10;7736:22;7728:52;;;;-1:-1:-1;;;7728:52:0;;;;;;;:::i;:::-;20894:18:::1;:40:::0;;-1:-1:-1;;;;;;20894:40:0::1;-1:-1:-1::0;;;;;20894:40:0;::::1;::::0;;::::1;::::0;;;20950:43:::1;::::0;::::1;::::0;-1:-1:-1;;20950:43:0::1;20807:194:::0;:::o;21673:1840::-;-1:-1:-1;;;;;21791:21:0;;21765:4;21791:21;;;:13;:21;;;;;;;;21790:22;21782:56;;;;-1:-1:-1;;;21782:56:0;;15857:2:1;21782:56:0;;;15839:21:1;15896:2;15876:18;;;15869:30;-1:-1:-1;;;15915:18:1;;;15908:51;15976:18;;21782:56:0;15655:345:1;21782:56:0;-1:-1:-1;;;;;21858:24:0;;;;;;:13;:24;;;;;;;;21857:25;21849:62;;;;-1:-1:-1;;;21849:62:0;;16207:2:1;21849:62:0;;;16189:21:1;16246:2;16226:18;;;16219:30;16285:26;16265:18;;;16258:54;16329:18;;21849:62:0;16005:348:1;21849:62:0;21926:6;;;;21922:63;;;21942:41;21957:6;21965:9;21976:6;21942:14;:41::i;:::-;21935:48;;;;21922:63;-1:-1:-1;;;;;22003:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;22027:23:0;;;;;;:12;:23;;;;;;;;22003:47;:62;;;-1:-1:-1;22054:11:0;;-1:-1:-1;;;22054:11:0;;;;22003:62;21995:98;;;;-1:-1:-1;;;21995:98:0;;16560:2:1;21995:98:0;;;16542:21:1;16599:2;16579:18;;;16572:30;16638:25;16618:18;;;16611:53;16681:18;;21995:98:0;16358:347:1;21995:98:0;22108:16;:14;:16::i;:::-;22104:35;;;22127:10;:8;:10::i;:::-;22155:25;;;;;;;:50;;;;-1:-1:-1;;;;;;22185:20:0;;;;;;:12;:20;;;;;;;;22184:21;22155:50;:78;;;;-1:-1:-1;;;;;;22210:23:0;;;;;;:12;:23;;;;;;;;22209:24;22155:78;22151:1071;;;7663:7;7681:6;-1:-1:-1;;;;;22258:17:0;;;7681:6;;22258:17;;;;:41;;-1:-1:-1;7663:7:0;7681:6;-1:-1:-1;;;;;22279:20:0;;;7681:6;;22279:20;;22258:41;:68;;;;-1:-1:-1;;;;;;22303:23:0;;;;22258:68;:98;;;;-1:-1:-1;;;;;;22330:26:0;;8516:42;22330:26;;22258:98;22250:128;;;;-1:-1:-1;;;22250:128:0;;16912:2:1;22250:128:0;;;16894:21:1;16951:2;16931:18;;;16924:30;-1:-1:-1;;;16970:18:1;;;16963:47;17027:18;;22250:128:0;16710:341:1;22250:128:0;22407:4;;-1:-1:-1;;;;;22407:4:0;;;22397:14;;;;22393:818;;-1:-1:-1;;;;;22456:47:0;;;;;;:36;:47;;;;;;;;22451:262;;22546:22;;22536:6;:32;;22528:62;;;;-1:-1:-1;;;22528:62:0;;17258:2:1;22528:62:0;;;17240:21:1;17297:2;17277:18;;;17270:30;-1:-1:-1;;;17316:18:1;;;17309:47;17373:18;;22528:62:0;17056:341:1;22528:62:0;22654:14;;-1:-1:-1;;;;;22621:20:0;;;;;;:9;:20;;;;;;:29;;22644:6;;22621:29;:::i;:::-;:47;;22613:80;;;;-1:-1:-1;;;22613:80:0;;17604:2:1;22613:80:0;;;17586:21:1;17643:2;17623:18;;;17616:30;-1:-1:-1;;;17662:18:1;;;17655:50;17722:18;;22613:80:0;17402:344:1;22613:80:0;22393:818;;;22751:4;;-1:-1:-1;;;;;22751:4:0;;;22738:17;;;;22734:477;;-1:-1:-1;;;;;22801:44:0;;;;;;:36;:44;;;;;;;;22796:158;;22888:23;;22878:6;:33;;22870:64;;;;-1:-1:-1;;;22870:64:0;;17953:2:1;22870:64:0;;;17935:21:1;17992:2;17972:18;;;17965:30;-1:-1:-1;;;18011:18:1;;;18004:48;18069:18;;22870:64:0;17751:342:1;22734:477:0;-1:-1:-1;;;;;23022:47:0;;;;;;:36;:47;;;;;;;;23017:179;;23135:14;;-1:-1:-1;;;;;23102:20:0;;;;;;:9;:20;;;;;;:29;;23125:6;;23102:29;:::i;:::-;:47;;23094:82;;;;-1:-1:-1;;;23094:82:0;;18300:2:1;23094:82:0;;;18282:21:1;18339:2;18319:18;;;18312:30;-1:-1:-1;;;18358:18:1;;;18351:52;18420:18;;23094:82:0;18098:346:1;23094:82:0;-1:-1:-1;;;;;23234:17:0;;;;;;:9;:17;;;;;:27;;23255:6;;23234:17;:27;;23255:6;;23234:27;:::i;:::-;;;;-1:-1:-1;23272:22:0;;-1:-1:-1;23297:32:0;23311:6;23319:9;23297:13;:32::i;:::-;:78;;23369:6;23297:78;;;23332:34;23340:6;23348;23356:9;23332:7;:34::i;:::-;-1:-1:-1;;;;;23386:20:0;;;;;;:9;:20;;;;;:38;;23272:103;;-1:-1:-1;23272:103:0;;23386:20;;;:38;;23272:103;;23386:38;:::i;:::-;;;;;;;;23457:9;-1:-1:-1;;;;;23440:43:0;23449:6;-1:-1:-1;;;;;23440:43:0;-1:-1:-1;;;;;;;;;;;23468:14:0;23440:43;;;;368:25:1;;356:2;341:18;;222:177;23440:43:0;;;;;;;;-1:-1:-1;23501:4:0;;21673:1840;-1:-1:-1;;;;21673:1840:0:o;25132:748::-;10443:6;:13;;-1:-1:-1;;10443:13:0;10452:4;10443:13;;;25263:17:::1;::::0;25245:15:::1;::::0;25227::::1;::::0;25209::::1;::::0;10443:6;;25263:17;25245:15;25209:33:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:71;;;;:::i;:::-;25181:99;;25295:17;25316:1;25295:22:::0;25291:35:::1;;25319:7;;;25291:35;25380:23;25456:21;25460:17:::0;25456:1:::1;:21;:::i;:::-;25445:4;25427:24;::::0;;;:9:::1;:24;::::0;;;;;25407:17:::1;::::0;:44:::1;::::0;25427:24;25407:44:::1;:::i;:::-;25406:72;;;;:::i;:::-;25536:4;25489:26;25518:24:::0;;;:9:::1;:24;::::0;;;;;25380:98;;-1:-1:-1;25489:26:0;25518:42:::1;::::0;25380:98;;25518:42:::1;:::i;:::-;25489:71:::0;-1:-1:-1;25599:21:0::1;25631:36;25489:71:::0;25631:16:::1;:36::i;:::-;25702:21;25678;25761:33;25777:17:::0;25702:21;25761:33:::1;:::i;:::-;25734:60;;25805:67;25819:16;25837:15;25854:17;25805:13;:67::i;:::-;25170:710;;;;;;10467:1;10479:6:::0;:14;;-1:-1:-1;;10479:14:0;;;25132:748::o;14666:259::-;-1:-1:-1;;;;;14776:17:0;;14759:4;14776:17;;;:9;:17;;;;;:27;;14797:6;;14776:17;14759:4;;14776:27;;14797:6;;14776:27;:::i;:::-;;;;-1:-1:-1;;;;;;;14814:20:0;;;;;;:9;:20;;;;;:30;;14838:6;;14814:20;:30;;14838:6;;14814:30;:::i;:::-;;;;;;;;14877:9;-1:-1:-1;;;;;14860:35:0;14869:6;-1:-1:-1;;;;;14860:35:0;-1:-1:-1;;;;;;;;;;;14888:6:0;14860:35;;;;368:25:1;;356:2;341:18;;222:177;14860:35:0;;;;;;;;-1:-1:-1;14913:4:0;14666:259;;;;;:::o;24887:237::-;24974:4;;24936;;-1:-1:-1;;;;;24974:4:0;24960:10;:18;;;;:42;;-1:-1:-1;24996:6:0;;;;24995:7;24960:42;:70;;;;-1:-1:-1;25019:11:0;;;;24960:70;:98;;;;-1:-1:-1;25047:11:0;;-1:-1:-1;;;25047:11:0;;;;24960:98;:156;;;;-1:-1:-1;25103:13:0;;;25093:4;25075:24;;;;:9;:24;;;;;;;;:41;;24960:156;24953:163;;24887:237;:::o;23521:160::-;-1:-1:-1;;;;;23627:19:0;;23602:4;23627:19;;;:11;:19;;;;;;;;23626:20;:47;;;;-1:-1:-1;;;;;;;23651:22:0;;;;;:11;:22;;;;;;;;23650:23;;23521:160;-1:-1:-1;23521:160:0:o;23689:462::-;23815:4;;23768:7;;;;-1:-1:-1;;;;;23809:10:0;;;23815:4;;23809:10;23808:100;;23867:4;;-1:-1:-1;;;;;23857:14:0;;;23867:4;;23857:14;:50;;23906:1;23808:100;;23857:50;23900:3;23884:12;;23875:6;:21;;;;:::i;:::-;23874:29;;;;:::i;:::-;23808:100;;;23850:3;23833:13;;23824:6;:22;;;;:::i;:::-;23823:30;;;;:::i;:::-;23788:120;;23923:9;23936:1;23923:14;23919:33;;23946:6;23939:13;;;;;23919:33;23981:4;23963:24;;;;:9;:24;;;;;:37;;23991:9;;23963:24;:37;;23991:9;;23963:37;:::i;:::-;;;;-1:-1:-1;;24016:42:0;;368:25:1;;;24041:4:0;;-1:-1:-1;;;;;24016:42:0;;;-1:-1:-1;;;;;;;;;;;24016:42:0;356:2:1;341:18;24016:42:0;;;;;;;24102:4;;24071:36;;24085:9;;-1:-1:-1;;;;;24096:10:0;;;24102:4;;24096:10;24071:13;:36::i;:::-;24125:18;24134:9;24125:6;:18;:::i;:::-;24118:25;23689:462;-1:-1:-1;;;;;23689:462:0:o;26831:536::-;26921:16;;;26935:1;26921:16;;;;;;;;26897:21;;26921:16;;;;;;;;;;-1:-1:-1;26921:16:0;26897:40;;26966:4;26948;26953:1;26948:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26948:23:0;;;:7;;;;;;;;;;:23;;;;26992:6;;:13;;;-1:-1:-1;;;26992:13:0;;;;:6;;;;;:11;;:13;;;;;26948:7;;26992:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26982:4;26987:1;26982:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26982:23:0;;;:7;;;;;;;;;:23;27048:6;;27016:53;;27033:4;;27048:6;27057:11;27016:8;:53::i;:::-;27084:6;;:215;;-1:-1:-1;;;27084:215:0;;-1:-1:-1;;;;;27084:6:0;;;;:57;;:215;;27156:11;;27084:6;;27226:4;;27253;;27273:15;;27084:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27080:280;;27315:43;;;;;20156:2:1;20138:21;;;20195:2;20175:18;;;20168:30;20234:31;20229:2;20214:18;;20207:59;20298:2;20283:18;;19954:353;27080:280:0;26886:481;26831:536;:::o;25888:751::-;26002:21;26057:17;26039:15;;26026:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;26002:72;;26085:21;26140:17;26122:15;;26109:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;26085:72;;26168:21;26223:17;26205:15;;26192:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;26168:72;-1:-1:-1;26251:23:0;26168:72;26291:29;26307:13;26291;:29;:::i;:::-;:45;;;;:::i;:::-;26277:60;;:10;:60;:::i;:::-;26358:18;;26251:86;;-1:-1:-1;26350:42:0;;-1:-1:-1;;;;;26358:18:0;26378:13;26350:7;:42::i;:::-;26411:18;;26403:42;;-1:-1:-1;;;;;26411:18:0;26431:13;26403:7;:42::i;:::-;26464:18;;26456:42;;-1:-1:-1;;;;;26464:18:0;26484:13;26456:7;:42::i;:::-;26533:1;26515:15;:19;:42;;;;;26556:1;26538:15;:19;26515:42;26511:121;;;26574:46;26587:15;26604;26574:12;:46::i;:::-;25991:648;;;;25888:751;;;:::o;24159:720::-;24234:19;24315:6;:37;;24340:12;;24315:37;;;24324:13;;24315:37;24270:6;:39;;24296:13;;24270:39;;;24279:14;;24270:39;24257:53;;:9;:53;:::i;:::-;24256:97;;;;:::i;:::-;24234:119;;24364:19;24445:6;:37;;24470:12;;24445:37;;;24454:13;;24445:37;24400:6;:39;;24426:13;;24400:39;;;24409:14;;24400:39;24387:53;;:9;:53;:::i;:::-;24386:97;;;;:::i;:::-;24364:119;;24494:19;24575:6;:37;;24600:12;;24575:37;;;24584:13;;24575:37;24530:6;:39;;24556:13;;24530:39;;;24539:14;;24530:39;24517:53;;:9;:53;:::i;:::-;24516:97;;;;:::i;:::-;24494:119;-1:-1:-1;24624:21:0;24494:119;24661:25;24675:11;24661;:25;:::i;:::-;:39;;;;:::i;:::-;24648:53;;:9;:53;:::i;:::-;24624:77;;24733:11;24714:15;;:30;;;;;;;:::i;:::-;;;;;;;;24774:11;24755:15;;:30;;;;;;;:::i;:::-;;;;;;;;24815:11;24796:15;;:30;;;;;;;:::i;:::-;;;;;;;;24858:13;24837:17;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;24159:720:0:o;14184:344::-;-1:-1:-1;;;;;14286:19:0;;14278:68;;;;-1:-1:-1;;;14278:68:0;;20514:2:1;14278:68:0;;;20496:21:1;20553:2;20533:18;;;20526:30;20592:34;20572:18;;;20565:62;-1:-1:-1;;;20643:18:1;;;20636:34;20687:19;;14278:68:0;20312:400:1;14278:68:0;-1:-1:-1;;;;;14365:21:0;;14357:68;;;;-1:-1:-1;;;14357:68:0;;20919:2:1;14357:68:0;;;20901:21:1;20958:2;20938:18;;;20931:30;20997:34;20977:18;;;20970:62;-1:-1:-1;;;21048:18:1;;;21041:32;21090:19;;14357:68:0;20717:398:1;14357:68:0;-1:-1:-1;;;;;14436:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14488:32;;368:25:1;;;14488:32:0;;341:18:1;14488:32:0;222:177:1;26647:176:0;26712:12;26738:2;-1:-1:-1;;;;;26730:16:0;26754:6;26730:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26711:54;;;26784:7;26776:39;;;;-1:-1:-1;;;26776:39:0;;21532:2:1;26776:39:0;;;21514:21:1;21571:2;21551:18;;;21544:30;-1:-1:-1;;;21590:18:1;;;21583:49;21649:18;;26776:39:0;21330:343:1;26776:39:0;26700:123;26647:176;;:::o;27375:461::-;27488:6;;27456:53;;27473:4;;-1:-1:-1;;;;;27488:6:0;27497:11;27456:8;:53::i;:::-;27524:6;;:240;;-1:-1:-1;;;27524:240:0;;27587:4;27524:240;;;22019:34:1;22069:18;;;22062:34;;;27524:6:0;22112:18:1;;;22105:34;;;22155:18;;;22148:34;8516:42:0;22198:19:1;;;22191:44;27738:15:0;22251:19:1;;;22244:35;-1:-1:-1;;;;;27524:6:0;;;;:22;;27554:9;;21953:19:1;;27524:240:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27524:240:0;;;;;;;;-1:-1:-1;;27524:240:0;;;;;;;;;;;;:::i;:::-;;;27520:309;;27780:47;;;;;22803:2:1;22785:21;;;22842:2;22822:18;;;22815:30;22881:25;22876:2;22861:18;;22854:53;22939:2;22924:18;;22601:347;27520:309:0;;;;27375:461;;:::o;404:418:1:-;553:2;542:9;535:21;516:4;585:6;579:13;628:6;623:2;612:9;608:18;601:34;687:6;682:2;674:6;670:15;665:2;654:9;650:18;644:50;743:1;738:2;729:6;718:9;714:22;710:31;703:42;813:2;806;802:7;797:2;789:6;785:15;781:29;770:9;766:45;762:54;754:62;;;404:418;;;;:::o;827:131::-;-1:-1:-1;;;;;902:31:1;;892:42;;882:70;;948:1;945;938:12;963:315;1031:6;1039;1092:2;1080:9;1071:7;1067:23;1063:32;1060:52;;;1108:1;1105;1098:12;1060:52;1147:9;1134:23;1166:31;1191:5;1166:31;:::i;:::-;1216:5;1268:2;1253:18;;;;1240:32;;-1:-1:-1;;;963:315:1:o;1475:456::-;1552:6;1560;1568;1621:2;1609:9;1600:7;1596:23;1592:32;1589:52;;;1637:1;1634;1627:12;1589:52;1676:9;1663:23;1695:31;1720:5;1695:31;:::i;:::-;1745:5;-1:-1:-1;1802:2:1;1787:18;;1774:32;1815:33;1774:32;1815:33;:::i;:::-;1475:456;;1867:7;;-1:-1:-1;;;1921:2:1;1906:18;;;;1893:32;;1475:456::o;1936:385::-;2022:6;2030;2038;2046;2099:3;2087:9;2078:7;2074:23;2070:33;2067:53;;;2116:1;2113;2106:12;2067:53;-1:-1:-1;;2139:23:1;;;2209:2;2194:18;;2181:32;;-1:-1:-1;2260:2:1;2245:18;;2232:32;;2311:2;2296:18;2283:32;;-1:-1:-1;1936:385:1;-1:-1:-1;1936:385:1:o;2515:247::-;2574:6;2627:2;2615:9;2606:7;2602:23;2598:32;2595:52;;;2643:1;2640;2633:12;2595:52;2682:9;2669:23;2701:31;2726:5;2701:31;:::i;2767:180::-;2826:6;2879:2;2867:9;2858:7;2854:23;2850:32;2847:52;;;2895:1;2892;2885:12;2847:52;-1:-1:-1;2918:23:1;;2767:180;-1:-1:-1;2767:180:1:o;2952:248::-;3020:6;3028;3081:2;3069:9;3060:7;3056:23;3052:32;3049:52;;;3097:1;3094;3087:12;3049:52;-1:-1:-1;;3120:23:1;;;3190:2;3175:18;;;3162:32;;-1:-1:-1;2952:248:1:o;3205:118::-;3291:5;3284:13;3277:21;3270:5;3267:32;3257:60;;3313:1;3310;3303:12;3328:382;3393:6;3401;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3509:9;3496:23;3528:31;3553:5;3528:31;:::i;:::-;3578:5;-1:-1:-1;3635:2:1;3620:18;;3607:32;3648:30;3607:32;3648:30;:::i;:::-;3697:7;3687:17;;;3328:382;;;;;:::o;3715:388::-;3783:6;3791;3844:2;3832:9;3823:7;3819:23;3815:32;3812:52;;;3860:1;3857;3850:12;3812:52;3899:9;3886:23;3918:31;3943:5;3918:31;:::i;:::-;3968:5;-1:-1:-1;4025:2:1;4010:18;;3997:32;4038:33;3997:32;4038:33;:::i;4108:309::-;4173:6;4181;4234:2;4222:9;4213:7;4209:23;4205:32;4202:52;;;4250:1;4247;4240:12;4202:52;4289:9;4276:23;4308:28;4330:5;4308:28;:::i;4656:127::-;4717:10;4712:3;4708:20;4705:1;4698:31;4748:4;4745:1;4738:15;4772:4;4769:1;4762:15;4788:128;4855:9;;;4876:11;;;4873:37;;;4890:18;;:::i;4921:341::-;5123:2;5105:21;;;5162:2;5142:18;;;5135:30;-1:-1:-1;;;5196:2:1;5181:18;;5174:47;5253:2;5238:18;;4921:341::o;5267:125::-;5332:9;;;5353:10;;;5350:36;;;5366:18;;:::i;6916:416::-;7005:1;7042:5;7005:1;7056:270;7077:7;7067:8;7064:21;7056:270;;;7136:4;7132:1;7128:6;7124:17;7118:4;7115:27;7112:53;;;7145:18;;:::i;:::-;7195:7;7185:8;7181:22;7178:55;;;7215:16;;;;7178:55;7294:22;;;;7254:15;;;;7056:270;;;7060:3;6916:416;;;;;:::o;7337:806::-;7386:5;7416:8;7406:80;;-1:-1:-1;7457:1:1;7471:5;;7406:80;7505:4;7495:76;;-1:-1:-1;7542:1:1;7556:5;;7495:76;7587:4;7605:1;7600:59;;;;7673:1;7668:130;;;;7580:218;;7600:59;7630:1;7621:10;;7644:5;;;7668:130;7705:3;7695:8;7692:17;7689:43;;;7712:18;;:::i;:::-;-1:-1:-1;;7768:1:1;7754:16;;7783:5;;7580:218;;7882:2;7872:8;7869:16;7863:3;7857:4;7854:13;7850:36;7844:2;7834:8;7831:16;7826:2;7820:4;7817:12;7813:35;7810:77;7807:159;;;-1:-1:-1;7919:19:1;;;7951:5;;7807:159;7998:34;8023:8;8017:4;7998:34;:::i;:::-;8068:6;8064:1;8060:6;8056:19;8047:7;8044:32;8041:58;;;8079:18;;:::i;:::-;8117:20;;7337:806;-1:-1:-1;;;7337:806:1:o;8148:140::-;8206:5;8235:47;8276:4;8266:8;8262:19;8256:4;8235:47;:::i;8293:168::-;8366:9;;;8397;;8414:15;;;8408:22;;8394:37;8384:71;;8435:18;;:::i;8466:217::-;8506:1;8532;8522:132;;8576:10;8571:3;8567:20;8564:1;8557:31;8611:4;8608:1;8601:15;8639:4;8636:1;8629:15;8522:132;-1:-1:-1;8668:9:1;;8466:217::o;13832:184::-;13902:6;13955:2;13943:9;13934:7;13930:23;13926:32;13923:52;;;13971:1;13968;13961:12;13923:52;-1:-1:-1;13994:16:1;;13832:184;-1:-1:-1;13832:184:1:o;14649:245::-;14716:6;14769:2;14757:9;14748:7;14744:23;14740:32;14737:52;;;14785:1;14782;14775:12;14737:52;14817:9;14811:16;14836:28;14858:5;14836:28;:::i;18581:127::-;18642:10;18637:3;18633:20;18630:1;18623:31;18673:4;18670:1;18663:15;18697:4;18694:1;18687:15;18713:251;18783:6;18836:2;18824:9;18815:7;18811:23;18807:32;18804:52;;;18852:1;18849;18842:12;18804:52;18884:9;18878:16;18903:31;18928:5;18903:31;:::i;18969:980::-;19231:4;19279:3;19268:9;19264:19;19310:6;19299:9;19292:25;19336:2;19374:6;19369:2;19358:9;19354:18;19347:34;19417:3;19412:2;19401:9;19397:18;19390:31;19441:6;19476;19470:13;19507:6;19499;19492:22;19545:3;19534:9;19530:19;19523:26;;19584:2;19576:6;19572:15;19558:29;;19605:1;19615:195;19629:6;19626:1;19623:13;19615:195;;;19694:13;;-1:-1:-1;;;;;19690:39:1;19678:52;;19785:15;;;;19750:12;;;;19726:1;19644:9;19615:195;;;-1:-1:-1;;;;;;;19866:32:1;;;;19861:2;19846:18;;19839:60;-1:-1:-1;;;19930:3:1;19915:19;19908:35;19827:3;18969:980;-1:-1:-1;;;18969:980:1:o;22290:306::-;22378:6;22386;22394;22447:2;22435:9;22426:7;22422:23;22418:32;22415:52;;;22463:1;22460;22453:12;22415:52;22492:9;22486:16;22476:26;;22542:2;22531:9;22527:18;22521:25;22511:35;;22586:2;22575:9;22571:18;22565:25;22555:35;;22290:306;;;;;:::o

Swarm Source

ipfs://bb25d09cf0d1e771abeb1b7e5a53d6ff9208f9ae62e3b4d84c2eb9a4814f5b1a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Depicted is an innovative RWA hybrid e-commerce platform that aims to revolutionize the online marketplace by combining mobile 3D scanning technology, artificial intelligence, and blockchain-based asset tokenization.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.