ETH Price: $3,464.04 (-1.22%)
Gas: 4 Gwei

Contract

0x35073CA7bAC0c2eDf58fb34A2CBC39Ea2fbB7056
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve202081782024-07-01 0:46:2323 days ago1719794783IN
0x35073CA7...a2fbB7056
0 ETH0.00010852.34217593
Transfer198988292024-05-18 19:10:5966 days ago1716059459IN
0x35073CA7...a2fbB7056
0 ETH0.000262283.09717992
Transfer197360232024-04-26 0:40:4789 days ago1714092047IN
0x35073CA7...a2fbB7056
0 ETH0.001046815.21268284
Approve191756122024-02-07 10:05:59168 days ago1707300359IN
0x35073CA7...a2fbB7056
0 ETH0.001255226.96985014
Approve191377952024-02-02 2:38:11173 days ago1706841491IN
0x35073CA7...a2fbB7056
0 ETH0.0004753519.59680338
Approve190824672024-01-25 8:34:23181 days ago1706171663IN
0x35073CA7...a2fbB7056
0 ETH0.0003626514.92113483
Approve190694812024-01-23 12:50:35182 days ago1706014235IN
0x35073CA7...a2fbB7056
0 ETH0.0004518818.59209906
Approve190694802024-01-23 12:50:23182 days ago1706014223IN
0x35073CA7...a2fbB7056
0 ETH0.0004511318.59817124
Approve189975222024-01-13 10:58:23193 days ago1705143503IN
0x35073CA7...a2fbB7056
0 ETH0.0003481914.31881127
Approve189927382024-01-12 18:55:11193 days ago1705085711IN
0x35073CA7...a2fbB7056
0 ETH0.0005390420.52964963
Approve189576192024-01-07 20:37:23198 days ago1704659843IN
0x35073CA7...a2fbB7056
0 ETH0.0014163630.43262652
Approve188749892023-12-27 5:42:47210 days ago1703655767IN
0x35073CA7...a2fbB7056
0 ETH0.0009360938.51435519
Transfer188568382023-12-24 16:33:11212 days ago1703435591IN
0x35073CA7...a2fbB7056
0 ETH0.0017524619.58675991
Transfer186836802023-11-30 9:58:23237 days ago1701338303IN
0x35073CA7...a2fbB7056
0 ETH0.0012875227.61863648
Approve186223652023-11-21 19:56:59245 days ago1700596619IN
0x35073CA7...a2fbB7056
0 ETH0.0027060658.41470018
Approve186171852023-11-21 2:32:35246 days ago1700533955IN
0x35073CA7...a2fbB7056
0 ETH0.0015684233.65653854
Approve185987412023-11-18 12:31:35249 days ago1700310695IN
0x35073CA7...a2fbB7056
0 ETH0.0004999820.61185931
Approve185966722023-11-18 5:31:35249 days ago1700285495IN
0x35073CA7...a2fbB7056
0 ETH0.0004634619.10663221
Approve184265582023-10-25 10:08:23273 days ago1698228503IN
0x35073CA7...a2fbB7056
0 ETH0.0005844812.62043042
Approve183951382023-10-21 0:33:23277 days ago1697848403IN
0x35073CA7...a2fbB7056
0 ETH0.000201758.30110087
Approve182954292023-10-07 1:48:11291 days ago1696643291IN
0x35073CA7...a2fbB7056
0 ETH0.000240175.15389548
Transfer182449902023-09-30 0:37:35298 days ago1696034255IN
0x35073CA7...a2fbB7056
0 ETH0.000378936.2074233
Transfer182448922023-09-30 0:17:35298 days ago1696033055IN
0x35073CA7...a2fbB7056
0 ETH0.000454886.28643116
Transfer182448472023-09-30 0:08:35298 days ago1696032515IN
0x35073CA7...a2fbB7056
0 ETH0.000483776.68563068
Transfer182448282023-09-30 0:04:47298 days ago1696032287IN
0x35073CA7...a2fbB7056
0 ETH0.000548347.57805314
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
197360232024-04-26 0:40:4789 days ago1714092047
0x35073CA7...a2fbB7056
0.0000001 ETH
197360232024-04-26 0:40:4789 days ago1714092047
0x35073CA7...a2fbB7056
0.0000001 ETH
178490992023-08-05 13:34:59353 days ago1691242499
0x35073CA7...a2fbB7056
0.06022488 ETH
178490992023-08-05 13:34:59353 days ago1691242499
0x35073CA7...a2fbB7056
0.06022488 ETH
177219152023-07-18 18:33:23371 days ago1689705203
0x35073CA7...a2fbB7056
0.06160017 ETH
177219152023-07-18 18:33:23371 days ago1689705203
0x35073CA7...a2fbB7056
0.06160017 ETH
176320672023-07-06 3:14:35384 days ago1688613275
0x35073CA7...a2fbB7056
0.06417102 ETH
176320672023-07-06 3:14:35384 days ago1688613275
0x35073CA7...a2fbB7056
0.06417102 ETH
174962282023-06-17 1:22:47403 days ago1686964967
0x35073CA7...a2fbB7056
0.06624657 ETH
174962282023-06-17 1:22:47403 days ago1686964967
0x35073CA7...a2fbB7056
0.06624657 ETH
174891722023-06-16 1:35:35404 days ago1686879335
0x35073CA7...a2fbB7056
0.06877687 ETH
174891722023-06-16 1:35:35404 days ago1686879335
0x35073CA7...a2fbB7056
0.06877687 ETH
174099992023-06-04 21:48:11415 days ago1685915291
0x35073CA7...a2fbB7056
0.07113292 ETH
174099992023-06-04 21:48:11415 days ago1685915291
0x35073CA7...a2fbB7056
0.07113292 ETH
173530622023-05-27 21:28:23423 days ago1685222903
0x35073CA7...a2fbB7056
0.07395133 ETH
173530622023-05-27 21:28:23423 days ago1685222903
0x35073CA7...a2fbB7056
0.07395133 ETH
173464932023-05-26 23:20:23424 days ago1685143223
0x35073CA7...a2fbB7056
0.07524896 ETH
173464932023-05-26 23:20:23424 days ago1685143223
0x35073CA7...a2fbB7056
0.07524896 ETH
173464892023-05-26 23:19:35424 days ago1685143175
0x35073CA7...a2fbB7056
0.07826132 ETH
173464892023-05-26 23:19:35424 days ago1685143175
0x35073CA7...a2fbB7056
0.07826132 ETH
173464772023-05-26 23:17:11424 days ago1685143031
0x35073CA7...a2fbB7056
0.08449992 ETH
173464772023-05-26 23:17:11424 days ago1685143031
0x35073CA7...a2fbB7056
0.08449992 ETH
173464732023-05-26 23:16:23424 days ago1685142983
0x35073CA7...a2fbB7056
0.08809125 ETH
173464732023-05-26 23:16:23424 days ago1685142983
0x35073CA7...a2fbB7056
0.08809125 ETH
173464672023-05-26 23:15:11424 days ago1685142911
0x35073CA7...a2fbB7056
0.09191661 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TorWallet

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-01
*/

// SPDX-License-Identifier: UNLICENSED

/*

TELEGRAM: 
https://t.me/torwalletapp

WEBSITE: 
https://torwallet.app/

*/


