ETH Price: $3,592.88 (+3.75%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Buy Fees197771132024-05-01 18:36:23247 days ago1714588583IN
0x4A83E26E...C7608b9Dd
0 ETH0.000337910.60990427
Update Sell Fees197771122024-05-01 18:36:11247 days ago1714588571IN
0x4A83E26E...C7608b9Dd
0 ETH0.000300379.43665114
Approve197771062024-05-01 18:34:59247 days ago1714588499IN
0x4A83E26E...C7608b9Dd
0 ETH0.000456029.72347732
Enable Trading197770902024-05-01 18:31:47247 days ago1714588307IN
0x4A83E26E...C7608b9Dd
0 ETH0.0003020310.4343949
Approve197770812024-05-01 18:29:59247 days ago1714588199IN
0x4A83E26E...C7608b9Dd
0 ETH0.0005173811.02621293

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
197771192024-05-01 18:37:35247 days ago1714588655
0x4A83E26E...C7608b9Dd
0.00543974 ETH
197771192024-05-01 18:37:35247 days ago1714588655
0x4A83E26E...C7608b9Dd
0.00543974 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-01
*/

// SPDX-License-Identifier: MIT



/*
https://x.com/powell0xdead
https://t.me/powell0xdead
https://powell0xdead.com

#POWEL

*/

pragma solidity 0.8.25;
pragma experimental ABIEncoderV2;

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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    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 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    address public immutable uniswapV2Pair;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public constant deadAddress = address(0xdead);

    address public opsWallet;
    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 buyOperationalFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationalFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForOperational;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping(address => bool) private holderIsBot;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    bool private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event opsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor(address opsWallet_, address devWallet_) ERC20("POWELL 0xDEAD", "POWELL") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uint256 totalSupply = 100000000 * 1e18;

        uint256 _buyOperationalFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellOperationalFee = 20;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        maxWallet = (totalSupply * 1) / 100; 
        maxTransactionAmount = (totalSupply * 1) / 100; 
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyOperationalFee = _buyOperationalFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;

        sellOperationalFee = _sellOperationalFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;

        buyTotalFees = buyOperationalFee + buyLiquidityFee + buyDevFee;
        sellTotalFees = sellOperationalFee + sellLiquidityFee + sellDevFee;

        opsWallet = opsWallet_; 
        devWallet = devWallet_; 

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

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

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function blacklistBot(address bot, bool isBot) external onlyOwner {
        holderIsBot[bot] = isBot;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _operationalFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyOperationalFee = _operationalFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;

        buyTotalFees = buyOperationalFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _operationalFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellOperationalFee = _operationalFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;

        sellTotalFees = sellOperationalFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

    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,
            "Liquidity pair cant be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateOpsWallet(address newOpsWallet)
        external
        onlyOwner
    {
        emit opsWalletUpdated(newOpsWallet, opsWallet);
        opsWallet = newOpsWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFee(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");

        require(
            !holderIsBot[from] && !holderIsBot[to],
            "Must not be flagged as bot"
        );

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

        if (!tradingActive) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                {
                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]
        ) {
            //lock
            swapping = true;
            //swap
            swapBack();
            //unlock
            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !isExcludedFromFees[from]
        ) {
        }

        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;
                tokensForOperational += (fees * sellOperationalFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);

                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperational += (fees * buyOperationalFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForOperational +
            tokensForDev;

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

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

        // 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 ethForOps = ethBalance.mul(tokensForOperational).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForOps - ethForDev;

        tokensForLiquidity = 0;
        tokensForOperational = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(opsWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"opsWallet_","type":"address"},{"internalType":"address","name":"devWallet_","type":"address"}],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"opsWalletUpdated","type":"event"},{"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":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyOperationalFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedMaxTransactionAmount","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":"opsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationalFee","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperational","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":"uint256","name":"_operationalFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOpsWallet","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationalFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff02191690831515021790555034801561005d575f80fd5b50604051615e3b380380615e3b833981810160405281019061007f9190610aa9565b6040518060400160405280600d81526020017f504f57454c4c20307844454144000000000000000000000000000000000000008152506040518060400160405280600681526020017f504f57454c4c000000000000000000000000000000000000000000000000000081525081600390816100fa9190610d21565b50806004908161010a9190610d21565b50505061012961011e61054060201b60201c565b61054760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101e29190610df0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610247573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026b9190610df0565b6040518363ffffffff1660e01b8152600401610288929190610e2a565b6020604051808303815f875af11580156102a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c89190610df0565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f6a52b7d2dcc80cd2e400000090505f600590505f805f601490505f8060646001886103279190610e7e565b6103319190610eec565b600a8190555060646001886103469190610e7e565b6103509190610eec565b6008819055506127106005886103669190610e7e565b6103709190610eec565b60098190555085600d8190555084600e8190555083600f81905550826011819055508160128190555080601381905550600f54600e54600d546103b39190610f1c565b6103bd9190610f1c565b600c819055506013546012546011546103d69190610f1c565b6103e09190610f1c565b6010819055508960065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061048461047761060a60201b60201c565b600161063260201b60201c565b61049530600161063260201b60201c565b6104a861dead600161063260201b60201c565b6104c66104b961060a60201b60201c565b600161076060201b60201c565b6104d730600161076060201b60201c565b6104ea61dead600161076060201b60201c565b6104fd608051600161076060201b60201c565b61050e88600161076060201b60201c565b610521608051600161084060201b60201c565b61053133886108de60201b60201c565b5050505050505050505061108a565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61064061054060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661066461060a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190610fa9565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107549190610fe1565b60405180910390a25050565b61076e61054060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661079261060a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90610fa9565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390611044565b60405180910390fd5b61095d5f8383610a4160201b60201c565b8060025f82825461096e9190610f1c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109c09190610f1c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a249190611071565b60405180910390a3610a3d5f8383610a4660201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a7882610a4f565b9050919050565b610a8881610a6e565b8114610a92575f80fd5b50565b5f81519050610aa381610a7f565b92915050565b5f8060408385031215610abf57610abe610a4b565b5b5f610acc85828601610a95565b9250506020610add85828601610a95565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b6257607f821691505b602082108103610b7557610b74610b1e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610bd77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b9c565b610be18683610b9c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c25610c20610c1b84610bf9565b610c02565b610bf9565b9050919050565b5f819050919050565b610c3e83610c0b565b610c52610c4a82610c2c565b848454610ba8565b825550505050565b5f90565b610c66610c5a565b610c71818484610c35565b505050565b5b81811015610c9457610c895f82610c5e565b600181019050610c77565b5050565b601f821115610cd957610caa81610b7b565b610cb384610b8d565b81016020851015610cc2578190505b610cd6610cce85610b8d565b830182610c76565b50505b505050565b5f82821c905092915050565b5f610cf95f1984600802610cde565b1980831691505092915050565b5f610d118383610cea565b9150826002028217905092915050565b610d2a82610ae7565b67ffffffffffffffff811115610d4357610d42610af1565b5b610d4d8254610b4b565b610d58828285610c98565b5f60209050601f831160018114610d89575f8415610d77578287015190505b610d818582610d06565b865550610de8565b601f198416610d9786610b7b565b5f5b82811015610dbe57848901518255600182019150602085019450602081019050610d99565b86831015610ddb5784890151610dd7601f891682610cea565b8355505b6001600288020188555050505b505050505050565b5f60208284031215610e0557610e04610a4b565b5b5f610e1284828501610a95565b91505092915050565b610e2481610a6e565b82525050565b5f604082019050610e3d5f830185610e1b565b610e4a6020830184610e1b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e8882610bf9565b9150610e9383610bf9565b9250828202610ea181610bf9565b91508282048414831517610eb857610eb7610e51565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ef682610bf9565b9150610f0183610bf9565b925082610f1157610f10610ebf565b5b828204905092915050565b5f610f2682610bf9565b9150610f3183610bf9565b9250828201905080821115610f4957610f48610e51565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f93602083610f4f565b9150610f9e82610f5f565b602082019050919050565b5f6020820190508181035f830152610fc081610f87565b9050919050565b5f8115159050919050565b610fdb81610fc7565b82525050565b5f602082019050610ff45f830184610fd2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61102e601f83610f4f565b915061103982610ffa565b602082019050919050565b5f6020820190508181035f83015261105b81611022565b9050919050565b61106b81610bf9565b82525050565b5f6020820190506110845f830184611062565b92915050565b60805160a051614d666110d55f395f8181610d2701528181613706015281816137e50152818161380c015281816138a201526138c901525f818161128401526119a30152614d665ff3fe60806040526004361061031d575f3560e01c80638236802e116101aa578063bbc0c742116100f6578063d85ba06311610094578063f11a24d31161006e578063f11a24d314610bcc578063f2fde38b14610bf6578063f637434214610c1e578063f8b45b0514610c4857610324565b8063d85ba06314610b3c578063dd62ed3e14610b66578063e2f4560514610ba257610324565b8063c18bc195116100d0578063c18bc19514610a84578063c8c8ebe414610aac578063cf1818ab14610ad6578063d257b34f14610b0057610324565b8063bbc0c74214610a0a578063c024666814610a34578063c17b5b8c14610a5c57610324565b80639a7a23d611610163578063a0d82dc51161013d578063a0d82dc51461092c578063a457c2d714610956578063a9059cbb14610992578063b62496f5146109ce57610324565b80639a7a23d6146108b05780639c3b4fdc146108d85780639fccce321461090257610324565b80638236802e146107cc5780638a8c523c146107f45780638da5cb5b1461080a5780638ea5220f14610834578063924de9b71461085e57806395d89b411461088657610324565b806349bd5a5e1161026957806368db925a1161022257806370a08231116101fc57806370a082311461072a578063715018a6146107665780637571336a1461077c5780638095d564146107a457610324565b806368db925a146106ac5780636a486a8e146106d65780636ddd17131461070057610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634bb2c785146105ce5780634fbee1931461060a5780635342acb414610646578063614bb6711461068257610324565b80631a8145bb116102d657806323b872dd116102b057806323b872dd146104ae57806327c8f835146104ea578063313ce56714610514578063395093511461053e57610324565b80631a8145bb146104345780631c3909e61461045e578063203e727e1461048657610324565b806306fdde0314610328578063095ea7b3146103525780630eae0c601461038e5780631694505e146103b857806318160ddd146103e25780631816467f1461040c57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c72565b60405161034991906139e5565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190613a96565b610d02565b6040516103859190613aee565b60405180910390f35b348015610399575f80fd5b506103a2610d1f565b6040516103af9190613b16565b60405180910390f35b3480156103c3575f80fd5b506103cc610d25565b6040516103d99190613b8a565b60405180910390f35b3480156103ed575f80fd5b506103f6610d49565b6040516104039190613b16565b60405180910390f35b348015610417575f80fd5b50610432600480360381019061042d9190613ba3565b610d52565b005b34801561043f575f80fd5b50610448610e8c565b6040516104559190613b16565b60405180910390f35b348015610469575f80fd5b50610484600480360381019061047f9190613ba3565b610e92565b005b348015610491575f80fd5b506104ac60048036038101906104a79190613bce565b610fcc565b005b3480156104b9575f80fd5b506104d460048036038101906104cf9190613bf9565b6110db565b6040516104e19190613aee565b60405180910390f35b3480156104f5575f80fd5b506104fe6111cd565b60405161050b9190613c58565b60405180910390f35b34801561051f575f80fd5b506105286111d3565b6040516105359190613c8c565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613a96565b6111db565b6040516105719190613aee565b60405180910390f35b348015610585575f80fd5b5061058e611282565b60405161059b9190613c58565b60405180910390f35b3480156105af575f80fd5b506105b86112a6565b6040516105c59190613aee565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613ba3565b6112b8565b6040516106019190613aee565b60405180910390f35b348015610615575f80fd5b50610630600480360381019061062b9190613ba3565b6112d5565b60405161063d9190613aee565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190613ba3565b6112f2565b6040516106799190613aee565b60405180910390f35b34801561068d575f80fd5b50610696611344565b6040516106a39190613b16565b60405180910390f35b3480156106b7575f80fd5b506106c061134a565b6040516106cd9190613c58565b60405180910390f35b3480156106e1575f80fd5b506106ea61136f565b6040516106f79190613b16565b60405180910390f35b34801561070b575f80fd5b50610714611375565b6040516107219190613aee565b60405180910390f35b348015610735575f80fd5b50610750600480360381019061074b9190613ba3565b611388565b60405161075d9190613b16565b60405180910390f35b348015610771575f80fd5b5061077a6113cd565b005b348015610787575f80fd5b506107a2600480360381019061079d9190613ccf565b611454565b005b3480156107af575f80fd5b506107ca60048036038101906107c59190613d0d565b611528565b005b3480156107d7575f80fd5b506107f260048036038101906107ed9190613ccf565b611627565b005b3480156107ff575f80fd5b506108086116fb565b005b348015610815575f80fd5b5061081e6117af565b60405161082b9190613c58565b60405180910390f35b34801561083f575f80fd5b506108486117d7565b6040516108559190613c58565b60405180910390f35b348015610869575f80fd5b50610884600480360381019061087f9190613d5d565b6117fc565b005b348015610891575f80fd5b5061089a611895565b6040516108a791906139e5565b60405180910390f35b3480156108bb575f80fd5b506108d660048036038101906108d19190613ccf565b611925565b005b3480156108e3575f80fd5b506108ec611a3d565b6040516108f99190613b16565b60405180910390f35b34801561090d575f80fd5b50610916611a43565b6040516109239190613b16565b60405180910390f35b348015610937575f80fd5b50610940611a49565b60405161094d9190613b16565b60405180910390f35b348015610961575f80fd5b5061097c60048036038101906109779190613a96565b611a4f565b6040516109899190613aee565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613a96565b611b35565b6040516109c59190613aee565b60405180910390f35b3480156109d9575f80fd5b506109f460048036038101906109ef9190613ba3565b611b52565b604051610a019190613aee565b60405180910390f35b348015610a15575f80fd5b50610a1e611b6f565b604051610a2b9190613aee565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190613ccf565b611b82565b005b348015610a67575f80fd5b50610a826004803603810190610a7d9190613d0d565b611ca4565b005b348015610a8f575f80fd5b50610aaa6004803603810190610aa59190613bce565b611da3565b005b348015610ab7575f80fd5b50610ac0611eb2565b604051610acd9190613b16565b60405180910390f35b348015610ae1575f80fd5b50610aea611eb8565b604051610af79190613b16565b60405180910390f35b348015610b0b575f80fd5b50610b266004803603810190610b219190613bce565b611ebe565b604051610b339190613aee565b60405180910390f35b348015610b47575f80fd5b50610b50612012565b604051610b5d9190613b16565b60405180910390f35b348015610b71575f80fd5b50610b8c6004803603810190610b879190613d88565b612018565b604051610b999190613b16565b60405180910390f35b348015610bad575f80fd5b50610bb661209a565b604051610bc39190613b16565b60405180910390f35b348015610bd7575f80fd5b50610be06120a0565b604051610bed9190613b16565b60405180910390f35b348015610c01575f80fd5b50610c1c6004803603810190610c179190613ba3565b6120a6565b005b348015610c29575f80fd5b50610c3261219c565b604051610c3f9190613b16565b60405180910390f35b348015610c53575f80fd5b50610c5c6121a2565b604051610c699190613b16565b60405180910390f35b606060038054610c8190613df3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cad90613df3565b8015610cf85780601f10610ccf57610100808354040283529160200191610cf8565b820191905f5260205f20905b815481529060010190602001808311610cdb57829003601f168201915b5050505050905090565b5f610d15610d0e6121a8565b84846121af565b6001905092915050565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610d5a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16610d786117af565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590613e6d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610e9a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16610eb86117af565b73ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613e6d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fba8a74f87db3edea870277fd7964be772c6d9340ec078b2304f38ae1b9f0e5d260405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fd46121a8565b73ffffffffffffffffffffffffffffffffffffffff16610ff26117af565b73ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90613e6d565b60405180910390fd5b670de0b6b3a76400006103e8600161105e610d49565b6110689190613eb8565b6110729190613f26565b61107c9190613f26565b8110156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613fc6565b60405180910390fd5b670de0b6b3a7640000816110d29190613eb8565b60088190555050565b5f6110e7848484612372565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61112e6121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614054565b60405180910390fd5b6111c1856111b96121a8565b8584036121af565b60019150509392505050565b61dead81565b5f6012905090565b5f6112786111e76121a8565b848460015f6111f46121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112739190614072565b6121af565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b6018602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60115481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113d56121a8565b73ffffffffffffffffffffffffffffffffffffffff166113f36117af565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613e6d565b60405180910390fd5b6114525f612f7b565b565b61145c6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661147a6117af565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613e6d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6115306121a8565b73ffffffffffffffffffffffffffffffffffffffff1661154e6117af565b73ffffffffffffffffffffffffffffffffffffffff16146115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90613e6d565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546115cc9190614072565b6115d69190614072565b600c81905550600a600c541115611622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611619906140ef565b60405180910390fd5b505050565b61162f6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661164d6117af565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613e6d565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117036121a8565b73ffffffffffffffffffffffffffffffffffffffff166117216117af565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613e6d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118046121a8565b73ffffffffffffffffffffffffffffffffffffffff166118226117af565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613e6d565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546118a490613df3565b80601f01602080910402602001604051908101604052809291908181526020018280546118d090613df3565b801561191b5780601f106118f25761010080835404028352916020019161191b565b820191905f5260205f20905b8154815290600101906020018083116118fe57829003601f168201915b5050505050905090565b61192d6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661194b6117af565b73ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613e6d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061417d565b60405180910390fd5b611a39828261303e565b5050565b600f5481565b60165481565b60135481565b5f8060015f611a5c6121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d9061420b565b60405180910390fd5b611b2a611b216121a8565b858584036121af565b600191505092915050565b5f611b48611b416121a8565b8484612372565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b8a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611ba86117af565b73ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613e6d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c989190613aee565b60405180910390a25050565b611cac6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611cca6117af565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790613e6d565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611d489190614072565b611d529190614072565b601081905550601e6010541115611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614273565b60405180910390fd5b505050565b611dab6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117af565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690613e6d565b60405180910390fd5b670de0b6b3a76400006103e86005611e35610d49565b611e3f9190613eb8565b611e499190613f26565b611e539190613f26565b811015611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614301565b60405180910390fd5b670de0b6b3a764000081611ea99190613eb8565b600a8190555050565b60085481565b60145481565b5f611ec76121a8565b73ffffffffffffffffffffffffffffffffffffffff16611ee56117af565b73ffffffffffffffffffffffffffffffffffffffff1614611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290613e6d565b60405180910390fd5b620186a06001611f49610d49565b611f539190613eb8565b611f5d9190613f26565b821015611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f969061438f565b60405180910390fd5b6103e86005611fac610d49565b611fb69190613eb8565b611fc09190613f26565b821115612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff99061441d565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b6120ae6121a8565b73ffffffffffffffffffffffffffffffffffffffff166120cc6117af565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990613e6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906144ab565b60405180910390fd5b61219981612f7b565b50565b60125481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614539565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906145c7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123659190613b16565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790614655565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612445906146e3565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124ec575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125229061474b565b60405180910390fd5b5f81036125425761253d83835f6130dc565b612f76565b600b60019054906101000a900460ff16612a105761255e6117af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125cc575061259c6117af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126565750601b5f9054906101000a900460ff16155b15612a0f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126f6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c906147b3565b60405180910390fd5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127d2575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128795760085481111561281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614841565b60405180910390fd5b600a5461282883611388565b826128339190614072565b1115612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b906148a9565b60405180910390fd5b612a0e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612916575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561296557600854811115612960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295790614937565b60405180910390fd5b612a0d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a0c57600a546129bf83611388565b826129ca9190614072565b1115612a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a02906148a9565b60405180910390fd5b5b5b5b5b5b5f612a1a30611388565b90505f6009548210159050808015612a3e5750600b60029054906101000a900460ff165b8015612a565750601b5f9054906101000a900460ff16155b8015612aa95750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612afc575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b4f575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b90576001601b5f6101000a81548160ff021916908315150217905550612b76613351565b5f601b5f6101000a81548160ff0219169083151502179055505b601b5f9054906101000a900460ff16158015612bf25750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612c45575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b505f601b5f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612cf4575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612cfd575f90505b5f8115612f6657601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d5b57505f601054115b15612e2557612d886064612d7a6010548861362090919063ffffffff16565b61363590919063ffffffff16565b905060105460125482612d9b9190613eb8565b612da59190613f26565b60155f828254612db59190614072565b9250508190555060105460115482612dcd9190613eb8565b612dd79190613f26565b60145f828254612de79190614072565b9250508190555060105460135482612dff9190613eb8565b612e099190613f26565b60165f828254612e199190614072565b92505081905550612f43565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e7c57505f600c54115b15612f4257612ea96064612e9b600c548861362090919063ffffffff16565b61363590919063ffffffff16565b9050600c54600e5482612ebc9190613eb8565b612ec69190613f26565b60155f828254612ed69190614072565b92505081905550600c54600d5482612eee9190613eb8565b612ef89190613f26565b60145f828254612f089190614072565b92505081905550600c54600f5482612f209190613eb8565b612f2a9190613f26565b60165f828254612f3a9190614072565b925050819055505b5b5f811115612f5757612f568730836130dc565b5b8085612f639190614955565b94505b612f718787876130dc565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361314a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314190614655565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131af906146e3565b60405180910390fd5b6131c383838361364a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323d906149f8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132d49190614072565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133389190613b16565b60405180910390a361334b84848461364f565b50505050565b5f61335b30611388565b90505f6016546014546015546133719190614072565b61337b9190614072565b90505f8083148061338b57505f82145b156133985750505061361e565b600a6009546133a79190613eb8565b8311156133c057600a6009546133bd9190613eb8565b92505b5f600283601554866133d29190613eb8565b6133dc9190613f26565b6133e69190613f26565b90505f6133fc828661365490919063ffffffff16565b90505f47905061340b82613669565b5f61341f824761365490919063ffffffff16565b90505f6134498761343b6014548561362090919063ffffffff16565b61363590919063ffffffff16565b90505f613473886134656016548661362090919063ffffffff16565b61363590919063ffffffff16565b90505f8183856134839190614955565b61348d9190614955565b90505f6015819055505f6014819055505f60168190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134e990614a43565b5f6040518083038185875af1925050503d805f8114613523576040519150601f19603f3d011682016040523d82523d5f602084013e613528565b606091505b5050809850505f8711801561353c57505f81115b156135895761354b878261389c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260155460405161358093929190614a57565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135ce90614a43565b5f6040518083038185875af1925050503d805f8114613608576040519150601f19603f3d011682016040523d82523d5f602084013e61360d565b606091505b505080985050505050505050505050505b565b5f818361362d9190613eb8565b905092915050565b5f81836136429190613f26565b905092915050565b505050565b505050565b5f81836136619190614955565b905092915050565b5f600267ffffffffffffffff81111561368557613684614a8c565b5b6040519080825280602002602001820160405280156136b35781602001602082028036833780820191505090505b50905030815f815181106136ca576136c9614ab9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561376d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137919190614afa565b816001815181106137a5576137a4614ab9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380a307f0000000000000000000000000000000000000000000000000000000000000000846121af565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161386b959493929190614c15565b5f604051808303815f87803b158015613882575f80fd5b505af1158015613894573d5f803e3d5ffd5b505050505050565b6138c7307f0000000000000000000000000000000000000000000000000000000000000000846121af565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161392d96959493929190614c6d565b60606040518083038185885af1158015613949573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061396e9190614ce0565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6139b782613975565b6139c1818561397f565b93506139d181856020860161398f565b6139da8161399d565b840191505092915050565b5f6020820190508181035f8301526139fd81846139ad565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a3282613a09565b9050919050565b613a4281613a28565b8114613a4c575f80fd5b50565b5f81359050613a5d81613a39565b92915050565b5f819050919050565b613a7581613a63565b8114613a7f575f80fd5b50565b5f81359050613a9081613a6c565b92915050565b5f8060408385031215613aac57613aab613a05565b5b5f613ab985828601613a4f565b9250506020613aca85828601613a82565b9150509250929050565b5f8115159050919050565b613ae881613ad4565b82525050565b5f602082019050613b015f830184613adf565b92915050565b613b1081613a63565b82525050565b5f602082019050613b295f830184613b07565b92915050565b5f819050919050565b5f613b52613b4d613b4884613a09565b613b2f565b613a09565b9050919050565b5f613b6382613b38565b9050919050565b5f613b7482613b59565b9050919050565b613b8481613b6a565b82525050565b5f602082019050613b9d5f830184613b7b565b92915050565b5f60208284031215613bb857613bb7613a05565b5b5f613bc584828501613a4f565b91505092915050565b5f60208284031215613be357613be2613a05565b5b5f613bf084828501613a82565b91505092915050565b5f805f60608486031215613c1057613c0f613a05565b5b5f613c1d86828701613a4f565b9350506020613c2e86828701613a4f565b9250506040613c3f86828701613a82565b9150509250925092565b613c5281613a28565b82525050565b5f602082019050613c6b5f830184613c49565b92915050565b5f60ff82169050919050565b613c8681613c71565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b613cae81613ad4565b8114613cb8575f80fd5b50565b5f81359050613cc981613ca5565b92915050565b5f8060408385031215613ce557613ce4613a05565b5b5f613cf285828601613a4f565b9250506020613d0385828601613cbb565b9150509250929050565b5f805f60608486031215613d2457613d23613a05565b5b5f613d3186828701613a82565b9350506020613d4286828701613a82565b9250506040613d5386828701613a82565b9150509250925092565b5f60208284031215613d7257613d71613a05565b5b5f613d7f84828501613cbb565b91505092915050565b5f8060408385031215613d9e57613d9d613a05565b5b5f613dab85828601613a4f565b9250506020613dbc85828601613a4f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e0a57607f821691505b602082108103613e1d57613e1c613dc6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e5760208361397f565b9150613e6282613e23565b602082019050919050565b5f6020820190508181035f830152613e8481613e4b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ec282613a63565b9150613ecd83613a63565b9250828202613edb81613a63565b91508282048414831517613ef257613ef1613e8b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f3082613a63565b9150613f3b83613a63565b925082613f4b57613f4a613ef9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613fb0602f8361397f565b9150613fbb82613f56565b604082019050919050565b5f6020820190508181035f830152613fdd81613fa4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61403e60288361397f565b915061404982613fe4565b604082019050919050565b5f6020820190508181035f83015261406b81614032565b9050919050565b5f61407c82613a63565b915061408783613a63565b925082820190508082111561409f5761409e613e8b565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6140d9601d8361397f565b91506140e4826140a5565b602082019050919050565b5f6020820190508181035f830152614106816140cd565b9050919050565b7f4c697175696469747920706169722063616e742062652072656d6f76656420665f8201527f726f6d206175746f6d617465644d61726b65744d616b65725061697273000000602082015250565b5f614167603d8361397f565b91506141728261410d565b604082019050919050565b5f6020820190508181035f8301526141948161415b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141f560258361397f565b91506142008261419b565b604082019050919050565b5f6020820190508181035f830152614222816141e9565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f61425d601d8361397f565b915061426882614229565b602082019050919050565b5f6020820190508181035f83015261428a81614251565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142eb60248361397f565b91506142f682614291565b604082019050919050565b5f6020820190508181035f830152614318816142df565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61437960358361397f565b91506143848261431f565b604082019050919050565b5f6020820190508181035f8301526143a68161436d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61440760348361397f565b9150614412826143ad565b604082019050919050565b5f6020820190508181035f830152614434816143fb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61449560268361397f565b91506144a08261443b565b604082019050919050565b5f6020820190508181035f8301526144c281614489565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61452360248361397f565b915061452e826144c9565b604082019050919050565b5f6020820190508181035f83015261455081614517565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145b160228361397f565b91506145bc82614557565b604082019050919050565b5f6020820190508181035f8301526145de816145a5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61463f60258361397f565b915061464a826145e5565b604082019050919050565b5f6020820190508181035f83015261466c81614633565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146cd60238361397f565b91506146d882614673565b604082019050919050565b5f6020820190508181035f8301526146fa816146c1565b9050919050565b7f4d757374206e6f7420626520666c616767656420617320626f740000000000005f82015250565b5f614735601a8361397f565b915061474082614701565b602082019050919050565b5f6020820190508181035f83015261476281614729565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61479d60168361397f565b91506147a882614769565b602082019050919050565b5f6020820190508181035f8301526147ca81614791565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61482b60358361397f565b9150614836826147d1565b604082019050919050565b5f6020820190508181035f8301526148588161481f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61489360138361397f565b915061489e8261485f565b602082019050919050565b5f6020820190508181035f8301526148c081614887565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61492160368361397f565b915061492c826148c7565b604082019050919050565b5f6020820190508181035f83015261494e81614915565b9050919050565b5f61495f82613a63565b915061496a83613a63565b925082820390508181111561498257614981613e8b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149e260268361397f565b91506149ed82614988565b604082019050919050565b5f6020820190508181035f830152614a0f816149d6565b9050919050565b5f81905092915050565b50565b5f614a2e5f83614a16565b9150614a3982614a20565b5f82019050919050565b5f614a4d82614a23565b9150819050919050565b5f606082019050614a6a5f830186613b07565b614a776020830185613b07565b614a846040830184613b07565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614af481613a39565b92915050565b5f60208284031215614b0f57614b0e613a05565b5b5f614b1c84828501614ae6565b91505092915050565b5f819050919050565b5f614b48614b43614b3e84614b25565b613b2f565b613a63565b9050919050565b614b5881614b2e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b9081613a28565b82525050565b5f614ba18383614b87565b60208301905092915050565b5f602082019050919050565b5f614bc382614b5e565b614bcd8185614b68565b9350614bd883614b78565b805f5b83811015614c08578151614bef8882614b96565b9750614bfa83614bad565b925050600181019050614bdb565b5085935050505092915050565b5f60a082019050614c285f830188613b07565b614c356020830187614b4f565b8181036040830152614c478186614bb9565b9050614c566060830185613c49565b614c636080830184613b07565b9695505050505050565b5f60c082019050614c805f830189613c49565b614c8d6020830188613b07565b614c9a6040830187614b4f565b614ca76060830186614b4f565b614cb46080830185613c49565b614cc160a0830184613b07565b979650505050505050565b5f81519050614cda81613a6c565b92915050565b5f805f60608486031215614cf757614cf6613a05565b5b5f614d0486828701614ccc565b9350506020614d1586828701614ccc565b9250506040614d2686828701614ccc565b915050925092509256fea2646970667358221220cdb5b5ab48529c56c477f576609dd8390db045ae39cddf67810701a56526058764736f6c634300081900330000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee300000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee30

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638236802e116101aa578063bbc0c742116100f6578063d85ba06311610094578063f11a24d31161006e578063f11a24d314610bcc578063f2fde38b14610bf6578063f637434214610c1e578063f8b45b0514610c4857610324565b8063d85ba06314610b3c578063dd62ed3e14610b66578063e2f4560514610ba257610324565b8063c18bc195116100d0578063c18bc19514610a84578063c8c8ebe414610aac578063cf1818ab14610ad6578063d257b34f14610b0057610324565b8063bbc0c74214610a0a578063c024666814610a34578063c17b5b8c14610a5c57610324565b80639a7a23d611610163578063a0d82dc51161013d578063a0d82dc51461092c578063a457c2d714610956578063a9059cbb14610992578063b62496f5146109ce57610324565b80639a7a23d6146108b05780639c3b4fdc146108d85780639fccce321461090257610324565b80638236802e146107cc5780638a8c523c146107f45780638da5cb5b1461080a5780638ea5220f14610834578063924de9b71461085e57806395d89b411461088657610324565b806349bd5a5e1161026957806368db925a1161022257806370a08231116101fc57806370a082311461072a578063715018a6146107665780637571336a1461077c5780638095d564146107a457610324565b806368db925a146106ac5780636a486a8e146106d65780636ddd17131461070057610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634bb2c785146105ce5780634fbee1931461060a5780635342acb414610646578063614bb6711461068257610324565b80631a8145bb116102d657806323b872dd116102b057806323b872dd146104ae57806327c8f835146104ea578063313ce56714610514578063395093511461053e57610324565b80631a8145bb146104345780631c3909e61461045e578063203e727e1461048657610324565b806306fdde0314610328578063095ea7b3146103525780630eae0c601461038e5780631694505e146103b857806318160ddd146103e25780631816467f1461040c57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c72565b60405161034991906139e5565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190613a96565b610d02565b6040516103859190613aee565b60405180910390f35b348015610399575f80fd5b506103a2610d1f565b6040516103af9190613b16565b60405180910390f35b3480156103c3575f80fd5b506103cc610d25565b6040516103d99190613b8a565b60405180910390f35b3480156103ed575f80fd5b506103f6610d49565b6040516104039190613b16565b60405180910390f35b348015610417575f80fd5b50610432600480360381019061042d9190613ba3565b610d52565b005b34801561043f575f80fd5b50610448610e8c565b6040516104559190613b16565b60405180910390f35b348015610469575f80fd5b50610484600480360381019061047f9190613ba3565b610e92565b005b348015610491575f80fd5b506104ac60048036038101906104a79190613bce565b610fcc565b005b3480156104b9575f80fd5b506104d460048036038101906104cf9190613bf9565b6110db565b6040516104e19190613aee565b60405180910390f35b3480156104f5575f80fd5b506104fe6111cd565b60405161050b9190613c58565b60405180910390f35b34801561051f575f80fd5b506105286111d3565b6040516105359190613c8c565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613a96565b6111db565b6040516105719190613aee565b60405180910390f35b348015610585575f80fd5b5061058e611282565b60405161059b9190613c58565b60405180910390f35b3480156105af575f80fd5b506105b86112a6565b6040516105c59190613aee565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613ba3565b6112b8565b6040516106019190613aee565b60405180910390f35b348015610615575f80fd5b50610630600480360381019061062b9190613ba3565b6112d5565b60405161063d9190613aee565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190613ba3565b6112f2565b6040516106799190613aee565b60405180910390f35b34801561068d575f80fd5b50610696611344565b6040516106a39190613b16565b60405180910390f35b3480156106b7575f80fd5b506106c061134a565b6040516106cd9190613c58565b60405180910390f35b3480156106e1575f80fd5b506106ea61136f565b6040516106f79190613b16565b60405180910390f35b34801561070b575f80fd5b50610714611375565b6040516107219190613aee565b60405180910390f35b348015610735575f80fd5b50610750600480360381019061074b9190613ba3565b611388565b60405161075d9190613b16565b60405180910390f35b348015610771575f80fd5b5061077a6113cd565b005b348015610787575f80fd5b506107a2600480360381019061079d9190613ccf565b611454565b005b3480156107af575f80fd5b506107ca60048036038101906107c59190613d0d565b611528565b005b3480156107d7575f80fd5b506107f260048036038101906107ed9190613ccf565b611627565b005b3480156107ff575f80fd5b506108086116fb565b005b348015610815575f80fd5b5061081e6117af565b60405161082b9190613c58565b60405180910390f35b34801561083f575f80fd5b506108486117d7565b6040516108559190613c58565b60405180910390f35b348015610869575f80fd5b50610884600480360381019061087f9190613d5d565b6117fc565b005b348015610891575f80fd5b5061089a611895565b6040516108a791906139e5565b60405180910390f35b3480156108bb575f80fd5b506108d660048036038101906108d19190613ccf565b611925565b005b3480156108e3575f80fd5b506108ec611a3d565b6040516108f99190613b16565b60405180910390f35b34801561090d575f80fd5b50610916611a43565b6040516109239190613b16565b60405180910390f35b348015610937575f80fd5b50610940611a49565b60405161094d9190613b16565b60405180910390f35b348015610961575f80fd5b5061097c60048036038101906109779190613a96565b611a4f565b6040516109899190613aee565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613a96565b611b35565b6040516109c59190613aee565b60405180910390f35b3480156109d9575f80fd5b506109f460048036038101906109ef9190613ba3565b611b52565b604051610a019190613aee565b60405180910390f35b348015610a15575f80fd5b50610a1e611b6f565b604051610a2b9190613aee565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190613ccf565b611b82565b005b348015610a67575f80fd5b50610a826004803603810190610a7d9190613d0d565b611ca4565b005b348015610a8f575f80fd5b50610aaa6004803603810190610aa59190613bce565b611da3565b005b348015610ab7575f80fd5b50610ac0611eb2565b604051610acd9190613b16565b60405180910390f35b348015610ae1575f80fd5b50610aea611eb8565b604051610af79190613b16565b60405180910390f35b348015610b0b575f80fd5b50610b266004803603810190610b219190613bce565b611ebe565b604051610b339190613aee565b60405180910390f35b348015610b47575f80fd5b50610b50612012565b604051610b5d9190613b16565b60405180910390f35b348015610b71575f80fd5b50610b8c6004803603810190610b879190613d88565b612018565b604051610b999190613b16565b60405180910390f35b348015610bad575f80fd5b50610bb661209a565b604051610bc39190613b16565b60405180910390f35b348015610bd7575f80fd5b50610be06120a0565b604051610bed9190613b16565b60405180910390f35b348015610c01575f80fd5b50610c1c6004803603810190610c179190613ba3565b6120a6565b005b348015610c29575f80fd5b50610c3261219c565b604051610c3f9190613b16565b60405180910390f35b348015610c53575f80fd5b50610c5c6121a2565b604051610c699190613b16565b60405180910390f35b606060038054610c8190613df3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cad90613df3565b8015610cf85780601f10610ccf57610100808354040283529160200191610cf8565b820191905f5260205f20905b815481529060010190602001808311610cdb57829003601f168201915b5050505050905090565b5f610d15610d0e6121a8565b84846121af565b6001905092915050565b600d5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610d5a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16610d786117af565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590613e6d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610e9a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16610eb86117af565b73ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613e6d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fba8a74f87db3edea870277fd7964be772c6d9340ec078b2304f38ae1b9f0e5d260405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fd46121a8565b73ffffffffffffffffffffffffffffffffffffffff16610ff26117af565b73ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90613e6d565b60405180910390fd5b670de0b6b3a76400006103e8600161105e610d49565b6110689190613eb8565b6110729190613f26565b61107c9190613f26565b8110156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613fc6565b60405180910390fd5b670de0b6b3a7640000816110d29190613eb8565b60088190555050565b5f6110e7848484612372565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61112e6121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614054565b60405180910390fd5b6111c1856111b96121a8565b8584036121af565b60019150509392505050565b61dead81565b5f6012905090565b5f6112786111e76121a8565b848460015f6111f46121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112739190614072565b6121af565b6001905092915050565b7f000000000000000000000000585965296338d3490197a24f3d076b90c6276b0281565b600b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b6018602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60115481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113d56121a8565b73ffffffffffffffffffffffffffffffffffffffff166113f36117af565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613e6d565b60405180910390fd5b6114525f612f7b565b565b61145c6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661147a6117af565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613e6d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6115306121a8565b73ffffffffffffffffffffffffffffffffffffffff1661154e6117af565b73ffffffffffffffffffffffffffffffffffffffff16146115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90613e6d565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546115cc9190614072565b6115d69190614072565b600c81905550600a600c541115611622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611619906140ef565b60405180910390fd5b505050565b61162f6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661164d6117af565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613e6d565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117036121a8565b73ffffffffffffffffffffffffffffffffffffffff166117216117af565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613e6d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118046121a8565b73ffffffffffffffffffffffffffffffffffffffff166118226117af565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613e6d565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546118a490613df3565b80601f01602080910402602001604051908101604052809291908181526020018280546118d090613df3565b801561191b5780601f106118f25761010080835404028352916020019161191b565b820191905f5260205f20905b8154815290600101906020018083116118fe57829003601f168201915b5050505050905090565b61192d6121a8565b73ffffffffffffffffffffffffffffffffffffffff1661194b6117af565b73ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613e6d565b60405180910390fd5b7f000000000000000000000000585965296338d3490197a24f3d076b90c6276b0273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061417d565b60405180910390fd5b611a39828261303e565b5050565b600f5481565b60165481565b60135481565b5f8060015f611a5c6121a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d9061420b565b60405180910390fd5b611b2a611b216121a8565b858584036121af565b600191505092915050565b5f611b48611b416121a8565b8484612372565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b8a6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611ba86117af565b73ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613e6d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c989190613aee565b60405180910390a25050565b611cac6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611cca6117af565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790613e6d565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611d489190614072565b611d529190614072565b601081905550601e6010541115611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614273565b60405180910390fd5b505050565b611dab6121a8565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117af565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690613e6d565b60405180910390fd5b670de0b6b3a76400006103e86005611e35610d49565b611e3f9190613eb8565b611e499190613f26565b611e539190613f26565b811015611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614301565b60405180910390fd5b670de0b6b3a764000081611ea99190613eb8565b600a8190555050565b60085481565b60145481565b5f611ec76121a8565b73ffffffffffffffffffffffffffffffffffffffff16611ee56117af565b73ffffffffffffffffffffffffffffffffffffffff1614611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290613e6d565b60405180910390fd5b620186a06001611f49610d49565b611f539190613eb8565b611f5d9190613f26565b821015611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f969061438f565b60405180910390fd5b6103e86005611fac610d49565b611fb69190613eb8565b611fc09190613f26565b821115612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff99061441d565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b6120ae6121a8565b73ffffffffffffffffffffffffffffffffffffffff166120cc6117af565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990613e6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906144ab565b60405180910390fd5b61219981612f7b565b50565b60125481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614539565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906145c7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123659190613b16565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790614655565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612445906146e3565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124ec575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125229061474b565b60405180910390fd5b5f81036125425761253d83835f6130dc565b612f76565b600b60019054906101000a900460ff16612a105761255e6117af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125cc575061259c6117af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126565750601b5f9054906101000a900460ff16155b15612a0f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126f6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c906147b3565b60405180910390fd5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127d2575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128795760085481111561281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614841565b60405180910390fd5b600a5461282883611388565b826128339190614072565b1115612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b906148a9565b60405180910390fd5b612a0e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612916575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561296557600854811115612960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295790614937565b60405180910390fd5b612a0d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a0c57600a546129bf83611388565b826129ca9190614072565b1115612a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a02906148a9565b60405180910390fd5b5b5b5b5b5b5f612a1a30611388565b90505f6009548210159050808015612a3e5750600b60029054906101000a900460ff165b8015612a565750601b5f9054906101000a900460ff16155b8015612aa95750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612afc575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b4f575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b90576001601b5f6101000a81548160ff021916908315150217905550612b76613351565b5f601b5f6101000a81548160ff0219169083151502179055505b601b5f9054906101000a900460ff16158015612bf25750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612c45575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b505f601b5f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612cf4575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612cfd575f90505b5f8115612f6657601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d5b57505f601054115b15612e2557612d886064612d7a6010548861362090919063ffffffff16565b61363590919063ffffffff16565b905060105460125482612d9b9190613eb8565b612da59190613f26565b60155f828254612db59190614072565b9250508190555060105460115482612dcd9190613eb8565b612dd79190613f26565b60145f828254612de79190614072565b9250508190555060105460135482612dff9190613eb8565b612e099190613f26565b60165f828254612e199190614072565b92505081905550612f43565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e7c57505f600c54115b15612f4257612ea96064612e9b600c548861362090919063ffffffff16565b61363590919063ffffffff16565b9050600c54600e5482612ebc9190613eb8565b612ec69190613f26565b60155f828254612ed69190614072565b92505081905550600c54600d5482612eee9190613eb8565b612ef89190613f26565b60145f828254612f089190614072565b92505081905550600c54600f5482612f209190613eb8565b612f2a9190613f26565b60165f828254612f3a9190614072565b925050819055505b5b5f811115612f5757612f568730836130dc565b5b8085612f639190614955565b94505b612f718787876130dc565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361314a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314190614655565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131af906146e3565b60405180910390fd5b6131c383838361364a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323d906149f8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132d49190614072565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133389190613b16565b60405180910390a361334b84848461364f565b50505050565b5f61335b30611388565b90505f6016546014546015546133719190614072565b61337b9190614072565b90505f8083148061338b57505f82145b156133985750505061361e565b600a6009546133a79190613eb8565b8311156133c057600a6009546133bd9190613eb8565b92505b5f600283601554866133d29190613eb8565b6133dc9190613f26565b6133e69190613f26565b90505f6133fc828661365490919063ffffffff16565b90505f47905061340b82613669565b5f61341f824761365490919063ffffffff16565b90505f6134498761343b6014548561362090919063ffffffff16565b61363590919063ffffffff16565b90505f613473886134656016548661362090919063ffffffff16565b61363590919063ffffffff16565b90505f8183856134839190614955565b61348d9190614955565b90505f6015819055505f6014819055505f60168190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134e990614a43565b5f6040518083038185875af1925050503d805f8114613523576040519150601f19603f3d011682016040523d82523d5f602084013e613528565b606091505b5050809850505f8711801561353c57505f81115b156135895761354b878261389c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260155460405161358093929190614a57565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135ce90614a43565b5f6040518083038185875af1925050503d805f8114613608576040519150601f19603f3d011682016040523d82523d5f602084013e61360d565b606091505b505080985050505050505050505050505b565b5f818361362d9190613eb8565b905092915050565b5f81836136429190613f26565b905092915050565b505050565b505050565b5f81836136619190614955565b905092915050565b5f600267ffffffffffffffff81111561368557613684614a8c565b5b6040519080825280602002602001820160405280156136b35781602001602082028036833780820191505090505b50905030815f815181106136ca576136c9614ab9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561376d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137919190614afa565b816001815181106137a5576137a4614ab9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121af565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161386b959493929190614c15565b5f604051808303815f87803b158015613882575f80fd5b505af1158015613894573d5f803e3d5ffd5b505050505050565b6138c7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121af565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161392d96959493929190614c6d565b60606040518083038185885af1158015613949573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061396e9190614ce0565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6139b782613975565b6139c1818561397f565b93506139d181856020860161398f565b6139da8161399d565b840191505092915050565b5f6020820190508181035f8301526139fd81846139ad565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a3282613a09565b9050919050565b613a4281613a28565b8114613a4c575f80fd5b50565b5f81359050613a5d81613a39565b92915050565b5f819050919050565b613a7581613a63565b8114613a7f575f80fd5b50565b5f81359050613a9081613a6c565b92915050565b5f8060408385031215613aac57613aab613a05565b5b5f613ab985828601613a4f565b9250506020613aca85828601613a82565b9150509250929050565b5f8115159050919050565b613ae881613ad4565b82525050565b5f602082019050613b015f830184613adf565b92915050565b613b1081613a63565b82525050565b5f602082019050613b295f830184613b07565b92915050565b5f819050919050565b5f613b52613b4d613b4884613a09565b613b2f565b613a09565b9050919050565b5f613b6382613b38565b9050919050565b5f613b7482613b59565b9050919050565b613b8481613b6a565b82525050565b5f602082019050613b9d5f830184613b7b565b92915050565b5f60208284031215613bb857613bb7613a05565b5b5f613bc584828501613a4f565b91505092915050565b5f60208284031215613be357613be2613a05565b5b5f613bf084828501613a82565b91505092915050565b5f805f60608486031215613c1057613c0f613a05565b5b5f613c1d86828701613a4f565b9350506020613c2e86828701613a4f565b9250506040613c3f86828701613a82565b9150509250925092565b613c5281613a28565b82525050565b5f602082019050613c6b5f830184613c49565b92915050565b5f60ff82169050919050565b613c8681613c71565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b613cae81613ad4565b8114613cb8575f80fd5b50565b5f81359050613cc981613ca5565b92915050565b5f8060408385031215613ce557613ce4613a05565b5b5f613cf285828601613a4f565b9250506020613d0385828601613cbb565b9150509250929050565b5f805f60608486031215613d2457613d23613a05565b5b5f613d3186828701613a82565b9350506020613d4286828701613a82565b9250506040613d5386828701613a82565b9150509250925092565b5f60208284031215613d7257613d71613a05565b5b5f613d7f84828501613cbb565b91505092915050565b5f8060408385031215613d9e57613d9d613a05565b5b5f613dab85828601613a4f565b9250506020613dbc85828601613a4f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e0a57607f821691505b602082108103613e1d57613e1c613dc6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e5760208361397f565b9150613e6282613e23565b602082019050919050565b5f6020820190508181035f830152613e8481613e4b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ec282613a63565b9150613ecd83613a63565b9250828202613edb81613a63565b91508282048414831517613ef257613ef1613e8b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f3082613a63565b9150613f3b83613a63565b925082613f4b57613f4a613ef9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613fb0602f8361397f565b9150613fbb82613f56565b604082019050919050565b5f6020820190508181035f830152613fdd81613fa4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61403e60288361397f565b915061404982613fe4565b604082019050919050565b5f6020820190508181035f83015261406b81614032565b9050919050565b5f61407c82613a63565b915061408783613a63565b925082820190508082111561409f5761409e613e8b565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6140d9601d8361397f565b91506140e4826140a5565b602082019050919050565b5f6020820190508181035f830152614106816140cd565b9050919050565b7f4c697175696469747920706169722063616e742062652072656d6f76656420665f8201527f726f6d206175746f6d617465644d61726b65744d616b65725061697273000000602082015250565b5f614167603d8361397f565b91506141728261410d565b604082019050919050565b5f6020820190508181035f8301526141948161415b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141f560258361397f565b91506142008261419b565b604082019050919050565b5f6020820190508181035f830152614222816141e9565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f61425d601d8361397f565b915061426882614229565b602082019050919050565b5f6020820190508181035f83015261428a81614251565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142eb60248361397f565b91506142f682614291565b604082019050919050565b5f6020820190508181035f830152614318816142df565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61437960358361397f565b91506143848261431f565b604082019050919050565b5f6020820190508181035f8301526143a68161436d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61440760348361397f565b9150614412826143ad565b604082019050919050565b5f6020820190508181035f830152614434816143fb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61449560268361397f565b91506144a08261443b565b604082019050919050565b5f6020820190508181035f8301526144c281614489565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61452360248361397f565b915061452e826144c9565b604082019050919050565b5f6020820190508181035f83015261455081614517565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145b160228361397f565b91506145bc82614557565b604082019050919050565b5f6020820190508181035f8301526145de816145a5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61463f60258361397f565b915061464a826145e5565b604082019050919050565b5f6020820190508181035f83015261466c81614633565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146cd60238361397f565b91506146d882614673565b604082019050919050565b5f6020820190508181035f8301526146fa816146c1565b9050919050565b7f4d757374206e6f7420626520666c616767656420617320626f740000000000005f82015250565b5f614735601a8361397f565b915061474082614701565b602082019050919050565b5f6020820190508181035f83015261476281614729565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61479d60168361397f565b91506147a882614769565b602082019050919050565b5f6020820190508181035f8301526147ca81614791565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61482b60358361397f565b9150614836826147d1565b604082019050919050565b5f6020820190508181035f8301526148588161481f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61489360138361397f565b915061489e8261485f565b602082019050919050565b5f6020820190508181035f8301526148c081614887565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61492160368361397f565b915061492c826148c7565b604082019050919050565b5f6020820190508181035f83015261494e81614915565b9050919050565b5f61495f82613a63565b915061496a83613a63565b925082820390508181111561498257614981613e8b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149e260268361397f565b91506149ed82614988565b604082019050919050565b5f6020820190508181035f830152614a0f816149d6565b9050919050565b5f81905092915050565b50565b5f614a2e5f83614a16565b9150614a3982614a20565b5f82019050919050565b5f614a4d82614a23565b9150819050919050565b5f606082019050614a6a5f830186613b07565b614a776020830185613b07565b614a846040830184613b07565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614af481613a39565b92915050565b5f60208284031215614b0f57614b0e613a05565b5b5f614b1c84828501614ae6565b91505092915050565b5f819050919050565b5f614b48614b43614b3e84614b25565b613b2f565b613a63565b9050919050565b614b5881614b2e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b9081613a28565b82525050565b5f614ba18383614b87565b60208301905092915050565b5f602082019050919050565b5f614bc382614b5e565b614bcd8185614b68565b9350614bd883614b78565b805f5b83811015614c08578151614bef8882614b96565b9750614bfa83614bad565b925050600181019050614bdb565b5085935050505092915050565b5f60a082019050614c285f830188613b07565b614c356020830187614b4f565b8181036040830152614c478186614bb9565b9050614c566060830185613c49565b614c636080830184613b07565b9695505050505050565b5f60c082019050614c805f830189613c49565b614c8d6020830188613b07565b614c9a6040830187614b4f565b614ca76060830186614b4f565b614cb46080830185613c49565b614cc160a0830184613b07565b979650505050505050565b5f81519050614cda81613a6c565b92915050565b5f805f60608486031215614cf757614cf6613a05565b5b5f614d0486828701614ccc565b9350506020614d1586828701614ccc565b9250506040614d2686828701614ccc565b915050925092509256fea2646970667358221220cdb5b5ab48529c56c477f576609dd8390db045ae39cddf67810701a56526058764736f6c63430008190033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee300000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee30

-----Decoded View---------------
Arg [0] : opsWallet_ (address): 0x7F4D0307E1Fc9c9396583c1027B9C43FFf69EE30
Arg [1] : devWallet_ (address): 0x7F4D0307E1Fc9c9396583c1027B9C43FFf69EE30

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee30
Arg [1] : 0000000000000000000000007f4d0307e1fc9c9396583c1027b9c43fff69ee30


Deployed Bytecode Sourcemap

15310:14268:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2788:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3702:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15883:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3109:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22502:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16181:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22305:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19807:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3879:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15488:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3008:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4379:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15385:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15729:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16365:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16308:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22667:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16027:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15550:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15992:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15809:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3225:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;914:103;;;;;;;;;;;;;:::i;:::-;;20354:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20753:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20528:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19120:112;;;;;;;;;;;;;:::i;:::-;;691:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15581:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20645:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2896:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21793:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15959:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16221:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16105:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4602:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16434:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15769:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21604:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21174:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20090:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15614:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19302:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15849:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3543:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15656:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15922:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16067:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15696:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2788:100;2842:13;2875:5;2868:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2788:100;:::o;3702:169::-;3785:4;3802:39;3811:12;:10;:12::i;:::-;3825:7;3834:6;3802:8;:39::i;:::-;3859:4;3852:11;;3702:169;;;;:::o;15883:32::-;;;;:::o;15430:51::-;;;:::o;3109:108::-;3170:7;3197:12;;3190:19;;3109:108;:::o;22502:157::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22609:9:::1;;;;;;;;;;;22581:38;;22598:9;22581:38;;;;;;;;;;;;22642:9;22630;;:21;;;;;;;;;;;;;;;;;;22502:157:::0;:::o;16181:33::-;;;;:::o;22305:189::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:9:::1;;;;;;;;;;;22410:41;;22427:12;22410:41;;;;;;;;;;;;22474:12;22462:9;;:24;;;;;;;;;;;;;;;;;;22305:189:::0;:::o;19807:275::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19944:4:::1;19936;19931:1;19915:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19914:26;;;;:::i;:::-;19913:35;;;;:::i;:::-;19903:6;:45;;19881:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;20067:6;20057;:17;;;;:::i;:::-;20034:20;:40;;;;19807:275:::0;:::o;3879:492::-;4019:4;4036:36;4046:6;4054:9;4065:6;4036:9;:36::i;:::-;4085:24;4112:11;:19;4124:6;4112:19;;;;;;;;;;;;;;;:33;4132:12;:10;:12::i;:::-;4112:33;;;;;;;;;;;;;;;;4085:60;;4184:6;4164:16;:26;;4156:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4271:57;4280:6;4288:12;:10;:12::i;:::-;4321:6;4302:16;:25;4271:8;:57::i;:::-;4359:4;4352:11;;;3879:492;;;;;:::o;15488:53::-;15534:6;15488:53;:::o;3008:93::-;3066:5;3091:2;3084:9;;3008:93;:::o;4379:215::-;4467:4;4484:80;4493:12;:10;:12::i;:::-;4507:7;4553:10;4516:11;:25;4528:12;:10;:12::i;:::-;4516:25;;;;;;;;;;;;;;;:34;4542:7;4516:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4484:8;:80::i;:::-;4582:4;4575:11;;4379:215;;;;:::o;15385:38::-;;;:::o;15729:33::-;;;;;;;;;;;;;:::o;16365:62::-;;;;;;;;;;;;;;;;;;;;;;:::o;16308:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;22667:124::-;22732:4;22756:18;:27;22775:7;22756:27;;;;;;;;;;;;;;;;;;;;;;;;;22749:34;;22667:124;;;:::o;16027:33::-;;;;:::o;15550:24::-;;;;;;;;;;;;;:::o;15992:28::-;;;;:::o;15809:31::-;;;;;;;;;;;;;:::o;3225:127::-;3299:7;3326:9;:18;3336:7;3326:18;;;;;;;;;;;;;;;;3319:25;;3225:127;;;:::o;914:103::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;979:30:::1;1006:1;979:18;:30::i;:::-;914:103::o:0;20354:166::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20508:4:::1;20467:30;:38;20498:6;20467:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;20354:166:::0;;:::o;20753:413::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20925:15:::1;20905:17;:35;;;;20969:13;20951:15;:31;;;;21005:7;20993:9;:19;;;;21078:9;;21060:15;;21040:17;;:35;;;;:::i;:::-;:47;;;;:::i;:::-;21025:12;:62;;;;21122:2;21106:12;;:18;;21098:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20753:413:::0;;;:::o;20528:109::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20624:5:::1;20605:11;:16;20617:3;20605:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20528:109:::0;;:::o;19120:112::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19191:4:::1;19175:13;;:20;;;;;;;;;;;;;;;;;;19220:4;19206:11;;:18;;;;;;;;;;;;;;;;;;19120:112::o:0;691:87::-;737:7;764:6;;;;;;;;;;;757:13;;691:87;:::o;15581:24::-;;;;;;;;;;;;;:::o;20645:100::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20730:7:::1;20716:11;;:21;;;;;;;;;;;;;;;;;;20645:100:::0;:::o;2896:104::-;2952:13;2985:7;2978:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2896:104;:::o;21793:308::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21937:13:::1;21929:21;;:4;:21;;::::0;21907:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22052:41;22081:4;22087:5;22052:28;:41::i;:::-;21793:308:::0;;:::o;15959:24::-;;;;:::o;16221:27::-;;;;:::o;16105:25::-;;;;:::o;4602:413::-;4695:4;4712:24;4739:11;:25;4751:12;:10;:12::i;:::-;4739:25;;;;;;;;;;;;;;;:34;4765:7;4739:34;;;;;;;;;;;;;;;;4712:61;;4812:15;4792:16;:35;;4784:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4905:67;4914:12;:10;:12::i;:::-;4928:7;4956:15;4937:16;:34;4905:8;:67::i;:::-;5003:4;4996:11;;;4602:413;;;;:::o;3360:175::-;3446:4;3463:42;3473:12;:10;:12::i;:::-;3487:9;3498:6;3463:9;:42::i;:::-;3523:4;3516:11;;3360:175;;;;:::o;16434:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15769:33::-;;;;;;;;;;;;;:::o;21604:181::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21719:8:::1;21689:18;:27;21708:7;21689:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;21759:7;21743:34;;;21768:8;21743:34;;;;;;:::i;:::-;;;;;;;;21604:181:::0;;:::o;21174:422::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21348:15:::1;21327:18;:36;;;;21393:13;21374:16;:32;;;;21430:7;21417:10;:20;;;;21506:10;;21487:16;;21466:18;;:37;;;;:::i;:::-;:50;;;;:::i;:::-;21450:13;:66;;;;21552:2;21535:13;;:19;;21527:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21174:422:::0;;;:::o;20090:256::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20230:4:::1;20222;20217:1;20201:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20200:26;;;;:::i;:::-;20199:35;;;;:::i;:::-;20189:6;:45;;20167:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;20331:6;20321;:17;;;;:::i;:::-;20309:9;:29;;;;20090:256:::0;:::o;15614:35::-;;;;:::o;16139:::-;;;;:::o;19302:497::-;19410:4;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19489:6:::1;19484:1;19468:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19467:28;;;;:::i;:::-;19454:9;:41;;19432:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19644:4;19639:1;19623:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19622:26;;;;:::i;:::-;19609:9;:39;;19587:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19760:9;19739:18;:30;;;;19787:4;19780:11;;19302:497:::0;;;:::o;15849:27::-;;;;:::o;3543:151::-;3632:7;3659:11;:18;3671:5;3659:18;;;;;;;;;;;;;;;:27;3678:7;3659:27;;;;;;;;;;;;;;;;3652:34;;3543:151;;;;:::o;15656:33::-;;;;:::o;15922:30::-;;;;:::o;1025:201::-;837:12;:10;:12::i;:::-;826:23;;:7;:5;:7::i;:::-;:23;;;818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1134:1:::1;1114:22;;:8;:22;;::::0;1106:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1190:28;1209:8;1190:18;:28::i;:::-;1025:201:::0;:::o;16067:31::-;;;;:::o;15696:24::-;;;;:::o;237:98::-;290:7;317:10;310:17;;237:98;:::o;6770:380::-;6923:1;6906:19;;:5;:19;;;6898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7004:1;6985:21;;:7;:21;;;6977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7088:6;7058:11;:18;7070:5;7058:18;;;;;;;;;;;;;;;:27;7077:7;7058:27;;;;;;;;;;;;;;;:36;;;;7126:7;7110:32;;7119:5;7110:32;;;7135:6;7110:32;;;;;;:::i;:::-;;;;;;;;6770:380;;;:::o;22799:4223::-;22947:1;22931:18;;:4;:18;;;22923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23024:1;23010:16;;:2;:16;;;23002:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23102:11;:17;23114:4;23102:17;;;;;;;;;;;;;;;;;;;;;;;;;23101:18;:38;;;;;23124:11;:15;23136:2;23124:15;;;;;;;;;;;;;;;;;;;;;;;;;23123:16;23101:38;23079:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:1;23210:6;:11;23206:93;;23238:28;23254:4;23260:2;23264:1;23238:15;:28::i;:::-;23281:7;;23206:93;23316:13;;;;;;;;;;;23311:1651;;23376:7;:5;:7::i;:::-;23368:15;;:4;:15;;;;:49;;;;;23410:7;:5;:7::i;:::-;23404:13;;:2;:13;;;;23368:49;:86;;;;;23452:1;23438:16;;:2;:16;;;;23368:86;:128;;;;;23489:6;23475:21;;:2;:21;;;;23368:128;:158;;;;;23518:8;;;;;;;;;;;23517:9;23368:158;23346:1605;;;23610:18;:24;23629:4;23610:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;23638:18;:22;23657:2;23638:22;;;;;;;;;;;;;;;;;;;;;;;;;23610:50;23580:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;23816:25;:31;23842:4;23816:31;;;;;;;;;;;;;;;;;;;;;;;;;:91;;;;;23873:30;:34;23904:2;23873:34;;;;;;;;;;;;;;;;;;;;;;;;;23872:35;23816:91;23790:1146;;;23994:20;;23984:6;:30;;23950:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24202:9;;24185:13;24195:2;24185:9;:13::i;:::-;24176:6;:22;;;;:::i;:::-;:35;;24142:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23790:1146;;;24382:25;:29;24408:2;24382:29;;;;;;;;;;;;;;;;;;;;;;;;;:91;;;;;24437:30;:36;24468:4;24437:36;;;;;;;;;;;;;;;;;;;;;;;;;24436:37;24382:91;24356:580;;;24560:20;;24550:6;:30;;24516:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24356:580;;;24717:30;:34;24748:2;24717:34;;;;;;;;;;;;;;;;;;;;;;;;;24712:224;;24836:9;;24819:13;24829:2;24819:9;:13::i;:::-;24810:6;:22;;;;:::i;:::-;:35;;24776:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24712:224;24356:580;23790:1146;23346:1605;23311:1651;24974:28;25005:24;25023:4;25005:9;:24::i;:::-;24974:55;;25040:12;25079:18;;25055:20;:42;;25040:57;;25128:7;:35;;;;;25152:11;;;;;;;;;;;25128:35;:61;;;;;25181:8;;;;;;;;;;;25180:9;25128:61;:110;;;;;25207:25;:31;25233:4;25207:31;;;;;;;;;;;;;;;;;;;;;;;;;25206:32;25128:110;:152;;;;;25256:18;:24;25275:4;25256:24;;;;;;;;;;;;;;;;;;;;;;;;;25255:25;25128:152;:192;;;;;25298:18;:22;25317:2;25298:22;;;;;;;;;;;;;;;;;;;;;;;;;25297:23;25128:192;25110:382;;;25378:4;25367:8;;:15;;;;;;;;;;;;;;;;;;25417:10;:8;:10::i;:::-;25475:5;25464:8;;:16;;;;;;;;;;;;;;;;;;25110:382;25523:8;;;;;;;;;;;25522:9;:55;;;;;25548:25;:29;25574:2;25548:29;;;;;;;;;;;;;;;;;;;;;;;;;25522:55;:97;;;;;25595:18;:24;25614:4;25595:24;;;;;;;;;;;;;;;;;;;;;;;;;25594:25;25522:97;25504:139;25655:12;25671:8;;;;;;;;;;;25670:9;25655:24;;25781:18;:24;25800:4;25781:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25809:18;:22;25828:2;25809:22;;;;;;;;;;;;;;;;;;;;;;;;;25781:50;25777:98;;;25858:5;25848:15;;25777:98;25887:12;25992:7;25988:981;;;26044:25;:29;26070:2;26044:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26093:1;26077:13;;:17;26044:50;26040:780;;;26122:34;26152:3;26122:25;26133:13;;26122:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26115:41;;26227:13;;26207:16;;26200:4;:23;;;;:::i;:::-;26199:41;;;;:::i;:::-;26177:18;;:63;;;;;;;:::i;:::-;;;;;;;;26313:13;;26291:18;;26284:4;:25;;;;:::i;:::-;26283:43;;;;:::i;:::-;26259:20;;:67;;;;;;;:::i;:::-;;;;;;;;26383:13;;26369:10;;26362:4;:17;;;;:::i;:::-;26361:35;;;;:::i;:::-;26345:12;;:51;;;;;;;:::i;:::-;;;;;;;;26040:780;;;26458:25;:31;26484:4;26458:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26508:1;26493:12;;:16;26458:51;26454:366;;;26537:33;26566:3;26537:24;26548:12;;26537:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26530:40;;26640:12;;26621:15;;26614:4;:22;;;;:::i;:::-;26613:39;;;;:::i;:::-;26591:18;;:61;;;;;;;:::i;:::-;;;;;;;;26724:12;;26703:17;;26696:4;:24;;;;:::i;:::-;26695:41;;;;:::i;:::-;26671:20;;:65;;;;;;;:::i;:::-;;;;;;;;26792:12;;26779:9;;26772:4;:16;;;;:::i;:::-;26771:33;;;;:::i;:::-;26755:12;;:49;;;;;;;:::i;:::-;;;;;;;;26454:366;26040:780;26847:1;26840:4;:8;26836:91;;;26869:42;26885:4;26899;26906;26869:15;:42::i;:::-;26836:91;26953:4;26943:14;;;;;:::i;:::-;;;25988:981;26981:33;26997:4;27003:2;27007:6;26981:15;:33::i;:::-;22912:4110;;;;22799:4223;;;;:::o;1234:191::-;1308:16;1327:6;;;;;;;;;;;1308:25;;1353:8;1344:6;;:17;;;;;;;;;;;;;;;;;;1408:8;1377:40;;1398:8;1377:40;;;;;;;;;;;;1297:128;1234:191;:::o;22109:188::-;22226:5;22192:25;:31;22218:4;22192:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22283:5;22249:40;;22277:4;22249:40;;;;;;;;;;;;22109:188;;:::o;5023:733::-;5181:1;5163:20;;:6;:20;;;5155:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5265:1;5244:23;;:9;:23;;;5236:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5320:47;5341:6;5349:9;5360:6;5320:20;:47::i;:::-;5380:21;5404:9;:17;5414:6;5404:17;;;;;;;;;;;;;;;;5380:41;;5457:6;5440:13;:23;;5432:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5578:6;5562:13;:22;5542:9;:17;5552:6;5542:17;;;;;;;;;;;;;;;:42;;;;5630:6;5606:9;:20;5616:9;5606:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5671:9;5654:35;;5663:6;5654:35;;;5682:6;5654:35;;;;;;:::i;:::-;;;;;;;;5702:46;5722:6;5730:9;5741:6;5702:19;:46::i;:::-;5144:612;5023:733;;;:::o;27887:1688::-;27926:23;27952:24;27970:4;27952:9;:24::i;:::-;27926:50;;27987:25;28085:12;;28049:20;;28015:18;;:54;;;;:::i;:::-;:82;;;;:::i;:::-;27987:110;;28110:12;28156:1;28137:15;:20;:46;;;;28182:1;28161:17;:22;28137:46;28133:85;;;28200:7;;;;;28133:85;28273:2;28252:18;;:23;;;;:::i;:::-;28234:15;:41;28230:115;;;28331:2;28310:18;;:23;;;;:::i;:::-;28292:41;;28230:115;28406:23;28493:1;28473:17;28451:18;;28433:15;:36;;;;:::i;:::-;28432:58;;;;:::i;:::-;:62;;;;:::i;:::-;28406:88;;28505:26;28534:36;28554:15;28534;:19;;:36;;;;:::i;:::-;28505:65;;28581:25;28609:21;28581:49;;28643:36;28660:18;28643:16;:36::i;:::-;28692:18;28713:44;28739:17;28713:21;:25;;:44;;;;:::i;:::-;28692:65;;28768:17;28788:59;28829:17;28788:36;28803:20;;28788:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;28768:79;;28858:17;28878:51;28911:17;28878:28;28893:12;;28878:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28858:71;;28940:23;28991:9;28979;28966:10;:22;;;;:::i;:::-;:34;;;;:::i;:::-;28940:60;;29034:1;29013:18;:22;;;;29069:1;29046:20;:24;;;;29096:1;29081:12;:16;;;;29132:9;;;;;;;;;;;29124:23;;29155:9;29124:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29110:59;;;;;29204:1;29186:15;:19;:42;;;;;29227:1;29209:15;:19;29186:42;29182:278;;;29245:46;29258:15;29275;29245:12;:46::i;:::-;29311:137;29344:18;29381:15;29415:18;;29311:137;;;;;;;;:::i;:::-;;;;;;;;29182:278;29494:9;;;;;;;;;;;29486:23;;29531:21;29486:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29472:95;;;;;27915:1660;;;;;;;;;;27887:1688;:::o;9011:98::-;9069:7;9100:1;9096;:5;;;;:::i;:::-;9089:12;;9011:98;;;;:::o;9117:::-;9175:7;9206:1;9202;:5;;;;:::i;:::-;9195:12;;9117:98;;;;:::o;7158:125::-;;;;:::o;7291:124::-;;;;:::o;8905:98::-;8963:7;8994:1;8990;:5;;;;:::i;:::-;8983:12;;8905:98;;;;:::o;27030:474::-;27096:21;27134:1;27120:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27096:40;;27165:4;27147;27152:1;27147:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27191:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27181:4;27186:1;27181:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27226:62;27243:4;27258:15;27276:11;27226:8;:62::i;:::-;27299:15;:66;;;27380:11;27406:1;27423:4;27450;27470:15;27299:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27085:419;27030:474;:::o;27512:367::-;27593:62;27610:4;27625:15;27643:11;27593:8;:62::i;:::-;27668:15;:31;;;27707:9;27740:4;27760:11;27786:1;27803;15534:6;27845:15;27668:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27512:367;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:60::-;3719:3;3740:5;3733:12;;3691:60;;;:::o;3757:142::-;3807:9;3840:53;3858:34;3867:24;3885:5;3867:24;:::i;:::-;3858:34;:::i;:::-;3840:53;:::i;:::-;3827:66;;3757:142;;;:::o;3905:126::-;3955:9;3988:37;4019:5;3988:37;:::i;:::-;3975:50;;3905:126;;;:::o;4037:153::-;4114:9;4147:37;4178:5;4147:37;:::i;:::-;4134:50;;4037:153;;;:::o;4196:185::-;4310:64;4368:5;4310:64;:::i;:::-;4305:3;4298:77;4196:185;;:::o;4387:276::-;4507:4;4545:2;4534:9;4530:18;4522:26;;4558:98;4653:1;4642:9;4638:17;4629:6;4558:98;:::i;:::-;4387:276;;;;:::o;4669:329::-;4728:6;4777:2;4765:9;4756:7;4752:23;4748:32;4745:119;;;4783:79;;:::i;:::-;4745:119;4903:1;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4874:117;4669:329;;;;:::o;5004:::-;5063:6;5112:2;5100:9;5091:7;5087:23;5083:32;5080:119;;;5118:79;;:::i;:::-;5080:119;5238:1;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5209:117;5004:329;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:118::-;6051:24;6069:5;6051:24;:::i;:::-;6046:3;6039:37;5964:118;;:::o;6088:222::-;6181:4;6219:2;6208:9;6204:18;6196:26;;6232:71;6300:1;6289:9;6285:17;6276:6;6232:71;:::i;:::-;6088:222;;;;:::o;6316:86::-;6351:7;6391:4;6384:5;6380:16;6369:27;;6316:86;;;:::o;6408:112::-;6491:22;6507:5;6491:22;:::i;:::-;6486:3;6479:35;6408:112;;:::o;6526:214::-;6615:4;6653:2;6642:9;6638:18;6630:26;;6666:67;6730:1;6719:9;6715:17;6706:6;6666:67;:::i;:::-;6526:214;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:619::-;7558:6;7566;7574;7623:2;7611:9;7602:7;7598:23;7594:32;7591:119;;;7629:79;;:::i;:::-;7591:119;7749:1;7774:53;7819:7;7810:6;7799:9;7795:22;7774:53;:::i;:::-;7764:63;;7720:117;7876:2;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7847:118;8004:2;8030:53;8075:7;8066:6;8055:9;8051:22;8030:53;:::i;:::-;8020:63;;7975:118;7481:619;;;;;:::o;8106:323::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8308:114;8106:323;;;;:::o;8435:474::-;8503:6;8511;8560:2;8548:9;8539:7;8535:23;8531:32;8528:119;;;8566:79;;:::i;:::-;8528:119;8686:1;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8657:117;8813:2;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8784:118;8435:474;;;;;:::o;8915:180::-;8963:77;8960:1;8953:88;9060:4;9057:1;9050:15;9084:4;9081:1;9074:15;9101:320;9145:6;9182:1;9176:4;9172:12;9162:22;;9229:1;9223:4;9219:12;9250:18;9240:81;;9306:4;9298:6;9294:17;9284:27;;9240:81;9368:2;9360:6;9357:14;9337:18;9334:38;9331:84;;9387:18;;:::i;:::-;9331:84;9152:269;9101:320;;;:::o;9427:182::-;9567:34;9563:1;9555:6;9551:14;9544:58;9427:182;:::o;9615:366::-;9757:3;9778:67;9842:2;9837:3;9778:67;:::i;:::-;9771:74;;9854:93;9943:3;9854:93;:::i;:::-;9972:2;9967:3;9963:12;9956:19;;9615:366;;;:::o;9987:419::-;10153:4;10191:2;10180:9;10176:18;10168:26;;10240:9;10234:4;10230:20;10226:1;10215:9;10211:17;10204:47;10268:131;10394:4;10268:131;:::i;:::-;10260:139;;9987:419;;;:::o;10412:180::-;10460:77;10457:1;10450:88;10557:4;10554:1;10547:15;10581:4;10578:1;10571:15;10598:410;10638:7;10661:20;10679:1;10661:20;:::i;:::-;10656:25;;10695:20;10713:1;10695:20;:::i;:::-;10690:25;;10750:1;10747;10743:9;10772:30;10790:11;10772:30;:::i;:::-;10761:41;;10951:1;10942:7;10938:15;10935:1;10932:22;10912:1;10905:9;10885:83;10862:139;;10981:18;;:::i;:::-;10862:139;10646:362;10598:410;;;;:::o;11014:180::-;11062:77;11059:1;11052:88;11159:4;11156:1;11149:15;11183:4;11180:1;11173:15;11200:185;11240:1;11257:20;11275:1;11257:20;:::i;:::-;11252:25;;11291:20;11309:1;11291:20;:::i;:::-;11286:25;;11330:1;11320:35;;11335:18;;:::i;:::-;11320:35;11377:1;11374;11370:9;11365:14;;11200:185;;;;:::o;11391:234::-;11531:34;11527:1;11519:6;11515:14;11508:58;11600:17;11595:2;11587:6;11583:15;11576:42;11391:234;:::o;11631:366::-;11773:3;11794:67;11858:2;11853:3;11794:67;:::i;:::-;11787:74;;11870:93;11959:3;11870:93;:::i;:::-;11988:2;11983:3;11979:12;11972:19;;11631:366;;;:::o;12003:419::-;12169:4;12207:2;12196:9;12192:18;12184:26;;12256:9;12250:4;12246:20;12242:1;12231:9;12227:17;12220:47;12284:131;12410:4;12284:131;:::i;:::-;12276:139;;12003:419;;;:::o;12428:227::-;12568:34;12564:1;12556:6;12552:14;12545:58;12637:10;12632:2;12624:6;12620:15;12613:35;12428:227;:::o;12661:366::-;12803:3;12824:67;12888:2;12883:3;12824:67;:::i;:::-;12817:74;;12900:93;12989:3;12900:93;:::i;:::-;13018:2;13013:3;13009:12;13002:19;;12661:366;;;:::o;13033:419::-;13199:4;13237:2;13226:9;13222:18;13214:26;;13286:9;13280:4;13276:20;13272:1;13261:9;13257:17;13250:47;13314:131;13440:4;13314:131;:::i;:::-;13306:139;;13033:419;;;:::o;13458:191::-;13498:3;13517:20;13535:1;13517:20;:::i;:::-;13512:25;;13551:20;13569:1;13551:20;:::i;:::-;13546:25;;13594:1;13591;13587:9;13580:16;;13615:3;13612:1;13609:10;13606:36;;;13622:18;;:::i;:::-;13606:36;13458:191;;;;:::o;13655:179::-;13795:31;13791:1;13783:6;13779:14;13772:55;13655:179;:::o;13840:366::-;13982:3;14003:67;14067:2;14062:3;14003:67;:::i;:::-;13996:74;;14079:93;14168:3;14079:93;:::i;:::-;14197:2;14192:3;14188:12;14181:19;;13840:366;;;:::o;14212:419::-;14378:4;14416:2;14405:9;14401:18;14393:26;;14465:9;14459:4;14455:20;14451:1;14440:9;14436:17;14429:47;14493:131;14619:4;14493:131;:::i;:::-;14485:139;;14212:419;;;:::o;14637:248::-;14777:34;14773:1;14765:6;14761:14;14754:58;14846:31;14841:2;14833:6;14829:15;14822:56;14637:248;:::o;14891:366::-;15033:3;15054:67;15118:2;15113:3;15054:67;:::i;:::-;15047:74;;15130:93;15219:3;15130:93;:::i;:::-;15248:2;15243:3;15239:12;15232:19;;14891:366;;;:::o;15263:419::-;15429:4;15467:2;15456:9;15452:18;15444:26;;15516:9;15510:4;15506:20;15502:1;15491:9;15487:17;15480:47;15544:131;15670:4;15544:131;:::i;:::-;15536:139;;15263:419;;;:::o;15688:224::-;15828:34;15824:1;15816:6;15812:14;15805:58;15897:7;15892:2;15884:6;15880:15;15873:32;15688:224;:::o;15918:366::-;16060:3;16081:67;16145:2;16140:3;16081:67;:::i;:::-;16074:74;;16157:93;16246:3;16157:93;:::i;:::-;16275:2;16270:3;16266:12;16259:19;;15918:366;;;:::o;16290:419::-;16456:4;16494:2;16483:9;16479:18;16471:26;;16543:9;16537:4;16533:20;16529:1;16518:9;16514:17;16507:47;16571:131;16697:4;16571:131;:::i;:::-;16563:139;;16290:419;;;:::o;16715:179::-;16855:31;16851:1;16843:6;16839:14;16832:55;16715:179;:::o;16900:366::-;17042:3;17063:67;17127:2;17122:3;17063:67;:::i;:::-;17056:74;;17139:93;17228:3;17139:93;:::i;:::-;17257:2;17252:3;17248:12;17241:19;;16900:366;;;:::o;17272:419::-;17438:4;17476:2;17465:9;17461:18;17453:26;;17525:9;17519:4;17515:20;17511:1;17500:9;17496:17;17489:47;17553:131;17679:4;17553:131;:::i;:::-;17545:139;;17272:419;;;:::o;17697:223::-;17837:34;17833:1;17825:6;17821:14;17814:58;17906:6;17901:2;17893:6;17889:15;17882:31;17697:223;:::o;17926:366::-;18068:3;18089:67;18153:2;18148:3;18089:67;:::i;:::-;18082:74;;18165:93;18254:3;18165:93;:::i;:::-;18283:2;18278:3;18274:12;18267:19;;17926:366;;;:::o;18298:419::-;18464:4;18502:2;18491:9;18487:18;18479:26;;18551:9;18545:4;18541:20;18537:1;18526:9;18522:17;18515:47;18579:131;18705:4;18579:131;:::i;:::-;18571:139;;18298:419;;;:::o;18723:240::-;18863:34;18859:1;18851:6;18847:14;18840:58;18932:23;18927:2;18919:6;18915:15;18908:48;18723:240;:::o;18969:366::-;19111:3;19132:67;19196:2;19191:3;19132:67;:::i;:::-;19125:74;;19208:93;19297:3;19208:93;:::i;:::-;19326:2;19321:3;19317:12;19310:19;;18969:366;;;:::o;19341:419::-;19507:4;19545:2;19534:9;19530:18;19522:26;;19594:9;19588:4;19584:20;19580:1;19569:9;19565:17;19558:47;19622:131;19748:4;19622:131;:::i;:::-;19614:139;;19341:419;;;:::o;19766:239::-;19906:34;19902:1;19894:6;19890:14;19883:58;19975:22;19970:2;19962:6;19958:15;19951:47;19766:239;:::o;20011:366::-;20153:3;20174:67;20238:2;20233:3;20174:67;:::i;:::-;20167:74;;20250:93;20339:3;20250:93;:::i;:::-;20368:2;20363:3;20359:12;20352:19;;20011:366;;;:::o;20383:419::-;20549:4;20587:2;20576:9;20572:18;20564:26;;20636:9;20630:4;20626:20;20622:1;20611:9;20607:17;20600:47;20664:131;20790:4;20664:131;:::i;:::-;20656:139;;20383:419;;;:::o;20808:225::-;20948:34;20944:1;20936:6;20932:14;20925:58;21017:8;21012:2;21004:6;21000:15;20993:33;20808:225;:::o;21039:366::-;21181:3;21202:67;21266:2;21261:3;21202:67;:::i;:::-;21195:74;;21278:93;21367:3;21278:93;:::i;:::-;21396:2;21391:3;21387:12;21380:19;;21039:366;;;:::o;21411:419::-;21577:4;21615:2;21604:9;21600:18;21592:26;;21664:9;21658:4;21654:20;21650:1;21639:9;21635:17;21628:47;21692:131;21818:4;21692:131;:::i;:::-;21684:139;;21411:419;;;:::o;21836:223::-;21976:34;21972:1;21964:6;21960:14;21953:58;22045:6;22040:2;22032:6;22028:15;22021:31;21836:223;:::o;22065:366::-;22207:3;22228:67;22292:2;22287:3;22228:67;:::i;:::-;22221:74;;22304:93;22393:3;22304:93;:::i;:::-;22422:2;22417:3;22413:12;22406:19;;22065:366;;;:::o;22437:419::-;22603:4;22641:2;22630:9;22626:18;22618:26;;22690:9;22684:4;22680:20;22676:1;22665:9;22661:17;22654:47;22718:131;22844:4;22718:131;:::i;:::-;22710:139;;22437:419;;;:::o;22862:221::-;23002:34;22998:1;22990:6;22986:14;22979:58;23071:4;23066:2;23058:6;23054:15;23047:29;22862:221;:::o;23089:366::-;23231:3;23252:67;23316:2;23311:3;23252:67;:::i;:::-;23245:74;;23328:93;23417:3;23328:93;:::i;:::-;23446:2;23441:3;23437:12;23430:19;;23089:366;;;:::o;23461:419::-;23627:4;23665:2;23654:9;23650:18;23642:26;;23714:9;23708:4;23704:20;23700:1;23689:9;23685:17;23678:47;23742:131;23868:4;23742:131;:::i;:::-;23734:139;;23461:419;;;:::o;23886:224::-;24026:34;24022:1;24014:6;24010:14;24003:58;24095:7;24090:2;24082:6;24078:15;24071:32;23886:224;:::o;24116:366::-;24258:3;24279:67;24343:2;24338:3;24279:67;:::i;:::-;24272:74;;24355:93;24444:3;24355:93;:::i;:::-;24473:2;24468:3;24464:12;24457:19;;24116:366;;;:::o;24488:419::-;24654:4;24692:2;24681:9;24677:18;24669:26;;24741:9;24735:4;24731:20;24727:1;24716:9;24712:17;24705:47;24769:131;24895:4;24769:131;:::i;:::-;24761:139;;24488:419;;;:::o;24913:222::-;25053:34;25049:1;25041:6;25037:14;25030:58;25122:5;25117:2;25109:6;25105:15;25098:30;24913:222;:::o;25141:366::-;25283:3;25304:67;25368:2;25363:3;25304:67;:::i;:::-;25297:74;;25380:93;25469:3;25380:93;:::i;:::-;25498:2;25493:3;25489:12;25482:19;;25141:366;;;:::o;25513:419::-;25679:4;25717:2;25706:9;25702:18;25694:26;;25766:9;25760:4;25756:20;25752:1;25741:9;25737:17;25730:47;25794:131;25920:4;25794:131;:::i;:::-;25786:139;;25513:419;;;:::o;25938:176::-;26078:28;26074:1;26066:6;26062:14;26055:52;25938:176;:::o;26120:366::-;26262:3;26283:67;26347:2;26342:3;26283:67;:::i;:::-;26276:74;;26359:93;26448:3;26359:93;:::i;:::-;26477:2;26472:3;26468:12;26461:19;;26120:366;;;:::o;26492:419::-;26658:4;26696:2;26685:9;26681:18;26673:26;;26745:9;26739:4;26735:20;26731:1;26720:9;26716:17;26709:47;26773:131;26899:4;26773:131;:::i;:::-;26765:139;;26492:419;;;:::o;26917:172::-;27057:24;27053:1;27045:6;27041:14;27034:48;26917:172;:::o;27095:366::-;27237:3;27258:67;27322:2;27317:3;27258:67;:::i;:::-;27251:74;;27334:93;27423:3;27334:93;:::i;:::-;27452:2;27447:3;27443:12;27436:19;;27095:366;;;:::o;27467:419::-;27633:4;27671:2;27660:9;27656:18;27648:26;;27720:9;27714:4;27710:20;27706:1;27695:9;27691:17;27684:47;27748:131;27874:4;27748:131;:::i;:::-;27740:139;;27467:419;;;:::o;27892:240::-;28032:34;28028:1;28020:6;28016:14;28009:58;28101:23;28096:2;28088:6;28084:15;28077:48;27892:240;:::o;28138:366::-;28280:3;28301:67;28365:2;28360:3;28301:67;:::i;:::-;28294:74;;28377:93;28466:3;28377:93;:::i;:::-;28495:2;28490:3;28486:12;28479:19;;28138:366;;;:::o;28510:419::-;28676:4;28714:2;28703:9;28699:18;28691:26;;28763:9;28757:4;28753:20;28749:1;28738:9;28734:17;28727:47;28791:131;28917:4;28791:131;:::i;:::-;28783:139;;28510:419;;;:::o;28935:169::-;29075:21;29071:1;29063:6;29059:14;29052:45;28935:169;:::o;29110:366::-;29252:3;29273:67;29337:2;29332:3;29273:67;:::i;:::-;29266:74;;29349:93;29438:3;29349:93;:::i;:::-;29467:2;29462:3;29458:12;29451:19;;29110:366;;;:::o;29482:419::-;29648:4;29686:2;29675:9;29671:18;29663:26;;29735:9;29729:4;29725:20;29721:1;29710:9;29706:17;29699:47;29763:131;29889:4;29763:131;:::i;:::-;29755:139;;29482:419;;;:::o;29907:241::-;30047:34;30043:1;30035:6;30031:14;30024:58;30116:24;30111:2;30103:6;30099:15;30092:49;29907:241;:::o;30154:366::-;30296:3;30317:67;30381:2;30376:3;30317:67;:::i;:::-;30310:74;;30393:93;30482:3;30393:93;:::i;:::-;30511:2;30506:3;30502:12;30495:19;;30154:366;;;:::o;30526:419::-;30692:4;30730:2;30719:9;30715:18;30707:26;;30779:9;30773:4;30769:20;30765:1;30754:9;30750:17;30743:47;30807:131;30933:4;30807:131;:::i;:::-;30799:139;;30526:419;;;:::o;30951:194::-;30991:4;31011:20;31029:1;31011:20;:::i;:::-;31006:25;;31045:20;31063:1;31045:20;:::i;:::-;31040:25;;31089:1;31086;31082:9;31074:17;;31113:1;31107:4;31104:11;31101:37;;;31118:18;;:::i;:::-;31101:37;30951:194;;;;:::o;31151:225::-;31291:34;31287:1;31279:6;31275:14;31268:58;31360:8;31355:2;31347:6;31343:15;31336:33;31151:225;:::o;31382:366::-;31524:3;31545:67;31609:2;31604:3;31545:67;:::i;:::-;31538:74;;31621:93;31710:3;31621:93;:::i;:::-;31739:2;31734:3;31730:12;31723:19;;31382:366;;;:::o;31754:419::-;31920:4;31958:2;31947:9;31943:18;31935:26;;32007:9;32001:4;31997:20;31993:1;31982:9;31978:17;31971:47;32035:131;32161:4;32035:131;:::i;:::-;32027:139;;31754:419;;;:::o;32179:147::-;32280:11;32317:3;32302:18;;32179:147;;;;:::o;32332:114::-;;:::o;32452:398::-;32611:3;32632:83;32713:1;32708:3;32632:83;:::i;:::-;32625:90;;32724:93;32813:3;32724:93;:::i;:::-;32842:1;32837:3;32833:11;32826:18;;32452:398;;;:::o;32856:379::-;33040:3;33062:147;33205:3;33062:147;:::i;:::-;33055:154;;33226:3;33219:10;;32856:379;;;:::o;33241:442::-;33390:4;33428:2;33417:9;33413:18;33405:26;;33441:71;33509:1;33498:9;33494:17;33485:6;33441:71;:::i;:::-;33522:72;33590:2;33579:9;33575:18;33566:6;33522:72;:::i;:::-;33604;33672:2;33661:9;33657:18;33648:6;33604:72;:::i;:::-;33241:442;;;;;;:::o;33689:180::-;33737:77;33734:1;33727:88;33834:4;33831:1;33824:15;33858:4;33855:1;33848:15;33875:180;33923:77;33920:1;33913:88;34020:4;34017:1;34010:15;34044:4;34041:1;34034:15;34061:143;34118:5;34149:6;34143:13;34134:22;;34165:33;34192:5;34165:33;:::i;:::-;34061:143;;;;:::o;34210:351::-;34280:6;34329:2;34317:9;34308:7;34304:23;34300:32;34297:119;;;34335:79;;:::i;:::-;34297:119;34455:1;34480:64;34536:7;34527:6;34516:9;34512:22;34480:64;:::i;:::-;34470:74;;34426:128;34210:351;;;;:::o;34567:85::-;34612:7;34641:5;34630:16;;34567:85;;;:::o;34658:158::-;34716:9;34749:61;34767:42;34776:32;34802:5;34776:32;:::i;:::-;34767:42;:::i;:::-;34749:61;:::i;:::-;34736:74;;34658:158;;;:::o;34822:147::-;34917:45;34956:5;34917:45;:::i;:::-;34912:3;34905:58;34822:147;;:::o;34975:114::-;35042:6;35076:5;35070:12;35060:22;;34975:114;;;:::o;35095:184::-;35194:11;35228:6;35223:3;35216:19;35268:4;35263:3;35259:14;35244:29;;35095:184;;;;:::o;35285:132::-;35352:4;35375:3;35367:11;;35405:4;35400:3;35396:14;35388:22;;35285:132;;;:::o;35423:108::-;35500:24;35518:5;35500:24;:::i;:::-;35495:3;35488:37;35423:108;;:::o;35537:179::-;35606:10;35627:46;35669:3;35661:6;35627:46;:::i;:::-;35705:4;35700:3;35696:14;35682:28;;35537:179;;;;:::o;35722:113::-;35792:4;35824;35819:3;35815:14;35807:22;;35722:113;;;:::o;35871:732::-;35990:3;36019:54;36067:5;36019:54;:::i;:::-;36089:86;36168:6;36163:3;36089:86;:::i;:::-;36082:93;;36199:56;36249:5;36199:56;:::i;:::-;36278:7;36309:1;36294:284;36319:6;36316:1;36313:13;36294:284;;;36395:6;36389:13;36422:63;36481:3;36466:13;36422:63;:::i;:::-;36415:70;;36508:60;36561:6;36508:60;:::i;:::-;36498:70;;36354:224;36341:1;36338;36334:9;36329:14;;36294:284;;;36298:14;36594:3;36587:10;;35995:608;;;35871:732;;;;:::o;36609:831::-;36872:4;36910:3;36899:9;36895:19;36887:27;;36924:71;36992:1;36981:9;36977:17;36968:6;36924:71;:::i;:::-;37005:80;37081:2;37070:9;37066:18;37057:6;37005:80;:::i;:::-;37132:9;37126:4;37122:20;37117:2;37106:9;37102:18;37095:48;37160:108;37263:4;37254:6;37160:108;:::i;:::-;37152:116;;37278:72;37346:2;37335:9;37331:18;37322:6;37278:72;:::i;:::-;37360:73;37428:3;37417:9;37413:19;37404:6;37360:73;:::i;:::-;36609:831;;;;;;;;:::o;37446:807::-;37695:4;37733:3;37722:9;37718:19;37710:27;;37747:71;37815:1;37804:9;37800:17;37791:6;37747:71;:::i;:::-;37828:72;37896:2;37885:9;37881:18;37872:6;37828:72;:::i;:::-;37910:80;37986:2;37975:9;37971:18;37962:6;37910:80;:::i;:::-;38000;38076:2;38065:9;38061:18;38052:6;38000:80;:::i;:::-;38090:73;38158:3;38147:9;38143:19;38134:6;38090:73;:::i;:::-;38173;38241:3;38230:9;38226:19;38217:6;38173:73;:::i;:::-;37446:807;;;;;;;;;:::o;38259:143::-;38316:5;38347:6;38341:13;38332:22;;38363:33;38390:5;38363:33;:::i;:::-;38259:143;;;;:::o;38408:663::-;38496:6;38504;38512;38561:2;38549:9;38540:7;38536:23;38532:32;38529:119;;;38567:79;;:::i;:::-;38529:119;38687:1;38712:64;38768:7;38759:6;38748:9;38744:22;38712:64;:::i;:::-;38702:74;;38658:128;38825:2;38851:64;38907:7;38898:6;38887:9;38883:22;38851:64;:::i;:::-;38841:74;;38796:129;38964:2;38990:64;39046:7;39037:6;39026:9;39022:22;38990:64;:::i;:::-;38980:74;;38935:129;38408:663;;;;;:::o

Swarm Source

ipfs://cdb5b5ab48529c56c477f576609dd8390db045ae39cddf67810701a565260587

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.