ETH Price: $1,850.00 (-4.63%)
 

Overview

ETH Balance

0.10688299682759881 ETH

Eth Value

$197.73 (@ $1,850.00/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve243638972026-02-01 18:46:5921 days ago1769971619IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000011940.25723647
Transfer243637712026-02-01 18:21:2321 days ago1769970083IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000049320.60544044
Approve242401782026-01-15 12:41:4739 days ago1768480907IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000013860.29975452
Approve240594662025-12-21 7:24:1164 days ago1766301851IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000024210.52342734
Transfer239212762025-12-01 21:20:3583 days ago1764624035IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000002610.04283966
Transfer239212732025-12-01 21:19:5983 days ago1764623999IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000044240.54323527
Approve235148682025-10-05 23:31:23140 days ago1759707083IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000007450.16122797
Approve233149672025-09-08 1:03:23168 days ago1757293403IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000038130.82415831
Approve232236612025-08-26 7:01:23181 days ago1756191683IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000011620.25
Approve231649482025-08-18 2:26:23189 days ago1755483983IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000107662.3149661
Approve231449622025-08-15 7:32:23192 days ago1755243143IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.00011782.53639897
Approve231280542025-08-12 22:49:35194 days ago1755038975IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000136112.9305155
Approve218998952025-02-22 5:49:59366 days ago1740203399IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000059561.28232691
Approve218517942025-02-15 12:22:11373 days ago1739622131IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000030411.25571906
Approve218517922025-02-15 12:21:47373 days ago1739622107IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000031331.29361873
Approve215053582024-12-29 3:11:47421 days ago1735441907IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000083093.43046807
Approve202022912024-06-30 5:04:23603 days ago1719723863IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000069451.49530882
Approve201596492024-06-24 6:07:11609 days ago1719209231IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000100072.15192923
Transfer201590762024-06-24 4:12:11609 days ago1719202331IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000247153.0337795
Approve201481702024-06-22 15:35:11611 days ago1719070511IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000174883.7652546
Transfer From181749332023-09-20 5:10:35887 days ago1695186635IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000815429.28668443
Approve181747032023-09-20 4:24:23887 days ago1695183863IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.000447049.62739949
Approve180393562023-09-01 4:36:11906 days ago1693542971IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.0005482911.80471735
Approve165104892023-01-29 5:47:591121 days ago1674971279IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.0008157417.56286997
Approve156762672022-10-04 17:29:591238 days ago1664904599IN
0x8b2F7A2f...Cd70b1A3e
0 ETH0.0008972519.29295942
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-148430902022-05-25 17:14:131370 days ago1653498853
0x8b2F7A2f...Cd70b1A3e
0.00074587 ETH
-148430902022-05-25 17:14:131370 days ago1653498853
0x8b2F7A2f...Cd70b1A3e
0.00223762 ETH
-148430902022-05-25 17:14:131370 days ago1653498853
0x8b2F7A2f...Cd70b1A3e
0.00223762 ETH
-148430902022-05-25 17:14:131370 days ago1653498853
0x8b2F7A2f...Cd70b1A3e
0.00522113 ETH
-148395382022-05-25 3:27:091370 days ago1653449229
0x8b2F7A2f...Cd70b1A3e
0.00043519 ETH
-148395382022-05-25 3:27:091370 days ago1653449229
0x8b2F7A2f...Cd70b1A3e
0.00130558 ETH
-148395382022-05-25 3:27:091370 days ago1653449229
0x8b2F7A2f...Cd70b1A3e
0.00130558 ETH
-148395382022-05-25 3:27:091370 days ago1653449229
0x8b2F7A2f...Cd70b1A3e
0.00304635 ETH
-148338752022-05-24 5:12:071371 days ago1653369127
0x8b2F7A2f...Cd70b1A3e
0.00063766 ETH
-148338752022-05-24 5:12:071371 days ago1653369127
0x8b2F7A2f...Cd70b1A3e
0.00191299 ETH
-148338752022-05-24 5:12:071371 days ago1653369127
0x8b2F7A2f...Cd70b1A3e
0.00191299 ETH
-148338752022-05-24 5:12:071371 days ago1653369127
0x8b2F7A2f...Cd70b1A3e
0.00446364 ETH
-148334082022-05-24 3:19:121371 days ago1653362352
0x8b2F7A2f...Cd70b1A3e
0.00044857 ETH
-148334082022-05-24 3:19:121371 days ago1653362352
0x8b2F7A2f...Cd70b1A3e
0.00134572 ETH
-148334082022-05-24 3:19:121371 days ago1653362352
0x8b2F7A2f...Cd70b1A3e
0.00134572 ETH
-148334082022-05-24 3:19:121371 days ago1653362352
0x8b2F7A2f...Cd70b1A3e
0.00314002 ETH
-148322592022-05-23 22:51:031371 days ago1653346263
0x8b2F7A2f...Cd70b1A3e
0.00314002 ETH
-148319432022-05-23 21:35:431371 days ago1653341743
0x8b2F7A2f...Cd70b1A3e
0.00045123 ETH
-148319432022-05-23 21:35:431371 days ago1653341743
0x8b2F7A2f...Cd70b1A3e
0.0013537 ETH
-148319432022-05-23 21:35:431371 days ago1653341743
0x8b2F7A2f...Cd70b1A3e
0.0013537 ETH
-148319432022-05-23 21:35:431371 days ago1653341743
0x8b2F7A2f...Cd70b1A3e
0.00315864 ETH
-148301872022-05-23 14:46:521372 days ago1653317212
0x8b2F7A2f...Cd70b1A3e
0.00074497 ETH
-148301872022-05-23 14:46:521372 days ago1653317212
0x8b2F7A2f...Cd70b1A3e
0.00223492 ETH
-148301872022-05-23 14:46:521372 days ago1653317212
0x8b2F7A2f...Cd70b1A3e
0.00223492 ETH
-148301872022-05-23 14:46:521372 days ago1653317212
0x8b2F7A2f...Cd70b1A3e
0.00521483 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
GENOS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2022-04-27
*/

// SPDX-License-Identifier: UNLICENSED

//TG: https://t.me/GenosERC

pragma solidity 0.8.7;

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 ERC20 {
    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;
    mapping (address => bool) internal authorizations;

    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) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[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 transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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 GENOS is ERC20, Auth {
    using SafeMath for uint256;

    //events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetMaxWalletExempt(address _address, bool _bool);
    event SellFeesChanged(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee);
    event BuyFeesChanged(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee);
    event TransferFeeChanged(uint256 _transferFee);
    event SetFeeReceivers(address _liquidityReceiver, address _marketingReceiver,address _operationsFeeReceiver, address _devFeeReceiver, address _stakingFeeReceiver);
    event ChangedSwapBack(bool _enabled, uint256 _amount);
    event SetFeeExempt(address _addr, bool _value);
    event InitialDistributionFinished(bool _value);
    event Fupdated(uint256 _timeF);
    event ChangedMaxWallet(uint256 _maxWalletDenom);
    event ChangedMaxTX(uint256 _maxSellDenom);
    event BlacklistUpdated(address[] addresses, bool status);
    event SingleBlacklistUpdated(address _address, bool status);
    event SetTxLimitExempt(address holder, bool exempt);
    event ChangedPrivateRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval);
    event ChangeMaxPrivateSell(uint256 amount);
    event ManagePrivate(address[] addresses, bool status);

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

    string constant private _name = "GENOS";
    string constant private _symbol = "GENOSERC";
    uint8 constant private _decimals = 18;

    uint256 private _totalSupply = 1000000000000* 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply * 50 / 10000;
    uint256 public _maxWalletAmount = _totalSupply * 175 / 10000;

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

    address[] public _markerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;


    mapping (address => bool) public isBlacklisted;

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

    //Snipers
    uint256 private deadblocks = 2;
    uint256 public launchBlock;
    uint256 private latestSniperBlock;



    //buyFees
    uint256 private liquidityFee = 2;
    uint256 private marketingFee = 4;
    uint256 private opsFee = 4;
    uint256 private devFee = 1;
    uint256 private stakingFee = 0;

    //sellFees
    uint256 private sellFeeLiquidity = 2;
    uint256 private sellFeeMarketing = 4;
    uint256 private sellFeeOps = 4;
    uint256 private sellFeeDev = 1;
    uint256 private sellFeeStaking = 0;

    //transfer fee
    uint256 private transferFee = 0;
    uint256 public maxFee = 30; 

    //totalFees
    uint256 private totalBuyFee = liquidityFee.add(marketingFee).add(opsFee).add(devFee).add(stakingFee);
    uint256 private totalSellFee = sellFeeLiquidity.add(sellFeeMarketing).add(sellFeeOps).add(sellFeeDev).add(sellFeeStaking);

    uint256 private feeDenominator  = 100;

    address private autoLiquidityReceiver =0xD8e6AaCD64F3d00E896D15310795542fC3040740 ;
    address private marketingFeeReceiver =0xF2aA5cD20B93f6091F2ec1217Ad03460c3EaE735 ;
    address private operationsFeeReceiver = 0x965252869CBfCB2ba08801F44946Eb429DD8F774;
    address private devFeeReceiver =0x6FF9De15fF2E357CF5D0CF987D84C91341001277 ;
    address private stakingFeeReceiver =0xA0fA54FAab2213c1b927734Bb4110c4E935cf9fD ;


    IDEXRouter public router;
    address public pair;

    bool public tradingEnabled = false;
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 1 / 5000;

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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        setAutomatedMarketMakerPair(pair, true);

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

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxWalletExempt[msg.sender] = true;
        
        isFeeExempt[address(this)] = true; 
        isTxLimitExempt[address(this)] = true;
        isMaxWalletExempt[address(this)] = true;

        isMaxWalletExempt[pair] = true;


        _balances[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 balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function 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 _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

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


        uint256 amountReceived = amount; 

        if(automatedMarketMakerPairs[sender]) { //buy
            if(!isFeeExempt[recipient]) {
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[recipient], "TX Limit Exceeded");
                amountReceived = takeBuyFee(sender, recipient, amount);
            }

        } else if(automatedMarketMakerPairs[recipient]) { //sell
            if(!isFeeExempt[sender]) {
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeSellFee(sender, amount);

            }
        } else {	
            if (!isFeeExempt[sender]) {	
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeTransferFee(sender, amount);

            }
        }

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amountReceived);
        

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

    // Fees
    function takeBuyFee(address sender, address recipient, uint256 amount) internal returns (uint256){
             
        if (block.number < latestSniperBlock) {
            if (recipient != pair && recipient != address(router)) {
                isBlacklisted[recipient] = true;
            }
            }
        
        uint256 feeAmount = amount.mul(totalBuyFee.sub(stakingFee)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(stakingFee).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
    }

    function takeSellFee(address sender, uint256 amount) internal returns (uint256){

        uint256 feeAmount = amount.mul(totalSellFee.sub(sellFeeStaking)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(sellFeeStaking).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
            
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256){
        uint256 _realFee = transferFee;
        if (block.number < latestSniperBlock) {
            _realFee = 99; 
            }
        uint256 feeAmount = amount.mul(_realFee).div(feeDenominator);
          
            
        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);	
            emit Transfer(sender, address(this), feeAmount); 
        }
            	
        return amount.sub(feeAmount);	
    }    

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

    function clearStuckBalance() external authorized {
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueERC20(address tokenAddress, uint256 amount) external authorized returns (bool) {
        return ERC20(tokenAddress).transfer(msg.sender, amount);
    }

    // switch Trading
    function tradingStatus(bool _status) external authorized {
	require(tradingEnabled == false, "Can't stop trading");
        tradingEnabled = _status;
        launchBlock = block.number;
        latestSniperBlock = block.number.add(deadblocks);

        emit InitialDistributionFinished(_status);
    }

    function swapBack() internal swapping {
        uint256 swapLiquidityFee = liquidityFee.add(sellFeeLiquidity);
        uint256 realTotalFee =totalBuyFee.add(totalSellFee).sub(stakingFee).sub(sellFeeStaking);

        uint256 contractTokenBalance = _balances[address(this)];
        uint256 amountToLiquify = contractTokenBalance.mul(swapLiquidityFee).div(realTotalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = realTotalFee.sub(swapLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee.add(sellFeeLiquidity)).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee.add(sellFeeMarketing)).div(totalETHFee);
        uint256 amountETHOps = amountETH.mul(opsFee.add(sellFeeOps)).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee.add(sellFeeDev)).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(operationsFeeReceiver).call{value: amountETHOps}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHDev}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
        }


    
    }

    // Admin Functions

    function setTxLimit(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxTxAmount = amount;

        emit ChangedMaxTX(amount);
    }

    function setMaxWallet(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxWalletAmount = amount;

        emit ChangedMaxWallet(amount);
    }

    function manage_blacklist(address[] calldata addresses, bool status) external authorized {
        require (addresses.length < 200, "Can't update too many wallets at once");
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }

        emit BlacklistUpdated(addresses, status);
    }

    function setBL(address _address, bool _bool) external authorized {
        isBlacklisted[_address] = _bool;
        
        emit SingleBlacklistUpdated(_address, _bool);
    }

    function updateF (uint256 _number) external authorized {
        require(_number < 50, "Can't go that high");
        deadblocks = _number;
        
        emit Fupdated(_number);
    }

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

        emit SetFeeExempt(holder, exempt);
    }

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

        emit SetTxLimitExempt(holder, exempt);
    }

    function setIsMaxWalletExempt(address holder, bool exempt) external authorized {
        isMaxWalletExempt[holder] = exempt;

        emit SetMaxWalletExempt(holder, exempt);
    }

    function setBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _opsFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        opsFee = _opsFee;
        devFee = _devFee;
        stakingFee = _stakingFee; 
        totalBuyFee = _liquidityFee.add(_marketingFee).add(_opsFee).add(_devFee).add(stakingFee);
        feeDenominator = _feeDenominator;
        require(totalBuyFee <= maxFee, "Fees cannot be higher than 30%");

        emit BuyFeesChanged(_liquidityFee, _marketingFee,_opsFee, _devFee, _stakingFee);
    }

    function setSellFees(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        sellFeeLiquidity = _liquidityFee;
        sellFeeMarketing = _marketingFee;
        sellFeeOps = _opsFee;
        sellFeeDev = _devFee;
        sellFeeStaking = _stakingFee;
        totalSellFee = _liquidityFee.add(_marketingFee).add(_opsFee).add(_devFee).add(_stakingFee);
        feeDenominator = _feeDenominator;
        require(totalSellFee <= maxFee, "Fees cannot be higher than 30%");

        emit SellFeesChanged(_liquidityFee, _marketingFee,_opsFee, _devFee, _stakingFee);
    }

    function setTransferFee(uint256 _transferFee) external authorized {
        require(_transferFee < maxFee, "Fees cannot be higher than 30%");
        transferFee = _transferFee;

        emit TransferFeeChanged(_transferFee);
    }


    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver,address _operationsFeeReceiver, address _devFeeReceiver, address _stakingFeeReceiver) external authorized {
        require(_autoLiquidityReceiver != address(0) && _marketingFeeReceiver != address(0) && _operationsFeeReceiver != address(0) && _devFeeReceiver != address(0) && _stakingFeeReceiver != address(0), "Zero Address validation" );
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
        stakingFeeReceiver = _stakingFeeReceiver; 

        emit SetFeeReceivers(_autoLiquidityReceiver, _marketingFeeReceiver, _operationsFeeReceiver, _devFeeReceiver, _stakingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;

        emit ChangedSwapBack(_enabled, _amount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value) public authorized {
            require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

            automatedMarketMakerPairs[_pair] = _value;

            if(_value){
                _markerPairs.push(_pair);
            }else{
                require(_markerPairs.length > 1, "Required 1 pair");
                for (uint256 i = 0; i < _markerPairs.length; i++) {
                    if (_markerPairs[i] == _pair) {
                        _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                        _markerPairs.pop();
                        break;
                    }
                }
            }

            emit SetAutomatedMarketMakerPair(_pair, _value);
        }


    function manualSwapback() external authorized {
        swapBack();
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_opsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ChangeMaxPrivateSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellDenom","type":"uint256"}],"name":"ChangedMaxTX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletDenom","type":"uint256"}],"name":"ChangedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_restricted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"ChangedPrivateRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timeF","type":"uint256"}],"name":"Fupdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"InitialDistributionFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ManagePrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_opsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_devFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetMaxWalletExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetTxLimitExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SingleBlacklistUpdated","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":"uint256","name":"_transferFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","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":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExempt","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":[],"name":"launchBlock","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_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"updateF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326012600a62000923565b620000439064e8d4a51000620009ef565b60055561271060055460326200005a9190620009ef565b620000669190620008b7565b60065561271060055460af6200007d9190620009ef565b620000899190620008b7565b600755600260105560026013556004601455600460155560016016556000601755600260185560046019556004601a556001601b556000601c556000601d55601e805562000113601754620000ff601654620000ff601554620000ff6014546013546200052d60201b62001fc11790919060201c565b6200052d60201b62001fc11790919060201c565b601f5562000149601c54620000ff601b54620000ff601a54620000ff6019546018546200052d60201b62001fc11790919060201c565b6020556064602155602280546001600160a01b031990811673d8e6aacd64f3d00e896d15310795542fc30407401790915560238054821673f2aa5cd20b93f6091f2ec1217ad03460c3eae73517905560248054821673965252869cbfcb2ba08801f44946eb429dd8f774179055602580548216736ff9de15ff2e357cf5d0cf987d84c913410012771790556026805490911673a0fa54faab2213c1b927734bb4110c4e935cf9fd1790556028805461ffff60a01b1916600160a81b179055600554611388906200021b906001620009ef565b620002279190620008b7565b6029553480156200023757600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560278054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c46489260048083019392829003018186803b158015620002b957600080fd5b505afa158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062000871565b600280546001600160a01b0319166001600160a01b039283161790556027546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200034e57600080fd5b505afa15801562000363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000389919062000871565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620003d657600080fd5b505af1158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062000871565b602880546001600160a01b0319166001600160a01b039290921691821790556200043d9060016200059d565b3060008181526009602090815260408083206027546001600160a01b039081168552908352818420600019905533808552600d8085528386208054600160ff199182168117909255600e8088528689208054831684179055600f808952878a2080548416851790559989529287528588208054821683179055918652848720805483168217905596855283862080548216881790556028549092168552828520805490921690951790556005548484526008835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000a8b565b6000806200053c83856200089c565b905083811015620005945760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b3360009081526001602052604090205460ff16620005ec5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064016200058b565b6001600160a01b0382166000908152600b602052604090205460ff1615158115151415620006515760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b60448201526064016200058b565b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155620006d057600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03841617905562000835565b600a54600110620007165760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b60448201526064016200058b565b60005b600a548110156200083357826001600160a01b0316600a828154811062000744576200074462000a75565b6000918252602090912001546001600160a01b031614156200081e57600a8054620007729060019062000a11565b8154811062000785576200078562000a75565b600091825260209091200154600a80546001600160a01b039092169183908110620007b457620007b462000a75565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480620007f657620007f662000a5f565b600082815260209020810160001990810180546001600160a01b031916905501905562000833565b806200082a8162000a2b565b91505062000719565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000602082840312156200088457600080fd5b81516001600160a01b03811681146200059457600080fd5b60008219821115620008b257620008b262000a49565b500190565b600082620008d557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200091b578160001904821115620008ff57620008ff62000a49565b808516156200090d57918102915b93841c9390800290620008df565b509250929050565b60006200093460ff8416836200093b565b9392505050565b6000826200094c5750600162000597565b816200095b5750600062000597565b81600181146200097457600281146200097f576200099f565b600191505062000597565b60ff84111562000993576200099362000a49565b50506001821b62000597565b5060208310610133831016604e8410600b8410161715620009c4575081810a62000597565b620009d08383620008da565b8060001904821115620009e757620009e762000a49565b029392505050565b600081600019048311821515161562000a0c5762000a0c62000a49565b500290565b60008282101562000a265762000a2662000a49565b500390565b600060001982141562000a425762000a4262000a49565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6135638062000a9b6000396000f3fe60806040526004361061032d5760003560e01c8063893d20e8116101a5578063ba876bb9116100ec578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d146109b0578063f887ea40146109d0578063fe575a87146109f0578063fe9fbb8014610a2057600080fd5b8063f0b37c0414610950578063f2fde38b14610970578063f74c9f471461099057600080fd5b8063dd62ed3e116100c6578063dd62ed3e146108ca578063df20fd4914610910578063e1d5584c1461093057600080fd5b8063ba876bb914610874578063c04a78ad14610894578063d00efb2f146108b457600080fd5b80639a7a23d61161014e578063a9059cbb11610128578063a9059cbb14610804578063b62496f514610824578063b6a5d7de1461085457600080fd5b80639a7a23d6146107a4578063a8aa1b31146107c4578063a8df7fb0146107e457600080fd5b80638e2eee841161017f5780638e2eee841461071e5780638f02bb5b1461073e57806395d89b411461075e57600080fd5b8063893d20e81461069c5780638b42507f146106ce5780638cd4426d146106fe57600080fd5b8063364333f4116102745780635c85974f1161021d5780636c0a24eb116101f75780636c0a24eb146106195780636ddd17131461062f57806370a08231146106505780637d1db4a51461068657600080fd5b80635c85974f146105b95780635d0044ca146105d9578063658d4b7f146105f957600080fd5b80634ada218b1161024e5780634ada218b14610563578063571ac8b0146105845780635b895c29146105a457600080fd5b8063364333f4146104fe5780633f4218e014610513578063454340321461054357600080fd5b806318160ddd116102d65780632b112e49116102b05780632b112e491461049e5780632f54bf6e146104b3578063313ce567146104e257600080fd5b806318160ddd1461044957806318abb6351461045e57806323b872dd1461047e57600080fd5b8063095ea7b311610307578063095ea7b3146103c75780630bd11f8a146103f75780630d2959801461042757600080fd5b806301f59d16146103395780630445b6671461036257806306fdde031461037857600080fd5b3661033457005b600080fd5b34801561034557600080fd5b5061034f601e5481565b6040519081526020015b60405180910390f35b34801561036e57600080fd5b5061034f60295481565b34801561038457600080fd5b5060408051808201909152600581527f47454e4f5300000000000000000000000000000000000000000000000000000060208201525b6040516103599190613377565b3480156103d357600080fd5b506103e76103e236600461318a565b610a59565b6040519015158152602001610359565b34801561040357600080fd5b506103e7610412366004613054565b600f6020526000908152604090205460ff1681565b34801561043357600080fd5b5061044761044236600461323c565b610ac6565b005b34801561045557600080fd5b5060055461034f565b34801561046a57600080fd5b506104476104793660046130aa565b610bf3565b34801561048a57600080fd5b506103e761049936600461311b565b610da6565b3480156104aa57600080fd5b5061034f610e6f565b3480156104bf57600080fd5b506103e76104ce366004613054565b6000546001600160a01b0391821691161490565b3480156104ee57600080fd5b5060405160128152602001610359565b34801561050a57600080fd5b50610447610ec1565b34801561051f57600080fd5b506103e761052e366004613054565b600d6020526000908152604090205460ff1681565b34801561054f57600080fd5b5061044761055e36600461315c565b610f3d565b34801561056f57600080fd5b506028546103e790600160a01b900460ff1681565b34801561059057600080fd5b506103e761059f366004613054565b610fee565b3480156105b057600080fd5b50610447610ffc565b3480156105c557600080fd5b506104476105d4366004613294565b611053565b3480156105e557600080fd5b506104476105f4366004613294565b611132565b34801561060557600080fd5b5061044761061436600461315c565b611211565b34801561062557600080fd5b5061034f60075481565b34801561063b57600080fd5b506028546103e790600160a81b900460ff1681565b34801561065c57600080fd5b5061034f61066b366004613054565b6001600160a01b031660009081526008602052604090205490565b34801561069257600080fd5b5061034f60065481565b3480156106a857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610359565b3480156106da57600080fd5b506103e76106e9366004613054565b600e6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103e761071936600461318a565b6112ba565b34801561072a57600080fd5b506104476107393660046131b6565b6113a0565b34801561074a57600080fd5b50610447610759366004613294565b611513565b34801561076a57600080fd5b5060408051808201909152600881527f47454e4f5345524300000000000000000000000000000000000000000000000060208201526103ba565b3480156107b057600080fd5b506104476107bf36600461315c565b6115e6565b3480156107d057600080fd5b506028546106b6906001600160a01b031681565b3480156107f057600080fd5b506104476107ff366004613294565b6118d2565b34801561081057600080fd5b506103e761081f36600461318a565b6119a4565b34801561083057600080fd5b506103e761083f366004613054565b600b6020526000908152604090205460ff1681565b34801561086057600080fd5b5061044761086f366004613054565b6119b1565b34801561088057600080fd5b5061044761088f3660046132db565b611a1b565b3480156108a057600080fd5b506104476108af36600461315c565b611b4c565b3480156108c057600080fd5b5061034f60115481565b3480156108d657600080fd5b5061034f6108e5366004613071565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561091c57600080fd5b5061044761092b366004613276565b611bf5565b34801561093c57600080fd5b506106b661094b366004613294565b611cb5565b34801561095c57600080fd5b5061044761096b366004613054565b611cdf565b34801561097c57600080fd5b5061044761098b366004613054565b611d43565b34801561099c57600080fd5b506104476109ab3660046132db565b611df9565b3480156109bc57600080fd5b506104476109cb36600461315c565b611f18565b3480156109dc57600080fd5b506027546106b6906001600160a01b031681565b3480156109fc57600080fd5b506103e7610a0b366004613054565b600c6020526000908152604090205460ff1681565b348015610a2c57600080fd5b506103e7610a3b366004613054565b6001600160a01b031660009081526001602052604090205460ff1690565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ab49086815260200190565b60405180910390a35060015b92915050565b3360009081526001602052604090205460ff16610b185760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b602854600160a01b900460ff1615610b725760405162461bcd60e51b815260206004820152601260248201527f43616e27742073746f702074726164696e6700000000000000000000000000006044820152606401610b0f565b602880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b83151502179055436011819055601054610bb79190611fc1565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b3360009081526001602052604090205460ff16610c405760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b03851615801590610c6057506001600160a01b03841615155b8015610c7457506001600160a01b03831615155b8015610c8857506001600160a01b03821615155b8015610c9c57506001600160a01b03811615155b610ce85760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610b0f565b602280546001600160a01b0387811673ffffffffffffffffffffffffffffffffffffffff1992831681179093556023805488831690841681179091556024805488841690851681179091556025805488851690861681179091556026805494881694909516841790945560408051958652602086019290925290840152606083019190915260808201527fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e9060a00160405180910390a15050505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e5a57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610e35918490612020565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e6584848461205a565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610ebc906003546001600160a01b0316600090815260086020526040902054610eb690600554906125aa565b906125aa565b905090565b3360009081526001602052604090205460ff16610f0e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60405133904780156108fc02916000818181858888f19350505050158015610f3a573d6000803e3d6000fd5b50565b3360009081526001602052604090205460ff16610f8a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b6000610ac082600019610a59565b3360009081526001602052604090205460ff166110495760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6110516125ec565b565b3360009081526001602052604090205460ff166110a05760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6005546110af90612710612a21565b81116110fd5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610b0f565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610be8565b3360009081526001602052604090205460ff1661117f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60055461118e90612710612a21565b81116111dc5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610b0f565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610be8565b3360009081526001602052604090205460ff1661125e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d9101610fe2565b3360009081526001602052604081205460ff166113075760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190613259565b3360009081526001602052604090205460ff166113ed5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60c882106114635760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c65747320617460448201527f206f6e63650000000000000000000000000000000000000000000000000000006064820152608401610b0f565b60005b828110156114d25781600c6000868685818110611485576114856134f4565b905060200201602081019061149a9190613054565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114cb816134ad565b9050611466565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb8383836040516115069392919061331e565b60405180910390a1505050565b3360009081526001602052604090205460ff166115605760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b601e5481106115b15760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b601d8190556040518181527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f490602001610be8565b3360009081526001602052604090205460ff166116335760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156116a25760405162461bcd60e51b815260206004820152601160248201527f56616c756520616c7265616479207365740000000000000000000000000000006044820152606401610b0f565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561172c57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055611896565b600a5460011061177e5760405162461bcd60e51b815260206004820152600f60248201527f52657175697265642031207061697200000000000000000000000000000000006044820152606401610b0f565b60005b600a5481101561189457826001600160a01b0316600a82815481106117a8576117a86134f4565b6000918252602090912001546001600160a01b0316141561188257600a80546117d390600190613496565b815481106117e3576117e36134f4565b600091825260209091200154600a80546001600160a01b03909216918390811061180f5761180f6134f4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a80548061184e5761184e6134de565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611894565b8061188c816134ad565b915050611781565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602052604090205460ff1661191f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6032811061196f5760405162461bcd60e51b815260206004820152601260248201527f43616e277420676f2074686174206869676800000000000000000000000000006044820152606401610b0f565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610be8565b6000610e6833848461205a565b6000546001600160a01b031633146119f45760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16611a685760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60188690556019859055601a849055601b839055601c829055611a9982611a93858188818c8c611fc1565b90611fc1565b60208190556021829055601e541015611af45760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b604080518781526020810187905290810185905260608101849052608081018390527ffdd7c66a68b70fa92b44bc177e5154fe4ae8a19e8fc2920396a5ea2db9a783329060a0015b60405180910390a1505050505050565b3360009081526001602052604090205460ff16611b995760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b9101610fe2565b3360009081526001602052604090205460ff16611c425760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b602880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b84151590810291909117909155602982905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd9101610fe2565b600a8181548110611cc557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611d225760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610be8565b3360009081526001602052604090205460ff16611e465760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60138690556014859055601584905560168390556017829055611e7182611a93858188818c8c611fc1565b601f8190556021829055601e541015611ecc5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b604080518781526020810187905290810185905260608101849052608081018390527f0ebc4c8adc990f93864d49e46d4543ac8e892fd73ba3ebe0b1794d0f6929f8169060a001611b3c565b3360009081526001602052604090205460ff16611f655760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f669101610fe2565b600080611fce838561343d565b905083811015610e685760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b0f565b600081848411156120445760405162461bcd60e51b8152600401610b0f9190613377565b5060006120518486613496565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561209c57506001600160a01b0383166000908152600c602052604090205460ff16155b6120e85760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610b0f565b602a5460ff1615612105576120fe848484612a63565b9050610e68565b6001600160a01b0384166000908152600d602052604090205460ff1615801561214757506001600160a01b0383166000908152600d602052604090205460ff16155b156121a557602854600160a01b900460ff166121a55760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610b0f565b6121ad612b52565b156121ba576121ba6125ec565b6001600160a01b0384166000908152600b6020526040902054829060ff1615612310576001600160a01b0384166000908152600d602052604090205460ff1661230b576007546001600160a01b0385166000908152600860205260409020546122239085611fc1565b11158061224857506001600160a01b0384166000908152600f602052604090205460ff165b6122945760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610b0f565b600654831115806122bd57506001600160a01b0384166000908152600e602052604090205460ff165b6122fd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b612308858585612baa565b90505b6124f1565b6001600160a01b0384166000908152600b602052604090205460ff16156123c4576001600160a01b0385166000908152600d602052604090205460ff1661230b576006548311158061237a57506001600160a01b0385166000908152600e602052604090205460ff165b6123ba5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b6123088584612d77565b6001600160a01b0385166000908152600d602052604090205460ff166124f1576007546001600160a01b03851660009081526008602052604090205461240a9085611fc1565b11158061242f57506001600160a01b0384166000908152600f602052604090205460ff165b61247b5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610b0f565b600654831115806124a457506001600160a01b0385166000908152600e602052604090205460ff165b6124e45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b6124ee8584612edc565b90505b6001600160a01b03851660009081526008602052604090205461251490846125aa565b6001600160a01b0380871660009081526008602052604080822093909355908616815220546125439082611fc1565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125979085815260200190565b60405180910390a3506001949350505050565b6000610e6883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612020565b602a805460ff1916600117905560185460135460009161260c9190611fc1565b90506000612633601c54610eb6601754610eb6602054601f54611fc190919063ffffffff16565b3060009081526008602052604081205491925061265d600261265785818689612f8b565b90612a21565b9050600061266b83836125aa565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106126a5576126a56134f4565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126d6576126d66134f4565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906127359086906000908690309042906004016133cc565b600060405180830381600087803b15801561274f57600080fd5b505af1158015612763573d6000803e3d6000fd5b50505050600061277c83476125aa90919063ffffffff16565b9050600061279561278e8a6002612a21565b89906125aa565b905060006127c36002612657846126576127bc601854601354611fc190919063ffffffff16565b8890612f8b565b905060006127ec836126576127e5601954601454611fc190919063ffffffff16565b8790612f8b565b9050600061280e846126576127bc601a54601554611fc190919063ffffffff16565b9050600061283785612657612830601b54601654611fc190919063ffffffff16565b8990612f8b565b6023546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612889576040519150601f19603f3d011682016040523d82523d6000602084013e61288e565b606091505b50506024546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146128de576040519150601f19603f3d011682016040523d82523d6000602084013e6128e3565b606091505b50506025546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612933576040519150601f19603f3d011682016040523d82523d6000602084013e612938565b606091505b5060009250508b159050612a07576027546022546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0391906132ad565b5050505b5050602a805460ff19169055505050505050505050505050565b6000610e6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613026565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0386166000908152600890915291822054612abd918490612020565b6001600160a01b038086166000908152600860205260408082209390935590851681522054612aec9083611fc1565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b409086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff16158015612b755750602a5460ff16155b8015612b8a5750602854600160a81b900460ff165b8015610ebc57505060295430600090815260086020526040902054101590565b6000601254431015612c0b576028546001600160a01b03848116911614801590612be257506027546001600160a01b03848116911614155b15612c0b576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b6000612c34602154612657612c2d601754601f546125aa90919063ffffffff16565b8690612f8b565b90506000612c5360215461265760175487612f8b90919063ffffffff16565b90506000612c618383611fc1565b30600090815260086020526040902054909150612c7e9084611fc1565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ccf9087815260200190565b60405180910390a38115612d62576026546001600160a01b0316600090815260086020526040902054612d029083611fc1565b602680546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b612d6c85826125aa565b979650505050505050565b600080612d9a602154612657612c2d601c546020546125aa90919063ffffffff16565b90506000612db9602154612657601c5487612f8b90919063ffffffff16565b90506000612dc78383611fc1565b30600090815260086020526040902054909150612de49084611fc1565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e359087815260200190565b60405180910390a38115612ec8576026546001600160a01b0316600090815260086020526040902054612e689083611fc1565b602680546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b612ed285826125aa565b9695505050505050565b601d5460125460009190431015612ef1575060635b602154600090612f05906126578685612f8b565b90508015612f815730600090815260086020526040902054612f279082611fc1565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f789085815260200190565b60405180910390a35b61205184826125aa565b600082612f9a57506000610ac0565b6000612fa68385613477565b905082612fb38583613455565b14610e685760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610b0f565b600081836130475760405162461bcd60e51b8152600401610b0f9190613377565b5060006120518486613455565b60006020828403121561306657600080fd5b8135610e688161350a565b6000806040838503121561308457600080fd5b823561308f8161350a565b9150602083013561309f8161350a565b809150509250929050565b600080600080600060a086880312156130c257600080fd5b85356130cd8161350a565b945060208601356130dd8161350a565b935060408601356130ed8161350a565b925060608601356130fd8161350a565b9150608086013561310d8161350a565b809150509295509295909350565b60008060006060848603121561313057600080fd5b833561313b8161350a565b9250602084013561314b8161350a565b929592945050506040919091013590565b6000806040838503121561316f57600080fd5b823561317a8161350a565b9150602083013561309f8161351f565b6000806040838503121561319d57600080fd5b82356131a88161350a565b946020939093013593505050565b6000806000604084860312156131cb57600080fd5b833567ffffffffffffffff808211156131e357600080fd5b818601915086601f8301126131f757600080fd5b81358181111561320657600080fd5b8760208260051b850101111561321b57600080fd5b602092830195509350508401356132318161351f565b809150509250925092565b60006020828403121561324e57600080fd5b8135610e688161351f565b60006020828403121561326b57600080fd5b8151610e688161351f565b6000806040838503121561328957600080fd5b82356131a88161351f565b6000602082840312156132a657600080fd5b5035919050565b6000806000606084860312156132c257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156132f457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6040808252810183905260008460608301825b868110156133615782356133448161350a565b6001600160a01b0316825260209283019290910190600101613331565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b818110156133a457858101830151858201604001528201613388565b818111156133b6576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561341c5784516001600160a01b0316835293830193918301916001016133f7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613450576134506134c8565b500190565b60008261347257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613491576134916134c8565b500290565b6000828210156134a8576134a86134c8565b500390565b60006000198214156134c1576134c16134c8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610f3a57600080fd5b8015158114610f3a57600080fdfea2646970667358221220249ba5872a4083bb77be3cf573dc078faa86226c2bda7218e60756fa0d05211364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061032d5760003560e01c8063893d20e8116101a5578063ba876bb9116100ec578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d146109b0578063f887ea40146109d0578063fe575a87146109f0578063fe9fbb8014610a2057600080fd5b8063f0b37c0414610950578063f2fde38b14610970578063f74c9f471461099057600080fd5b8063dd62ed3e116100c6578063dd62ed3e146108ca578063df20fd4914610910578063e1d5584c1461093057600080fd5b8063ba876bb914610874578063c04a78ad14610894578063d00efb2f146108b457600080fd5b80639a7a23d61161014e578063a9059cbb11610128578063a9059cbb14610804578063b62496f514610824578063b6a5d7de1461085457600080fd5b80639a7a23d6146107a4578063a8aa1b31146107c4578063a8df7fb0146107e457600080fd5b80638e2eee841161017f5780638e2eee841461071e5780638f02bb5b1461073e57806395d89b411461075e57600080fd5b8063893d20e81461069c5780638b42507f146106ce5780638cd4426d146106fe57600080fd5b8063364333f4116102745780635c85974f1161021d5780636c0a24eb116101f75780636c0a24eb146106195780636ddd17131461062f57806370a08231146106505780637d1db4a51461068657600080fd5b80635c85974f146105b95780635d0044ca146105d9578063658d4b7f146105f957600080fd5b80634ada218b1161024e5780634ada218b14610563578063571ac8b0146105845780635b895c29146105a457600080fd5b8063364333f4146104fe5780633f4218e014610513578063454340321461054357600080fd5b806318160ddd116102d65780632b112e49116102b05780632b112e491461049e5780632f54bf6e146104b3578063313ce567146104e257600080fd5b806318160ddd1461044957806318abb6351461045e57806323b872dd1461047e57600080fd5b8063095ea7b311610307578063095ea7b3146103c75780630bd11f8a146103f75780630d2959801461042757600080fd5b806301f59d16146103395780630445b6671461036257806306fdde031461037857600080fd5b3661033457005b600080fd5b34801561034557600080fd5b5061034f601e5481565b6040519081526020015b60405180910390f35b34801561036e57600080fd5b5061034f60295481565b34801561038457600080fd5b5060408051808201909152600581527f47454e4f5300000000000000000000000000000000000000000000000000000060208201525b6040516103599190613377565b3480156103d357600080fd5b506103e76103e236600461318a565b610a59565b6040519015158152602001610359565b34801561040357600080fd5b506103e7610412366004613054565b600f6020526000908152604090205460ff1681565b34801561043357600080fd5b5061044761044236600461323c565b610ac6565b005b34801561045557600080fd5b5060055461034f565b34801561046a57600080fd5b506104476104793660046130aa565b610bf3565b34801561048a57600080fd5b506103e761049936600461311b565b610da6565b3480156104aa57600080fd5b5061034f610e6f565b3480156104bf57600080fd5b506103e76104ce366004613054565b6000546001600160a01b0391821691161490565b3480156104ee57600080fd5b5060405160128152602001610359565b34801561050a57600080fd5b50610447610ec1565b34801561051f57600080fd5b506103e761052e366004613054565b600d6020526000908152604090205460ff1681565b34801561054f57600080fd5b5061044761055e36600461315c565b610f3d565b34801561056f57600080fd5b506028546103e790600160a01b900460ff1681565b34801561059057600080fd5b506103e761059f366004613054565b610fee565b3480156105b057600080fd5b50610447610ffc565b3480156105c557600080fd5b506104476105d4366004613294565b611053565b3480156105e557600080fd5b506104476105f4366004613294565b611132565b34801561060557600080fd5b5061044761061436600461315c565b611211565b34801561062557600080fd5b5061034f60075481565b34801561063b57600080fd5b506028546103e790600160a81b900460ff1681565b34801561065c57600080fd5b5061034f61066b366004613054565b6001600160a01b031660009081526008602052604090205490565b34801561069257600080fd5b5061034f60065481565b3480156106a857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610359565b3480156106da57600080fd5b506103e76106e9366004613054565b600e6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103e761071936600461318a565b6112ba565b34801561072a57600080fd5b506104476107393660046131b6565b6113a0565b34801561074a57600080fd5b50610447610759366004613294565b611513565b34801561076a57600080fd5b5060408051808201909152600881527f47454e4f5345524300000000000000000000000000000000000000000000000060208201526103ba565b3480156107b057600080fd5b506104476107bf36600461315c565b6115e6565b3480156107d057600080fd5b506028546106b6906001600160a01b031681565b3480156107f057600080fd5b506104476107ff366004613294565b6118d2565b34801561081057600080fd5b506103e761081f36600461318a565b6119a4565b34801561083057600080fd5b506103e761083f366004613054565b600b6020526000908152604090205460ff1681565b34801561086057600080fd5b5061044761086f366004613054565b6119b1565b34801561088057600080fd5b5061044761088f3660046132db565b611a1b565b3480156108a057600080fd5b506104476108af36600461315c565b611b4c565b3480156108c057600080fd5b5061034f60115481565b3480156108d657600080fd5b5061034f6108e5366004613071565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561091c57600080fd5b5061044761092b366004613276565b611bf5565b34801561093c57600080fd5b506106b661094b366004613294565b611cb5565b34801561095c57600080fd5b5061044761096b366004613054565b611cdf565b34801561097c57600080fd5b5061044761098b366004613054565b611d43565b34801561099c57600080fd5b506104476109ab3660046132db565b611df9565b3480156109bc57600080fd5b506104476109cb36600461315c565b611f18565b3480156109dc57600080fd5b506027546106b6906001600160a01b031681565b3480156109fc57600080fd5b506103e7610a0b366004613054565b600c6020526000908152604090205460ff1681565b348015610a2c57600080fd5b506103e7610a3b366004613054565b6001600160a01b031660009081526001602052604090205460ff1690565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ab49086815260200190565b60405180910390a35060015b92915050565b3360009081526001602052604090205460ff16610b185760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b602854600160a01b900460ff1615610b725760405162461bcd60e51b815260206004820152601260248201527f43616e27742073746f702074726164696e6700000000000000000000000000006044820152606401610b0f565b602880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b83151502179055436011819055601054610bb79190611fc1565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b3360009081526001602052604090205460ff16610c405760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b03851615801590610c6057506001600160a01b03841615155b8015610c7457506001600160a01b03831615155b8015610c8857506001600160a01b03821615155b8015610c9c57506001600160a01b03811615155b610ce85760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610b0f565b602280546001600160a01b0387811673ffffffffffffffffffffffffffffffffffffffff1992831681179093556023805488831690841681179091556024805488841690851681179091556025805488851690861681179091556026805494881694909516841790945560408051958652602086019290925290840152606083019190915260808201527fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e9060a00160405180910390a15050505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e5a57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610e35918490612020565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e6584848461205a565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610ebc906003546001600160a01b0316600090815260086020526040902054610eb690600554906125aa565b906125aa565b905090565b3360009081526001602052604090205460ff16610f0e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60405133904780156108fc02916000818181858888f19350505050158015610f3a573d6000803e3d6000fd5b50565b3360009081526001602052604090205460ff16610f8a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b6000610ac082600019610a59565b3360009081526001602052604090205460ff166110495760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6110516125ec565b565b3360009081526001602052604090205460ff166110a05760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6005546110af90612710612a21565b81116110fd5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610b0f565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610be8565b3360009081526001602052604090205460ff1661117f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60055461118e90612710612a21565b81116111dc5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610b0f565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610be8565b3360009081526001602052604090205460ff1661125e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d9101610fe2565b3360009081526001602052604081205460ff166113075760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190613259565b3360009081526001602052604090205460ff166113ed5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60c882106114635760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c65747320617460448201527f206f6e63650000000000000000000000000000000000000000000000000000006064820152608401610b0f565b60005b828110156114d25781600c6000868685818110611485576114856134f4565b905060200201602081019061149a9190613054565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114cb816134ad565b9050611466565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb8383836040516115069392919061331e565b60405180910390a1505050565b3360009081526001602052604090205460ff166115605760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b601e5481106115b15760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b601d8190556040518181527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f490602001610be8565b3360009081526001602052604090205460ff166116335760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156116a25760405162461bcd60e51b815260206004820152601160248201527f56616c756520616c7265616479207365740000000000000000000000000000006044820152606401610b0f565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561172c57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055611896565b600a5460011061177e5760405162461bcd60e51b815260206004820152600f60248201527f52657175697265642031207061697200000000000000000000000000000000006044820152606401610b0f565b60005b600a5481101561189457826001600160a01b0316600a82815481106117a8576117a86134f4565b6000918252602090912001546001600160a01b0316141561188257600a80546117d390600190613496565b815481106117e3576117e36134f4565b600091825260209091200154600a80546001600160a01b03909216918390811061180f5761180f6134f4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a80548061184e5761184e6134de565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611894565b8061188c816134ad565b915050611781565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602052604090205460ff1661191f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6032811061196f5760405162461bcd60e51b815260206004820152601260248201527f43616e277420676f2074686174206869676800000000000000000000000000006044820152606401610b0f565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610be8565b6000610e6833848461205a565b6000546001600160a01b031633146119f45760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16611a685760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60188690556019859055601a849055601b839055601c829055611a9982611a93858188818c8c611fc1565b90611fc1565b60208190556021829055601e541015611af45760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b604080518781526020810187905290810185905260608101849052608081018390527ffdd7c66a68b70fa92b44bc177e5154fe4ae8a19e8fc2920396a5ea2db9a783329060a0015b60405180910390a1505050505050565b3360009081526001602052604090205460ff16611b995760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b9101610fe2565b3360009081526001602052604090205460ff16611c425760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b602880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b84151590810291909117909155602982905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd9101610fe2565b600a8181548110611cc557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611d225760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610b0f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610be8565b3360009081526001602052604090205460ff16611e465760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b60138690556014859055601584905560168390556017829055611e7182611a93858188818c8c611fc1565b601f8190556021829055601e541015611ecc5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610b0f565b604080518781526020810187905290810185905260608101849052608081018390527f0ebc4c8adc990f93864d49e46d4543ac8e892fd73ba3ebe0b1794d0f6929f8169060a001611b3c565b3360009081526001602052604090205460ff16611f655760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610b0f565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f669101610fe2565b600080611fce838561343d565b905083811015610e685760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b0f565b600081848411156120445760405162461bcd60e51b8152600401610b0f9190613377565b5060006120518486613496565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561209c57506001600160a01b0383166000908152600c602052604090205460ff16155b6120e85760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610b0f565b602a5460ff1615612105576120fe848484612a63565b9050610e68565b6001600160a01b0384166000908152600d602052604090205460ff1615801561214757506001600160a01b0383166000908152600d602052604090205460ff16155b156121a557602854600160a01b900460ff166121a55760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610b0f565b6121ad612b52565b156121ba576121ba6125ec565b6001600160a01b0384166000908152600b6020526040902054829060ff1615612310576001600160a01b0384166000908152600d602052604090205460ff1661230b576007546001600160a01b0385166000908152600860205260409020546122239085611fc1565b11158061224857506001600160a01b0384166000908152600f602052604090205460ff165b6122945760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610b0f565b600654831115806122bd57506001600160a01b0384166000908152600e602052604090205460ff165b6122fd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b612308858585612baa565b90505b6124f1565b6001600160a01b0384166000908152600b602052604090205460ff16156123c4576001600160a01b0385166000908152600d602052604090205460ff1661230b576006548311158061237a57506001600160a01b0385166000908152600e602052604090205460ff165b6123ba5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b6123088584612d77565b6001600160a01b0385166000908152600d602052604090205460ff166124f1576007546001600160a01b03851660009081526008602052604090205461240a9085611fc1565b11158061242f57506001600160a01b0384166000908152600f602052604090205460ff165b61247b5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610b0f565b600654831115806124a457506001600160a01b0385166000908152600e602052604090205460ff165b6124e45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0f565b6124ee8584612edc565b90505b6001600160a01b03851660009081526008602052604090205461251490846125aa565b6001600160a01b0380871660009081526008602052604080822093909355908616815220546125439082611fc1565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125979085815260200190565b60405180910390a3506001949350505050565b6000610e6883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612020565b602a805460ff1916600117905560185460135460009161260c9190611fc1565b90506000612633601c54610eb6601754610eb6602054601f54611fc190919063ffffffff16565b3060009081526008602052604081205491925061265d600261265785818689612f8b565b90612a21565b9050600061266b83836125aa565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106126a5576126a56134f4565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126d6576126d66134f4565b6001600160a01b0392831660209182029290920101526027546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906127359086906000908690309042906004016133cc565b600060405180830381600087803b15801561274f57600080fd5b505af1158015612763573d6000803e3d6000fd5b50505050600061277c83476125aa90919063ffffffff16565b9050600061279561278e8a6002612a21565b89906125aa565b905060006127c36002612657846126576127bc601854601354611fc190919063ffffffff16565b8890612f8b565b905060006127ec836126576127e5601954601454611fc190919063ffffffff16565b8790612f8b565b9050600061280e846126576127bc601a54601554611fc190919063ffffffff16565b9050600061283785612657612830601b54601654611fc190919063ffffffff16565b8990612f8b565b6023546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612889576040519150601f19603f3d011682016040523d82523d6000602084013e61288e565b606091505b50506024546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146128de576040519150601f19603f3d011682016040523d82523d6000602084013e6128e3565b606091505b50506025546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612933576040519150601f19603f3d011682016040523d82523d6000602084013e612938565b606091505b5060009250508b159050612a07576027546022546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0391906132ad565b5050505b5050602a805460ff19169055505050505050505050505050565b6000610e6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613026565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0386166000908152600890915291822054612abd918490612020565b6001600160a01b038086166000908152600860205260408082209390935590851681522054612aec9083611fc1565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b409086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff16158015612b755750602a5460ff16155b8015612b8a5750602854600160a81b900460ff165b8015610ebc57505060295430600090815260086020526040902054101590565b6000601254431015612c0b576028546001600160a01b03848116911614801590612be257506027546001600160a01b03848116911614155b15612c0b576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b6000612c34602154612657612c2d601754601f546125aa90919063ffffffff16565b8690612f8b565b90506000612c5360215461265760175487612f8b90919063ffffffff16565b90506000612c618383611fc1565b30600090815260086020526040902054909150612c7e9084611fc1565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ccf9087815260200190565b60405180910390a38115612d62576026546001600160a01b0316600090815260086020526040902054612d029083611fc1565b602680546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b612d6c85826125aa565b979650505050505050565b600080612d9a602154612657612c2d601c546020546125aa90919063ffffffff16565b90506000612db9602154612657601c5487612f8b90919063ffffffff16565b90506000612dc78383611fc1565b30600090815260086020526040902054909150612de49084611fc1565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e359087815260200190565b60405180910390a38115612ec8576026546001600160a01b0316600090815260086020526040902054612e689083611fc1565b602680546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b612ed285826125aa565b9695505050505050565b601d5460125460009190431015612ef1575060635b602154600090612f05906126578685612f8b565b90508015612f815730600090815260086020526040902054612f279082611fc1565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f789085815260200190565b60405180910390a35b61205184826125aa565b600082612f9a57506000610ac0565b6000612fa68385613477565b905082612fb38583613455565b14610e685760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610b0f565b600081836130475760405162461bcd60e51b8152600401610b0f9190613377565b5060006120518486613455565b60006020828403121561306657600080fd5b8135610e688161350a565b6000806040838503121561308457600080fd5b823561308f8161350a565b9150602083013561309f8161350a565b809150509250929050565b600080600080600060a086880312156130c257600080fd5b85356130cd8161350a565b945060208601356130dd8161350a565b935060408601356130ed8161350a565b925060608601356130fd8161350a565b9150608086013561310d8161350a565b809150509295509295909350565b60008060006060848603121561313057600080fd5b833561313b8161350a565b9250602084013561314b8161350a565b929592945050506040919091013590565b6000806040838503121561316f57600080fd5b823561317a8161350a565b9150602083013561309f8161351f565b6000806040838503121561319d57600080fd5b82356131a88161350a565b946020939093013593505050565b6000806000604084860312156131cb57600080fd5b833567ffffffffffffffff808211156131e357600080fd5b818601915086601f8301126131f757600080fd5b81358181111561320657600080fd5b8760208260051b850101111561321b57600080fd5b602092830195509350508401356132318161351f565b809150509250925092565b60006020828403121561324e57600080fd5b8135610e688161351f565b60006020828403121561326b57600080fd5b8151610e688161351f565b6000806040838503121561328957600080fd5b82356131a88161351f565b6000602082840312156132a657600080fd5b5035919050565b6000806000606084860312156132c257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156132f457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6040808252810183905260008460608301825b868110156133615782356133448161350a565b6001600160a01b0316825260209283019290910190600101613331565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b818110156133a457858101830151858201604001528201613388565b818111156133b6576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561341c5784516001600160a01b0316835293830193918301916001016133f7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613450576134506134c8565b500190565b60008261347257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613491576134916134c8565b500290565b6000828210156134a8576134a86134c8565b500390565b60006000198214156134c1576134c16134c8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610f3a57600080fd5b8015158114610f3a57600080fdfea2646970667358221220249ba5872a4083bb77be3cf573dc078faa86226c2bda7218e60756fa0d05211364736f6c63430008070033

Deployed Bytecode Sourcemap

4767:19369:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7755:26;;;;;;;;;;;;;;;;;;;15950:25:1;;;15938:2;15923:18;7755:26:0;;;;;;;;8666:54;;;;;;;;;;;;;;;;9932:80;;;;;;;;;;-1:-1:-1;10004:5:0;;;;;;;;;;;;;;;;;9932:80;;;;;;;:::i;10354:216::-;;;;;;;;;;-1:-1:-1;10354:216:0;;;;;:::i;:::-;;:::i;:::-;;;8984:14:1;;8977:22;8959:41;;8947:2;8932:18;10354:216:0;8819:187:1;7090:50:0;;;;;;;;;;-1:-1:-1;7090:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16333:308;;;;;;;;;;-1:-1:-1;16333:308:0;;;;;:::i;:::-;;:::i;:::-;;9662:88;;;;;;;;;;-1:-1:-1;9735:12:0;;9662:88;;22026:840;;;;;;;;;;-1:-1:-1;22026:840:0;;;;;:::i;:::-;;:::i;10872:370::-;;;;;;;;;;-1:-1:-1;10872:370:0;;;;;:::i;:::-;;:::i;23989:142::-;;;;;;;;;;;;;:::i;2775:103::-;;;;;;;;;;-1:-1:-1;2775:103:0;;;;;:::i;:::-;2830:4;2865:5;-1:-1:-1;;;;;2854:16:0;;;2865:5;;2854:16;;2775:103;9756:80;;;;;;;;;;-1:-1:-1;9756:80:0;;6483:2;17627:36:1;;17615:2;17600:18;9756:80:0;17485:184:1;16007:119:0;;;;;;;;;;;;;:::i;6984:44::-;;;;;;;;;;-1:-1:-1;6984:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19500:180;;;;;;;;;;-1:-1:-1;19500:180:0;;;;;:::i;:::-;;:::i;8588:34::-;;;;;;;;;;-1:-1:-1;8588:34:0;;;;-1:-1:-1;;;8588:34:0;;;;;;10578:122;;;;;;;;;;-1:-1:-1;10578:122:0;;;;;:::i;:::-;;:::i;23902:75::-;;;;;;;;;;;;;:::i;18692:212::-;;;;;;;;;;-1:-1:-1;18692:212:0;;;;;:::i;:::-;;:::i;18912:222::-;;;;;;;;;;-1:-1:-1;18912:222:0;;;;;:::i;:::-;;:::i;19887:166::-;;;;;;;;;;-1:-1:-1;19887:166:0;;;;;:::i;:::-;;:::i;6624:60::-;;;;;;;;;;;;;;;;8629:30;;;;;;;;;;-1:-1:-1;8629:30:0;;;;-1:-1:-1;;;8629:30:0;;;;;;10102:105;;;;;;;;;;-1:-1:-1;10102:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;10186:18:0;10168:7;10186:18;;;:9;:18;;;;;;;10102:105;6562:55;;;;;;;;;;;;;;;;10018:78;;;;;;;;;;-1:-1:-1;10070:7:0;10088:5;-1:-1:-1;;;;;10088:5:0;10018:78;;;-1:-1:-1;;;;;5868:55:1;;;5850:74;;5838:2;5823:18;10018:78:0;5704:226:1;7035:48:0;;;;;;;;;;-1:-1:-1;7035:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16134:168;;;;;;;;;;-1:-1:-1;16134:168:0;;;;;:::i;:::-;;:::i;19142:350::-;;;;;;;;;;-1:-1:-1;19142:350:0;;;;;:::i;:::-;;:::i;21780:236::-;;;;;;;;;;-1:-1:-1;21780:236:0;;;;;:::i;:::-;;:::i;9842:84::-;;;;;;;;;;-1:-1:-1;9916:7:0;;;;;;;;;;;;;;;;;9842:84;;23090:802;;;;;;;;;;-1:-1:-1;23090:802:0;;;;;:::i;:::-;;:::i;8560:19::-;;;;;;;;;;-1:-1:-1;8560:19:0;;;;-1:-1:-1;;;;;8560:19:0;;;19688:191;;;;;;;;;;-1:-1:-1;19688:191:0;;;;;:::i;:::-;;:::i;10708:156::-;;;;;;;;;;-1:-1:-1;10708:156:0;;;;;:::i;:::-;;:::i;6860:58::-;;;;;;;;;;-1:-1:-1;6860:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2568:94;;;;;;;;;;-1:-1:-1;2568:94:0;;;;;:::i;:::-;;:::i;21098:674::-;;;;;;;;;;-1:-1:-1;21098:674:0;;;;;:::i;:::-;;:::i;20247:184::-;;;;;;;;;;-1:-1:-1;20247:184:0;;;;;:::i;:::-;;:::i;7201:26::-;;;;;;;;;;;;;;;;10213:133;;;;;;;;;;-1:-1:-1;10213:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10315:19:0;;;10297:7;10315:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10213:133;22874:208;;;;;;;;;;-1:-1:-1;22874:208:0;;;;;:::i;:::-;;:::i;6824:29::-;;;;;;;;;;-1:-1:-1;6824:29:0;;;;;:::i;:::-;;:::i;2670:97::-;;;;;;;;;;-1:-1:-1;2670:97:0;;;;;:::i;:::-;;:::i;3001:173::-;;;;;;;;;;-1:-1:-1;3001:173:0;;;;;:::i;:::-;;:::i;20439:651::-;;;;;;;;;;-1:-1:-1;20439:651:0;;;;;:::i;:::-;;:::i;20061:178::-;;;;;;;;;;-1:-1:-1;20061:178:0;;;;;:::i;:::-;;:::i;8529:24::-;;;;;;;;;;-1:-1:-1;8529:24:0;;;;-1:-1:-1;;;;;8529:24:0;;;6929:46;;;;;;;;;;-1:-1:-1;6929:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2886:107;;;;;;;;;;-1:-1:-1;2886:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;2966:19:0;2942:4;2966:19;;;:14;:19;;;;;;;;;2886:107;10354:216;10458:10;10429:4;10446:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10446:32:0;;;;;;;;;;:41;;;10503:37;10429:4;;10446:32;;10503:37;;;;10481:6;15950:25:1;;15938:2;15923:18;;15804:177;10503:37:0;;;;;;;;-1:-1:-1;10558:4:0;10354:216;;;;;:::o;16333:308::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;;;;;;;;;16402:14:::1;::::0;-1:-1:-1;;;16402:14:0;::::1;;;:23;16394:54;;;::::0;-1:-1:-1;;;16394:54:0;;12777:2:1;16394:54:0::1;::::0;::::1;12759:21:1::0;12816:2;12796:18;;;12789:30;12855:20;12835:18;;;12828:48;12893:18;;16394:54:0::1;12575:342:1::0;16394:54:0::1;16459:14;:24:::0;;;::::1;-1:-1:-1::0;;;16459:24:0;::::1;;;;::::0;;16508:12:::1;16494:11;:26:::0;;;16568:10:::1;::::0;16551:28:::1;::::0;16508:12;16551:16:::1;:28::i;:::-;16531:17;:48:::0;16597:36:::1;::::0;8984:14:1;;8977:22;8959:41;;16597:36:0::1;::::0;8947:2:1;8932:18;16597:36:0::1;;;;;;;;16333:308:::0;:::o;22026:840::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;22238:36:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;;;;;;22278:35:0;::::1;::::0;::::1;22238:75;:115;;;;-1:-1:-1::0;;;;;;22317:36:0;::::1;::::0;::::1;22238:115;:148;;;;-1:-1:-1::0;;;;;;22357:29:0;::::1;::::0;::::1;22238:148;:185;;;;-1:-1:-1::0;;;;;;22390:33:0;::::1;::::0;::::1;22238:185;22230:222;;;::::0;-1:-1:-1;;;22230:222:0;;13124:2:1;22230:222:0::1;::::0;::::1;13106:21:1::0;13163:2;13143:18;;;13136:30;13202:25;13182:18;;;13175:53;13245:18;;22230:222:0::1;12922:347:1::0;22230:222:0::1;22463:21;:46:::0;;-1:-1:-1;;;;;22463:46:0;;::::1;-1:-1:-1::0;;22463:46:0;;::::1;::::0;::::1;::::0;;;22520:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;22575:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;22632:14:::1;:32:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;22675:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;22734:124:::1;::::0;;6494:34:1;;;6559:2;6544:18;;6537:43;;;;6596:18;;;6589:43;6663:2;6648:18;;6641:43;;;;6715:3;6700:19;;6693:44;22734:124:0::1;::::0;6420:3:1;6405:19;22734:124:0::1;;;;;;;22026:840:::0;;;;;:::o;10872:370::-;-1:-1:-1;;;;;10992:19:0;;10972:4;10992:19;;;:11;:19;;;;;;;;11012:10;10992:31;;;;;;;;-1:-1:-1;;10992:52:0;10989:186;;11094:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11094:19:0;;-1:-1:-1;11094:19:0;;;:11;:19;;;;;11114:10;11094:31;;;;;;;;;;:69;;11130:6;;11094:35;:69::i;:::-;-1:-1:-1;;;;;11060:19:0;;;;;;:11;:19;;;;;;;;11080:10;11060:31;;;;;;;:103;10989:186;11194:40;11208:6;11216:9;11227:6;11194:13;:40::i;:::-;11187:47;;10872:370;;;;;;:::o;23989:142::-;24117:4;;-1:-1:-1;;;;;24117:4:0;24042:7;10186:18;;;:9;:18;;;;;;24069:54;;24096:4;;-1:-1:-1;;;;;24096:4:0;10168:7;10186:18;;;:9;:18;;;;;;24069:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;24062:61;;23989:142;:::o;16007:119::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;16067:51:::1;::::0;16075:10:::1;::::0;16096:21:::1;16067:51:::0;::::1;;;::::0;::::1;::::0;;;16096:21;16075:10;16067:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16007:119::o:0;19500:180::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;19576:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;19576:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19633:39;;6916:74:1;;;7006:18;;;6999:50;19633:39:0::1;::::0;6889:18:1;19633:39:0::1;;;;;;;;19500:180:::0;;:::o;10578:122::-;10633:4;10657:35;10665:7;-1:-1:-1;;10657:7:0;:35::i;23902:75::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;23959:10:::1;:8;:10::i;:::-;23902:75::o:0;18692:212::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;18776:12:::1;::::0;:23:::1;::::0;18793:5:::1;18776:16;:23::i;:::-;18767:6;:32;18759:67;;;::::0;-1:-1:-1;;;18759:67:0;;10327:2:1;18759:67:0::1;::::0;::::1;10309:21:1::0;10366:2;10346:18;;;10339:30;10405:24;10385:18;;;10378:52;10447:18;;18759:67:0::1;10125:346:1::0;18759:67:0::1;18837:12;:21:::0;;;18876:20:::1;::::0;15950:25:1;;;18876:20:0::1;::::0;15938:2:1;15923:18;18876:20:0::1;15804:177:1::0;18912:222:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;18998:12:::1;::::0;:23:::1;::::0;19015:5:::1;18998:16;:23::i;:::-;18989:6;:32;18981:67;;;::::0;-1:-1:-1;;;18981:67:0;;10327:2:1;18981:67:0::1;::::0;::::1;10309:21:1::0;10366:2;10346:18;;;10339:30;10405:24;10385:18;;;10378:52;10447:18;;18981:67:0::1;10125:346:1::0;18981:67:0::1;19059:16;:25:::0;;;19102:24:::1;::::0;15950:25:1;;;19102:24:0::1;::::0;15938:2:1;15923:18;19102:24:0::1;15804:177:1::0;19887:166:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;19971:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;19971:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20017;;6916:74:1;;;7006:18;;;6999:50;20017:28:0::1;::::0;6889:18:1;20017:28:0::1;6748:307:1::0;16134:168:0;2522:10;16222:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;16246::::1;::::0;;;;16275:10:::1;16246:48;::::0;::::1;7234:74:1::0;7324:18;;;7317:34;;;-1:-1:-1;;;;;16246:28:0;::::1;::::0;::::1;::::0;7207:18:1;;16246:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19142:350::-:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;19270:3:::1;19251:22:::0;::::1;19242:73;;;::::0;-1:-1:-1;;;19242:73:0;;14920:2:1;19242:73:0::1;::::0;::::1;14902:21:1::0;14959:2;14939:18;;;14932:30;14998:34;14978:18;;;14971:62;15069:7;15049:18;;;15042:35;15094:19;;19242:73:0::1;14718:401:1::0;19242:73:0::1;19331:9;19326:106;19342:20:::0;;::::1;19326:106;;;19414:6;19384:13;:27;19398:9;;19408:1;19398:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19384:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19384:27:0;:36;;-1:-1:-1;;19384:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19364:3:::1;::::0;::::1;:::i;:::-;;;19326:106;;;;19449:35;19466:9;;19477:6;19449:35;;;;;;;;:::i;:::-;;;;;;;;19142:350:::0;;;:::o;21780:236::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;21880:6:::1;;21865:12;:21;21857:64;;;::::0;-1:-1:-1;;;21857:64:0;;13476:2:1;21857:64:0::1;::::0;::::1;13458:21:1::0;13515:2;13495:18;;;13488:30;13554:32;13534:18;;;13527:60;13604:18;;21857:64:0::1;13274:354:1::0;21857:64:0::1;21932:11;:26:::0;;;21976:32:::1;::::0;15950:25:1;;;21976:32:0::1;::::0;15938:2:1;15923:18;21976:32:0::1;15804:177:1::0;23090:802:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;23196:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;23188:72;;;::::0;-1:-1:-1;;;23188:72:0;;11731:2:1;23188:72:0::1;::::0;::::1;11713:21:1::0;11770:2;11750:18;;;11743:30;11809:19;11789:18;;;11782:47;11846:18;;23188:72:0::1;11529:341:1::0;23188:72:0::1;-1:-1:-1::0;;;;;23277:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;23277:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23335:482:::1;;23364:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23364:24:0;;;;;::::1;::::0;;-1:-1:-1;;23364:24:0::1;-1:-1:-1::0;;;;;23364:24:0;::::1;;::::0;;23335:482:::1;;;23435:12;:19:::0;23457:1:::1;-1:-1:-1::0;23427:51:0::1;;;::::0;-1:-1:-1;;;23427:51:0;;12433:2:1;23427:51:0::1;::::0;::::1;12415:21:1::0;12472:2;12452:18;;;12445:30;12511:17;12491:18;;;12484:45;12546:18;;23427:51:0::1;12231:339:1::0;23427:51:0::1;23502:9;23497:305;23521:12;:19:::0;23517:23;::::1;23497:305;;;23593:5;-1:-1:-1::0;;;;;23574:24:0::1;:12;23587:1;23574:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23574:15:0::1;:24;23570:213;;;23645:12;23658:19:::0;;:23:::1;::::0;23680:1:::1;::::0;23658:23:::1;:::i;:::-;23645:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23627:12:::1;:15:::0;;-1:-1:-1;;;;;23645:37:0;;::::1;::::0;23640:1;;23627:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;23627:55:0::1;;;;;-1:-1:-1::0;;;;;23627:55:0::1;;;;;;23709:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23709:18:0;;;;;-1:-1:-1;;23709:18:0::1;::::0;;;;;23754:5:::1;;23570:213;23542:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23497:305;;;;23335:482;23838:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;23838:42:0;::::1;::::0;::::1;::::0;;;::::1;23090:802:::0;;:::o;19688:191::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;19772:2:::1;19762:7;:12;19754:43;;;::::0;-1:-1:-1;;;19754:43:0;;10678:2:1;19754:43:0::1;::::0;::::1;10660:21:1::0;10717:2;10697:18;;;10690:30;10756:20;10736:18;;;10729:48;10794:18;;19754:43:0::1;10476:342:1::0;19754:43:0::1;19808:10;:20:::0;;;19854:17:::1;::::0;15950:25:1;;;19854:17:0::1;::::0;15938:2:1;15923:18;19854:17:0::1;15804:177:1::0;10708:156:0;10788:4;10812:44;10826:10;10838:9;10849:6;10812:13;:44::i;2568:94::-;2830:4;2865:5;-1:-1:-1;;;;;2865:5:0;2427:10;2854:16;2411:38;;;;-1:-1:-1;;;2411:38:0;;14586:2:1;2411:38:0;;;14568:21:1;14625:1;14605:18;;;14598:29;-1:-1:-1;;;14643:18:1;;;14636:36;14689:18;;2411:38:0;14384:329:1;2411:38:0;-1:-1:-1;;;;;2628:19:0::1;;::::0;;;2650:4:::1;2628:19;::::0;;;;;;;:26;;-1:-1:-1;;2628:26:0::1;::::0;;::::1;::::0;;2568:94::o;21098:674::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;21275:16:::1;:32:::0;;;21318:16:::1;:32:::0;;;21361:10:::1;:20:::0;;;21392:10:::1;:20:::0;;;21423:14:::1;:28:::0;;;21477:75:::1;21440:11:::0;21477:58:::1;21405:7:::0;21477:58;21374:7;21477:58;21294:13;21337;21477:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:75::-;21462:12;:90:::0;;;21563:14:::1;:32:::0;;;21630:6:::1;::::0;-1:-1:-1;21614:22:0::1;21606:65;;;::::0;-1:-1:-1;;;21606:65:0;;13476:2:1;21606:65:0::1;::::0;::::1;13458:21:1::0;13515:2;13495:18;;;13488:30;13554:32;13534:18;;;13527:60;13604:18;;21606:65:0::1;13274:354:1::0;21606:65:0::1;21689:75;::::0;;17276:25:1;;;17332:2;17317:18;;17310:34;;;17360:18;;;17353:34;;;17418:2;17403:18;;17396:34;;;17461:3;17446:19;;17439:35;;;21689:75:0::1;::::0;17263:3:1;17248:19;21689:75:0::1;;;;;;;;21098:674:::0;;;;;;:::o;20247:184::-;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;20337:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;20337:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20389;;6916:74:1;;;7006:18;;;6999:50;20389:34:0::1;::::0;6889:18:1;20389:34:0::1;6748:307:1::0;22874:208:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;22966:11:::1;:22:::0;;;::::1;-1:-1:-1::0;;;22966:22:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;22999:13:::1;:23:::0;;;23040:34:::1;::::0;;9179:41:1;;;9251:2;9236:18;;9229:34;;;23040::0::1;::::0;9152:18:1;23040:34:0::1;9011:258:1::0;6824:29:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6824:29:0;;-1:-1:-1;6824:29:0;:::o;2670:97::-;2830:4;2865:5;-1:-1:-1;;;;;2865:5:0;2427:10;2854:16;2411:38;;;;-1:-1:-1;;;2411:38:0;;14586:2:1;2411:38:0;;;14568:21:1;14625:1;14605:18;;;14598:29;-1:-1:-1;;;14643:18:1;;;14636:36;14689:18;;2411:38:0;14384:329:1;2411:38:0;-1:-1:-1;;;;;2732:19:0::1;2754:5;2732:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;2732:27:0::1;::::0;;2670:97::o;3001:173::-;2830:4;2865:5;-1:-1:-1;;;;;2865:5:0;2427:10;2854:16;2411:38;;;;-1:-1:-1;;;2411:38:0;;14586:2:1;2411:38:0;;;14568:21:1;14625:1;14605:18;;;14598:29;-1:-1:-1;;;14643:18:1;;;14636:36;14689:18;;2411:38:0;14384:329:1;2411:38:0;3077:5:::1;:11:::0;;-1:-1:-1;;3077:11:0::1;-1:-1:-1::0;;;;;3077:11:0;::::1;::::0;;::::1;::::0;;3099:19;;;-1:-1:-1;3099:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;3099:26:0::1;::::0;;::::1;::::0;;;3141:25;;5850:74:1;;;3141:25:0::1;::::0;5823:18:1;3141:25:0::1;5704:226:1::0;20439:651:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;20616:12:::1;:28:::0;;;20655:12:::1;:28:::0;;;20694:6:::1;:16:::0;;;20721:6:::1;:16:::0;;;20748:10:::1;:24:::0;;;20798:74:::1;20761:11:::0;20798:58:::1;20730:7:::0;20798:58;20703:7;20798:58;20631:13;20670;20798:17:::1;:32::i;:74::-;20784:11;:88:::0;;;20883:14:::1;:32:::0;;;20949:6:::1;::::0;-1:-1:-1;20934:21:0::1;20926:64;;;::::0;-1:-1:-1;;;20926:64:0;;13476:2:1;20926:64:0::1;::::0;::::1;13458:21:1::0;13515:2;13495:18;;;13488:30;13554:32;13534:18;;;13527:60;13604:18;;20926:64:0::1;13274:354:1::0;20926:64:0::1;21008:74;::::0;;17276:25:1;;;17332:2;17317:18;;17310:34;;;17360:18;;;17353:34;;;17418:2;17403:18;;17396:34;;;17461:3;17446:19;;17439:35;;;21008:74:0::1;::::0;17263:3:1;17248:19;21008:74:0::1;17017:463:1::0;20061:178:0;2522:10;2942:4;2966:19;;;:14;:19;;;;;;;;2501:48;;;;-1:-1:-1;;;2501:48:0;;15326:2:1;2501:48:0;;;15308:21:1;15365:2;15345:18;;;15338:30;-1:-1:-1;;;15384:18:1;;;15377:41;15435:18;;2501:48:0;15124:335:1;2501:48:0;-1:-1:-1;;;;;20149:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;20149:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20199;;6916:74:1;;;7006:18;;;6999:50;20199:32:0::1;::::0;6889:18:1;20199:32:0::1;6748:307:1::0;123:181:0;181:7;;213:5;217:1;213;:5;:::i;:::-;201:17;;242:1;237;:6;;229:46;;;;-1:-1:-1;;;229:46:0;;12077:2:1;229:46:0;;;12059:21:1;12116:2;12096:18;;;12089:30;12155:29;12135:18;;;12128:57;12202:18;;229:46:0;11875:351:1;452:192:0;538:7;574:12;566:6;;;;558:29;;;;-1:-1:-1;;;558:29:0;;;;;;;;:::i;:::-;-1:-1:-1;598:9:0;610:5;614:1;610;:5;:::i;:::-;598:17;452:192;-1:-1:-1;;;;;452:192:0:o;11250:1846::-;-1:-1:-1;;;;;11368:21:0;;11342:4;11368:21;;;:13;:21;;;;;;;;11367:22;:51;;;;-1:-1:-1;;;;;;11394:24:0;;;;;;:13;:24;;;;;;;;11393:25;11367:51;11359:74;;;;-1:-1:-1;;;11359:74:0;;15666:2:1;11359:74:0;;;15648:21:1;15705:2;15685:18;;;15678:30;15744:13;15724:18;;;15717:41;15775:18;;11359:74:0;15464:335:1;11359:74:0;11447:6;;;;11444:63;;;11463:41;11478:6;11486:9;11497:6;11463:14;:41::i;:::-;11456:48;;;;11444:63;-1:-1:-1;;;;;11523:19:0;;;;;;:11;:19;;;;;;;;11522:20;:47;;;;-1:-1:-1;;;;;;11547:22:0;;;;;;:11;:22;;;;;;;;11546:23;11522:47;11519:124;;;11593:14;;-1:-1:-1;;;11593:14:0;;;;11585:46;;;;-1:-1:-1;;;11585:46:0;;13835:2:1;11585:46:0;;;13817:21:1;13874:2;13854:18;;;13847:30;13913:22;13893:18;;;13886:50;13953:18;;11585:46:0;13633:344:1;11585:46:0;11658:16;:14;:16::i;:::-;11655:35;;;11677:10;:8;:10::i;:::-;-1:-1:-1;;;;;11752:33:0;;11704:22;11752:33;;;:25;:33;;;;;;11729:6;;11752:33;;11749:1111;;;-1:-1:-1;;;;;11812:22:0;;;;;;:11;:22;;;;;;;;11808:365;;11899:16;;-1:-1:-1;;;;;11863:20:0;;;;;;:9;:20;;;;;;:32;;11888:6;11863:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;11919:28:0;;;;;;:17;:28;;;;;;;;11863:84;11855:128;;;;-1:-1:-1;;;11855:128:0;;11371:2:1;11855:128:0;;;11353:21:1;11410:2;11390:18;;;11383:30;11449:33;11429:18;;;11422:61;11500:18;;11855:128:0;11169:355:1;11855:128:0;12020:12;;12010:6;:22;;:52;;;-1:-1:-1;;;;;;12036:26:0;;;;;;:15;:26;;;;;;;;12010:52;12002:82;;;;-1:-1:-1;;;12002:82:0;;11025:2:1;12002:82:0;;;11007:21:1;11064:2;11044:18;;;11037:30;-1:-1:-1;;;11083:18:1;;;11076:47;11140:18;;12002:82:0;10823:341:1;12002:82:0;12120:37;12131:6;12139:9;12150:6;12120:10;:37::i;:::-;12103:54;;11808:365;11749:1111;;;-1:-1:-1;;;;;12195:36:0;;;;;;:25;:36;;;;;;;;12192:668;;;-1:-1:-1;;;;;12259:19:0;;;;;;:11;:19;;;;;;;;12255:204;;12317:12;;12307:6;:22;;:49;;;-1:-1:-1;;;;;;12333:23:0;;;;;;:15;:23;;;;;;;;12307:49;12299:79;;;;-1:-1:-1;;;12299:79:0;;11025:2:1;12299:79:0;;;11007:21:1;11064:2;11044:18;;;11037:30;-1:-1:-1;;;11083:18:1;;;11076:47;11140:18;;12299:79:0;10823:341:1;12299:79:0;12414:27;12426:6;12434;12414:11;:27::i;12192:668::-;-1:-1:-1;;;;;12497:19:0;;;;;;:11;:19;;;;;;;;12492:357;;12582:16;;-1:-1:-1;;;;;12546:20:0;;;;;;:9;:20;;;;;;:32;;12571:6;12546:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;12602:28:0;;;;;;:17;:28;;;;;;;;12546:84;12538:128;;;;-1:-1:-1;;;12538:128:0;;11371:2:1;12538:128:0;;;11353:21:1;11410:2;11390:18;;;11383:30;11449:33;11429:18;;;11422:61;11500:18;;12538:128:0;11169:355:1;12538:128:0;12703:12;;12693:6;:22;;:49;;;-1:-1:-1;;;;;;12719:23:0;;;;;;:15;:23;;;;;;;;12693:49;12685:79;;;;-1:-1:-1;;;12685:79:0;;11025:2:1;12685:79:0;;;11007:21:1;11064:2;11044:18;;;11037:30;-1:-1:-1;;;11083:18:1;;;11076:47;11140:18;;12685:79:0;10823:341:1;12685:79:0;12800:31;12816:6;12824;12800:15;:31::i;:::-;12783:48;;12492:357;-1:-1:-1;;;;;12892:17:0;;;;;;:9;:17;;;;;;:29;;12914:6;12892:21;:29::i;:::-;-1:-1:-1;;;;;12872:17:0;;;;;;;:9;:17;;;;;;:49;;;;12955:20;;;;;;;:40;;12980:14;12955:24;:40::i;:::-;-1:-1:-1;;;;;12932:20:0;;;;;;;:9;:20;;;;;;;:63;;;;13023:43;;;;;;;;;;13051:14;15950:25:1;;15938:2;15923:18;;15804:177;13023:43:0;;;;;;;;-1:-1:-1;13084:4:0;;11250:1846;-1:-1:-1;;;;11250:1846:0:o;310:136::-;368:7;395:43;399:1;402;395:43;;;;;;;;;;;;;;;;;:3;:43::i;16649:2009::-;8777:6;:13;;-1:-1:-1;;8777:13:0;8786:4;8777:13;;;16742:16:::1;::::0;16725:12:::1;::::0;8777:6;;16725:34:::1;::::0;:12;:16:::1;:34::i;:::-;16698:61;;16770:20;16792:65;16842:14;;16792:45;16826:10;;16792:29;16808:12;;16792:11;;:15;;:29;;;;:::i;:65::-;16919:4;16870:28;16901:24:::0;;;:9:::1;:24;::::0;;;;;16770:87;;-1:-1:-1;16962:67:0::1;17027:1;16962:60;16770:87:::0;16962:60;16901:24;16987:16;16962:24:::1;:42::i;:::-;:46:::0;::::1;:60::i;:67::-;16936:93:::0;-1:-1:-1;17040:20:0::1;17063:41;:20:::0;16936:93;17063:24:::1;:41::i;:::-;17199:16;::::0;;17213:1:::1;17199:16:::0;;;;;::::1;::::0;;17040:64;;-1:-1:-1;17141:21:0::1;::::0;17117::::1;::::0;17199:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17199:16:0::1;17175:40;;17244:4;17226;17231:1;17226:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17226:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17270:4:::1;::::0;17260:7;;17270:4;::::1;::::0;17260;;17270;;17260:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;17260:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;17287:6:::1;::::0;:188:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;17359:12;;17287:6:::1;::::0;17402:4;;17429::::1;::::0;17449:15:::1;::::0;17287:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17488:17;17508:40;17534:13;17508:21;:25;;:40;;;;:::i;:::-;17488:60:::0;-1:-1:-1;17561:19:0::1;17583:41;17600:23;:16:::0;17621:1:::1;17600:20;:23::i;:::-;17583:12:::0;;:16:::1;:41::i;:::-;17561:63;;17645:26;17674:73;17745:1;17674:66;17728:11;17674:49;17688:34;17705:16;;17688:12;;:16;;:34;;;;:::i;:::-;17674:9:::0;;:13:::1;:49::i;:73::-;17645:102;;17758:26;17787:66;17841:11;17787:49;17801:34;17818:16;;17801:12;;:16;;:34;;;;:::i;:::-;17787:9:::0;;:13:::1;:49::i;:66::-;17758:95;;17864:20;17887:54;17929:11;17887:37;17901:22;17912:10;;17901:6;;:10;;:22;;;;:::i;17887:54::-;17864:77;;17952:20;17975:54;18017:11;17975:37;17989:22;18000:10;;17989:6;;:10;;:22;;;;:::i;:::-;17975:9:::0;;:13:::1;:37::i;:54::-;18071:20;::::0;18063:65:::1;::::0;17952:77;;-1:-1:-1;18043:15:0::1;::::0;-1:-1:-1;;;;;18071:20:0;;::::1;::::0;18105:18;;18043:15;18063:65;18043:15;18063:65;18105:18;18071:20;18063:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;18163:21:0::1;::::0;18155:60:::1;::::0;18042:86;;-1:-1:-1;;;;;;18163:21:0::1;::::0;18198:12;;18155:60:::1;::::0;;;18198:12;18163:21;18155:60:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;18250:14:0::1;::::0;18242:53:::1;::::0;18139:76;;-1:-1:-1;;;;;;18250:14:0::1;::::0;18278:12;;18242:53:::1;::::0;;;18278:12;18250:14;18242:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;18329:5:0::1;::::0;-1:-1:-1;;18350:19:0;;;-1:-1:-1;18347:294:0::1;;18385:6;::::0;18559:21:::1;::::0;18385:244:::1;::::0;;;;18461:4:::1;18385:244;::::0;::::1;7726:34:1::0;7776:18;;;7769:34;;;18385:6:0::1;7819:18:1::0;;;7812:34;;;7862:18;;;7855:34;-1:-1:-1;;;;;18559:21:0;;::::1;7905:19:1::0;;;7898:44;18599:15:0::1;7958:19:1::0;;;7951:35;18385:6:0;::::1;::::0;:22:::1;::::0;18415:18;;7637:19:1;;18385:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18347:294;-1:-1:-1::0;;8795:6:0;:14;;-1:-1:-1;;8795:14:0;;;-1:-1:-1;;;;;;;;;;;;16649:2009:0:o;906:132::-;964:7;991:39;995:1;998;991:39;;;;;;;;;;;;;;;;;:3;:39::i;13108:330::-;13238:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13238:17:0;;13201:4;13238:17;;;:9;:17;;;;;;;:53;;13260:6;;13238:21;:53::i;:::-;-1:-1:-1;;;;;13218:17:0;;;;;;;:9;:17;;;;;;:73;;;;13325:20;;;;;;;:32;;13350:6;13325:24;:32::i;:::-;-1:-1:-1;;;;;13302:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13373:35;;;;;;;;;;13401:6;15950:25:1;;15938:2;15923:18;;15804:177;13373:35:0;;;;;;;;-1:-1:-1;13426:4:0;13108:330;;;;;:::o;15773:226::-;15882:10;15822:4;15856:37;;;:25;:37;;;;;;;;15855:38;:58;;;;-1:-1:-1;15907:6:0;;;;15906:7;15855:58;:82;;;;-1:-1:-1;15926:11:0;;-1:-1:-1;;;15926:11:0;;;;15855:82;:136;;;;-1:-1:-1;;15978:13:0;;15968:4;15950:24;;;;:9;:24;;;;;;:41;;;15773:226::o;13459:970::-;13548:7;13601:17;;13586:12;:32;13582:189;;;13652:4;;-1:-1:-1;;;;;13639:17:0;;;13652:4;;13639:17;;;;:49;;-1:-1:-1;13681:6:0;;-1:-1:-1;;;;;13660:28:0;;;13681:6;;13660:28;;13639:49;13635:121;;;-1:-1:-1;;;;;13709:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;13709:31:0;13736:4;13709:31;;;13635:121;13791:17;13811:59;13855:14;;13811:39;13822:27;13838:10;;13822:11;;:15;;:27;;;;:::i;:::-;13811:6;;:10;:39::i;:59::-;13791:79;;13881:24;13908:42;13935:14;;13908:22;13919:10;;13908:6;:10;;:22;;;;:::i;:42::-;13881:69;-1:-1:-1;13961:22:0;13986:31;:9;13881:69;13986:13;:31::i;:::-;14075:4;14057:24;;;;:9;:24;;;;;;13961:56;;-1:-1:-1;14057:39:0;;14086:9;14057:28;:39::i;:::-;14048:4;14030:24;;;;:9;:24;;;;;;;:66;;;;14112:42;;-1:-1:-1;;;;;14112:42:0;;;;;;;14144:9;15950:25:1;;15938:2;15923:18;;15804:177;14112:42:0;;;;;;;;14170:20;;14167:209;;14249:18;;-1:-1:-1;;;;;14249:18:0;14239:29;;;;:9;:29;;;;;;:51;;14273:16;14239:33;:51::i;:::-;14217:18;;;-1:-1:-1;;;;;14217:18:0;;;14207:29;;;;:9;:29;;;;;;;;;:83;;;;14327:18;;14310:54;;15950:25:1;;;14327:18:0;;;;14310:54;;;;;;15923:18:1;14310:54:0;;;;;;;14167:209;14395:26;:6;14406:14;14395:10;:26::i;:::-;14388:33;13459:970;-1:-1:-1;;;;;;;13459:970:0:o;14437:753::-;14508:7;14529:17;14549:64;14598:14;;14549:44;14560:32;14577:14;;14560:12;;:16;;:32;;;;:::i;14549:64::-;14529:84;;14624:24;14651:46;14682:14;;14651:26;14662:14;;14651:6;:10;;:26;;;;:::i;:46::-;14624:73;-1:-1:-1;14708:22:0;14733:31;:9;14624:73;14733:13;:31::i;:::-;14822:4;14804:24;;;;:9;:24;;;;;;14708:56;;-1:-1:-1;14804:39:0;;14833:9;14804:28;:39::i;:::-;14795:4;14777:24;;;;:9;:24;;;;;;;:66;;;;14859:42;;-1:-1:-1;;;;;14859:42:0;;;;;;;14891:9;15950:25:1;;15938:2;15923:18;;15804:177;14859:42:0;;;;;;;;14917:20;;14914:209;;14996:18;;-1:-1:-1;;;;;14996:18:0;14986:29;;;;:9;:29;;;;;;:51;;15020:16;14986:33;:51::i;:::-;14964:18;;;-1:-1:-1;;;;;14964:18:0;;;14954:29;;;;:9;:29;;;;;;;;;:83;;;;15074:18;;15057:54;;15950:25:1;;;15074:18:0;;;;15057:54;;;;;;15923:18:1;15057:54:0;;;;;;;14914:209;15142:26;:6;15153:14;15142:10;:26::i;:::-;15135:33;14437:753;-1:-1:-1;;;;;;14437:753:0:o;15198:563::-;15311:11;;15352:17;;15273:7;;15311:11;15337:12;:32;15333:83;;;-1:-1:-1;15397:2:0;15333:83;15471:14;;15426:17;;15446:40;;:20;:6;15457:8;15446:10;:20::i;:40::-;15426:60;-1:-1:-1;15527:13:0;;15523:176;;15602:4;15584:24;;;;:9;:24;;;;;;:39;;15613:9;15584:28;:39::i;:::-;15575:4;15557:24;;;;:9;:24;;;;;;;:66;;;;15644:42;;-1:-1:-1;;;;;15644:42:0;;;;;;;15676:9;15950:25:1;;15938:2;15923:18;;15804:177;15644:42:0;;;;;;;;15523:176;15731:21;:6;15742:9;15731:10;:21::i;650:250::-;708:7;732:6;728:47;;-1:-1:-1;762:1:0;755:8;;728:47;787:9;799:5;803:1;799;:5;:::i;:::-;787:17;-1:-1:-1;832:1:0;823:5;827:1;787:17;823:5;:::i;:::-;:10;815:56;;;;-1:-1:-1;;;815:56:0;;14184:2:1;815:56:0;;;14166:21:1;14223:2;14203:18;;;14196:30;14262:34;14242:18;;;14235:62;14333:3;14313:18;;;14306:31;14354:19;;815:56:0;13982:397:1;1044:189:0;1130:7;1165:12;1158:5;1150:28;;;;-1:-1:-1;;;1150:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1189:9:0;1201:5;1205:1;1201;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;526:388::-;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;-1:-1:-1;836:2:1;821:18;;808:32;849:33;808:32;849:33;:::i;:::-;901:7;891:17;;;526:388;;;;;:::o;919:813::-;1014:6;1022;1030;1038;1046;1099:3;1087:9;1078:7;1074:23;1070:33;1067:53;;;1116:1;1113;1106:12;1067:53;1155:9;1142:23;1174:31;1199:5;1174:31;:::i;:::-;1224:5;-1:-1:-1;1281:2:1;1266:18;;1253:32;1294:33;1253:32;1294:33;:::i;:::-;1346:7;-1:-1:-1;1405:2:1;1390:18;;1377:32;1418:33;1377:32;1418:33;:::i;:::-;1470:7;-1:-1:-1;1529:2:1;1514:18;;1501:32;1542:33;1501:32;1542:33;:::i;:::-;1594:7;-1:-1:-1;1653:3:1;1638:19;;1625:33;1667;1625;1667;:::i;:::-;1719:7;1709:17;;;919:813;;;;;;;;:::o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2198:382::-;2263:6;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:31;2423:5;2398:31;:::i;:::-;2448:5;-1:-1:-1;2505:2:1;2490:18;;2477:32;2518:30;2477:32;2518:30;:::i;2585:315::-;2653:6;2661;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2769:9;2756:23;2788:31;2813:5;2788:31;:::i;:::-;2838:5;2890:2;2875:18;;;;2862:32;;-1:-1:-1;;;2585:315:1:o;2905:750::-;2997:6;3005;3013;3066:2;3054:9;3045:7;3041:23;3037:32;3034:52;;;3082:1;3079;3072:12;3034:52;3122:9;3109:23;3151:18;3192:2;3184:6;3181:14;3178:34;;;3208:1;3205;3198:12;3178:34;3246:6;3235:9;3231:22;3221:32;;3291:7;3284:4;3280:2;3276:13;3272:27;3262:55;;3313:1;3310;3303:12;3262:55;3353:2;3340:16;3379:2;3371:6;3368:14;3365:34;;;3395:1;3392;3385:12;3365:34;3450:7;3443:4;3433:6;3430:1;3426:14;3422:2;3418:23;3414:34;3411:47;3408:67;;;3471:1;3468;3461:12;3408:67;3502:4;3494:13;;;;-1:-1:-1;3526:6:1;-1:-1:-1;;3567:20:1;;3554:34;3597:28;3554:34;3597:28;:::i;:::-;3644:5;3634:15;;;2905:750;;;;;:::o;3660:241::-;3716:6;3769:2;3757:9;3748:7;3744:23;3740:32;3737:52;;;3785:1;3782;3775:12;3737:52;3824:9;3811:23;3843:28;3865:5;3843:28;:::i;3906:245::-;3973:6;4026:2;4014:9;4005:7;4001:23;3997:32;3994:52;;;4042:1;4039;4032:12;3994:52;4074:9;4068:16;4093:28;4115:5;4093:28;:::i;4156:309::-;4221:6;4229;4282:2;4270:9;4261:7;4257:23;4253:32;4250:52;;;4298:1;4295;4288:12;4250:52;4337:9;4324:23;4356:28;4378:5;4356:28;:::i;4470:180::-;4529:6;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;-1:-1:-1;4621:23:1;;4470:180;-1:-1:-1;4470:180:1:o;4655:306::-;4743:6;4751;4759;4812:2;4800:9;4791:7;4787:23;4783:32;4780:52;;;4828:1;4825;4818:12;4780:52;4857:9;4851:16;4841:26;;4907:2;4896:9;4892:18;4886:25;4876:35;;4951:2;4940:9;4936:18;4930:25;4920:35;;4655:306;;;;;:::o;4966:523::-;5070:6;5078;5086;5094;5102;5110;5163:3;5151:9;5142:7;5138:23;5134:33;5131:53;;;5180:1;5177;5170:12;5131:53;-1:-1:-1;;5203:23:1;;;5273:2;5258:18;;5245:32;;-1:-1:-1;5324:2:1;5309:18;;5296:32;;5375:2;5360:18;;5347:32;;-1:-1:-1;5426:3:1;5411:19;;5398:33;;-1:-1:-1;5478:3:1;5463:19;5450:33;;-1:-1:-1;4966:523:1;-1:-1:-1;4966:523:1:o;7997:817::-;8219:2;8231:21;;;8204:18;;8287:22;;;8171:4;8366:6;8340:2;8325:18;;8171:4;8400:327;8414:6;8411:1;8408:13;8400:327;;;8489:6;8476:20;8509:31;8534:5;8509:31;:::i;:::-;-1:-1:-1;;;;;8565:54:1;8553:67;;8643:4;8702:15;;;;8667:12;;;;8436:1;8429:9;8400:327;;;8404:3;8744;8736:11;;;;8799:6;8792:14;8785:22;8778:4;8767:9;8763:20;8756:52;7997:817;;;;;;:::o;9523:597::-;9635:4;9664:2;9693;9682:9;9675:21;9725:6;9719:13;9768:6;9763:2;9752:9;9748:18;9741:34;9793:1;9803:140;9817:6;9814:1;9811:13;9803:140;;;9912:14;;;9908:23;;9902:30;9878:17;;;9897:2;9874:26;9867:66;9832:10;;9803:140;;;9961:6;9958:1;9955:13;9952:91;;;10031:1;10026:2;10017:6;10006:9;10002:22;9998:31;9991:42;9952:91;-1:-1:-1;10104:2:1;10083:15;-1:-1:-1;;10079:29:1;10064:45;;;;10111:2;10060:54;;9523:597;-1:-1:-1;;;9523:597:1:o;15986:1026::-;16248:4;16296:3;16285:9;16281:19;16327:6;16316:9;16309:25;16353:2;16391:6;16386:2;16375:9;16371:18;16364:34;16434:3;16429:2;16418:9;16414:18;16407:31;16458:6;16493;16487:13;16524:6;16516;16509:22;16562:3;16551:9;16547:19;16540:26;;16601:2;16593:6;16589:15;16575:29;;16622:1;16632:218;16646:6;16643:1;16640:13;16632:218;;;16711:13;;-1:-1:-1;;;;;16707:62:1;16695:75;;16825:15;;;;16790:12;;;;16668:1;16661:9;16632:218;;;-1:-1:-1;;;;;;;16906:55:1;;;;16901:2;16886:18;;16879:83;-1:-1:-1;;;16993:3:1;16978:19;16971:35;16867:3;15986:1026;-1:-1:-1;;;15986:1026:1:o;17674:128::-;17714:3;17745:1;17741:6;17738:1;17735:13;17732:39;;;17751:18;;:::i;:::-;-1:-1:-1;17787:9:1;;17674:128::o;17807:274::-;17847:1;17873;17863:189;;-1:-1:-1;;;17905:1:1;17898:88;18009:4;18006:1;17999:15;18037:4;18034:1;18027:15;17863:189;-1:-1:-1;18066:9:1;;17807:274::o;18086:168::-;18126:7;18192:1;18188;18184:6;18180:14;18177:1;18174:21;18169:1;18162:9;18155:17;18151:45;18148:71;;;18199:18;;:::i;:::-;-1:-1:-1;18239:9:1;;18086:168::o;18259:125::-;18299:4;18327:1;18324;18321:8;18318:34;;;18332:18;;:::i;:::-;-1:-1:-1;18369:9:1;;18259:125::o;18389:135::-;18428:3;-1:-1:-1;;18449:17:1;;18446:43;;;18469:18;;:::i;:::-;-1:-1:-1;18516:1:1;18505:13;;18389:135::o;18529:184::-;-1:-1:-1;;;18578:1:1;18571:88;18678:4;18675:1;18668:15;18702:4;18699:1;18692:15;18718:184;-1:-1:-1;;;18767:1:1;18760:88;18867:4;18864:1;18857:15;18891:4;18888:1;18881:15;18907:184;-1:-1:-1;;;18956:1:1;18949:88;19056:4;19053:1;19046:15;19080:4;19077:1;19070:15;19285:154;-1:-1:-1;;;;;19364:5:1;19360:54;19353:5;19350:65;19340:93;;19429:1;19426;19419:12;19444:118;19530:5;19523:13;19516:21;19509:5;19506:32;19496:60;;19552:1;19549;19542:12

Swarm Source

ipfs://249ba5872a4083bb77be3cf573dc078faa86226c2bda7218e60756fa0d052113

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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