pragma solidity 0.8.18;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface BEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    address internal potentialOwner;
    mapping (address => bool) internal authorizations;

    event Authorize_Wallet(address Wallet, bool Status);

    event OwnershipRenounced(address indexed previousOwner);

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


    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) external onlyOwner {
        authorizations[adr] = true;
        emit Authorize_Wallet(adr,true);
    }

    function unauthorize(address adr) external onlyOwner {
        require(adr != owner, "OWNER cant be unauthorized");
        authorizations[adr] = false;
        emit Authorize_Wallet(adr,false);
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface InterfaceLP {
    function sync() external;
}

contract TorWallet is BEP20, Auth {
    using SafeMath for uint256;

    address immutable WBNB;
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Tor Wallet";
    string constant _symbol = "TOR";
    uint8 constant _decimals = 18;

    uint256 public _totalSupply = 1 * 10**7 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply / 100; // 1%
    uint256 public _maxWalletToken = _totalSupply / 50; // 2%

    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) _allowances;

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

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 0;
    uint256 public buybackFee = 0;
    uint256 public burnFee = 0;
    uint256 public totalFee = marketingFee + liquidityFee + buybackFee + burnFee;
    uint256 public constant feeDenominator = 1000;

    uint256 sellMultiplier = 100;
    uint256 buyMultiplier = 100;
    uint256 transferMultiplier = 25;

    address public marketingFeeReceiver;
    address public buybackFeeReceiver;

    IDEXRouter public router;
    address public immutable pair;

    InterfaceLP public pairContract;
    uint256 public lastSync;

    bool public tradingOpen = false;
    bool public burnEnabled = false;
    uint256 public launchedAt;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        //router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); testnet
        WBNB = router.WETH();

        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        pairContract = InterfaceLP(pair);
        lastSync = block.timestamp;

        _allowances[address(this)][address(router)] = type(uint256).max;

        marketingFeeReceiver = msg.sender;
        buybackFeeReceiver = msg.sender;

        isFeeExempt[msg.sender] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[DEAD] = true;

        balanceOf[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }   function getOwner() external view override returns (address) { return owner; }
    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 approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base10000(uint256 maxWallPercent_base10000) external onlyOwner {
        require(maxWallPercent_base10000 >= 10,"Cannot set max wallet less than 0.1%");
        _maxWalletToken = (_totalSupply * maxWallPercent_base10000 ) / 10000;
        emit config_MaxWallet(_maxWalletToken);
    }
    function setMaxTxPercent_base10000(uint256 maxTXPercentage_base10000) external onlyOwner {
        require(maxTXPercentage_base10000 >= 10,"Cannot set max transaction less than 0.1%");
        _maxTxAmount = (_totalSupply * maxTXPercentage_base10000 ) / 10000;
        emit config_MaxTransaction(_maxTxAmount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if (!authorizations[sender] && !isWalletLimitExempt[sender] && !isWalletLimitExempt[recipient] && recipient != pair) {
            require((balanceOf[recipient] + amount) <= _maxWalletToken,"max wallet limit reached");
        }
    
        // Checks max transaction limit
        require((amount <= _maxTxAmount) || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "Max TX Limit Exceeded");

        if(shouldSwapBack()){ swapBack(); }

        balanceOf[sender] = balanceOf[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (isFeeExempt[sender] || isFeeExempt[recipient]) ? amount : takeFee(sender, amount, recipient);

        balanceOf[recipient] = balanceOf[recipient].add(amountReceived);


        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        balanceOf[sender] = balanceOf[sender].sub(amount, "Insufficient Balance");
        balanceOf[recipient] = balanceOf[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        if(amount == 0 || totalFee == 0){
            return amount;
        }

        uint256 multiplier = transferMultiplier;

        if(recipient == pair) {
            multiplier = sellMultiplier;
        } else if(sender == pair) {
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 burnTokens = feeAmount.mul(burnFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(burnTokens);

        if(contractTokens > 0){
            balanceOf[address(this)] = balanceOf[address(this)].add(contractTokens);
            emit Transfer(sender, address(this), contractTokens);
        }
        
        if(burnTokens > 0){
            _totalSupply = _totalSupply.sub(burnTokens);
            emit Transfer(sender, ZERO, burnTokens);  
        }

        return amount.sub(feeAmount);
    }

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

    function clearStuckToken(address tokenAddress, uint256 tokens) external authorized returns (bool success) {
        require(tokenAddress != address(this),"Cannot withdraw native token");
        if(tokenAddress == pair){
            require(block.timestamp > launchedAt + 500 days,"Locked for 1 year");
        }

        if(tokens == 0){
            tokens = BEP20(tokenAddress).balanceOf(address(this));
        }

        emit clearToken(tokenAddress, tokens);

        return BEP20(tokenAddress).transfer(msg.sender, tokens);
    }

    // switch Trading
    function tradingEnable() external onlyOwner {
        require(!tradingOpen,"Trading already open");
        tradingOpen = true;
        launchedAt = block.timestamp;
        emit config_TradingStatus(tradingOpen);
    }

    function disableBurns() external onlyOwner {
        burnEnabled = false;
    }

    function enableBurns() external onlyOwner {
        burnEnabled = true;
    }

    function swapBack() internal swapping {

        uint256 totalETHFee = totalFee - burnFee;

        uint256 amountToLiquify = (swapThreshold * liquidityFee)/(totalETHFee * 2);
        uint256 amountToSwap = swapThreshold - amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;

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

        uint256 amountBNB = address(this).balance;

         totalETHFee = totalETHFee - (liquidityFee / 2);
        
        uint256 amountBNBLiquidity = (amountBNB * liquidityFee) / (totalETHFee * 2);
        uint256 amountBNBMarketing = (amountBNB * marketingFee) / totalETHFee;
        uint256 amountBNBbuyback = (amountBNB * buybackFee) / totalETHFee;

        payable(marketingFeeReceiver).transfer(amountBNBMarketing);
        payable(buybackFeeReceiver).transfer(amountBNBbuyback);

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                address(this),
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }

    function manage_FeeExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isFeeExempt[addresses[i]] = status;
            emit Wallet_feeExempt(addresses[i], status);
        }
    }

    function manage_TxLimitExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isTxLimitExempt[addresses[i]] = status;
            emit Wallet_txExempt(addresses[i], status);
        }
    }

    function manage_WalletLimitExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isWalletLimitExempt[addresses[i]] = status;
            emit Wallet_holdingExempt(addresses[i], status);
        }
    }

    function update_fees() internal {
        require(totalFee.mul(buyMultiplier).div(100) <= 150, "Buy tax cannot be more than 15%");
        require(totalFee.mul(sellMultiplier).div(100) <= 150, "Sell tax cannot be more than 15%");
        require(totalFee.mul(sellMultiplier + buyMultiplier).div(100) <= 200, "Buy+Sell tax cannot be more than 20%");
        require(totalFee.mul(transferMultiplier).div(100) <= 100, "Transfer Tax cannot be more than 10%");

        emit UpdateFee( uint8(totalFee.mul(buyMultiplier).div(100)),
            uint8(totalFee.mul(sellMultiplier).div(100)),
            uint8(totalFee.mul(transferMultiplier).div(100))
            );
    }

    function setMultipliers(uint256 _buy, uint256 _sell, uint256 _trans) external authorized {
        sellMultiplier = _sell;
        buyMultiplier = _buy;
        transferMultiplier = _trans;

        update_fees();
    }

    function setFees_base1000(uint256 _liquidityFee,  uint256 _marketingFee, uint256 _buybackFee, uint256 _burnFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        buybackFee = _buybackFee;
        burnFee = _burnFee;
        totalFee = _liquidityFee + _marketingFee + _buybackFee + _burnFee;
        
        update_fees();
    }

    function setFeeReceivers(address _marketingFeeReceiver, address _buybackFeeReceiver) external onlyOwner {
        require(_marketingFeeReceiver != address(0),"Marketing fee address cannot be zero address");
        require(_buybackFeeReceiver != address(0),"buyback fee address cannot be zero address");

        marketingFeeReceiver = _marketingFeeReceiver;
        buybackFeeReceiver = _buybackFeeReceiver;

        emit Set_Wallets(marketingFeeReceiver, buybackFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        require(_amount >= 1 * 10**_decimals, "Amount is less than one token");
        require(_amount < (_totalSupply/10), "Amount too high");

        swapEnabled = _enabled;
        swapThreshold = _amount;

        emit config_SwapSettings(swapThreshold, swapEnabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return (_totalSupply - balanceOf[DEAD] - balanceOf[ZERO]);
    }
/*
    function LPBurn(uint256 percent_base10000) public authorized returns (bool){
        require(percent_base10000 <= 1000, "May not nuke more than 10% of tokens in LP");
        require(block.timestamp > lastSync + 5 minutes, "Too soon");
        require(burnEnabled,"Burns are disabled");

        uint256 lp_tokens = this.balanceOf(pair);
        uint256 lp_burn = lp_tokens.mul(percent_base10000).div(10_000);

        if (lp_burn > 0){
            _basicTransfer(pair,DEAD,lp_burn);
            pairContract.sync();
            return true;
        }

        return false;
    }   
*/

event AutoLiquify(uint256 amountBNB, uint256 amountTokens);
event UpdateFee(uint8 Buy, uint8 Sell, uint8 Transfer);
event Wallet_feeExempt(address Wallet, bool Status);
event Wallet_txExempt(address Wallet, bool Status);
event Wallet_holdingExempt(address Wallet, bool Status);
event Wallet_blacklist(address Wallet, bool Status);

event BalanceClear(uint256 amount);
event clearToken(address TokenAddressCleared, uint256 Amount);

event Set_Wallets(address MarketingWallet, address buybackWallet);

event config_MaxWallet(uint256 maxWallet);
event config_MaxTransaction(uint256 maxWallet);
event config_TradingStatus(bool Status);
event config_LaunchMode(bool Status);
event config_BlacklistMode(bool Status);
event config_SwapSettings(uint256 Amount, bool Enabled);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Authorize_Wallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BalanceClear","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":"address","name":"MarketingWallet","type":"address"},{"indexed":false,"internalType":"address","name":"buybackWallet","type":"address"}],"name":"Set_Wallets","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"Buy","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Sell","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Transfer","type":"uint8"}],"name":"UpdateFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_blacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_feeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_holdingExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_txExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"TokenAddressCleared","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"clearToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_BlacklistMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_LaunchMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"config_MaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"config_MaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Enabled","type":"bool"}],"name":"config_SwapSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_TradingStatus","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearStuckToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableBurns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBurns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSync","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_FeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_TxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_WalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract InterfaceLP","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_buybackFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setFees_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base10000","type":"uint256"}],"name":"setMaxTxPercent_base10000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base10000","type":"uint256"}],"name":"setMaxWalletPercent_base10000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setMultipliers","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":[],"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":"totalFee","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":"tradingEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tradingOpen","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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052620000126012600a620004f4565b6200002190629896806200050c565b600355606460035462000035919062000526565b600455603260035462000049919062000526565b6005556000600b819055600c819055600d819055600e819055806200006f818062000549565b6200007b919062000549565b62000087919062000549565b600f556064601081905560115560196012556018805461ffff19169055601a805460ff19166001179055600354620000c3906103e89062000526565b601b55348015620000d357600080fd5b5060008054336001600160a01b031991821681178355825260026020908152604092839020805460ff1916600117905560158054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c464892600480830193928290030181865afa15801562000159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017f91906200055f565b6001600160a01b039081166080526015546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015620001d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f691906200055f565b6080516040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e91906200055f565b6001600160a01b0390811660a0819052601680546001600160a01b0319908116909217905542601755306000818152600760209081526040808320601554909616835294815284822060001990556013805433908616811790915560148054909516811790945583825260088152848220805460ff1990811660019081179092556009835286842080548216831790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548216831790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054821683179055600a8352868420805482168317905593835285832080548516821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80549094161790925560035483825260068352848220819055935193845291927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36200058a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004365781600019048211156200041a576200041a620003df565b808516156200042857918102915b93841c9390800290620003fa565b509250929050565b6000826200044f57506001620004ee565b816200045e57506000620004ee565b81600181146200047757600281146200048257620004a2565b6001915050620004ee565b60ff841115620004965762000496620003df565b50506001821b620004ee565b5060208310610133831016604e8410600b8410161715620004c7575081810a620004ee565b620004d38383620003f5565b8060001904821115620004ea57620004ea620003df565b0290505b92915050565b60006200050560ff8416836200043e565b9392505050565b8082028115828204841417620004ee57620004ee620003df565b6000826200054457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620004ee57620004ee620003df565b6000602082840312156200057257600080fd5b81516001600160a01b03811681146200050557600080fd5b60805160a051612de9620005d3600039600081816107ee0152818161120a01528181611b2e0152818161216d0152818161252f0152612563015260006122820152612de96000f3fe6080604052600436106103375760003560e01c806377b54bad116101ab578063bf56b371116100f7578063f12418a811610095578063fbde83051161006f578063fbde8305146109bc578063fce589d8146109d1578063fe9fbb80146109e7578063ffb54a9914610a0757600080fd5b8063f12418a81461095c578063f2fde38b1461097c578063f887ea401461099c57600080fd5b8063df20fd49116100d1578063df20fd49146108dc578063e96fada2146108fc578063efa5e3471461091c578063f0b37c041461093c57600080fd5b8063bf56b37114610850578063c867d60b14610866578063dd62ed3e1461089657600080fd5b806395d89b4111610164578063a6874ac51161013e578063a6874ac5146107c7578063a8aa1b31146107dc578063a9059cbb14610810578063b6a5d7de1461083057600080fd5b806395d89b411461076557806398118cb414610791578063a4b45c00146107a757600080fd5b806377b54bad146106ab57806378109e54146106cb5780637d1db4a5146106e157806384b1d1ef146106f7578063893d20e8146107175780638b42507f1461073557600080fd5b8063313ce567116102855780635dc96d16116102235780636ce46bc3116101fd5780636ce46bc31461062f5780636ddd17131461064f57806370a0823114610669578063715018a61461069657600080fd5b80635dc96d16146105e45780636917516b146106035780636b67c4df1461061957600080fd5b80633f4218e01161025f5780633f4218e01461053c5780634be9d8691461056c5780634d709adf1461058c578063571ac8b0146105c457600080fd5b8063313ce567146104f45780633b2d081c146105105780633eaaf86b1461052657600080fd5b80631693e8d4116102f25780631df4ccfc116102cc5780631df4ccfc1461047a57806323b872dd146104905780632b112e49146104b05780632f54bf6e146104c557600080fd5b80631693e8d41461043a578063180b0d7e1461044f57806318160ddd1461046557600080fd5b806210868314610343578062bff44614610365578063012aa912146103855780630445b667146103a557806306fdde03146103ce578063095ea7b31461040a57600080fd5b3661033e57005b600080fd5b34801561034f57600080fd5b5061036361035e366004612864565b610a21565b005b34801561037157600080fd5b50610363610380366004612864565b610b4f565b34801561039157600080fd5b506103636103a03660046128ea565b610c6e565b3480156103b157600080fd5b506103bb601b5481565b6040519081526020015b60405180910390f35b3480156103da57600080fd5b5060408051808201909152600a815269151bdc8815d85b1b195d60b21b60208201525b6040516103c59190612903565b34801561041657600080fd5b5061042a61042536600461296d565b610d4c565b60405190151581526020016103c5565b34801561044657600080fd5b50610363610db9565b34801561045b57600080fd5b506103bb6103e881565b34801561047157600080fd5b506003546103bb565b34801561048657600080fd5b506103bb600f5481565b34801561049c57600080fd5b5061042a6104ab366004612997565b610e77565b3480156104bc57600080fd5b506103bb610f39565b3480156104d157600080fd5b5061042a6104e03660046129d3565b6000546001600160a01b0391821691161490565b34801561050057600080fd5b50604051601281526020016103c5565b34801561051c57600080fd5b506103bb600d5481565b34801561053257600080fd5b506103bb60035481565b34801561054857600080fd5b5061042a6105573660046129d3565b60086020526000908152604090205460ff1681565b34801561057857600080fd5b50610363610587366004612864565b610fa9565b34801561059857600080fd5b506016546105ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103c5565b3480156105d057600080fd5b5061042a6105df3660046129d3565b6110c8565b3480156105f057600080fd5b5060185461042a90610100900460ff1681565b34801561060f57600080fd5b506103bb60175481565b34801561062557600080fd5b506103bb600c5481565b34801561063b57600080fd5b5061036361064a3660046129ee565b6110d6565b34801561065b57600080fd5b50601a5461042a9060ff1681565b34801561067557600080fd5b506103bb6106843660046129d3565b60066020526000908152604090205481565b3480156106a257600080fd5b50610363611117565b3480156106b757600080fd5b5061042a6106c636600461296d565b611189565b3480156106d757600080fd5b506103bb60055481565b3480156106ed57600080fd5b506103bb60045481565b34801561070357600080fd5b506014546105ac906001600160a01b031681565b34801561072357600080fd5b506000546001600160a01b03166105ac565b34801561074157600080fd5b5061042a6107503660046129d3565b60096020526000908152604090205460ff1681565b34801561077157600080fd5b506040805180820190915260038152622a27a960e91b60208201526103fd565b34801561079d57600080fd5b506103bb600b5481565b3480156107b357600080fd5b506103636107c2366004612a1a565b6113ba565b3480156107d357600080fd5b50610363611527565b3480156107e857600080fd5b506105ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561081c57600080fd5b5061042a61082b36600461296d565b611562565b34801561083c57600080fd5b5061036361084b3660046129d3565b61156f565b34801561085c57600080fd5b506103bb60195481565b34801561087257600080fd5b5061042a6108813660046129d3565b600a6020526000908152604090205460ff1681565b3480156108a257600080fd5b506103bb6108b1366004612a1a565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108e857600080fd5b506103636108f7366004612a4d565b6115f4565b34801561090857600080fd5b506013546105ac906001600160a01b031681565b34801561092857600080fd5b50610363610937366004612a6b565b611724565b34801561094857600080fd5b506103636109573660046129d3565b61178d565b34801561096857600080fd5b506103636109773660046128ea565b61186c565b34801561098857600080fd5b506103636109973660046129d3565b611949565b3480156109a857600080fd5b506015546105ac906001600160a01b031681565b3480156109c857600080fd5b5061036361197f565b3480156109dd57600080fd5b506103bb600e5481565b3480156109f357600080fd5b5061042a610a023660046129d3565b6119b6565b348015610a1357600080fd5b5060185461042a9060ff1681565b610a2a336119b6565b610a4f5760405162461bcd60e51b8152600401610a4690612a9d565b60405180910390fd5b6101f58210610a705760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b495781600a6000868685818110610a9257610a92612b07565b9050602002016020810190610aa791906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f566c2270277919680152b0734389ae919d95ff7e9024c03fc3c7c209ec8412c7848483818110610b0257610b02612b07565b9050602002016020810190610b1791906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a1610b4281612b33565b9050610a73565b50505050565b610b58336119b6565b610b745760405162461bcd60e51b8152600401610a4690612a9d565b6101f58210610b955760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b49578160086000868685818110610bb757610bb7612b07565b9050602002016020810190610bcc91906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f9fbd25f95d342f2efc070b56d2fadd2341d264ef8c915dc268609b2ca1bb25de848483818110610c2757610c27612b07565b9050602002016020810190610c3c91906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a1610c6781612b33565b9050610b98565b6000546001600160a01b03163314610c985760405162461bcd60e51b8152600401610a4690612b4c565b600a811015610cf55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d61782077616c6c6574206c657373207468616e20604482015263302e312560e01b6064820152608401610a46565b61271081600354610d069190612b6c565b610d109190612b83565b60058190556040519081527fa69fa556bf940aa0c695b9c8e1b229fdb1476830e2025e44da1028e0c1458d4a906020015b60405180910390a150565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610da79086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610de35760405162461bcd60e51b8152600401610a4690612b4c565b60185460ff1615610e2d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b6044820152606401610a46565b6018805460ff19166001908117909155426019556040519081527ff865819dcfd8250cfaa23e1ab7129c1ec65c617bae1e716699dfe07dd7c489ee906020015b60405180910390a1565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610f24576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610eff9184906119d4565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610f2f848484611a0e565b90505b9392505050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2254600354919291610f9a9190612ba5565b610fa49190612ba5565b905090565b610fb2336119b6565b610fce5760405162461bcd60e51b8152600401610a4690612a9d565b6101f58210610fef5760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b4957816009600086868581811061101157611011612b07565b905060200201602081019061102691906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f3c4f06d74861dea6c152189f2ac8853b6f789feb0e1182101b7ad9d1858f70e384848381811061108157611081612b07565b905060200201602081019061109691906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a16110c181612b33565b9050610ff2565b6000610db382600019610d4c565b6110df336119b6565b6110fb5760405162461bcd60e51b8152600401610a4690612a9d565b601082905560118390556012819055611112611db2565b505050565b6000546001600160a01b031633146111415760405162461bcd60e51b8152600401610a4690612b4c565b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000611194336119b6565b6111b05760405162461bcd60e51b8152600401610a4690612a9d565b306001600160a01b038416036112085760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e000000006044820152606401610a46565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361129457601954611252906302932e00612bb8565b42116112945760405162461bcd60e51b81526020600482015260116024820152702637b1b5b2b2103337b91018903cb2b0b960791b6044820152606401610a46565b81600003611307576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190612bcb565b91505b604080516001600160a01b0385168152602081018490527f960427a4fde284dcc8da2c51a43d210cfd7ed6f4328a24ba33eee49910db564b910160405180910390a160405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190612be4565b6000546001600160a01b031633146113e45760405162461bcd60e51b8152600401610a4690612b4c565b6001600160a01b03821661144f5760405162461bcd60e51b815260206004820152602c60248201527f4d61726b6574696e672066656520616464726573732063616e6e6f742062652060448201526b7a65726f206164647265737360a01b6064820152608401610a46565b6001600160a01b0381166114b85760405162461bcd60e51b815260206004820152602a60248201527f6275796261636b2066656520616464726573732063616e6e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401610a46565b601380546001600160a01b038481166001600160a01b03199283168117909355601480549185169190921681179091556040805192835260208301919091527ff3b718cd51f62e3836535bffd8f429a3f80d9d4442d89b72beee94069ed1fa3891015b60405180910390a15050565b6000546001600160a01b031633146115515760405162461bcd60e51b8152600401610a4690612b4c565b6018805461ff001916610100179055565b6000610f32338484611a0e565b6000546001600160a01b031633146115995760405162461bcd60e51b8152600401610a4690612b4c565b6001600160a01b038116600081815260026020908152604091829020805460ff191660019081179091558251938452908301527fb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b95059101610d41565b6000546001600160a01b0316331461161e5760405162461bcd60e51b8152600401610a4690612b4c565b61162a6012600a612ce5565b611635906001612b6c565b8110156116845760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206973206c657373207468616e206f6e6520746f6b656e0000006044820152606401610a46565b600a6003546116939190612b83565b81106116d35760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610a46565b601a805460ff1916831515908117909155601b8290556040805183815260ff909216151560208301527f34c2d4c263b6f41223c6d30ae2e7bcb18629892587e0a4138f57ba2c523953d0910161151b565b6000546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610a4690612b4c565b600b849055600c839055600d829055600e819055808261176e8587612bb8565b6117789190612bb8565b6117829190612bb8565b600f55610b49611db2565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610a4690612b4c565b6000546001600160a01b03908116908216036118155760405162461bcd60e51b815260206004820152601a60248201527f4f574e45522063616e7420626520756e617574686f72697a65640000000000006044820152606401610a46565b6001600160a01b0381166000818152600260209081526040808320805460ff191690558051938452908301919091527fb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b95059101610d41565b6000546001600160a01b031633146118965760405162461bcd60e51b8152600401610a4690612b4c565b600a8110156118f95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c657373206044820152687468616e20302e312560b81b6064820152608401610a46565b6127108160035461190a9190612b6c565b6119149190612b83565b60048190556040519081527f365a2bb07537fddd750e9ac8d56970e584f83a144bb5225e77491b83bccd118390602001610d41565b6000546001600160a01b031633146119735760405162461bcd60e51b8152600401610a4690612b4c565b61197c8161201e565b50565b6000546001600160a01b031633146119a95760405162461bcd60e51b8152600401610a4690612b4c565b6018805461ff0019169055565b6001600160a01b031660009081526002602052604090205460ff1690565b600081848411156119f85760405162461bcd60e51b8152600401610a469190612903565b506000611a058486612ba5565b95945050505050565b601c5460009060ff1615611a2e57611a2784848461208c565b9050610f32565b6001600160a01b03841660009081526002602052604090205460ff16158015611a7057506001600160a01b03831660009081526002602052604090205460ff16155b15611abe5760185460ff16611abe5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a46565b6001600160a01b03841660009081526002602052604090205460ff16158015611b0057506001600160a01b0384166000908152600a602052604090205460ff16155b8015611b2557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611b6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611bdd576005546001600160a01b038416600090815260066020526040902054611b8f908490612bb8565b1115611bdd5760405162461bcd60e51b815260206004820152601860248201527f6d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610a46565b60045482111580611c0657506001600160a01b03841660009081526009602052604090205460ff165b80611c2957506001600160a01b03831660009081526009602052604090205460ff165b611c6d5760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610a46565b611c75612160565b15611c8257611c826121cc565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260069091529190912054611cd49184906119d4565b6001600160a01b038516600090815260066020908152604080832093909355600890529081205460ff1680611d2157506001600160a01b03841660009081526008602052604090205460ff165b611d3557611d30858486612507565b611d37565b825b6001600160a01b038516600090815260066020526040902054909150611d5d90826126c3565b6001600160a01b038086166000818152600660205260409081902093909355915190871690600080516020612d9483398151915290611d9f9085815260200190565b60405180910390a3506001949350505050565b6096611dd66064611dd0601154600f5461272290919063ffffffff16565b906127a4565b1115611e245760405162461bcd60e51b815260206004820152601f60248201527f427579207461782063616e6e6f74206265206d6f7265207468616e20313525006044820152606401610a46565b6096611e426064611dd0601054600f5461272290919063ffffffff16565b1115611e905760405162461bcd60e51b815260206004820181905260248201527f53656c6c207461782063616e6e6f74206265206d6f7265207468616e203135256044820152606401610a46565b60c8611eb36064611dd0601154601054611eaa9190612bb8565b600f5490612722565b1115611f0d5760405162461bcd60e51b8152602060048201526024808201527f4275792b53656c6c207461782063616e6e6f74206265206d6f7265207468616e6044820152632032302560e01b6064820152608401610a46565b6064611f2b6064611dd0601254600f5461272290919063ffffffff16565b1115611f855760405162461bcd60e51b8152602060048201526024808201527f5472616e73666572205461782063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610a46565b7f375884ed7f92283ee74d8884b39a803f4aee832b15766fe016b74fc791fc2ada611fc26064611dd0601154600f5461272290919063ffffffff16565b611fde6064611dd0601054600f5461272290919063ffffffff16565b611ffa6064611dd0601254600f5461272290919063ffffffff16565b6040805160ff94851681529284166020840152921691810191909152606001610e6d565b6001600160a01b03811661203157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546120dd9184906119d4565b6001600160a01b03808616600090815260066020526040808220939093559085168152205461210c90836126c3565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020612d948339815191529061214e9086815260200190565b60405180910390a35060019392505050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061219e5750601c5460ff16155b80156121ac5750601a5460ff165b8015610fa4575050601b5430600090815260066020526040902054101590565b601c805460ff19166001179055600e54600f546000916121eb91612ba5565b905060006121fa826002612b6c565b600b54601b5461220a9190612b6c565b6122149190612b83565b9050600081601b546122269190612ba5565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061226057612260612b07565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106122b4576122b4612b07565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac947906122fa908590600090869030904290600401612cf4565b600060405180830381600087803b15801561231457600080fd5b505af1158015612328573d6000803e3d6000fd5b5050600b5447925061233d9150600290612b83565b6123479086612ba5565b94506000612356866002612b6c565b600b546123639084612b6c565b61236d9190612b83565b9050600086600c54846123809190612b6c565b61238a9190612b83565b9050600087600d548561239d9190612b6c565b6123a79190612b83565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156123e2573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561241d573d6000803e3d6000fd5b5086156124f35760155460405163f305d71960e01b81523060048201819052602482018a9052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990859060c40160606040518083038185885af1158015612491573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124b69190612d65565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601c805460ff19169055505050505050565b60008215806125165750600f54155b15612522575081610f32565b6012546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690841603612561575060105461259f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03160361259f57506011545b60006125d06125b16103e86064612b6c565b611dd0846125ca600f548a61272290919063ffffffff16565b90612722565b905060006125ef600f54611dd0600e548561272290919063ffffffff16565b905060006125fd83836127e6565b90508015612667573060009081526006602052604090205461261f90826126c3565b30600081815260066020526040908190209290925590516001600160a01b038a1690600080516020612d948339815191529061265e9085815260200190565b60405180910390a35b81156126ad5760035461267a90836127e6565b6003556040518281526000906001600160a01b038a1690600080516020612d948339815191529060200160405180910390a35b6126b787846127e6565b98975050505050505050565b6000806126d08385612bb8565b905083811015610f325760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a46565b60008260000361273457506000610db3565b60006127408385612b6c565b90508261274d8583612b83565b14610f325760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a46565b6000610f3283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612828565b6000610f3283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119d4565b600081836128495760405162461bcd60e51b8152600401610a469190612903565b506000611a058486612b83565b801515811461197c57600080fd5b60008060006040848603121561287957600080fd5b833567ffffffffffffffff8082111561289157600080fd5b818601915086601f8301126128a557600080fd5b8135818111156128b457600080fd5b8760208260051b85010111156128c957600080fd5b602092830195509350508401356128df81612856565b809150509250925092565b6000602082840312156128fc57600080fd5b5035919050565b600060208083528351808285015260005b8181101561293057858101830151858201604001528201612914565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461296857600080fd5b919050565b6000806040838503121561298057600080fd5b61298983612951565b946020939093013593505050565b6000806000606084860312156129ac57600080fd5b6129b584612951565b92506129c360208501612951565b9150604084013590509250925092565b6000602082840312156129e557600080fd5b610f3282612951565b600080600060608486031215612a0357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a2d57600080fd5b612a3683612951565b9150612a4460208401612951565b90509250929050565b60008060408385031215612a6057600080fd5b823561298981612856565b60008060008060808587031215612a8157600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b4557612b45612b1d565b5060010190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610db357610db3612b1d565b600082612ba057634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610db357610db3612b1d565b80820180821115610db357610db3612b1d565b600060208284031215612bdd57600080fd5b5051919050565b600060208284031215612bf657600080fd5b8151610f3281612856565b600181815b80851115612c3c578160001904821115612c2257612c22612b1d565b80851615612c2f57918102915b93841c9390800290612c06565b509250929050565b600082612c5357506001610db3565b81612c6057506000610db3565b8160018114612c765760028114612c8057612c9c565b6001915050610db3565b60ff841115612c9157612c91612b1d565b50506001821b610db3565b5060208310610133831016604e8410600b8410161715612cbf575081810a610db3565b612cc98383612c01565b8060001904821115612cdd57612cdd612b1d565b029392505050565b6000610f3260ff841683612c44565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d445784516001600160a01b031683529383019391830191600101612d1f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d7a57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220af860dcac5dc5dd5fda511beeb529b71e14666bd231f97a5e624e76d01f6533d64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103375760003560e01c806377b54bad116101ab578063bf56b371116100f7578063f12418a811610095578063fbde83051161006f578063fbde8305146109bc578063fce589d8146109d1578063fe9fbb80146109e7578063ffb54a9914610a0757600080fd5b8063f12418a81461095c578063f2fde38b1461097c578063f887ea401461099c57600080fd5b8063df20fd49116100d1578063df20fd49146108dc578063e96fada2146108fc578063efa5e3471461091c578063f0b37c041461093c57600080fd5b8063bf56b37114610850578063c867d60b14610866578063dd62ed3e1461089657600080fd5b806395d89b4111610164578063a6874ac51161013e578063a6874ac5146107c7578063a8aa1b31146107dc578063a9059cbb14610810578063b6a5d7de1461083057600080fd5b806395d89b411461076557806398118cb414610791578063a4b45c00146107a757600080fd5b806377b54bad146106ab57806378109e54146106cb5780637d1db4a5146106e157806384b1d1ef146106f7578063893d20e8146107175780638b42507f1461073557600080fd5b8063313ce567116102855780635dc96d16116102235780636ce46bc3116101fd5780636ce46bc31461062f5780636ddd17131461064f57806370a0823114610669578063715018a61461069657600080fd5b80635dc96d16146105e45780636917516b146106035780636b67c4df1461061957600080fd5b80633f4218e01161025f5780633f4218e01461053c5780634be9d8691461056c5780634d709adf1461058c578063571ac8b0146105c457600080fd5b8063313ce567146104f45780633b2d081c146105105780633eaaf86b1461052657600080fd5b80631693e8d4116102f25780631df4ccfc116102cc5780631df4ccfc1461047a57806323b872dd146104905780632b112e49146104b05780632f54bf6e146104c557600080fd5b80631693e8d41461043a578063180b0d7e1461044f57806318160ddd1461046557600080fd5b806210868314610343578062bff44614610365578063012aa912146103855780630445b667146103a557806306fdde03146103ce578063095ea7b31461040a57600080fd5b3661033e57005b600080fd5b34801561034f57600080fd5b5061036361035e366004612864565b610a21565b005b34801561037157600080fd5b50610363610380366004612864565b610b4f565b34801561039157600080fd5b506103636103a03660046128ea565b610c6e565b3480156103b157600080fd5b506103bb601b5481565b6040519081526020015b60405180910390f35b3480156103da57600080fd5b5060408051808201909152600a815269151bdc8815d85b1b195d60b21b60208201525b6040516103c59190612903565b34801561041657600080fd5b5061042a61042536600461296d565b610d4c565b60405190151581526020016103c5565b34801561044657600080fd5b50610363610db9565b34801561045b57600080fd5b506103bb6103e881565b34801561047157600080fd5b506003546103bb565b34801561048657600080fd5b506103bb600f5481565b34801561049c57600080fd5b5061042a6104ab366004612997565b610e77565b3480156104bc57600080fd5b506103bb610f39565b3480156104d157600080fd5b5061042a6104e03660046129d3565b6000546001600160a01b0391821691161490565b34801561050057600080fd5b50604051601281526020016103c5565b34801561051c57600080fd5b506103bb600d5481565b34801561053257600080fd5b506103bb60035481565b34801561054857600080fd5b5061042a6105573660046129d3565b60086020526000908152604090205460ff1681565b34801561057857600080fd5b50610363610587366004612864565b610fa9565b34801561059857600080fd5b506016546105ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103c5565b3480156105d057600080fd5b5061042a6105df3660046129d3565b6110c8565b3480156105f057600080fd5b5060185461042a90610100900460ff1681565b34801561060f57600080fd5b506103bb60175481565b34801561062557600080fd5b506103bb600c5481565b34801561063b57600080fd5b5061036361064a3660046129ee565b6110d6565b34801561065b57600080fd5b50601a5461042a9060ff1681565b34801561067557600080fd5b506103bb6106843660046129d3565b60066020526000908152604090205481565b3480156106a257600080fd5b50610363611117565b3480156106b757600080fd5b5061042a6106c636600461296d565b611189565b3480156106d757600080fd5b506103bb60055481565b3480156106ed57600080fd5b506103bb60045481565b34801561070357600080fd5b506014546105ac906001600160a01b031681565b34801561072357600080fd5b506000546001600160a01b03166105ac565b34801561074157600080fd5b5061042a6107503660046129d3565b60096020526000908152604090205460ff1681565b34801561077157600080fd5b506040805180820190915260038152622a27a960e91b60208201526103fd565b34801561079d57600080fd5b506103bb600b5481565b3480156107b357600080fd5b506103636107c2366004612a1a565b6113ba565b3480156107d357600080fd5b50610363611527565b3480156107e857600080fd5b506105ac7f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff181565b34801561081c57600080fd5b5061042a61082b36600461296d565b611562565b34801561083c57600080fd5b5061036361084b3660046129d3565b61156f565b34801561085c57600080fd5b506103bb60195481565b34801561087257600080fd5b5061042a6108813660046129d3565b600a6020526000908152604090205460ff1681565b3480156108a257600080fd5b506103bb6108b1366004612a1a565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108e857600080fd5b506103636108f7366004612a4d565b6115f4565b34801561090857600080fd5b506013546105ac906001600160a01b031681565b34801561092857600080fd5b50610363610937366004612a6b565b611724565b34801561094857600080fd5b506103636109573660046129d3565b61178d565b34801561096857600080fd5b506103636109773660046128ea565b61186c565b34801561098857600080fd5b506103636109973660046129d3565b611949565b3480156109a857600080fd5b506015546105ac906001600160a01b031681565b3480156109c857600080fd5b5061036361197f565b3480156109dd57600080fd5b506103bb600e5481565b3480156109f357600080fd5b5061042a610a023660046129d3565b6119b6565b348015610a1357600080fd5b5060185461042a9060ff1681565b610a2a336119b6565b610a4f5760405162461bcd60e51b8152600401610a4690612a9d565b60405180910390fd5b6101f58210610a705760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b495781600a6000868685818110610a9257610a92612b07565b9050602002016020810190610aa791906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f566c2270277919680152b0734389ae919d95ff7e9024c03fc3c7c209ec8412c7848483818110610b0257610b02612b07565b9050602002016020810190610b1791906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a1610b4281612b33565b9050610a73565b50505050565b610b58336119b6565b610b745760405162461bcd60e51b8152600401610a4690612a9d565b6101f58210610b955760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b49578160086000868685818110610bb757610bb7612b07565b9050602002016020810190610bcc91906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f9fbd25f95d342f2efc070b56d2fadd2341d264ef8c915dc268609b2ca1bb25de848483818110610c2757610c27612b07565b9050602002016020810190610c3c91906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a1610c6781612b33565b9050610b98565b6000546001600160a01b03163314610c985760405162461bcd60e51b8152600401610a4690612b4c565b600a811015610cf55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d61782077616c6c6574206c657373207468616e20604482015263302e312560e01b6064820152608401610a46565b61271081600354610d069190612b6c565b610d109190612b83565b60058190556040519081527fa69fa556bf940aa0c695b9c8e1b229fdb1476830e2025e44da1028e0c1458d4a906020015b60405180910390a150565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610da79086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610de35760405162461bcd60e51b8152600401610a4690612b4c565b60185460ff1615610e2d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b6044820152606401610a46565b6018805460ff19166001908117909155426019556040519081527ff865819dcfd8250cfaa23e1ab7129c1ec65c617bae1e716699dfe07dd7c489ee906020015b60405180910390a1565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610f24576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610eff9184906119d4565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610f2f848484611a0e565b90505b9392505050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2254600354919291610f9a9190612ba5565b610fa49190612ba5565b905090565b610fb2336119b6565b610fce5760405162461bcd60e51b8152600401610a4690612a9d565b6101f58210610fef5760405162461bcd60e51b8152600401610a4690612ac2565b60005b82811015610b4957816009600086868581811061101157611011612b07565b905060200201602081019061102691906129d3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f3c4f06d74861dea6c152189f2ac8853b6f789feb0e1182101b7ad9d1858f70e384848381811061108157611081612b07565b905060200201602081019061109691906129d3565b604080516001600160a01b03909216825284151560208301520160405180910390a16110c181612b33565b9050610ff2565b6000610db382600019610d4c565b6110df336119b6565b6110fb5760405162461bcd60e51b8152600401610a4690612a9d565b601082905560118390556012819055611112611db2565b505050565b6000546001600160a01b031633146111415760405162461bcd60e51b8152600401610a4690612b4c565b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000611194336119b6565b6111b05760405162461bcd60e51b8152600401610a4690612a9d565b306001600160a01b038416036112085760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e000000006044820152606401610a46565b7f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff16001600160a01b0316836001600160a01b03160361129457601954611252906302932e00612bb8565b42116112945760405162461bcd60e51b81526020600482015260116024820152702637b1b5b2b2103337b91018903cb2b0b960791b6044820152606401610a46565b81600003611307576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190612bcb565b91505b604080516001600160a01b0385168152602081018490527f960427a4fde284dcc8da2c51a43d210cfd7ed6f4328a24ba33eee49910db564b910160405180910390a160405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190612be4565b6000546001600160a01b031633146113e45760405162461bcd60e51b8152600401610a4690612b4c565b6001600160a01b03821661144f5760405162461bcd60e51b815260206004820152602c60248201527f4d61726b6574696e672066656520616464726573732063616e6e6f742062652060448201526b7a65726f206164647265737360a01b6064820152608401610a46565b6001600160a01b0381166114b85760405162461bcd60e51b815260206004820152602a60248201527f6275796261636b2066656520616464726573732063616e6e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401610a46565b601380546001600160a01b038481166001600160a01b03199283168117909355601480549185169190921681179091556040805192835260208301919091527ff3b718cd51f62e3836535bffd8f429a3f80d9d4442d89b72beee94069ed1fa3891015b60405180910390a15050565b6000546001600160a01b031633146115515760405162461bcd60e51b8152600401610a4690612b4c565b6018805461ff001916610100179055565b6000610f32338484611a0e565b6000546001600160a01b031633146115995760405162461bcd60e51b8152600401610a4690612b4c565b6001600160a01b038116600081815260026020908152604091829020805460ff191660019081179091558251938452908301527fb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b95059101610d41565b6000546001600160a01b0316331461161e5760405162461bcd60e51b8152600401610a4690612b4c565b61162a6012600a612ce5565b611635906001612b6c565b8110156116845760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206973206c657373207468616e206f6e6520746f6b656e0000006044820152606401610a46565b600a6003546116939190612b83565b81106116d35760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610a46565b601a805460ff1916831515908117909155601b8290556040805183815260ff909216151560208301527f34c2d4c263b6f41223c6d30ae2e7bcb18629892587e0a4138f57ba2c523953d0910161151b565b6000546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610a4690612b4c565b600b849055600c839055600d829055600e819055808261176e8587612bb8565b6117789190612bb8565b6117829190612bb8565b600f55610b49611db2565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610a4690612b4c565b6000546001600160a01b03908116908216036118155760405162461bcd60e51b815260206004820152601a60248201527f4f574e45522063616e7420626520756e617574686f72697a65640000000000006044820152606401610a46565b6001600160a01b0381166000818152600260209081526040808320805460ff191690558051938452908301919091527fb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b95059101610d41565b6000546001600160a01b031633146118965760405162461bcd60e51b8152600401610a4690612b4c565b600a8110156118f95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c657373206044820152687468616e20302e312560b81b6064820152608401610a46565b6127108160035461190a9190612b6c565b6119149190612b83565b60048190556040519081527f365a2bb07537fddd750e9ac8d56970e584f83a144bb5225e77491b83bccd118390602001610d41565b6000546001600160a01b031633146119735760405162461bcd60e51b8152600401610a4690612b4c565b61197c8161201e565b50565b6000546001600160a01b031633146119a95760405162461bcd60e51b8152600401610a4690612b4c565b6018805461ff0019169055565b6001600160a01b031660009081526002602052604090205460ff1690565b600081848411156119f85760405162461bcd60e51b8152600401610a469190612903565b506000611a058486612ba5565b95945050505050565b601c5460009060ff1615611a2e57611a2784848461208c565b9050610f32565b6001600160a01b03841660009081526002602052604090205460ff16158015611a7057506001600160a01b03831660009081526002602052604090205460ff16155b15611abe5760185460ff16611abe5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610a46565b6001600160a01b03841660009081526002602052604090205460ff16158015611b0057506001600160a01b0384166000908152600a602052604090205460ff16155b8015611b2557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611b6357507f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff16001600160a01b0316836001600160a01b031614155b15611bdd576005546001600160a01b038416600090815260066020526040902054611b8f908490612bb8565b1115611bdd5760405162461bcd60e51b815260206004820152601860248201527f6d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610a46565b60045482111580611c0657506001600160a01b03841660009081526009602052604090205460ff165b80611c2957506001600160a01b03831660009081526009602052604090205460ff165b611c6d5760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610a46565b611c75612160565b15611c8257611c826121cc565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260069091529190912054611cd49184906119d4565b6001600160a01b038516600090815260066020908152604080832093909355600890529081205460ff1680611d2157506001600160a01b03841660009081526008602052604090205460ff165b611d3557611d30858486612507565b611d37565b825b6001600160a01b038516600090815260066020526040902054909150611d5d90826126c3565b6001600160a01b038086166000818152600660205260409081902093909355915190871690600080516020612d9483398151915290611d9f9085815260200190565b60405180910390a3506001949350505050565b6096611dd66064611dd0601154600f5461272290919063ffffffff16565b906127a4565b1115611e245760405162461bcd60e51b815260206004820152601f60248201527f427579207461782063616e6e6f74206265206d6f7265207468616e20313525006044820152606401610a46565b6096611e426064611dd0601054600f5461272290919063ffffffff16565b1115611e905760405162461bcd60e51b815260206004820181905260248201527f53656c6c207461782063616e6e6f74206265206d6f7265207468616e203135256044820152606401610a46565b60c8611eb36064611dd0601154601054611eaa9190612bb8565b600f5490612722565b1115611f0d5760405162461bcd60e51b8152602060048201526024808201527f4275792b53656c6c207461782063616e6e6f74206265206d6f7265207468616e6044820152632032302560e01b6064820152608401610a46565b6064611f2b6064611dd0601254600f5461272290919063ffffffff16565b1115611f855760405162461bcd60e51b8152602060048201526024808201527f5472616e73666572205461782063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610a46565b7f375884ed7f92283ee74d8884b39a803f4aee832b15766fe016b74fc791fc2ada611fc26064611dd0601154600f5461272290919063ffffffff16565b611fde6064611dd0601054600f5461272290919063ffffffff16565b611ffa6064611dd0601254600f5461272290919063ffffffff16565b6040805160ff94851681529284166020840152921691810191909152606001610e6d565b6001600160a01b03811661203157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546120dd9184906119d4565b6001600160a01b03808616600090815260066020526040808220939093559085168152205461210c90836126c3565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020612d948339815191529061214e9086815260200190565b60405180910390a35060019392505050565b6000336001600160a01b037f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff1161480159061219e5750601c5460ff16155b80156121ac5750601a5460ff165b8015610fa4575050601b5430600090815260066020526040902054101590565b601c805460ff19166001179055600e54600f546000916121eb91612ba5565b905060006121fa826002612b6c565b600b54601b5461220a9190612b6c565b6122149190612b83565b9050600081601b546122269190612ba5565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061226057612260612b07565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106122b4576122b4612b07565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac947906122fa908590600090869030904290600401612cf4565b600060405180830381600087803b15801561231457600080fd5b505af1158015612328573d6000803e3d6000fd5b5050600b5447925061233d9150600290612b83565b6123479086612ba5565b94506000612356866002612b6c565b600b546123639084612b6c565b61236d9190612b83565b9050600086600c54846123809190612b6c565b61238a9190612b83565b9050600087600d548561239d9190612b6c565b6123a79190612b83565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156123e2573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561241d573d6000803e3d6000fd5b5086156124f35760155460405163f305d71960e01b81523060048201819052602482018a9052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990859060c40160606040518083038185885af1158015612491573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124b69190612d65565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601c805460ff19169055505050505050565b60008215806125165750600f54155b15612522575081610f32565b6012546001600160a01b037f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff1811690841603612561575060105461259f565b7f000000000000000000000000c652aabfef2cb3d956bd85742e18d32063bf2ff16001600160a01b0316856001600160a01b03160361259f57506011545b60006125d06125b16103e86064612b6c565b611dd0846125ca600f548a61272290919063ffffffff16565b90612722565b905060006125ef600f54611dd0600e548561272290919063ffffffff16565b905060006125fd83836127e6565b90508015612667573060009081526006602052604090205461261f90826126c3565b30600081815260066020526040908190209290925590516001600160a01b038a1690600080516020612d948339815191529061265e9085815260200190565b60405180910390a35b81156126ad5760035461267a90836127e6565b6003556040518281526000906001600160a01b038a1690600080516020612d948339815191529060200160405180910390a35b6126b787846127e6565b98975050505050505050565b6000806126d08385612bb8565b905083811015610f325760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a46565b60008260000361273457506000610db3565b60006127408385612b6c565b90508261274d8583612b83565b14610f325760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a46565b6000610f3283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612828565b6000610f3283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119d4565b600081836128495760405162461bcd60e51b8152600401610a469190612903565b506000611a058486612b83565b801515811461197c57600080fd5b60008060006040848603121561287957600080fd5b833567ffffffffffffffff8082111561289157600080fd5b818601915086601f8301126128a557600080fd5b8135818111156128b457600080fd5b8760208260051b85010111156128c957600080fd5b602092830195509350508401356128df81612856565b809150509250925092565b6000602082840312156128fc57600080fd5b5035919050565b600060208083528351808285015260005b8181101561293057858101830151858201604001528201612914565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461296857600080fd5b919050565b6000806040838503121561298057600080fd5b61298983612951565b946020939093013593505050565b6000806000606084860312156129ac57600080fd5b6129b584612951565b92506129c360208501612951565b9150604084013590509250925092565b6000602082840312156129e557600080fd5b610f3282612951565b600080600060608486031215612a0357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a2d57600080fd5b612a3683612951565b9150612a4460208401612951565b90509250929050565b60008060408385031215612a6057600080fd5b823561298981612856565b60008060008060808587031215612a8157600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b4557612b45612b1d565b5060010190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610db357610db3612b1d565b600082612ba057634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610db357610db3612b1d565b80820180821115610db357610db3612b1d565b600060208284031215612bdd57600080fd5b5051919050565b600060208284031215612bf657600080fd5b8151610f3281612856565b600181815b80851115612c3c578160001904821115612c2257612c22612b1d565b80851615612c2f57918102915b93841c9390800290612c06565b509250929050565b600082612c5357506001610db3565b81612c6057506000610db3565b8160018114612c765760028114612c8057612c9c565b6001915050610db3565b60ff841115612c9157612c91612b1d565b50506001821b610db3565b5060208310610133831016604e8410600b8410161715612cbf575081810a610db3565b612cc98383612c01565b8060001904821115612cdd57612cdd612b1d565b029392505050565b6000610f3260ff841683612c44565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d445784516001600160a01b031683529383019391830191600101612d1f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d7a57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220af860dcac5dc5dd5fda511beeb529b71e14666bd231f97a5e624e76d01f6533d64736f6c63430008120033

