ETH Price: $3,383.90 (-1.84%)
Gas: 2 Gwei

Contract

0xE2e335Ef26281ae3feaD48d79cF8F35Fb206fB54
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve158971512022-11-04 14:08:59606 days ago1667570939IN
0xE2e335Ef...Fb206fB54
0 ETH0.0014575730.85524133
Approve158783582022-11-01 23:07:59609 days ago1667344079IN
0xE2e335Ef...Fb206fB54
0 ETH0.000464629.83565495
Approve158720752022-11-01 1:59:35610 days ago1667267975IN
0xE2e335Ef...Fb206fB54
0 ETH0.000468719.92229265
Approve158720312022-11-01 1:50:47610 days ago1667267447IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005426211.48679216
Approve158719802022-11-01 1:40:23610 days ago1667266823IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005370711.36938962
Renounce Ownersh...158719722022-11-01 1:38:47610 days ago1667266727IN
0xE2e335Ef...Fb206fB54
0 ETH0.0003223413.71370668
Approve158719592022-11-01 1:35:59610 days ago1667266559IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005163410.93048442
Approve158719592022-11-01 1:35:59610 days ago1667266559IN
0xE2e335Ef...Fb206fB54
0 ETH0.0006476313.70970236
Approve158719552022-11-01 1:35:11610 days ago1667266511IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005368211.36393627
Approve158719512022-11-01 1:34:23610 days ago1667266463IN
0xE2e335Ef...Fb206fB54
0 ETH0.0006263113.25834191
Remove Limits158719422022-11-01 1:32:35610 days ago1667266355IN
0xE2e335Ef...Fb206fB54
0 ETH0.0002908610.09835492
Approve158719332022-11-01 1:30:47610 days ago1667266247IN
0xE2e335Ef...Fb206fB54
0 ETH0.0014902631.54734653
Approve158719322022-11-01 1:30:35610 days ago1667266235IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005788512.25374979
Approve158719322022-11-01 1:30:35610 days ago1667266235IN
0xE2e335Ef...Fb206fB54
0 ETH0.0007451315.77374979
Approve158719312022-11-01 1:30:23610 days ago1667266223IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005972112.6424219
Approve158719292022-11-01 1:29:59610 days ago1667266199IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005830412.34237345
Approve158719292022-11-01 1:29:59610 days ago1667266199IN
0xE2e335Ef...Fb206fB54
0 ETH0.0007521515.92237345
Approve158719262022-11-01 1:29:23610 days ago1667266163IN
0xE2e335Ef...Fb206fB54
0 ETH0.0006163213.04689797
Approve158719192022-11-01 1:27:59610 days ago1667266079IN
0xE2e335Ef...Fb206fB54
0 ETH0.0005691912.0493361
Approve158719172022-11-01 1:27:35610 days ago1667266055IN
0xE2e335Ef...Fb206fB54
0 ETH0.0007690216.27949008
Approve158719022022-11-01 1:24:35610 days ago1667265875IN
0xE2e335Ef...Fb206fB54
0 ETH0.0006722814.23160452
Transfer158719002022-11-01 1:24:11610 days ago1667265851IN
0xE2e335Ef...Fb206fB54
0 ETH0.0008964614.48834766
Approve158719002022-11-01 1:24:11610 days ago1667265851IN
0xE2e335Ef...Fb206fB54
0 ETH0.0015583332.98834766
Approve158718972022-11-01 1:23:35610 days ago1667265815IN
0xE2e335Ef...Fb206fB54
0 ETH0.0006468913.69400683
Approve158718912022-11-01 1:22:23610 days ago1667265743IN
0xE2e335Ef...Fb206fB54
0 ETH0.0007986616.9069621
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
159222562022-11-08 2:14:23603 days ago1667873663
0xE2e335Ef...Fb206fB54
0.00042397 ETH
159222562022-11-08 2:14:23603 days ago1667873663
0xE2e335Ef...Fb206fB54
0.00008461 ETH
159222562022-11-08 2:14:23603 days ago1667873663
0xE2e335Ef...Fb206fB54
0.00022623 ETH
159222562022-11-08 2:14:23603 days ago1667873663
0xE2e335Ef...Fb206fB54
0.00056559 ETH
158734032022-11-01 6:27:59609 days ago1667284079
0xE2e335Ef...Fb206fB54
0.00103167 ETH
158734032022-11-01 6:27:59609 days ago1667284079
0xE2e335Ef...Fb206fB54
0.00020641 ETH
158734032022-11-01 6:27:59609 days ago1667284079
0xE2e335Ef...Fb206fB54
0.00055017 ETH
158734032022-11-01 6:27:59609 days ago1667284079
0xE2e335Ef...Fb206fB54
0.00137542 ETH
158721692022-11-01 2:18:47610 days ago1667269127
0xE2e335Ef...Fb206fB54
0.00067702 ETH
158721692022-11-01 2:18:47610 days ago1667269127
0xE2e335Ef...Fb206fB54
0.00013522 ETH
158721692022-11-01 2:18:47610 days ago1667269127
0xE2e335Ef...Fb206fB54
0.0003612 ETH
158721692022-11-01 2:18:47610 days ago1667269127
0xE2e335Ef...Fb206fB54
0.00090301 ETH
158721322022-11-01 2:11:11610 days ago1667268671
0xE2e335Ef...Fb206fB54
0.00311489 ETH
158721322022-11-01 2:11:11610 days ago1667268671
0xE2e335Ef...Fb206fB54
0.00062767 ETH
158721322022-11-01 2:11:11610 days ago1667268671
0xE2e335Ef...Fb206fB54
0.00165815 ETH
158721322022-11-01 2:11:11610 days ago1667268671
0xE2e335Ef...Fb206fB54
0.00414538 ETH
158720832022-11-01 2:01:11610 days ago1667268071
0xE2e335Ef...Fb206fB54
0.00100887 ETH
158720832022-11-01 2:01:11610 days ago1667268071
0xE2e335Ef...Fb206fB54
0.00020158 ETH
158720832022-11-01 2:01:11610 days ago1667268071
0xE2e335Ef...Fb206fB54
0.00053819 ETH
158720832022-11-01 2:01:11610 days ago1667268071
0xE2e335Ef...Fb206fB54
0.00134548 ETH
158720822022-11-01 2:00:59610 days ago1667268059
0xE2e335Ef...Fb206fB54
0.00074214 ETH
158720822022-11-01 2:00:59610 days ago1667268059
0xE2e335Ef...Fb206fB54
0.00014814 ETH
158720822022-11-01 2:00:59610 days ago1667268059
0xE2e335Ef...Fb206fB54
0.00039599 ETH
158720822022-11-01 2:00:59610 days ago1667268059
0xE2e335Ef...Fb206fB54
0.00098998 ETH
158720752022-11-01 1:59:35610 days ago1667267975
0xE2e335Ef...Fb206fB54
0.00098998 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Ether

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-01
*/

/*
    Ether Protocol
    Implementing the Ether in Ethereum
    https://t.me/ether_protocol
    https://etherprotocol.space
*/

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

    function WETH() external pure returns (address);

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

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