Deployed Bytecode Sourcemap

5470:14929:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16280:373;;;;;;;;;;-1:-1:-1;16280:373:0;;;;;:::i;:::-;;:::i;:::-;;15551:353;;;;;;;;;;-1:-1:-1;15551:353:0;;;;;:::i;:::-;;:::i;9721:317::-;;;;;;;;;;-1:-1:-1;9721:317:0;;;;;:::i;:::-;;:::i;7082:50::-;;;;;;;;;;;;;;;;;;;1223:25:1;;;1211:2;1196:18;7082:50:0;;;;;;;;8517:80;;;;;;;;;;-1:-1:-1;8589:5:0;;;;;;;;;;;;-1:-1:-1;;;8589:5:0;;;;8517:80;;;;;;;:::i;8825:216::-;;;;;;;;;;-1:-1:-1;8825:216:0;;;;;:::i;:::-;;:::i;:::-;;;2414:14:1;;2407:22;2389:41;;2377:2;2362:18;8825:216:0;2249:187:1;13703:224:0;;;;;;;;;;;;;:::i;6549:45::-;;;;;;;;;;;;6590:4;6549:45;;8247:88;;;;;;;;;;-1:-1:-1;8320:12:0;;8247:88;;6466:76;;;;;;;;;;;;;;;;9343:370;;;;;;;;;;-1:-1:-1;9343:370:0;;;;;:::i;:::-;;:::i;18856:138::-;;;;;;;;;;;;;:::i;3267:103::-;;;;;;;;;;-1:-1:-1;3267:103:0;;;;;:::i;:::-;3322:4;3357:5;-1:-1:-1;;;;;3346:16:0;;;3357:5;;3346:16;;3267:103;8341:80;;;;;;;;;;-1:-1:-1;8341:80:0;;5831:2;3107:36:1;;3095:2;3080:18;8341:80:0;2965:184:1;6397:29:0;;;;;;;;;;;;;;;;5842:55;;;;;;;;;;;;;;;;6154:44;;;;;;;;;;-1:-1:-1;6154:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15912:360;;;;;;;;;;-1:-1:-1;15912:360:0;;;;;:::i;:::-;;:::i;6865:31::-;;;;;;;;;;-1:-1:-1;6865:31:0;;;;-1:-1:-1;;;;;6865:31:0;;;;;;-1:-1:-1;;;;;3337:32:1;;;3319:51;;3307:2;3292:18;6865:31:0;3154:222:1;9049:122:0;;;;;;;;;;-1:-1:-1;9049:122:0;;;;;:::i;:::-;;:::i;6973:31::-;;;;;;;;;;-1:-1:-1;6973:31:0;;;;;;;;;;;6903:23;;;;;;;;;;;;;;;;6359:31;;;;;;;;;;;;;;;;17344:225;;;;;;;;;;-1:-1:-1;17344:225:0;;;;;:::i;:::-;;:::i;7045:30::-;;;;;;;;;;-1:-1:-1;7045:30:0;;;;;;;;6032:45;;;;;;;;;;-1:-1:-1;6032:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;3493:124;;;;;;;;;;;;;:::i;13124:548::-;;;;;;;;;;-1:-1:-1;13124:548:0;;;;;:::i;:::-;;:::i;5967:50::-;;;;;;;;;;;;;;;;5906:48;;;;;;;;;;;;;;;;6754:33;;;;;;;;;;-1:-1:-1;6754:33:0;;;;-1:-1:-1;;;;;6754:33:0;;;8600:78;;;;;;;;;;-1:-1:-1;8652:7:0;8670:5;-1:-1:-1;;;;;8670:5:0;8600:78;;6205:48;;;;;;;;;;-1:-1:-1;6205:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8427:84;;;;;;;;;;-1:-1:-1;8501:7:0;;;;;;;;;;;;-1:-1:-1;;;8501:7:0;;;;8427:84;;6321:31;;;;;;;;;;;;;;;;17976:491;;;;;;;;;;-1:-1:-1;17976:491:0;;;;;:::i;:::-;;:::i;14024:79::-;;;;;;;;;;;;;:::i;6827:29::-;;;;;;;;;;;;;;;9179:156;;;;;;;;;;-1:-1:-1;9179:156:0;;;;;:::i;:::-;;:::i;2909:138::-;;;;;;;;;;-1:-1:-1;2909:138:0;;;;;:::i;:::-;;:::i;7011:25::-;;;;;;;;;;;;;;;;6260:52;;;;;;;;;;-1:-1:-1;6260:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8684:133;;;;;;;;;;-1:-1:-1;8684:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8786:19:0;;;8768:7;8786:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;8684:133;18475:369;;;;;;;;;;-1:-1:-1;18475:369:0;;;;;:::i;:::-;;:::i;6712:35::-;;;;;;;;;;-1:-1:-1;6712:35:0;;;;-1:-1:-1;;;;;6712:35:0;;;17577:391;;;;;;;;;;-1:-1:-1;17577:391:0;;;;;:::i;:::-;;:::i;3055:204::-;;;;;;;;;;-1:-1:-1;3055:204:0;;;;;:::i;:::-;;:::i;10044:320::-;;;;;;;;;;-1:-1:-1;10044:320:0;;;;;:::i;:::-;;:::i;3625:109::-;;;;;;;;;;-1:-1:-1;3625:109:0;;;;;:::i;:::-;;:::i;6796:24::-;;;;;;;;;;-1:-1:-1;6796:24:0;;;;-1:-1:-1;;;;;6796:24:0;;;13935:81;;;;;;;;;;;;;:::i;6433:26::-;;;;;;;;;;;;;;;;3378:107;;;;;;;;;;-1:-1:-1;3378:107:0;;;;;:::i;:::-;;:::i;6935:31::-;;;;;;;;;;-1:-1:-1;6935:31:0;;;;;;;;16280:373;2850:24;2863:10;2850:12;:24::i;:::-;2842:48;;;;-1:-1:-1;;;2842:48:0;;;;;;;:::i;:::-;;;;;;;;;16415:3:::1;16396:22:::0;::::1;16388:71;;;;-1:-1:-1::0;;;16388:71:0::1;;;;;;;:::i;:::-;16475:9;16470:176;16488:20:::0;;::::1;16470:176;;;16566:6;16530:19;:33;16550:9;;16560:1;16550:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16530:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16530:33:0;:42;;-1:-1:-1;;16530:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16592::::1;16613:9:::0;;16623:1;16613:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16592:42;::::0;;-1:-1:-1;;;;;6169:32:1;;;6151:51;;6245:14;;6238:22;6233:2;6218:18;;6211:50;6124:18;16592:42:0::1;;;;;;;16510:3;::::0;::::1;:::i;:::-;;;16470:176;;;;16280:373:::0;;;:::o;15551:353::-;2850:24;2863:10;2850:12;:24::i;:::-;2842:48;;;;-1:-1:-1;;;2842:48:0;;;;;;;:::i;:::-;15678:3:::1;15659:22:::0;::::1;15651:71;;;;-1:-1:-1::0;;;15651:71:0::1;;;;;;;:::i;:::-;15738:9;15733:164;15751:20:::0;;::::1;15733:164;;;15821:6;15793:11;:25;15805:9;;15815:1;15805:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15793:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15793:25:0;:34;;-1:-1:-1;;15793:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15847:38:::1;15864:9:::0;;15874:1;15864:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15847:38;::::0;;-1:-1:-1;;;;;6169:32:1;;;6151:51;;6245:14;;6238:22;6233:2;6218:18;;6211:50;6124:18;15847:38:0::1;;;;;;;15773:3;::::0;::::1;:::i;:::-;;;15733:164;;9721:317:::0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;9860:2:::1;9832:24;:30;;9824:78;;;::::0;-1:-1:-1;;;9824:78:0;;7080:2:1;9824:78:0::1;::::0;::::1;7062:21:1::0;7119:2;7099:18;;;7092:30;7158:34;7138:18;;;7131:62;-1:-1:-1;;;7209:18:1;;;7202:34;7253:19;;9824:78:0::1;6878:400:1::0;9824:78:0::1;9976:5;9947:24;9932:12;;:39;;;;:::i;:::-;9931:50;;;;:::i;:::-;9913:15;:68:::0;;;9997:33:::1;::::0;1223:25:1;;;9997:33:0::1;::::0;1211:2:1;1196:18;9997:33:0::1;;;;;;;;9721:317:::0;:::o;8825:216::-;8929:10;8900:4;8917:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8917:32:0;;;;;;;;;;:41;;;8974:37;8900:4;;8917:32;;8974:37;;;;8952:6;1223:25:1;;1211:2;1196:18;;1077:177;8974:37:0;;;;;;;;-1:-1:-1;9029:4:0;8825:216;;;;;:::o;13703:224::-;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;13767:11:::1;::::0;::::1;;13766:12;13758:44;;;::::0;-1:-1:-1;;;13758:44:0;;7880:2:1;13758:44:0::1;::::0;::::1;7862:21:1::0;7919:2;7899:18;;;7892:30;-1:-1:-1;;;7938:18:1;;;7931:50;7998:18;;13758:44:0::1;7678:344:1::0;13758:44:0::1;13813:11;:18:::0;;-1:-1:-1;;13813:18:0::1;13827:4;13813:18:::0;;::::1;::::0;;;13855:15:::1;13842:10;:28:::0;13886:33:::1;::::0;2389:41:1;;;13886:33:0::1;::::0;2377:2:1;2362:18;13886:33:0::1;;;;;;;;13703:224::o:0;9343:370::-;-1:-1:-1;;;;;9463:19:0;;9443:4;9463:19;;;:11;:19;;;;;;;;9483:10;9463:31;;;;;;;;-1:-1:-1;;9463:52:0;9460:186;;9565:69;;;;;;;;;;;-1:-1:-1;;;9565:69:0;;;;;;;;-1:-1:-1;;;;;9565:19:0;;-1:-1:-1;9565:19:0;;;:11;:19;;;;;9585:10;9565:31;;;;;;;;;;:69;;9601:6;;9565:35;:69::i;:::-;-1:-1:-1;;;;;9531:19:0;;;;;;:11;:19;;;;;;;;9551:10;9531:31;;;;;;;:103;9460:186;9665:40;9679:6;9687:9;9698:6;9665:13;:40::i;:::-;9658:47;;9343:370;;;;;;:::o;18856:138::-;18970:9;:15;;;;5599:42;18909:7;18952:15;;;;;18937:12;;18909:7;;18970:15;18937:30;;18952:15;18937:30;:::i;:::-;:48;;;;:::i;:::-;18929:57;;18856:138;:::o;15912:360::-;2850:24;2863:10;2850:12;:24::i;:::-;2842:48;;;;-1:-1:-1;;;2842:48:0;;;;;;;:::i;:::-;16043:3:::1;16024:22:::0;::::1;16016:71;;;;-1:-1:-1::0;;;16016:71:0::1;;;;;;;:::i;:::-;16103:9;16098:167;16116:20:::0;;::::1;16098:167;;;16190:6;16158:15;:29;16174:9;;16184:1;16174:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16158:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16158:29:0;:38;;-1:-1:-1;;16158:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16216:37:::1;16232:9:::0;;16242:1;16232:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16216:37;::::0;;-1:-1:-1;;;;;6169:32:1;;;6151:51;;6245:14;;6238:22;6233:2;6218:18;;6211:50;6124:18;16216:37:0::1;;;;;;;16138:3;::::0;::::1;:::i;:::-;;;16098:167;;9049:122:::0;9104:4;9128:35;9136:7;-1:-1:-1;;9128:7:0;:35::i;17344:225::-;2850:24;2863:10;2850:12;:24::i;:::-;2842:48;;;;-1:-1:-1;;;2842:48:0;;;;;;;:::i;:::-;17444:14:::1;:22:::0;;;17477:13:::1;:20:::0;;;17508:18:::1;:27:::0;;;17548:13:::1;:11;:13::i;:::-;17344:225:::0;;;:::o;3493:124::-;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;3574:5:::1;::::0;;3555:25:::1;::::0;-1:-1:-1;;;;;3574:5:0;;::::1;::::0;3555:25:::1;::::0;::::1;3607:1;3591:18:::0;;-1:-1:-1;;;;;;3591:18:0::1;::::0;;3493:124::o;13124:548::-;13216:12;2850:24;2863:10;2850:12;:24::i;:::-;2842:48;;;;-1:-1:-1;;;2842:48:0;;;;;;;:::i;:::-;13273:4:::1;-1:-1:-1::0;;;;;13249:29:0;::::1;::::0;13241:69:::1;;;::::0;-1:-1:-1;;;13241:69:0;;8362:2:1;13241:69:0::1;::::0;::::1;8344:21:1::0;8401:2;8381:18;;;8374:30;8440;8420:18;;;8413:58;8488:18;;13241:69:0::1;8160:352:1::0;13241:69:0::1;13340:4;-1:-1:-1::0;;;;;13324:20:0::1;:12;-1:-1:-1::0;;;;;13324:20:0::1;::::0;13321:119:::1;;13386:10;::::0;:21:::1;::::0;13399:8:::1;13386:21;:::i;:::-;13368:15;:39;13360:68;;;::::0;-1:-1:-1;;;13360:68:0;;8849:2:1;13360:68:0::1;::::0;::::1;8831:21:1::0;8888:2;8868:18;;;8861:30;-1:-1:-1;;;8907:18:1;;;8900:47;8964:18;;13360:68:0::1;8647:341:1::0;13360:68:0::1;13455:6;13465:1;13455:11:::0;13452:95:::1;;13491:44;::::0;-1:-1:-1;;;13491:44:0;;13529:4:::1;13491:44;::::0;::::1;3319:51:1::0;-1:-1:-1;;;;;13491:29:0;::::1;::::0;::::1;::::0;3292:18:1;;13491:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13482:53;;13452:95;13564:32;::::0;;-1:-1:-1;;;;;9374:32:1;;9356:51;;9438:2;9423:18;;9416:34;;;13564:32:0::1;::::0;9329:18:1;13564:32:0::1;;;;;;;13616:48;::::0;-1:-1:-1;;;13616:48:0;;13645:10:::1;13616:48;::::0;::::1;9356:51:1::0;9423:18;;;9416:34;;;-1:-1:-1;;;;;13616:28:0;::::1;::::0;::::1;::::0;9329:18:1;;13616:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17976:491::-:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18099:35:0;::::1;18091:91;;;::::0;-1:-1:-1;;;18091:91:0;;9913:2:1;18091:91:0::1;::::0;::::1;9895:21:1::0;9952:2;9932:18;;;9925:30;9991:34;9971:18;;;9964:62;-1:-1:-1;;;10042:18:1;;;10035:42;10094:19;;18091:91:0::1;9711:408:1::0;18091:91:0::1;-1:-1:-1::0;;;;;18201:33:0;::::1;18193:87;;;::::0;-1:-1:-1;;;18193:87:0;;10326:2:1;18193:87:0::1;::::0;::::1;10308:21:1::0;10365:2;10345:18;;;10338:30;10404:34;10384:18;;;10377:62;-1:-1:-1;;;10455:18:1;;;10448:40;10505:19;;18193:87:0::1;10124:406:1::0;18193:87:0::1;18293:20;:44:::0;;-1:-1:-1;;;;;18293:44:0;;::::1;-1:-1:-1::0;;;;;;18293:44:0;;::::1;::::0;::::1;::::0;;;18348:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;18406:53:::1;::::0;;10747:34:1;;;10812:2;10797:18;;10790:43;;;;18406:53:0::1;::::0;10682:18:1;18406:53:0::1;;;;;;;;17976:491:::0;;:::o;14024:79::-;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;14077:11:::1;:18:::0;;-1:-1:-1;;14077:18:0::1;;;::::0;;14024:79::o;9179:156::-;9259:4;9283:44;9297:10;9309:9;9320:6;9283:13;:44::i;2909:138::-;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2971:19:0;::::1;;::::0;;;:14:::1;:19;::::0;;;;;;;;:26;;-1:-1:-1;;2971:26:0::1;2993:4;2971:26:::0;;::::1;::::0;;;3013;;6151:51:1;;;6218:18;;;6211:50;3013:26:0::1;::::0;6124:18:1;3013:26:0::1;5983:284:1::0;18475:369:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;18589:13:::1;5831:2;18589;:13;:::i;:::-;18585:17;::::0;:1:::1;:17;:::i;:::-;18574:7;:28;;18566:70;;;::::0;-1:-1:-1;;;18566:70:0;;12429:2:1;18566:70:0::1;::::0;::::1;12411:21:1::0;12468:2;12448:18;;;12441:30;12507:31;12487:18;;;12480:59;12556:18;;18566:70:0::1;12227:353:1::0;18566:70:0::1;18679:2;18666:12;;:15;;;;:::i;:::-;18655:7;:27;18647:55;;;::::0;-1:-1:-1;;;18647:55:0;;12787:2:1;18647:55:0::1;::::0;::::1;12769:21:1::0;12826:2;12806:18;;;12799:30;-1:-1:-1;;;12845:18:1;;;12838:45;12900:18;;18647:55:0::1;12585:339:1::0;18647:55:0::1;18715:11;:22:::0;;-1:-1:-1;;18715:22:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18748:13:::1;:23:::0;;;18789:47:::1;::::0;;13097:25:1;;;18715:22:0::1;18824:11:::0;;;13165:14:1;13158:22;13153:2;13138:18;;13131:50;18789:47:0::1;::::0;13070:18:1;18789:47:0::1;12929:258:1::0;17577:391:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;17719:12:::1;:28:::0;;;17758:12:::1;:28:::0;;;17797:10:::1;:24:::0;;;17832:7:::1;:18:::0;;;17842:8;17810:11;17872:29:::1;17773:13:::0;17734;17872:29:::1;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;17861:8;:65:::0;17947:13:::1;:11;:13::i;3055:204::-:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;3134:5:::1;::::0;-1:-1:-1;;;;;3134:5:0;;::::1;3127:12:::0;;::::1;::::0;3119:51:::1;;;::::0;-1:-1:-1;;;3119:51:0;;13394:2:1;3119:51:0::1;::::0;::::1;13376:21:1::0;13433:2;13413:18;;;13406:30;13472:28;13452:18;;;13445:56;13518:18;;3119:51:0::1;13192:350:1::0;3119:51:0::1;-1:-1:-1::0;;;;;3181:19:0;::::1;3203:5;3181:19:::0;;;:14:::1;:19;::::0;;;;;;;:27;;-1:-1:-1;;3181:27:0::1;::::0;;3224;;6151:51:1;;;6218:18;;;6211:50;;;;3224:27:0::1;::::0;6124:18:1;3224:27:0::1;5983:284:1::0;10044:320:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;10181:2:::1;10152:25;:31;;10144:84;;;::::0;-1:-1:-1;;;10144:84:0;;13749:2:1;10144:84:0::1;::::0;::::1;13731:21:1::0;13788:2;13768:18;;;13761:30;13827:34;13807:18;;;13800:62;-1:-1:-1;;;13878:18:1;;;13871:39;13927:19;;10144:84:0::1;13547:405:1::0;10144:84:0::1;10300:5;10270:25;10255:12;;:40;;;;:::i;:::-;10254:51;;;;:::i;:::-;10239:12;:66:::0;;;10321:35:::1;::::0;1223:25:1;;;10321:35:0::1;::::0;1211:2:1;1196:18;10321:35:0::1;1077:177:1::0;3625:109:0;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;3698:28:::1;3717:8;3698:18;:28::i;:::-;3625:109:::0;:::o;13935:81::-;3322:4;3357:5;-1:-1:-1;;;;;3357:5:0;2768:10;3346:16;2752:38;;;;-1:-1:-1;;;2752:38:0;;;;;;;:::i;:::-;13989:11:::1;:19:::0;;-1:-1:-1;;13989:19:0::1;::::0;;13935:81::o;3378:107::-;-1:-1:-1;;;;;3458:19:0;3434:4;3458:19;;;:14;:19;;;;;;;;;3378:107::o;514:192::-;600:7;636:12;628:6;;;;620:29;;;;-1:-1:-1;;;620:29:0;;;;;;;;:::i;:::-;-1:-1:-1;660:9:0;672:5;676:1;672;:5;:::i;:::-;660:17;514:192;-1:-1:-1;;;;;514:192:0:o;10372:1158::-;10484:6;;10464:4;;10484:6;;10481:63;;;10500:41;10515:6;10523:9;10534:6;10500:14;:41::i;:::-;10493:48;;;;10481:63;-1:-1:-1;;;;;10560:22:0;;;;;;:14;:22;;;;;;;;10559:23;:53;;;;-1:-1:-1;;;;;;10587:25:0;;;;;;:14;:25;;;;;;;;10586:26;10559:53;10556:127;;;10636:11;;;;10628:43;;;;-1:-1:-1;;;10628:43:0;;14159:2:1;10628:43:0;;;14141:21:1;14198:2;14178:18;;;14171:30;-1:-1:-1;;;14217:18:1;;;14210:50;14277:18;;10628:43:0;13957:344:1;10628:43:0;-1:-1:-1;;;;;10700:22:0;;;;;;:14;:22;;;;;;;;10699:23;:55;;;;-1:-1:-1;;;;;;10727:27:0;;;;;;:19;:27;;;;;;;;10726:28;10699:55;:90;;;;-1:-1:-1;;;;;;10759:30:0;;;;;;:19;:30;;;;;;;;10758:31;10699:90;:111;;;;;10806:4;-1:-1:-1;;;;;10793:17:0;:9;-1:-1:-1;;;;;10793:17:0;;;10699:111;10695:230;;;10870:15;;-1:-1:-1;;;;;10836:20:0;;;;;;:9;:20;;;;;;:29;;10859:6;;10836:29;:::i;:::-;10835:50;;10827:86;;;;-1:-1:-1;;;10827:86:0;;14508:2:1;10827:86:0;;;14490:21:1;14547:2;14527:18;;;14520:30;14586:26;14566:18;;;14559:54;14630:18;;10827:86:0;14306:348:1;10827:86:0;11001:12;;10991:6;:22;;10990:51;;;-1:-1:-1;;;;;;11018:23:0;;;;;;:15;:23;;;;;;;;10990:51;:81;;;-1:-1:-1;;;;;;11045:26:0;;;;;;:15;:26;;;;;;;;10990:81;10982:115;;;;-1:-1:-1;;;10982:115:0;;14861:2:1;10982:115:0;;;14843:21:1;14900:2;14880:18;;;14873:30;-1:-1:-1;;;14919:18:1;;;14912:51;14980:18;;10982:115:0;14659:345:1;10982:115:0;11113:16;:14;:16::i;:::-;11110:35;;;11132:10;:8;:10::i;:::-;11177:53;;;;;;;;;;;-1:-1:-1;;;11177:53:0;;;;;;;;-1:-1:-1;;;;;11177:17:0;;-1:-1:-1;11177:17:0;;;:9;:17;;;;;;;;:53;;11199:6;;11177:21;:53::i;:::-;-1:-1:-1;;;;;11157:17:0;;;;;;:9;:17;;;;;;;;:73;;;;11269:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;11292:22:0;;;;;;:11;:22;;;;;;;;11269:45;11268:93;;11327:34;11335:6;11343;11351:9;11327:7;:34::i;:::-;11268:93;;;11318:6;11268:93;-1:-1:-1;;;;;11397:20:0;;;;;;:9;:20;;;;;;11243:118;;-1:-1:-1;11397:40:0;;11243:118;11397:24;:40::i;:::-;-1:-1:-1;;;;;11374:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11457:43;;;;;;-1:-1:-1;;;;;;;;;;;11457:43:0;;;11485:14;1223:25:1;;1211:2;1196:18;;1077:177;11457:43:0;;;;;;;;-1:-1:-1;11518:4:0;;10372:1158;-1:-1:-1;;;;10372:1158:0:o;16661:675::-;16752:3;16712:36;16744:3;16712:27;16725:13;;16712:8;;:12;;:27;;;;:::i;:::-;:31;;:36::i;:::-;:43;;16704:87;;;;-1:-1:-1;;;16704:87:0;;15211:2:1;16704:87:0;;;15193:21:1;15250:2;15230:18;;;15223:30;15289:33;15269:18;;;15262:61;15340:18;;16704:87:0;15009:355:1;16704:87:0;16851:3;16810:37;16843:3;16810:28;16823:14;;16810:8;;:12;;:28;;;;:::i;:37::-;:44;;16802:89;;;;-1:-1:-1;;;16802:89:0;;15571:2:1;16802:89:0;;;15553:21:1;;;15590:18;;;15583:30;15649:34;15629:18;;;15622:62;15701:18;;16802:89:0;15369:356:1;16802:89:0;16967:3;16910:53;16959:3;16910:44;16940:13;;16923:14;;:30;;;;:::i;:::-;16910:8;;;:12;:44::i;:53::-;:60;;16902:109;;;;-1:-1:-1;;;16902:109:0;;15932:2:1;16902:109:0;;;15914:21:1;15971:2;15951:18;;;15944:30;16010:34;15990:18;;;15983:62;-1:-1:-1;;;16061:18:1;;;16054:34;16105:19;;16902:109:0;15730:400:1;16902:109:0;17075:3;17030:41;17067:3;17030:32;17043:18;;17030:8;;:12;;:32;;;;:::i;:41::-;:48;;17022:97;;;;-1:-1:-1;;;17022:97:0;;16337:2:1;17022:97:0;;;16319:21:1;16376:2;16356:18;;;16349:30;16415:34;16395:18;;;16388:62;-1:-1:-1;;;16466:18:1;;;16459:34;16510:19;;17022:97:0;16135:400:1;17022:97:0;17137:191;17154:36;17186:3;17154:27;17167:13;;17154:8;;:12;;:27;;;;:::i;:36::-;17212:37;17245:3;17212:28;17225:14;;17212:8;;:12;;:28;;;;:::i;:37::-;17271:41;17308:3;17271:32;17284:18;;17271:8;;:12;;:32;;;;:::i;:41::-;17137:191;;;16760:4:1;16748:17;;;16730:36;;16802:17;;;16797:2;16782:18;;16775:45;16856:17;;16836:18;;;16829:45;;;;16718:2;16703:18;17137:191:0;16540:340:1;3742:185:0;-1:-1:-1;;;;;3816:22:0;;3808:31;;;;;;3876:5;;;3855:37;;-1:-1:-1;;;;;3855:37:0;;;;3876:5;;;3855:37;;;3903:5;:16;;-1:-1:-1;;;;;;3903:16:0;-1:-1:-1;;;;;3903:16:0;;;;;;;;;;3742:185::o;11542:330::-;11672:53;;;;;;;;;;;-1:-1:-1;;;11672:53:0;;;;;;;;-1:-1:-1;;;;;11672:17:0;;11635:4;11672:17;;;:9;:17;;;;;;;:53;;11694:6;;11672:21;:53::i;:::-;-1:-1:-1;;;;;11652:17:0;;;;;;;:9;:17;;;;;;:73;;;;11759:20;;;;;;;:32;;11784:6;11759:24;:32::i;:::-;-1:-1:-1;;;;;11736:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11807:35;;;;;;-1:-1:-1;;;;;;;;;;;11807:35:0;;;11835:6;1223:25:1;;1211:2;1196:18;;1077:177;11807:35:0;;;;;;;;-1:-1:-1;11860:4:0;11542:330;;;;;:::o;12919:197::-;12968:4;12992:10;-1:-1:-1;;;;;13006:4:0;12992:18;;;;;:38;;-1:-1:-1;13024:6:0;;;;13023:7;12992:38;:62;;;;-1:-1:-1;13043:11:0;;;;12992:62;:116;;;;-1:-1:-1;;13095:13:0;;13085:4;13067:24;;;;:9;:24;;;;;;:41;;;12919:197::o;14111:1432::-;7179:6;:13;;-1:-1:-1;;7179:13:0;7188:4;7179:13;;;14195:7:::1;::::0;14184:8:::1;::::0;7179:6;;14184:18:::1;::::0;::::1;:::i;:::-;14162:40:::0;-1:-1:-1;14215:23:0::1;14273:15;14162:40:::0;14287:1:::1;14273:15;:::i;:::-;14258:12;;14242:13;;:28;;;;:::i;:::-;14241:48;;;;:::i;:::-;14215:74;;14300:20;14339:15;14323:13;;:31;;;;:::i;:::-;14391:16;::::0;;14405:1:::1;14391:16:::0;;;;;::::1;::::0;;14300:54;;-1:-1:-1;14367:21:0::1;::::0;14391:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;14391:16:0::1;14367:40;;14436:4;14418;14423:1;14418:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;14418:23:0::1;;;-1:-1:-1::0;;;;;14418:23:0::1;;;::::0;::::1;14462:4;14452;14457:1;14452:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14452:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;14479:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;14479:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;14551:12;;14479:6:::1;::::0;14594:4;;14621::::1;::::0;14641:15:::1;::::0;14479:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14764:12:0::1;::::0;14700:21:::1;::::0;-1:-1:-1;14764:16:0::1;::::0;-1:-1:-1;14779:1:0::1;::::0;14764:16:::1;:::i;:::-;14749:32;::::0;:11;:32:::1;:::i;:::-;14735:46:::0;-1:-1:-1;14802:26:0::1;14861:15;14735:46:::0;14875:1:::1;14861:15;:::i;:::-;14844:12;::::0;14832:24:::1;::::0;:9;:24:::1;:::i;:::-;14831:46;;;;:::i;:::-;14802:75;;14888:26;14946:11;14930:12;;14918:9;:24;;;;:::i;:::-;14917:40;;;;:::i;:::-;14888:69;;14968:24;15022:11;15008:10;;14996:9;:22;;;;:::i;:::-;14995:38;;;;:::i;:::-;15054:20;::::0;15046:58:::1;::::0;14968:65;;-1:-1:-1;;;;;;15054:20:0::1;::::0;15046:58;::::1;;;::::0;15085:18;;15054:20:::1;15046:58:::0;15054:20;15046:58;15085:18;15054:20;15046:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;15123:18:0::1;::::0;15115:54:::1;::::0;-1:-1:-1;;;;;15123:18:0;;::::1;::::0;15115:54;::::1;;;::::0;15152:16;;15123:18:::1;15115:54:::0;15123:18;15115:54;15152:16;15123:18;15115:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;15185:19:0;;15182:354:::1;;15220:6;::::0;:236:::1;::::0;-1:-1:-1;;;15220:236:0;;15296:4:::1;15220:236;::::0;::::1;18343:34:1::0;;;18393:18;;;18386:34;;;15220:6:0::1;18436:18:1::0;;;18429:34;;;18479:18;;;18472:34;18522:19;;;18515:44;15426:15:0::1;18575:19:1::0;;;18568:35;-1:-1:-1;;;;;15220:6:0;;::::1;::::0;:22:::1;::::0;15250:18;;18277:19:1;;15220:236:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;15476:48:0::1;::::0;;19099:25:1;;;19155:2;19140:18;;19133:34;;;15476:48:0::1;::::0;-1:-1:-1;19072:18:1;15476:48:0::1;;;;;;;15182:354;-1:-1:-1::0;;7197:6:0;:14;;-1:-1:-1;;7197:14:0;;;-1:-1:-1;;;;;;14111:1432:0:o;11880:1031::-;11966:7;11989:11;;;:28;;-1:-1:-1;12004:8:0;;:13;11989:28;11986:72;;;-1:-1:-1;12040:6:0;12033:13;;11986:72;12091:18;;-1:-1:-1;;;;;12138:4:0;12125:17;;;;;;12122:154;;-1:-1:-1;12172:14:0;;12122:154;;;12217:4;-1:-1:-1;;;;;12207:14:0;:6;-1:-1:-1;;;;;12207:14:0;;12204:72;;-1:-1:-1;12251:13:0;;12204:72;12288:17;12308:62;12349:20;6590:4;12366:3;12349:20;:::i;:::-;12308:36;12333:10;12308:20;12319:8;;12308:6;:10;;:20;;;;:::i;:::-;:24;;:36::i;:62::-;12288:82;;12381:18;12402:36;12429:8;;12402:22;12416:7;;12402:9;:13;;:22;;;;:::i;:36::-;12381:57;-1:-1:-1;12449:22:0;12474:25;:9;12381:57;12474:13;:25::i;:::-;12449:50;-1:-1:-1;12515:18:0;;12512:187;;12594:4;12576:24;;;;:9;:24;;;;;;:44;;12605:14;12576:28;:44::i;:::-;12567:4;12549:24;;;;:9;:24;;;;;;;:71;;;;12640:47;;-1:-1:-1;;;;;12640:47:0;;;-1:-1:-1;;;;;;;;;;;12640:47:0;;;12672:14;1223:25:1;;1211:2;1196:18;;1077:177;12640:47:0;;;;;;;;12512:187;12722:14;;12719:144;;12767:12;;:28;;12784:10;12767:16;:28::i;:::-;12752:12;:43;12815:34;;1223:25:1;;;5672:42:0;;-1:-1:-1;;;;;12815:34:0;;;-1:-1:-1;;;;;;;;;;;12815:34:0;1211:2:1;1196:18;12815:34:0;;;;;;;12719:144;12882:21;:6;12893:9;12882:10;:21::i;:::-;12875:28;11880:1031;-1:-1:-1;;;;;;;;11880:1031:0:o;185:181::-;243:7;;275:5;279:1;275;:5;:::i;:::-;263:17;;304:1;299;:6;;291:46;;;;-1:-1:-1;;;291:46:0;;19380:2:1;291:46:0;;;19362:21:1;19419:2;19399:18;;;19392:30;19458:29;19438:18;;;19431:57;19505:18;;291:46:0;19178:351:1;712:250:0;770:7;794:1;799;794:6;790:47;;-1:-1:-1;824:1:0;817:8;;790:47;849:9;861:5;865:1;861;:5;:::i;:::-;849:17;-1:-1:-1;894:1:0;885:5;889:1;849:17;885:5;:::i;:::-;:10;877:56;;;;-1:-1:-1;;;877:56:0;;19736:2:1;877:56:0;;;19718:21:1;19775:2;19755:18;;;19748:30;19814:34;19794:18;;;19787:62;-1:-1:-1;;;19865:18:1;;;19858:31;19906:19;;877:56:0;19534:397:1;968:132:0;1026:7;1053:39;1057:1;1060;1053:39;;;;;;;;;;;;;;;;;:3;:39::i;372:136::-;430:7;457:43;461:1;464;457:43;;;;;;;;;;;;;;;;;:3;:43::i;1106:189::-;1192:7;1227:12;1220:5;1212:28;;;;-1:-1:-1;;;1212:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1251:9:0;1263:5;1267:1;1263;:5;:::i;14:118:1:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:750;229:6;237;245;298:2;286:9;277:7;273:23;269:32;266:52;;;314:1;311;304:12;266:52;354:9;341:23;383:18;424:2;416:6;413:14;410:34;;;440:1;437;430:12;410:34;478:6;467:9;463:22;453:32;;523:7;516:4;512:2;508:13;504:27;494:55;;545:1;542;535:12;494:55;585:2;572:16;611:2;603:6;600:14;597:34;;;627:1;624;617:12;597:34;682:7;675:4;665:6;662:1;658:14;654:2;650:23;646:34;643:47;640:67;;;703:1;700;693:12;640:67;734:4;726:13;;;;-1:-1:-1;758:6:1;-1:-1:-1;;799:20:1;;786:34;829:28;786:34;829:28;:::i;:::-;876:5;866:15;;;137:750;;;;;:::o;892:180::-;951:6;1004:2;992:9;983:7;979:23;975:32;972:52;;;1020:1;1017;1010:12;972:52;-1:-1:-1;1043:23:1;;892:180;-1:-1:-1;892:180:1:o;1259:548::-;1371:4;1400:2;1429;1418:9;1411:21;1461:6;1455:13;1504:6;1499:2;1488:9;1484:18;1477:34;1529:1;1539:140;1553:6;1550:1;1547:13;1539:140;;;1648:14;;;1644:23;;1638:30;1614:17;;;1633:2;1610:26;1603:66;1568:10;;1539:140;;;1543:3;1728:1;1723:2;1714:6;1703:9;1699:22;1695:31;1688:42;1798:2;1791;1787:7;1782:2;1774:6;1770:15;1766:29;1755:9;1751:45;1747:54;1739:62;;;;1259:548;;;;:::o;1812:173::-;1880:20;;-1:-1:-1;;;;;1929:31:1;;1919:42;;1909:70;;1975:1;1972;1965:12;1909:70;1812:173;;;:::o;1990:254::-;2058:6;2066;2119:2;2107:9;2098:7;2094:23;2090:32;2087:52;;;2135:1;2132;2125:12;2087:52;2158:29;2177:9;2158:29;:::i;:::-;2148:39;2234:2;2219:18;;;;2206:32;;-1:-1:-1;;;1990:254:1:o;2441:328::-;2518:6;2526;2534;2587:2;2575:9;2566:7;2562:23;2558:32;2555:52;;;2603:1;2600;2593:12;2555:52;2626:29;2645:9;2626:29;:::i;:::-;2616:39;;2674:38;2708:2;2697:9;2693:18;2674:38;:::i;:::-;2664:48;;2759:2;2748:9;2744:18;2731:32;2721:42;;2441:328;;;;;:::o;2774:186::-;2833:6;2886:2;2874:9;2865:7;2861:23;2857:32;2854:52;;;2902:1;2899;2892:12;2854:52;2925:29;2944:9;2925:29;:::i;3381:316::-;3458:6;3466;3474;3527:2;3515:9;3506:7;3502:23;3498:32;3495:52;;;3543:1;3540;3533:12;3495:52;-1:-1:-1;;3566:23:1;;;3636:2;3621:18;;3608:32;;-1:-1:-1;3687:2:1;3672:18;;;3659:32;;3381:316;-1:-1:-1;3381:316:1:o;3910:260::-;3978:6;3986;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4078:29;4097:9;4078:29;:::i;:::-;4068:39;;4126:38;4160:2;4149:9;4145:18;4126:38;:::i;:::-;4116:48;;3910:260;;;;;:::o;4175:309::-;4240:6;4248;4301:2;4289:9;4280:7;4276:23;4272:32;4269:52;;;4317:1;4314;4307:12;4269:52;4356:9;4343:23;4375:28;4397:5;4375:28;:::i;4489:385::-;4575:6;4583;4591;4599;4652:3;4640:9;4631:7;4627:23;4623:33;4620:53;;;4669:1;4666;4659:12;4620:53;-1:-1:-1;;4692:23:1;;;4762:2;4747:18;;4734:32;;-1:-1:-1;4813:2:1;4798:18;;4785:32;;4864:2;4849:18;4836:32;;-1:-1:-1;4489:385:1;-1:-1:-1;4489:385:1:o;5105:335::-;5307:2;5289:21;;;5346:2;5326:18;;;5319:30;-1:-1:-1;;;5380:2:1;5365:18;;5358:41;5431:2;5416:18;;5105:335::o;5445:401::-;5647:2;5629:21;;;5686:2;5666:18;;;5659:30;5725:34;5720:2;5705:18;;5698:62;-1:-1:-1;;;5791:2:1;5776:18;;5769:35;5836:3;5821:19;;5445:401::o;5851:127::-;5912:10;5907:3;5903:20;5900:1;5893:31;5943:4;5940:1;5933:15;5967:4;5964:1;5957:15;6272:127;6333:10;6328:3;6324:20;6321:1;6314:31;6364:4;6361:1;6354:15;6388:4;6385:1;6378:15;6404:135;6443:3;6464:17;;;6461:43;;6484:18;;:::i;:::-;-1:-1:-1;6531:1:1;6520:13;;6404:135::o;6544:329::-;6746:2;6728:21;;;6785:1;6765:18;;;6758:29;-1:-1:-1;;;6818:2:1;6803:18;;6796:36;6864:2;6849:18;;6544:329::o;7283:168::-;7356:9;;;7387;;7404:15;;;7398:22;;7384:37;7374:71;;7425:18;;:::i;7456:217::-;7496:1;7522;7512:132;;7566:10;7561:3;7557:20;7554:1;7547:31;7601:4;7598:1;7591:15;7629:4;7626:1;7619:15;7512:132;-1:-1:-1;7658:9:1;;7456:217::o;8027:128::-;8094:9;;;8115:11;;;8112:37;;;8129:18;;:::i;8517:125::-;8582:9;;;8603:10;;;8600:36;;;8616:18;;:::i;8993:184::-;9063:6;9116:2;9104:9;9095:7;9091:23;9087:32;9084:52;;;9132:1;9129;9122:12;9084:52;-1:-1:-1;9155:16:1;;8993:184;-1:-1:-1;8993:184:1:o;9461:245::-;9528:6;9581:2;9569:9;9560:7;9556:23;9552:32;9549:52;;;9597:1;9594;9587:12;9549:52;9629:9;9623:16;9648:28;9670:5;9648:28;:::i;10844:422::-;10933:1;10976:5;10933:1;10990:270;11011:7;11001:8;10998:21;10990:270;;;11070:4;11066:1;11062:6;11058:17;11052:4;11049:27;11046:53;;;11079:18;;:::i;:::-;11129:7;11119:8;11115:22;11112:55;;;11149:16;;;;11112:55;11228:22;;;;11188:15;;;;10990:270;;;10994:3;10844:422;;;;;:::o;11271:806::-;11320:5;11350:8;11340:80;;-1:-1:-1;11391:1:1;11405:5;;11340:80;11439:4;11429:76;;-1:-1:-1;11476:1:1;11490:5;;11429:76;11521:4;11539:1;11534:59;;;;11607:1;11602:130;;;;11514:218;;11534:59;11564:1;11555:10;;11578:5;;;11602:130;11639:3;11629:8;11626:17;11623:43;;;11646:18;;:::i;:::-;-1:-1:-1;;11702:1:1;11688:16;;11717:5;;11514:218;;11816:2;11806:8;11803:16;11797:3;11791:4;11788:13;11784:36;11778:2;11768:8;11765:16;11760:2;11754:4;11751:12;11747:35;11744:77;11741:159;;;-1:-1:-1;11853:19:1;;;11885:5;;11741:159;11932:34;11957:8;11951:4;11932:34;:::i;:::-;12002:6;11998:1;11994:6;11990:19;11981:7;11978:32;11975:58;;;12013:18;;:::i;:::-;12051:20;;11271:806;-1:-1:-1;;;11271:806:1:o;12082:140::-;12140:5;12169:47;12210:4;12200:8;12196:19;12190:4;12169:47;:::i;17017:980::-;17279:4;17327:3;17316:9;17312:19;17358:6;17347:9;17340:25;17384:2;17422:6;17417:2;17406:9;17402:18;17395:34;17465:3;17460:2;17449:9;17445:18;17438:31;17489:6;17524;17518:13;17555:6;17547;17540:22;17593:3;17582:9;17578:19;17571:26;;17632:2;17624:6;17620:15;17606:29;;17653:1;17663:195;17677:6;17674:1;17671:13;17663:195;;;17742:13;;-1:-1:-1;;;;;17738:39:1;17726:52;;17833:15;;;;17798:12;;;;17774:1;17692:9;17663:195;;;-1:-1:-1;;;;;;;17914:32:1;;;;17909:2;17894:18;;17887:60;-1:-1:-1;;;17978:3:1;17963:19;17956:35;17875:3;17017:980;-1:-1:-1;;;17017:980:1:o;18614:306::-;18702:6;18710;18718;18771:2;18759:9;18750:7;18746:23;18742:32;18739:52;;;18787:1;18784;18777:12;18739:52;18816:9;18810:16;18800:26;;18866:2;18855:9;18851:18;18845:25;18835:35;;18910:2;18899:9;18895:18;18889:25;18879:35;;18614:306;;;;;:::o

Swarm Source

ipfs://af860dcac5dc5dd5fda511beeb529b71e14666bd231f97a5e624e76d01f6533d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.