contract Ether is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;

	uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Ether Protocol", "ETHER") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyLiquidityFee = 2;
        uint256 _buyMarketingFee = 3;

        uint256 _sellLiquidityFee = 2;
        uint256 _sellMarketingFee = 3;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxTransactionAmount = 2 * 1e7 * 1e18; //in %
        maxWallet = 3 * 1e7 * 1e18; //in%
        swapTokensAtAmount = (totalSupply * 10) / 10000; 

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;

        devWallet = address(0x80B51f8D70104398c9fd82afee63D09991093B35); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }
	
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;                
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
	
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        //there will be no leftover eth in the contract 
        (success, ) = address(devWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"","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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600e81526020017f45746865722050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600581526020017f45544845520000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000a49565b5080600490805190602001906200010092919062000a49565b50505062000123620001176200050960201b60201c565b6200051160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f816001620005d760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000b63565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000b63565b6040518363ffffffff1660e01b8152600401620002a292919062000ba6565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000b63565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a0516001620005d760201b60201c565b6200034560a0516001620006c160201b60201c565b60006002905060006003905060006002905060006003905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006007819055506a18d0bf423c03d8de000000600981905550612710600a82620003a4919062000c0c565b620003b0919062000c9c565b60088190555084600c8190555083600d81905550600d54600c54620003d6919062000cd4565b600b8190555082600f8190555081601081905550601054600f54620003fc919062000cd4565b600e819055507380b51f8d70104398c9fd82afee63d09991093b35600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004796200046b6200076260201b60201c565b60016200078c60201b60201c565b6200048c3060016200078c60201b60201c565b620004a161dead60016200078c60201b60201c565b620004c3620004b56200076260201b60201c565b6001620005d760201b60201c565b620004d6306001620005d760201b60201c565b620004eb61dead6001620005d760201b60201c565b620004fd3382620008c660201b60201c565b50505050505062000ef3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005e76200050960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200060d6200076260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000666576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065d9062000d92565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200079c6200050960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007c26200076260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008129062000d92565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008ba919062000dd1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009309062000e3e565b60405180910390fd5b6200094d6000838362000a3f60201b60201c565b806002600082825462000961919062000cd4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009b8919062000cd4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a1f919062000e71565b60405180910390a362000a3b6000838362000a4460201b60201c565b5050565b505050565b505050565b82805462000a579062000ebd565b90600052602060002090601f01602090048101928262000a7b576000855562000ac7565b82601f1062000a9657805160ff191683800117855562000ac7565b8280016001018555821562000ac7579182015b8281111562000ac657825182559160200191906001019062000aa9565b5b50905062000ad6919062000ada565b5090565b5b8082111562000af557600081600090555060010162000adb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b2b8262000afe565b9050919050565b62000b3d8162000b1e565b811462000b4957600080fd5b50565b60008151905062000b5d8162000b32565b92915050565b60006020828403121562000b7c5762000b7b62000af9565b5b600062000b8c8482850162000b4c565b91505092915050565b62000ba08162000b1e565b82525050565b600060408201905062000bbd600083018562000b95565b62000bcc602083018462000b95565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c198262000bd3565b915062000c268362000bd3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c625762000c6162000bdd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ca98262000bd3565b915062000cb68362000bd3565b92508262000cc95762000cc862000c6d565b5b828204905092915050565b600062000ce18262000bd3565b915062000cee8362000bd3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d265762000d2562000bdd565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d7a60208362000d31565b915062000d878262000d42565b602082019050919050565b6000602082019050818103600083015262000dad8162000d6b565b9050919050565b60008115159050919050565b62000dcb8162000db4565b82525050565b600060208201905062000de8600083018462000dc0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e26601f8362000d31565b915062000e338262000dee565b602082019050919050565b6000602082019050818103600083015262000e598162000e17565b9050919050565b62000e6b8162000bd3565b82525050565b600060208201905062000e88600083018462000e60565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ed657607f821691505b6020821081141562000eed5762000eec62000e8e565b5b50919050565b60805160a05161401d62000f4360003960008181610c86015261122a015260008181610a9f01528181612b3d01528181612c1e01528181612c4501528181612ce10152612d08015261401d6000f3fe60806040526004361061024a5760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063dd62ed3e1161007a578063dd62ed3e146108bb578063e2f45605146108f8578063f11a24d314610923578063f2fde38b1461094e578063f637434214610977578063f8b45b05146109a257610251565b8063bbc0c742146107d4578063c0246668146107ff578063c8c8ebe414610828578063d257b34f14610853578063d85ba0631461089057610251565b806395d89b41116100fd57806395d89b41146106c95780639a7a23d6146106f4578063a457c2d71461071d578063a9059cbb1461075a578063b62496f51461079757610251565b80638a8c523c146106085780638da5cb5b1461061f5780638ea5220f1461064a5780639213691314610675578063924de9b7146106a057610251565b806349bd5a5e116101c757806370a082311161018b57806370a0823114610535578063715018a614610572578063751039fc146105895780637571336a146105b45780637bce5a04146105dd57610251565b806349bd5a5e1461044c5780634a62bb65146104775780634fbee193146104a25780636a486a8e146104df5780636ddd17131461050a57610251565b80631a8145bb1161020e5780631a8145bb146103515780631f3fed8f1461037c57806323b872dd146103a7578063313ce567146103e4578063395093511461040f57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be5780631694505e146102fb57806318160ddd1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109cd565b6040516102789190612e70565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612f2b565b610a5f565b6040516102b59190612f86565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612fa1565b610a7d565b6040516102f29190612f86565b60405180910390f35b34801561030757600080fd5b50610310610a9d565b60405161031d919061302d565b60405180910390f35b34801561033257600080fd5b5061033b610ac1565b6040516103489190613057565b60405180910390f35b34801561035d57600080fd5b50610366610acb565b6040516103739190613057565b60405180910390f35b34801561038857600080fd5b50610391610ad1565b60405161039e9190613057565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613072565b610ad7565b6040516103db9190612f86565b60405180910390f35b3480156103f057600080fd5b506103f9610bcf565b60405161040691906130e1565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612f2b565b610bd8565b6040516104439190612f86565b60405180910390f35b34801561045857600080fd5b50610461610c84565b60405161046e919061310b565b60405180910390f35b34801561048357600080fd5b5061048c610ca8565b6040516104999190612f86565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612fa1565b610cbb565b6040516104d69190612f86565b60405180910390f35b3480156104eb57600080fd5b506104f4610d11565b6040516105019190613057565b60405180910390f35b34801561051657600080fd5b5061051f610d17565b60405161052c9190612f86565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612fa1565b610d2a565b6040516105699190613057565b60405180910390f35b34801561057e57600080fd5b50610587610d72565b005b34801561059557600080fd5b5061059e610dfa565b6040516105ab9190612f86565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613152565b610e9a565b005b3480156105e957600080fd5b506105f2610f71565b6040516105ff9190613057565b60405180910390f35b34801561061457600080fd5b5061061d610f77565b005b34801561062b57600080fd5b5061063461102b565b604051610641919061310b565b60405180910390f35b34801561065657600080fd5b5061065f611055565b60405161066c919061310b565b60405180910390f35b34801561068157600080fd5b5061068a61107b565b6040516106979190613057565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613192565b611081565b005b3480156106d557600080fd5b506106de61111a565b6040516106eb9190612e70565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190613152565b6111ac565b005b34801561072957600080fd5b50610744600480360381019061073f9190612f2b565b6112c5565b6040516107519190612f86565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612f2b565b6113b0565b60405161078e9190612f86565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190612fa1565b6113ce565b6040516107cb9190612f86565b60405180910390f35b3480156107e057600080fd5b506107e96113ee565b6040516107f69190612f86565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613152565b611401565b005b34801561083457600080fd5b5061083d611526565b60405161084a9190613057565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906131bf565b61152c565b6040516108879190612f86565b60405180910390f35b34801561089c57600080fd5b506108a5611681565b6040516108b29190613057565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd91906131ec565b611687565b6040516108ef9190613057565b60405180910390f35b34801561090457600080fd5b5061090d61170e565b60405161091a9190613057565b60405180910390f35b34801561092f57600080fd5b50610938611714565b6040516109459190613057565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190612fa1565b61171a565b005b34801561098357600080fd5b5061098c611812565b6040516109999190613057565b60405180910390f35b3480156109ae57600080fd5b506109b7611818565b6040516109c49190613057565b60405180910390f35b6060600380546109dc9061325b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a089061325b565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b5050505050905090565b6000610a73610a6c61181e565b8484611826565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60115481565b60125481565b6000610ae48484846119f1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b2f61181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906132ff565b60405180910390fd5b610bc385610bbb61181e565b858403611826565b60019150509392505050565b60006012905090565b6000610c7a610be561181e565b848460016000610bf361181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c75919061334e565b611826565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d7a61181e565b73ffffffffffffffffffffffffffffffffffffffff16610d9861102b565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906133f0565b60405180910390fd5b610df8600061245d565b565b6000610e0461181e565b73ffffffffffffffffffffffffffffffffffffffff16610e2261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906133f0565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610ea261181e565b73ffffffffffffffffffffffffffffffffffffffff16610ec061102b565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906133f0565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610f7f61181e565b73ffffffffffffffffffffffffffffffffffffffff16610f9d61102b565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906133f0565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61108961181e565b73ffffffffffffffffffffffffffffffffffffffff166110a761102b565b73ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906133f0565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546111299061325b565b80601f01602080910402602001604051908101604052809291908181526020018280546111559061325b565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b5050505050905090565b6111b461181e565b73ffffffffffffffffffffffffffffffffffffffff166111d261102b565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906133f0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90613482565b60405180910390fd5b6112c18282612523565b5050565b600080600160006112d461181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613514565b60405180910390fd5b6113a561139c61181e565b85858403611826565b600191505092915050565b60006113c46113bd61181e565b84846119f1565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b61140961181e565b73ffffffffffffffffffffffffffffffffffffffff1661142761102b565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906133f0565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151a9190612f86565b60405180910390a25050565b60075481565b600061153661181e565b73ffffffffffffffffffffffffffffffffffffffff1661155461102b565b73ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a1906133f0565b60405180910390fd5b620186a060016115b8610ac1565b6115c29190613534565b6115cc91906135bd565b82101561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613660565b60405180910390fd5b6103e8600561161b610ac1565b6116259190613534565b61162f91906135bd565b821115611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906136f2565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600c5481565b61172261181e565b73ffffffffffffffffffffffffffffffffffffffff1661174061102b565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d906133f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90613784565b60405180910390fd5b61180f8161245d565b50565b600f5481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613816565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906138a8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119e49190613057565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a589061393a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906139cc565b60405180910390fd5b6000811415611aeb57611ae6838360006125c4565b612458565b600a60009054906101000a900460ff1615611fe657611b0861102b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b765750611b4661102b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611baf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611be9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c025750600560149054906101000a900460ff16155b15611fe557600a60019054906101000a900460ff16611cfc57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cbc5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290613a38565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e4657600754811115611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613aca565b60405180910390fd5b600954611df583610d2a565b82611e00919061334e565b1115611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613b36565b60405180910390fd5b611fe4565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee95750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3857600754811115611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613bc8565b60405180910390fd5b611fe3565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fe257600954611f9583610d2a565b82611fa0919061334e565b1115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b36565b60405180910390fd5b5b5b5b5b5b6000611ff130610d2a565b9050600060085482101590508080156120165750600a60029054906101000a900460ff165b801561202f5750600560149054906101000a900460ff16155b80156120855750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120db5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121315750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612175576001600560146101000a81548160ff021916908315150217905550612159612845565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061222b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561223557600090505b6000811561244857601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561229857506000600e54115b15612332576122c560646122b7600e5488612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600e54600f54826122d89190613534565b6122e291906135bd565b601160008282546122f3919061334e565b92505081905550600e546010548261230b9190613534565b61231591906135bd565b60126000828254612326919061334e565b92505081905550612424565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561238d57506000600b54115b15612423576123ba60646123ac600b5488612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600b54600c54826123cd9190613534565b6123d791906135bd565b601160008282546123e8919061334e565b92505081905550600b54600d54826124009190613534565b61240a91906135bd565b6012600082825461241b919061334e565b925050819055505b5b6000811115612439576124388730836125c4565b5b80856124459190613be8565b94505b6124538787876125c4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b9061393a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b906139cc565b60405180910390fd5b6126af838383612a7e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90613c8e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c8919061334e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161282c9190613057565b60405180910390a361283f848484612a83565b50505050565b600061285030610d2a565b90506000601254601154612864919061334e565b90506000808314806128765750600082145b1561288357505050612a50565b60146008546128929190613534565b8311156128ab5760146008546128a89190613534565b92505b6000600283601154866128be9190613534565b6128c891906135bd565b6128d291906135bd565b905060006128e98286612a8890919063ffffffff16565b905060004790506128f982612a9e565b600061290e8247612a8890919063ffffffff16565b905060006129398761292b60125485612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600081836129499190613be8565b90506000601181905550600060128190555060008611801561296b5750600081115b156129b85761297a8682612cdb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826011546040516129af93929190613cae565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516129fe90613d16565b60006040518083038185875af1925050503d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b5050809750505050505050505050505b565b60008183612a609190613534565b905092915050565b60008183612a7691906135bd565b905092915050565b505050565b505050565b60008183612a969190613be8565b905092915050565b6000600267ffffffffffffffff811115612abb57612aba613d2b565b5b604051908082528060200260200182016040528015612ae95781602001602082028036833780820191505090505b5090503081600081518110612b0157612b00613d5a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190613d9e565b81600181518110612bde57612bdd613d5a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c43307f000000000000000000000000000000000000000000000000000000000000000084611826565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ca5959493929190613ec4565b600060405180830381600087803b158015612cbf57600080fd5b505af1158015612cd3573d6000803e3d6000fd5b505050505050565b612d06307f000000000000000000000000000000000000000000000000000000000000000084611826565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612d8d96959493929190613f1e565b60606040518083038185885af1158015612dab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612dd09190613f94565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e11578082015181840152602081019050612df6565b83811115612e20576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e4282612dd7565b612e4c8185612de2565b9350612e5c818560208601612df3565b612e6581612e26565b840191505092915050565b60006020820190508181036000830152612e8a8184612e37565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ec282612e97565b9050919050565b612ed281612eb7565b8114612edd57600080fd5b50565b600081359050612eef81612ec9565b92915050565b6000819050919050565b612f0881612ef5565b8114612f1357600080fd5b50565b600081359050612f2581612eff565b92915050565b60008060408385031215612f4257612f41612e92565b5b6000612f5085828601612ee0565b9250506020612f6185828601612f16565b9150509250929050565b60008115159050919050565b612f8081612f6b565b82525050565b6000602082019050612f9b6000830184612f77565b92915050565b600060208284031215612fb757612fb6612e92565b5b6000612fc584828501612ee0565b91505092915050565b6000819050919050565b6000612ff3612fee612fe984612e97565b612fce565b612e97565b9050919050565b600061300582612fd8565b9050919050565b600061301782612ffa565b9050919050565b6130278161300c565b82525050565b6000602082019050613042600083018461301e565b92915050565b61305181612ef5565b82525050565b600060208201905061306c6000830184613048565b92915050565b60008060006060848603121561308b5761308a612e92565b5b600061309986828701612ee0565b93505060206130aa86828701612ee0565b92505060406130bb86828701612f16565b9150509250925092565b600060ff82169050919050565b6130db816130c5565b82525050565b60006020820190506130f660008301846130d2565b92915050565b61310581612eb7565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f81612f6b565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612e92565b5b600061317785828601612ee0565b92505060206131888582860161313d565b9150509250929050565b6000602082840312156131a8576131a7612e92565b5b60006131b68482850161313d565b91505092915050565b6000602082840312156131d5576131d4612e92565b5b60006131e384828501612f16565b91505092915050565b6000806040838503121561320357613202612e92565b5b600061321185828601612ee0565b925050602061322285828601612ee0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327357607f821691505b602082108114156132875761328661322c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006132e9602883612de2565b91506132f48261328d565b604082019050919050565b60006020820190508181036000830152613318816132dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061335982612ef5565b915061336483612ef5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133995761339861331f565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133da602083612de2565b91506133e5826133a4565b602082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061346c603983612de2565b915061347782613410565b604082019050919050565b6000602082019050818103600083015261349b8161345f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134fe602583612de2565b9150613509826134a2565b604082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b600061353f82612ef5565b915061354a83612ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135835761358261331f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135c882612ef5565b91506135d383612ef5565b9250826135e3576135e261358e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061364a603583612de2565b9150613655826135ee565b604082019050919050565b600060208201905081810360008301526136798161363d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006136dc603483612de2565b91506136e782613680565b604082019050919050565b6000602082019050818103600083015261370b816136cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376e602683612de2565b915061377982613712565b604082019050919050565b6000602082019050818103600083015261379d81613761565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613800602483612de2565b915061380b826137a4565b604082019050919050565b6000602082019050818103600083015261382f816137f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613892602283612de2565b915061389d82613836565b604082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613924602583612de2565b915061392f826138c8565b604082019050919050565b6000602082019050818103600083015261395381613917565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139b6602383612de2565b91506139c18261395a565b604082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613a22601683612de2565b9150613a2d826139ec565b602082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613ab4603583612de2565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613b20601383612de2565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613bb2603683612de2565b9150613bbd82613b56565b604082019050919050565b60006020820190508181036000830152613be181613ba5565b9050919050565b6000613bf382612ef5565b9150613bfe83612ef5565b925082821015613c1157613c1061331f565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613c78602683612de2565b9150613c8382613c1c565b604082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b6000606082019050613cc36000830186613048565b613cd06020830185613048565b613cdd6040830184613048565b949350505050565b600081905092915050565b50565b6000613d00600083613ce5565b9150613d0b82613cf0565b600082019050919050565b6000613d2182613cf3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d9881612ec9565b92915050565b600060208284031215613db457613db3612e92565b5b6000613dc284828501613d89565b91505092915050565b6000819050919050565b6000613df0613deb613de684613dcb565b612fce565b612ef5565b9050919050565b613e0081613dd5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e3b81612eb7565b82525050565b6000613e4d8383613e32565b60208301905092915050565b6000602082019050919050565b6000613e7182613e06565b613e7b8185613e11565b9350613e8683613e22565b8060005b83811015613eb7578151613e9e8882613e41565b9750613ea983613e59565b925050600181019050613e8a565b5085935050505092915050565b600060a082019050613ed96000830188613048565b613ee66020830187613df7565b8181036040830152613ef88186613e66565b9050613f0760608301856130fc565b613f146080830184613048565b9695505050505050565b600060c082019050613f3360008301896130fc565b613f406020830188613048565b613f4d6040830187613df7565b613f5a6060830186613df7565b613f6760808301856130fc565b613f7460a0830184613048565b979650505050505050565b600081519050613f8e81612eff565b92915050565b600080600060608486031215613fad57613fac612e92565b5b6000613fbb86828701613f7f565b9350506020613fcc86828701613f7f565b9250506040613fdd86828701613f7f565b915050925092509256fea26469706673582212207474bc61f5646ba6cbffb8c0b74f2dbeb2586ff744b2a58fbf81bf147f88884364736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063dd62ed3e1161007a578063dd62ed3e146108bb578063e2f45605146108f8578063f11a24d314610923578063f2fde38b1461094e578063f637434214610977578063f8b45b05146109a257610251565b8063bbc0c742146107d4578063c0246668146107ff578063c8c8ebe414610828578063d257b34f14610853578063d85ba0631461089057610251565b806395d89b41116100fd57806395d89b41146106c95780639a7a23d6146106f4578063a457c2d71461071d578063a9059cbb1461075a578063b62496f51461079757610251565b80638a8c523c146106085780638da5cb5b1461061f5780638ea5220f1461064a5780639213691314610675578063924de9b7146106a057610251565b806349bd5a5e116101c757806370a082311161018b57806370a0823114610535578063715018a614610572578063751039fc146105895780637571336a146105b45780637bce5a04146105dd57610251565b806349bd5a5e1461044c5780634a62bb65146104775780634fbee193146104a25780636a486a8e146104df5780636ddd17131461050a57610251565b80631a8145bb1161020e5780631a8145bb146103515780631f3fed8f1461037c57806323b872dd146103a7578063313ce567146103e4578063395093511461040f57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be5780631694505e146102fb57806318160ddd1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109cd565b6040516102789190612e70565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612f2b565b610a5f565b6040516102b59190612f86565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612fa1565b610a7d565b6040516102f29190612f86565b60405180910390f35b34801561030757600080fd5b50610310610a9d565b60405161031d919061302d565b60405180910390f35b34801561033257600080fd5b5061033b610ac1565b6040516103489190613057565b60405180910390f35b34801561035d57600080fd5b50610366610acb565b6040516103739190613057565b60405180910390f35b34801561038857600080fd5b50610391610ad1565b60405161039e9190613057565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613072565b610ad7565b6040516103db9190612f86565b60405180910390f35b3480156103f057600080fd5b506103f9610bcf565b60405161040691906130e1565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612f2b565b610bd8565b6040516104439190612f86565b60405180910390f35b34801561045857600080fd5b50610461610c84565b60405161046e919061310b565b60405180910390f35b34801561048357600080fd5b5061048c610ca8565b6040516104999190612f86565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612fa1565b610cbb565b6040516104d69190612f86565b60405180910390f35b3480156104eb57600080fd5b506104f4610d11565b6040516105019190613057565b60405180910390f35b34801561051657600080fd5b5061051f610d17565b60405161052c9190612f86565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612fa1565b610d2a565b6040516105699190613057565b60405180910390f35b34801561057e57600080fd5b50610587610d72565b005b34801561059557600080fd5b5061059e610dfa565b6040516105ab9190612f86565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613152565b610e9a565b005b3480156105e957600080fd5b506105f2610f71565b6040516105ff9190613057565b60405180910390f35b34801561061457600080fd5b5061061d610f77565b005b34801561062b57600080fd5b5061063461102b565b604051610641919061310b565b60405180910390f35b34801561065657600080fd5b5061065f611055565b60405161066c919061310b565b60405180910390f35b34801561068157600080fd5b5061068a61107b565b6040516106979190613057565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190613192565b611081565b005b3480156106d557600080fd5b506106de61111a565b6040516106eb9190612e70565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190613152565b6111ac565b005b34801561072957600080fd5b50610744600480360381019061073f9190612f2b565b6112c5565b6040516107519190612f86565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612f2b565b6113b0565b60405161078e9190612f86565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190612fa1565b6113ce565b6040516107cb9190612f86565b60405180910390f35b3480156107e057600080fd5b506107e96113ee565b6040516107f69190612f86565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613152565b611401565b005b34801561083457600080fd5b5061083d611526565b60405161084a9190613057565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906131bf565b61152c565b6040516108879190612f86565b60405180910390f35b34801561089c57600080fd5b506108a5611681565b6040516108b29190613057565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd91906131ec565b611687565b6040516108ef9190613057565b60405180910390f35b34801561090457600080fd5b5061090d61170e565b60405161091a9190613057565b60405180910390f35b34801561092f57600080fd5b50610938611714565b6040516109459190613057565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190612fa1565b61171a565b005b34801561098357600080fd5b5061098c611812565b6040516109999190613057565b60405180910390f35b3480156109ae57600080fd5b506109b7611818565b6040516109c49190613057565b60405180910390f35b6060600380546109dc9061325b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a089061325b565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b5050505050905090565b6000610a73610a6c61181e565b8484611826565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60115481565b60125481565b6000610ae48484846119f1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b2f61181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906132ff565b60405180910390fd5b610bc385610bbb61181e565b858403611826565b60019150509392505050565b60006012905090565b6000610c7a610be561181e565b848460016000610bf361181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c75919061334e565b611826565b6001905092915050565b7f000000000000000000000000d39d66ce821b99bd7f576c1843586ae9a3d82b5f81565b600a60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d7a61181e565b73ffffffffffffffffffffffffffffffffffffffff16610d9861102b565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906133f0565b60405180910390fd5b610df8600061245d565b565b6000610e0461181e565b73ffffffffffffffffffffffffffffffffffffffff16610e2261102b565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906133f0565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610ea261181e565b73ffffffffffffffffffffffffffffffffffffffff16610ec061102b565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906133f0565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610f7f61181e565b73ffffffffffffffffffffffffffffffffffffffff16610f9d61102b565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906133f0565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61108961181e565b73ffffffffffffffffffffffffffffffffffffffff166110a761102b565b73ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906133f0565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546111299061325b565b80601f01602080910402602001604051908101604052809291908181526020018280546111559061325b565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b5050505050905090565b6111b461181e565b73ffffffffffffffffffffffffffffffffffffffff166111d261102b565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906133f0565b60405180910390fd5b7f000000000000000000000000d39d66ce821b99bd7f576c1843586ae9a3d82b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90613482565b60405180910390fd5b6112c18282612523565b5050565b600080600160006112d461181e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613514565b60405180910390fd5b6113a561139c61181e565b85858403611826565b600191505092915050565b60006113c46113bd61181e565b84846119f1565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b61140961181e565b73ffffffffffffffffffffffffffffffffffffffff1661142761102b565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906133f0565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151a9190612f86565b60405180910390a25050565b60075481565b600061153661181e565b73ffffffffffffffffffffffffffffffffffffffff1661155461102b565b73ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a1906133f0565b60405180910390fd5b620186a060016115b8610ac1565b6115c29190613534565b6115cc91906135bd565b82101561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613660565b60405180910390fd5b6103e8600561161b610ac1565b6116259190613534565b61162f91906135bd565b821115611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906136f2565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600c5481565b61172261181e565b73ffffffffffffffffffffffffffffffffffffffff1661174061102b565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d906133f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90613784565b60405180910390fd5b61180f8161245d565b50565b600f5481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613816565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906138a8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119e49190613057565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a589061393a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac8906139cc565b60405180910390fd5b6000811415611aeb57611ae6838360006125c4565b612458565b600a60009054906101000a900460ff1615611fe657611b0861102b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b765750611b4661102b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611baf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611be9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c025750600560149054906101000a900460ff16155b15611fe557600a60019054906101000a900460ff16611cfc57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cbc5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290613a38565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e4657600754811115611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613aca565b60405180910390fd5b600954611df583610d2a565b82611e00919061334e565b1115611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613b36565b60405180910390fd5b611fe4565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee95750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3857600754811115611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613bc8565b60405180910390fd5b611fe3565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fe257600954611f9583610d2a565b82611fa0919061334e565b1115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b36565b60405180910390fd5b5b5b5b5b5b6000611ff130610d2a565b9050600060085482101590508080156120165750600a60029054906101000a900460ff165b801561202f5750600560149054906101000a900460ff16155b80156120855750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120db5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121315750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612175576001600560146101000a81548160ff021916908315150217905550612159612845565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061222b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561223557600090505b6000811561244857601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561229857506000600e54115b15612332576122c560646122b7600e5488612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600e54600f54826122d89190613534565b6122e291906135bd565b601160008282546122f3919061334e565b92505081905550600e546010548261230b9190613534565b61231591906135bd565b60126000828254612326919061334e565b92505081905550612424565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561238d57506000600b54115b15612423576123ba60646123ac600b5488612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600b54600c54826123cd9190613534565b6123d791906135bd565b601160008282546123e8919061334e565b92505081905550600b54600d54826124009190613534565b61240a91906135bd565b6012600082825461241b919061334e565b925050819055505b5b6000811115612439576124388730836125c4565b5b80856124459190613be8565b94505b6124538787876125c4565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b9061393a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b906139cc565b60405180910390fd5b6126af838383612a7e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90613c8e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c8919061334e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161282c9190613057565b60405180910390a361283f848484612a83565b50505050565b600061285030610d2a565b90506000601254601154612864919061334e565b90506000808314806128765750600082145b1561288357505050612a50565b60146008546128929190613534565b8311156128ab5760146008546128a89190613534565b92505b6000600283601154866128be9190613534565b6128c891906135bd565b6128d291906135bd565b905060006128e98286612a8890919063ffffffff16565b905060004790506128f982612a9e565b600061290e8247612a8890919063ffffffff16565b905060006129398761292b60125485612a5290919063ffffffff16565b612a6890919063ffffffff16565b9050600081836129499190613be8565b90506000601181905550600060128190555060008611801561296b5750600081115b156129b85761297a8682612cdb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826011546040516129af93929190613cae565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516129fe90613d16565b60006040518083038185875af1925050503d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b5050809750505050505050505050505b565b60008183612a609190613534565b905092915050565b60008183612a7691906135bd565b905092915050565b505050565b505050565b60008183612a969190613be8565b905092915050565b6000600267ffffffffffffffff811115612abb57612aba613d2b565b5b604051908082528060200260200182016040528015612ae95781602001602082028036833780820191505090505b5090503081600081518110612b0157612b00613d5a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190613d9e565b81600181518110612bde57612bdd613d5a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c43307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611826565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ca5959493929190613ec4565b600060405180830381600087803b158015612cbf57600080fd5b505af1158015612cd3573d6000803e3d6000fd5b505050505050565b612d06307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611826565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612d8d96959493929190613f1e565b60606040518083038185885af1158015612dab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612dd09190613f94565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e11578082015181840152602081019050612df6565b83811115612e20576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e4282612dd7565b612e4c8185612de2565b9350612e5c818560208601612df3565b612e6581612e26565b840191505092915050565b60006020820190508181036000830152612e8a8184612e37565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ec282612e97565b9050919050565b612ed281612eb7565b8114612edd57600080fd5b50565b600081359050612eef81612ec9565b92915050565b6000819050919050565b612f0881612ef5565b8114612f1357600080fd5b50565b600081359050612f2581612eff565b92915050565b60008060408385031215612f4257612f41612e92565b5b6000612f5085828601612ee0565b9250506020612f6185828601612f16565b9150509250929050565b60008115159050919050565b612f8081612f6b565b82525050565b6000602082019050612f9b6000830184612f77565b92915050565b600060208284031215612fb757612fb6612e92565b5b6000612fc584828501612ee0565b91505092915050565b6000819050919050565b6000612ff3612fee612fe984612e97565b612fce565b612e97565b9050919050565b600061300582612fd8565b9050919050565b600061301782612ffa565b9050919050565b6130278161300c565b82525050565b6000602082019050613042600083018461301e565b92915050565b61305181612ef5565b82525050565b600060208201905061306c6000830184613048565b92915050565b60008060006060848603121561308b5761308a612e92565b5b600061309986828701612ee0565b93505060206130aa86828701612ee0565b92505060406130bb86828701612f16565b9150509250925092565b600060ff82169050919050565b6130db816130c5565b82525050565b60006020820190506130f660008301846130d2565b92915050565b61310581612eb7565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f81612f6b565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612e92565b5b600061317785828601612ee0565b92505060206131888582860161313d565b9150509250929050565b6000602082840312156131a8576131a7612e92565b5b60006131b68482850161313d565b91505092915050565b6000602082840312156131d5576131d4612e92565b5b60006131e384828501612f16565b91505092915050565b6000806040838503121561320357613202612e92565b5b600061321185828601612ee0565b925050602061322285828601612ee0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327357607f821691505b602082108114156132875761328661322c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006132e9602883612de2565b91506132f48261328d565b604082019050919050565b60006020820190508181036000830152613318816132dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061335982612ef5565b915061336483612ef5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133995761339861331f565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133da602083612de2565b91506133e5826133a4565b602082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061346c603983612de2565b915061347782613410565b604082019050919050565b6000602082019050818103600083015261349b8161345f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134fe602583612de2565b9150613509826134a2565b604082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b600061353f82612ef5565b915061354a83612ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135835761358261331f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135c882612ef5565b91506135d383612ef5565b9250826135e3576135e261358e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061364a603583612de2565b9150613655826135ee565b604082019050919050565b600060208201905081810360008301526136798161363d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006136dc603483612de2565b91506136e782613680565b604082019050919050565b6000602082019050818103600083015261370b816136cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376e602683612de2565b915061377982613712565b604082019050919050565b6000602082019050818103600083015261379d81613761565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613800602483612de2565b915061380b826137a4565b604082019050919050565b6000602082019050818103600083015261382f816137f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613892602283612de2565b915061389d82613836565b604082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613924602583612de2565b915061392f826138c8565b604082019050919050565b6000602082019050818103600083015261395381613917565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139b6602383612de2565b91506139c18261395a565b604082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613a22601683612de2565b9150613a2d826139ec565b602082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613ab4603583612de2565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613b20601383612de2565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613bb2603683612de2565b9150613bbd82613b56565b604082019050919050565b60006020820190508181036000830152613be181613ba5565b9050919050565b6000613bf382612ef5565b9150613bfe83612ef5565b925082821015613c1157613c1061331f565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613c78602683612de2565b9150613c8382613c1c565b604082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b6000606082019050613cc36000830186613048565b613cd06020830185613048565b613cdd6040830184613048565b949350505050565b600081905092915050565b50565b6000613d00600083613ce5565b9150613d0b82613cf0565b600082019050919050565b6000613d2182613cf3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d9881612ec9565b92915050565b600060208284031215613db457613db3612e92565b5b6000613dc284828501613d89565b91505092915050565b6000819050919050565b6000613df0613deb613de684613dcb565b612fce565b612ef5565b9050919050565b613e0081613dd5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e3b81612eb7565b82525050565b6000613e4d8383613e32565b60208301905092915050565b6000602082019050919050565b6000613e7182613e06565b613e7b8185613e11565b9350613e8683613e22565b8060005b83811015613eb7578151613e9e8882613e41565b9750613ea983613e59565b925050600181019050613e8a565b5085935050505092915050565b600060a082019050613ed96000830188613048565b613ee66020830187613df7565b8181036040830152613ef88186613e66565b9050613f0760608301856130fc565b613f146080830184613048565b9695505050505050565b600060c082019050613f3360008301896130fc565b613f406020830188613048565b613f4d6040830187613df7565b613f5a6060830186613df7565b613f6760808301856130fc565b613f7460a0830184613048565b979650505050505050565b600081519050613f8e81612eff565b92915050565b600080600060608486031215613fad57613fac612e92565b5b6000613fbb86828701613f7f565b9350506020613fcc86828701613f7f565b9250506040613fdd86828701613f7f565b915050925092509256fea26469706673582212207474bc61f5646ba6cbffb8c0b74f2dbeb2586ff744b2a58fbf81bf147f88884364736f6c634300080a0033

Deployed Bytecode Sourcemap

9580:11817:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2758:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3672:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10472:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9655:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3079:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10278:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10318;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3849:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2978:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4349:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9713:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9938:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14829:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10168:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3195:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;906:103;;;;;;;;;;;;;:::i;:::-;;13063:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13760:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10129:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12899:112;;;;;;;;;;;;;:::i;:::-;;683:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9790:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10241:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14023:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2866:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14321:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4572:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3330:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10693:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9978:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14131:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9823:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13254:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10058:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3513:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9865:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10092:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1017:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10203:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9905:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2758:100;2812:13;2845:5;2838:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2758:100;:::o;3672:169::-;3755:4;3772:39;3781:12;:10;:12::i;:::-;3795:7;3804:6;3772:8;:39::i;:::-;3829:4;3822:11;;3672:169;;;;:::o;10472:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;9655:51::-;;;:::o;3079:108::-;3140:7;3167:12;;3160:19;;3079:108;:::o;10278:33::-;;;;:::o;10318:::-;;;;:::o;3849:492::-;3989:4;4006:36;4016:6;4024:9;4035:6;4006:9;:36::i;:::-;4055:24;4082:11;:19;4094:6;4082:19;;;;;;;;;;;;;;;:33;4102:12;:10;:12::i;:::-;4082:33;;;;;;;;;;;;;;;;4055:60;;4154:6;4134:16;:26;;4126:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4241:57;4250:6;4258:12;:10;:12::i;:::-;4291:6;4272:16;:25;4241:8;:57::i;:::-;4329:4;4322:11;;;3849:492;;;;;:::o;2978:93::-;3036:5;3061:2;3054:9;;2978:93;:::o;4349:215::-;4437:4;4454:80;4463:12;:10;:12::i;:::-;4477:7;4523:10;4486:11;:25;4498:12;:10;:12::i;:::-;4486:25;;;;;;;;;;;;;;;:34;4512:7;4486:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4454:8;:80::i;:::-;4552:4;4545:11;;4349:215;;;;:::o;9713:38::-;;;:::o;9938:33::-;;;;;;;;;;;;;:::o;14829:126::-;14895:4;14919:19;:28;14939:7;14919:28;;;;;;;;;;;;;;;;;;;;;;;;;14912:35;;14829:126;;;:::o;10168:28::-;;;;:::o;10018:31::-;;;;;;;;;;;;;:::o;3195:127::-;3269:7;3296:9;:18;3306:7;3296:18;;;;;;;;;;;;;;;;3289:25;;3195:127;;;:::o;906:103::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;971:30:::1;998:1;971:18;:30::i;:::-;906:103::o:0;13063:121::-;13115:4;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13149:5:::1;13132:14;;:22;;;;;;;;;;;;;;;;;;13172:4;13165:11;;13063:121:::0;:::o;13760:167::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13915:4:::1;13873:31;:39;13905:6;13873:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13760:167:::0;;:::o;10129:30::-;;;;:::o;12899:112::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12970:4:::1;12954:13;;:20;;;;;;;;;;;;;;;;;;12999:4;12985:11;;:18;;;;;;;;;;;;;;;;;;12899:112::o:0;683:87::-;729:7;756:6;;;;;;;;;;;749:13;;683:87;:::o;9790:24::-;;;;;;;;;;;;;:::o;10241:31::-;;;;:::o;14023:100::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14108:7:::1;14094:11;;:21;;;;;;;;;;;;;;;;;;14023:100:::0;:::o;2866:104::-;2922:13;2955:7;2948:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2866:104;:::o;14321:304::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14465:13:::1;14457:21;;:4;:21;;;;14435:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;14576:41;14605:4;14611:5;14576:28;:41::i;:::-;14321:304:::0;;:::o;4572:413::-;4665:4;4682:24;4709:11;:25;4721:12;:10;:12::i;:::-;4709:25;;;;;;;;;;;;;;;:34;4735:7;4709:34;;;;;;;;;;;;;;;;4682:61;;4782:15;4762:16;:35;;4754:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4875:67;4884:12;:10;:12::i;:::-;4898:7;4926:15;4907:16;:34;4875:8;:67::i;:::-;4973:4;4966:11;;;4572:413;;;;:::o;3330:175::-;3416:4;3433:42;3443:12;:10;:12::i;:::-;3457:9;3468:6;3433:9;:42::i;:::-;3493:4;3486:11;;3330:175;;;;:::o;10693:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;9978:33::-;;;;;;;;;;;;;:::o;14131:182::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14247:8:::1;14216:19;:28;14236:7;14216:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;14287:7;14271:34;;;14296:8;14271:34;;;;;;:::i;:::-;;;;;;;;14131:182:::0;;:::o;9823:35::-;;;;:::o;13254:497::-;13362:4;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13441:6:::1;13436:1;13420:13;:11;:13::i;:::-;:17;;;;:::i;:::-;13419:28;;;;:::i;:::-;13406:9;:41;;13384:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;13596:4;13591:1;13575:13;:11;:13::i;:::-;:17;;;;:::i;:::-;13574:26;;;;:::i;:::-;13561:9;:39;;13539:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;13712:9;13691:18;:30;;;;13739:4;13732:11;;13254:497:::0;;;:::o;10058:27::-;;;;:::o;3513:151::-;3602:7;3629:11;:18;3641:5;3629:18;;;;;;;;;;;;;;;:27;3648:7;3629:27;;;;;;;;;;;;;;;;3622:34;;3513:151;;;;:::o;9865:33::-;;;;:::o;10092:30::-;;;;:::o;1017:201::-;829:12;:10;:12::i;:::-;818:23;;:7;:5;:7::i;:::-;:23;;;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1126:1:::1;1106:22;;:8;:22;;;;1098:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1182:28;1201:8;1182:18;:28::i;:::-;1017:201:::0;:::o;10203:31::-;;;;:::o;9905:24::-;;;;:::o;229:98::-;282:7;309:10;302:17;;229:98;:::o;6740:380::-;6893:1;6876:19;;:5;:19;;;;6868:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6974:1;6955:21;;:7;:21;;;;6947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7058:6;7028:11;:18;7040:5;7028:18;;;;;;;;;;;;;;;:27;7047:7;7028:27;;;;;;;;;;;;;;;:36;;;;7096:7;7080:32;;7089:5;7080:32;;;7105:6;7080:32;;;;;;:::i;:::-;;;;;;;;6740:380;;;:::o;14963:3802::-;15111:1;15095:18;;:4;:18;;;;15087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15188:1;15174:16;;:2;:16;;;;15166:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15257:1;15247:6;:11;15243:93;;;15275:28;15291:4;15297:2;15301:1;15275:15;:28::i;:::-;15318:7;;15243:93;15352:14;;;;;;;;;;;15348:1694;;;15413:7;:5;:7::i;:::-;15405:15;;:4;:15;;;;:49;;;;;15447:7;:5;:7::i;:::-;15441:13;;:2;:13;;;;15405:49;:86;;;;;15489:1;15475:16;;:2;:16;;;;15405:86;:128;;;;;15526:6;15512:21;;:2;:21;;;;15405:128;:158;;;;;15555:8;;;;;;;;;;;15554:9;15405:158;15383:1648;;;15603:13;;;;;;;;;;;15598:223;;15675:19;:25;15695:4;15675:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;15704:19;:23;15724:2;15704:23;;;;;;;;;;;;;;;;;;;;;;;;;15675:52;15641:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;15598:223;15895:25;:31;15921:4;15895:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;15952:31;:35;15984:2;15952:35;;;;;;;;;;;;;;;;;;;;;;;;;15951:36;15895:92;15869:1147;;;16074:20;;16064:6;:30;;16030:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;16282:9;;16265:13;16275:2;16265:9;:13::i;:::-;16256:6;:22;;;;:::i;:::-;:35;;16222:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;15869:1147;;;16460:25;:29;16486:2;16460:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;16515:31;:37;16547:4;16515:37;;;;;;;;;;;;;;;;;;;;;;;;;16514:38;16460:92;16434:582;;;16639:20;;16629:6;:30;;16595:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;16434:582;;;16796:31;:35;16828:2;16796:35;;;;;;;;;;;;;;;;;;;;;;;;;16791:225;;16916:9;;16899:13;16909:2;16899:9;:13::i;:::-;16890:6;:22;;;;:::i;:::-;:35;;16856:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;16791:225;16434:582;15869:1147;15383:1648;15348:1694;17054:28;17085:24;17103:4;17085:9;:24::i;:::-;17054:55;;17122:12;17161:18;;17137:20;:42;;17122:57;;17210:7;:35;;;;;17234:11;;;;;;;;;;;17210:35;:61;;;;;17263:8;;;;;;;;;;;17262:9;17210:61;:110;;;;;17289:25;:31;17315:4;17289:31;;;;;;;;;;;;;;;;;;;;;;;;;17288:32;17210:110;:153;;;;;17338:19;:25;17358:4;17338:25;;;;;;;;;;;;;;;;;;;;;;;;;17337:26;17210:153;:194;;;;;17381:19;:23;17401:2;17381:23;;;;;;;;;;;;;;;;;;;;;;;;;17380:24;17210:194;17192:326;;;17442:4;17431:8;;:15;;;;;;;;;;;;;;;;;;17463:10;:8;:10::i;:::-;17501:5;17490:8;;:16;;;;;;;;;;;;;;;;;;17192:326;17530:12;17546:8;;;;;;;;;;;17545:9;17530:24;;17656:19;:25;17676:4;17656:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;17685:19;:23;17705:2;17685:23;;;;;;;;;;;;;;;;;;;;;;;;;17656:52;17652:100;;;17735:5;17725:15;;17652:100;17764:12;17869:7;17865:847;;;17921:25;:29;17947:2;17921:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;17970:1;17954:13;;:17;17921:50;17917:646;;;17999:34;18029:3;17999:25;18010:13;;17999:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;17992:41;;18102:13;;18082:16;;18075:4;:23;;;;:::i;:::-;18074:41;;;;:::i;:::-;18052:18;;:63;;;;;;;:::i;:::-;;;;;;;;18184:13;;18164:16;;18157:4;:23;;;;:::i;:::-;18156:41;;;;:::i;:::-;18134:18;;:63;;;;;;;:::i;:::-;;;;;;;;17917:646;;;18275:25;:31;18301:4;18275:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;18325:1;18310:12;;:16;18275:51;18271:292;;;18354:33;18383:3;18354:24;18365:12;;18354:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;18347:40;;18455:12;;18436:15;;18429:4;:22;;;;:::i;:::-;18428:39;;;;:::i;:::-;18406:18;;:61;;;;;;;:::i;:::-;;;;;;;;18535:12;;18516:15;;18509:4;:22;;;;:::i;:::-;18508:39;;;;:::i;:::-;18486:18;;:61;;;;;;;:::i;:::-;;;;;;;;18271:292;17917:646;18590:1;18583:4;:8;18579:91;;;18612:42;18628:4;18642;18649;18612:15;:42::i;:::-;18579:91;18696:4;18686:14;;;;;:::i;:::-;;;17865:847;18724:33;18740:4;18746:2;18750:6;18724:15;:33::i;:::-;15076:3689;;;;14963:3802;;;;:::o;1224:191::-;1298:16;1317:6;;;;;;;;;;;1298:25;;1343:8;1334:6;;:17;;;;;;;;;;;;;;;;;;1398:8;1367:40;;1388:8;1367:40;;;;;;;;;;;;1287:128;1224:191;:::o;14633:188::-;14750:5;14716:25;:31;14742:4;14716:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;14807:5;14773:40;;14801:4;14773:40;;;;;;;;;;;;14633:188;;:::o;4993:733::-;5151:1;5133:20;;:6;:20;;;;5125:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5235:1;5214:23;;:9;:23;;;;5206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5290:47;5311:6;5319:9;5330:6;5290:20;:47::i;:::-;5350:21;5374:9;:17;5384:6;5374:17;;;;;;;;;;;;;;;;5350:41;;5427:6;5410:13;:23;;5402:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5548:6;5532:13;:22;5512:9;:17;5522:6;5512:17;;;;;;;;;;;;;;;:42;;;;5600:6;5576:9;:20;5586:9;5576:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5641:9;5624:35;;5633:6;5624:35;;;5652:6;5624:35;;;;;;:::i;:::-;;;;;;;;5672:46;5692:6;5700:9;5711:6;5672:19;:46::i;:::-;5114:612;4993:733;;;:::o;19893:1499::-;19932:23;19958:24;19976:4;19958:9;:24::i;:::-;19932:50;;19993:25;20042:18;;20021;;:39;;;;:::i;:::-;19993:67;;20071:12;20119:1;20100:15;:20;:46;;;;20145:1;20124:17;:22;20100:46;20096:85;;;20163:7;;;;;20096:85;20236:2;20215:18;;:23;;;;:::i;:::-;20197:15;:41;20193:115;;;20294:2;20273:18;;:23;;;;:::i;:::-;20255:41;;20193:115;20369:23;20456:1;20436:17;20414:18;;20396:15;:36;;;;:::i;:::-;20395:58;;;;:::i;:::-;:62;;;;:::i;:::-;20369:88;;20468:26;20497:36;20517:15;20497;:19;;:36;;;;:::i;:::-;20468:65;;20546:25;20574:21;20546:49;;20608:36;20625:18;20608:16;:36::i;:::-;20657:18;20678:44;20704:17;20678:21;:25;;:44;;;;:::i;:::-;20657:65;;20736:23;20762:57;20801:17;20762:34;20777:18;;20762:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;20736:83;;20832:23;20871:15;20858:10;:28;;;;:::i;:::-;20832:54;;20920:1;20899:18;:22;;;;20953:1;20932:18;:22;;;;20989:1;20971:15;:19;:42;;;;;21012:1;20994:15;:19;20971:42;20967:278;;;21030:46;21043:15;21060;21030:12;:46::i;:::-;21096:137;21129:18;21166:15;21200:18;;21096:137;;;;;;;;:::i;:::-;;;;;;;;20967:278;21335:9;;;;;;;;;;;21327:23;;21358:21;21327:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21313:71;;;;;19921:1471;;;;;;;;;19893:1499;:::o;7628:98::-;7686:7;7717:1;7713;:5;;;;:::i;:::-;7706:12;;7628:98;;;;:::o;7734:::-;7792:7;7823:1;7819;:5;;;;:::i;:::-;7812:12;;7734:98;;;;:::o;7128:125::-;;;;:::o;7261:124::-;;;;:::o;7522:98::-;7580:7;7611:1;7607;:5;;;;:::i;:::-;7600:12;;7522:98;;;;:::o;18773:589::-;18899:21;18937:1;18923:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18899:40;;18968:4;18950;18955:1;18950:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18994:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18984:4;18989:1;18984:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;19029:62;19046:4;19061:15;19079:11;19029:8;:62::i;:::-;19130:15;:66;;;19211:11;19237:1;19281:4;19308;19328:15;19130:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18828:534;18773:589;:::o;19370:515::-;19518:62;19535:4;19550:15;19568:11;19518:8;:62::i;:::-;19623:15;:31;;;19662:9;19695:4;19715:11;19741:1;19784;19827:9;;;;;;;;;;;19851:15;19623:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19370:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:619::-;5231:6;5239;5247;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5549:2;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5520:118;5677:2;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;:::i;:::-;5693:63;;5648:118;5154:619;;;;;:::o;5779:86::-;5814:7;5854:4;5847:5;5843:16;5832:27;;5779:86;;;:::o;5871:112::-;5954:22;5970:5;5954:22;:::i;:::-;5949:3;5942:35;5871:112;;:::o;5989:214::-;6078:4;6116:2;6105:9;6101:18;6093:26;;6129:67;6193:1;6182:9;6178:17;6169:6;6129:67;:::i;:::-;5989:214;;;;:::o;6209:118::-;6296:24;6314:5;6296:24;:::i;:::-;6291:3;6284:37;6209:118;;:::o;6333:222::-;6426:4;6464:2;6453:9;6449:18;6441:26;;6477:71;6545:1;6534:9;6530:17;6521:6;6477:71;:::i;:::-;6333:222;;;;:::o;6561:116::-;6631:21;6646:5;6631:21;:::i;:::-;6624:5;6621:32;6611:60;;6667:1;6664;6657:12;6611:60;6561:116;:::o;6683:133::-;6726:5;6764:6;6751:20;6742:29;;6780:30;6804:5;6780:30;:::i;:::-;6683:133;;;;:::o;6822:468::-;6887:6;6895;6944:2;6932:9;6923:7;6919:23;6915:32;6912:119;;;6950:79;;:::i;:::-;6912:119;7070:1;7095:53;7140:7;7131:6;7120:9;7116:22;7095:53;:::i;:::-;7085:63;;7041:117;7197:2;7223:50;7265:7;7256:6;7245:9;7241:22;7223:50;:::i;:::-;7213:60;;7168:115;6822:468;;;;;:::o;7296:323::-;7352:6;7401:2;7389:9;7380:7;7376:23;7372:32;7369:119;;;7407:79;;:::i;:::-;7369:119;7527:1;7552:50;7594:7;7585:6;7574:9;7570:22;7552:50;:::i;:::-;7542:60;;7498:114;7296:323;;;;:::o;7625:329::-;7684:6;7733:2;7721:9;7712:7;7708:23;7704:32;7701:119;;;7739:79;;:::i;:::-;7701:119;7859:1;7884:53;7929:7;7920:6;7909:9;7905:22;7884:53;:::i;:::-;7874:63;;7830:117;7625:329;;;;:::o;7960:474::-;8028:6;8036;8085:2;8073:9;8064:7;8060:23;8056:32;8053:119;;;8091:79;;:::i;:::-;8053:119;8211:1;8236:53;8281:7;8272:6;8261:9;8257:22;8236:53;:::i;:::-;8226:63;;8182:117;8338:2;8364:53;8409:7;8400:6;8389:9;8385:22;8364:53;:::i;:::-;8354:63;;8309:118;7960:474;;;;;:::o;8440:180::-;8488:77;8485:1;8478:88;8585:4;8582:1;8575:15;8609:4;8606:1;8599:15;8626:320;8670:6;8707:1;8701:4;8697:12;8687:22;;8754:1;8748:4;8744:12;8775:18;8765:81;;8831:4;8823:6;8819:17;8809:27;;8765:81;8893:2;8885:6;8882:14;8862:18;8859:38;8856:84;;;8912:18;;:::i;:::-;8856:84;8677:269;8626:320;;;:::o;8952:227::-;9092:34;9088:1;9080:6;9076:14;9069:58;9161:10;9156:2;9148:6;9144:15;9137:35;8952:227;:::o;9185:366::-;9327:3;9348:67;9412:2;9407:3;9348:67;:::i;:::-;9341:74;;9424:93;9513:3;9424:93;:::i;:::-;9542:2;9537:3;9533:12;9526:19;;9185:366;;;:::o;9557:419::-;9723:4;9761:2;9750:9;9746:18;9738:26;;9810:9;9804:4;9800:20;9796:1;9785:9;9781:17;9774:47;9838:131;9964:4;9838:131;:::i;:::-;9830:139;;9557:419;;;:::o;9982:180::-;10030:77;10027:1;10020:88;10127:4;10124:1;10117:15;10151:4;10148:1;10141:15;10168:305;10208:3;10227:20;10245:1;10227:20;:::i;:::-;10222:25;;10261:20;10279:1;10261:20;:::i;:::-;10256:25;;10415:1;10347:66;10343:74;10340:1;10337:81;10334:107;;;10421:18;;:::i;:::-;10334:107;10465:1;10462;10458:9;10451:16;;10168:305;;;;:::o;10479:182::-;10619:34;10615:1;10607:6;10603:14;10596:58;10479:182;:::o;10667:366::-;10809:3;10830:67;10894:2;10889:3;10830:67;:::i;:::-;10823:74;;10906:93;10995:3;10906:93;:::i;:::-;11024:2;11019:3;11015:12;11008:19;;10667:366;;;:::o;11039:419::-;11205:4;11243:2;11232:9;11228:18;11220:26;;11292:9;11286:4;11282:20;11278:1;11267:9;11263:17;11256:47;11320:131;11446:4;11320:131;:::i;:::-;11312:139;;11039:419;;;:::o;11464:244::-;11604:34;11600:1;11592:6;11588:14;11581:58;11673:27;11668:2;11660:6;11656:15;11649:52;11464:244;:::o;11714:366::-;11856:3;11877:67;11941:2;11936:3;11877:67;:::i;:::-;11870:74;;11953:93;12042:3;11953:93;:::i;:::-;12071:2;12066:3;12062:12;12055:19;;11714:366;;;:::o;12086:419::-;12252:4;12290:2;12279:9;12275:18;12267:26;;12339:9;12333:4;12329:20;12325:1;12314:9;12310:17;12303:47;12367:131;12493:4;12367:131;:::i;:::-;12359:139;;12086:419;;;:::o;12511:224::-;12651:34;12647:1;12639:6;12635:14;12628:58;12720:7;12715:2;12707:6;12703:15;12696:32;12511:224;:::o;12741:366::-;12883:3;12904:67;12968:2;12963:3;12904:67;:::i;:::-;12897:74;;12980:93;13069:3;12980:93;:::i;:::-;13098:2;13093:3;13089:12;13082:19;;12741:366;;;:::o;13113:419::-;13279:4;13317:2;13306:9;13302:18;13294:26;;13366:9;13360:4;13356:20;13352:1;13341:9;13337:17;13330:47;13394:131;13520:4;13394:131;:::i;:::-;13386:139;;13113:419;;;:::o;13538:348::-;13578:7;13601:20;13619:1;13601:20;:::i;:::-;13596:25;;13635:20;13653:1;13635:20;:::i;:::-;13630:25;;13823:1;13755:66;13751:74;13748:1;13745:81;13740:1;13733:9;13726:17;13722:105;13719:131;;;13830:18;;:::i;:::-;13719:131;13878:1;13875;13871:9;13860:20;;13538:348;;;;:::o;13892:180::-;13940:77;13937:1;13930:88;14037:4;14034:1;14027:15;14061:4;14058:1;14051:15;14078:185;14118:1;14135:20;14153:1;14135:20;:::i;:::-;14130:25;;14169:20;14187:1;14169:20;:::i;:::-;14164:25;;14208:1;14198:35;;14213:18;;:::i;:::-;14198:35;14255:1;14252;14248:9;14243:14;;14078:185;;;;:::o;14269:240::-;14409:34;14405:1;14397:6;14393:14;14386:58;14478:23;14473:2;14465:6;14461:15;14454:48;14269:240;:::o;14515:366::-;14657:3;14678:67;14742:2;14737:3;14678:67;:::i;:::-;14671:74;;14754:93;14843:3;14754:93;:::i;:::-;14872:2;14867:3;14863:12;14856:19;;14515:366;;;:::o;14887:419::-;15053:4;15091:2;15080:9;15076:18;15068:26;;15140:9;15134:4;15130:20;15126:1;15115:9;15111:17;15104:47;15168:131;15294:4;15168:131;:::i;:::-;15160:139;;14887:419;;;:::o;15312:239::-;15452:34;15448:1;15440:6;15436:14;15429:58;15521:22;15516:2;15508:6;15504:15;15497:47;15312:239;:::o;15557:366::-;15699:3;15720:67;15784:2;15779:3;15720:67;:::i;:::-;15713:74;;15796:93;15885:3;15796:93;:::i;:::-;15914:2;15909:3;15905:12;15898:19;;15557:366;;;:::o;15929:419::-;16095:4;16133:2;16122:9;16118:18;16110:26;;16182:9;16176:4;16172:20;16168:1;16157:9;16153:17;16146:47;16210:131;16336:4;16210:131;:::i;:::-;16202:139;;15929:419;;;:::o;16354:225::-;16494:34;16490:1;16482:6;16478:14;16471:58;16563:8;16558:2;16550:6;16546:15;16539:33;16354:225;:::o;16585:366::-;16727:3;16748:67;16812:2;16807:3;16748:67;:::i;:::-;16741:74;;16824:93;16913:3;16824:93;:::i;:::-;16942:2;16937:3;16933:12;16926:19;;16585:366;;;:::o;16957:419::-;17123:4;17161:2;17150:9;17146:18;17138:26;;17210:9;17204:4;17200:20;17196:1;17185:9;17181:17;17174:47;17238:131;17364:4;17238:131;:::i;:::-;17230:139;;16957:419;;;:::o;17382:223::-;17522:34;17518:1;17510:6;17506:14;17499:58;17591:6;17586:2;17578:6;17574:15;17567:31;17382:223;:::o;17611:366::-;17753:3;17774:67;17838:2;17833:3;17774:67;:::i;:::-;17767:74;;17850:93;17939:3;17850:93;:::i;:::-;17968:2;17963:3;17959:12;17952:19;;17611:366;;;:::o;17983:419::-;18149:4;18187:2;18176:9;18172:18;18164:26;;18236:9;18230:4;18226:20;18222:1;18211:9;18207:17;18200:47;18264:131;18390:4;18264:131;:::i;:::-;18256:139;;17983:419;;;:::o;18408:221::-;18548:34;18544:1;18536:6;18532:14;18525:58;18617:4;18612:2;18604:6;18600:15;18593:29;18408:221;:::o;18635:366::-;18777:3;18798:67;18862:2;18857:3;18798:67;:::i;:::-;18791:74;;18874:93;18963:3;18874:93;:::i;:::-;18992:2;18987:3;18983:12;18976:19;;18635:366;;;:::o;19007:419::-;19173:4;19211:2;19200:9;19196:18;19188:26;;19260:9;19254:4;19250:20;19246:1;19235:9;19231:17;19224:47;19288:131;19414:4;19288:131;:::i;:::-;19280:139;;19007:419;;;:::o;19432:224::-;19572:34;19568:1;19560:6;19556:14;19549:58;19641:7;19636:2;19628:6;19624:15;19617:32;19432:224;:::o;19662:366::-;19804:3;19825:67;19889:2;19884:3;19825:67;:::i;:::-;19818:74;;19901:93;19990:3;19901:93;:::i;:::-;20019:2;20014:3;20010:12;20003:19;;19662:366;;;:::o;20034:419::-;20200:4;20238:2;20227:9;20223:18;20215:26;;20287:9;20281:4;20277:20;20273:1;20262:9;20258:17;20251:47;20315:131;20441:4;20315:131;:::i;:::-;20307:139;;20034:419;;;:::o;20459:222::-;20599:34;20595:1;20587:6;20583:14;20576:58;20668:5;20663:2;20655:6;20651:15;20644:30;20459:222;:::o;20687:366::-;20829:3;20850:67;20914:2;20909:3;20850:67;:::i;:::-;20843:74;;20926:93;21015:3;20926:93;:::i;:::-;21044:2;21039:3;21035:12;21028:19;;20687:366;;;:::o;21059:419::-;21225:4;21263:2;21252:9;21248:18;21240:26;;21312:9;21306:4;21302:20;21298:1;21287:9;21283:17;21276:47;21340:131;21466:4;21340:131;:::i;:::-;21332:139;;21059:419;;;:::o;21484:172::-;21624:24;21620:1;21612:6;21608:14;21601:48;21484:172;:::o;21662:366::-;21804:3;21825:67;21889:2;21884:3;21825:67;:::i;:::-;21818:74;;21901:93;21990:3;21901:93;:::i;:::-;22019:2;22014:3;22010:12;22003:19;;21662:366;;;:::o;22034:419::-;22200:4;22238:2;22227:9;22223:18;22215:26;;22287:9;22281:4;22277:20;22273:1;22262:9;22258:17;22251:47;22315:131;22441:4;22315:131;:::i;:::-;22307:139;;22034:419;;;:::o;22459:240::-;22599:34;22595:1;22587:6;22583:14;22576:58;22668:23;22663:2;22655:6;22651:15;22644:48;22459:240;:::o;22705:366::-;22847:3;22868:67;22932:2;22927:3;22868:67;:::i;:::-;22861:74;;22944:93;23033:3;22944:93;:::i;:::-;23062:2;23057:3;23053:12;23046:19;;22705:366;;;:::o;23077:419::-;23243:4;23281:2;23270:9;23266:18;23258:26;;23330:9;23324:4;23320:20;23316:1;23305:9;23301:17;23294:47;23358:131;23484:4;23358:131;:::i;:::-;23350:139;;23077:419;;;:::o;23502:169::-;23642:21;23638:1;23630:6;23626:14;23619:45;23502:169;:::o;23677:366::-;23819:3;23840:67;23904:2;23899:3;23840:67;:::i;:::-;23833:74;;23916:93;24005:3;23916:93;:::i;:::-;24034:2;24029:3;24025:12;24018:19;;23677:366;;;:::o;24049:419::-;24215:4;24253:2;24242:9;24238:18;24230:26;;24302:9;24296:4;24292:20;24288:1;24277:9;24273:17;24266:47;24330:131;24456:4;24330:131;:::i;:::-;24322:139;;24049:419;;;:::o;24474:241::-;24614:34;24610:1;24602:6;24598:14;24591:58;24683:24;24678:2;24670:6;24666:15;24659:49;24474:241;:::o;24721:366::-;24863:3;24884:67;24948:2;24943:3;24884:67;:::i;:::-;24877:74;;24960:93;25049:3;24960:93;:::i;:::-;25078:2;25073:3;25069:12;25062:19;;24721:366;;;:::o;25093:419::-;25259:4;25297:2;25286:9;25282:18;25274:26;;25346:9;25340:4;25336:20;25332:1;25321:9;25317:17;25310:47;25374:131;25500:4;25374:131;:::i;:::-;25366:139;;25093:419;;;:::o;25518:191::-;25558:4;25578:20;25596:1;25578:20;:::i;:::-;25573:25;;25612:20;25630:1;25612:20;:::i;:::-;25607:25;;25651:1;25648;25645:8;25642:34;;;25656:18;;:::i;:::-;25642:34;25701:1;25698;25694:9;25686:17;;25518:191;;;;:::o;25715:225::-;25855:34;25851:1;25843:6;25839:14;25832:58;25924:8;25919:2;25911:6;25907:15;25900:33;25715:225;:::o;25946:366::-;26088:3;26109:67;26173:2;26168:3;26109:67;:::i;:::-;26102:74;;26185:93;26274:3;26185:93;:::i;:::-;26303:2;26298:3;26294:12;26287:19;;25946:366;;;:::o;26318:419::-;26484:4;26522:2;26511:9;26507:18;26499:26;;26571:9;26565:4;26561:20;26557:1;26546:9;26542:17;26535:47;26599:131;26725:4;26599:131;:::i;:::-;26591:139;;26318:419;;;:::o;26743:442::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26943:71;27011:1;27000:9;26996:17;26987:6;26943:71;:::i;:::-;27024:72;27092:2;27081:9;27077:18;27068:6;27024:72;:::i;:::-;27106;27174:2;27163:9;27159:18;27150:6;27106:72;:::i;:::-;26743:442;;;;;;:::o;27191:147::-;27292:11;27329:3;27314:18;;27191:147;;;;:::o;27344:114::-;;:::o;27464:398::-;27623:3;27644:83;27725:1;27720:3;27644:83;:::i;:::-;27637:90;;27736:93;27825:3;27736:93;:::i;:::-;27854:1;27849:3;27845:11;27838:18;;27464:398;;;:::o;27868:379::-;28052:3;28074:147;28217:3;28074:147;:::i;:::-;28067:154;;28238:3;28231:10;;27868:379;;;:::o;28253:180::-;28301:77;28298:1;28291:88;28398:4;28395:1;28388:15;28422:4;28419:1;28412:15;28439:180;28487:77;28484:1;28477:88;28584:4;28581:1;28574:15;28608:4;28605:1;28598:15;28625:143;28682:5;28713:6;28707:13;28698:22;;28729:33;28756:5;28729:33;:::i;:::-;28625:143;;;;:::o;28774:351::-;28844:6;28893:2;28881:9;28872:7;28868:23;28864:32;28861:119;;;28899:79;;:::i;:::-;28861:119;29019:1;29044:64;29100:7;29091:6;29080:9;29076:22;29044:64;:::i;:::-;29034:74;;28990:128;28774:351;;;;:::o;29131:85::-;29176:7;29205:5;29194:16;;29131:85;;;:::o;29222:158::-;29280:9;29313:61;29331:42;29340:32;29366:5;29340:32;:::i;:::-;29331:42;:::i;:::-;29313:61;:::i;:::-;29300:74;;29222:158;;;:::o;29386:147::-;29481:45;29520:5;29481:45;:::i;:::-;29476:3;29469:58;29386:147;;:::o;29539:114::-;29606:6;29640:5;29634:12;29624:22;;29539:114;;;:::o;29659:184::-;29758:11;29792:6;29787:3;29780:19;29832:4;29827:3;29823:14;29808:29;;29659:184;;;;:::o;29849:132::-;29916:4;29939:3;29931:11;;29969:4;29964:3;29960:14;29952:22;;29849:132;;;:::o;29987:108::-;30064:24;30082:5;30064:24;:::i;:::-;30059:3;30052:37;29987:108;;:::o;30101:179::-;30170:10;30191:46;30233:3;30225:6;30191:46;:::i;:::-;30269:4;30264:3;30260:14;30246:28;;30101:179;;;;:::o;30286:113::-;30356:4;30388;30383:3;30379:14;30371:22;;30286:113;;;:::o;30435:732::-;30554:3;30583:54;30631:5;30583:54;:::i;:::-;30653:86;30732:6;30727:3;30653:86;:::i;:::-;30646:93;;30763:56;30813:5;30763:56;:::i;:::-;30842:7;30873:1;30858:284;30883:6;30880:1;30877:13;30858:284;;;30959:6;30953:13;30986:63;31045:3;31030:13;30986:63;:::i;:::-;30979:70;;31072:60;31125:6;31072:60;:::i;:::-;31062:70;;30918:224;30905:1;30902;30898:9;30893:14;;30858:284;;;30862:14;31158:3;31151:10;;30559:608;;;30435:732;;;;:::o;31173:831::-;31436:4;31474:3;31463:9;31459:19;31451:27;;31488:71;31556:1;31545:9;31541:17;31532:6;31488:71;:::i;:::-;31569:80;31645:2;31634:9;31630:18;31621:6;31569:80;:::i;:::-;31696:9;31690:4;31686:20;31681:2;31670:9;31666:18;31659:48;31724:108;31827:4;31818:6;31724:108;:::i;:::-;31716:116;;31842:72;31910:2;31899:9;31895:18;31886:6;31842:72;:::i;:::-;31924:73;31992:3;31981:9;31977:19;31968:6;31924:73;:::i;:::-;31173:831;;;;;;;;:::o;32010:807::-;32259:4;32297:3;32286:9;32282:19;32274:27;;32311:71;32379:1;32368:9;32364:17;32355:6;32311:71;:::i;:::-;32392:72;32460:2;32449:9;32445:18;32436:6;32392:72;:::i;:::-;32474:80;32550:2;32539:9;32535:18;32526:6;32474:80;:::i;:::-;32564;32640:2;32629:9;32625:18;32616:6;32564:80;:::i;:::-;32654:73;32722:3;32711:9;32707:19;32698:6;32654:73;:::i;:::-;32737;32805:3;32794:9;32790:19;32781:6;32737:73;:::i;:::-;32010:807;;;;;;;;;:::o;32823:143::-;32880:5;32911:6;32905:13;32896:22;;32927:33;32954:5;32927:33;:::i;:::-;32823:143;;;;:::o;32972:663::-;33060:6;33068;33076;33125:2;33113:9;33104:7;33100:23;33096:32;33093:119;;;33131:79;;:::i;:::-;33093:119;33251:1;33276:64;33332:7;33323:6;33312:9;33308:22;33276:64;:::i;:::-;33266:74;;33222:128;33389:2;33415:64;33471:7;33462:6;33451:9;33447:22;33415:64;:::i;:::-;33405:74;;33360:129;33528:2;33554:64;33610:7;33601:6;33590:9;33586:22;33554:64;:::i;:::-;33544:74;;33499:129;32972:663;;;;;:::o

Swarm Source

ipfs://7474bc61f5646ba6cbffb8c0b74f2dbeb2586ff744b2a58fbf81bf147f888843

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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