ETH Price: $2,640.30 (+1.29%)

Contract

0xeB696d0A97EFDE00F9E9e9EEA00EF72EeBfE61D7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enable Disable B...208727132024-10-01 19:24:1116 days ago1727810651IN
0xeB696d0A...EeBfE61D7
0 ETH0.0006467622.2663125
Disable Bot Prot...208727062024-10-01 19:22:4716 days ago1727810567IN
0xeB696d0A...EeBfE61D7
0 ETH0.000565921.79757631
Manual Snipe Bot...208727032024-10-01 19:22:1116 days ago1727810531IN
0xeB696d0A...EeBfE61D7
0 ETH0.0010902322.73084944
Disable Bot Prot...208725852024-10-01 18:58:2316 days ago1727809103IN
0xeB696d0A...EeBfE61D7
0 ETH0.0004954119.08215166
Manual Swap208725562024-10-01 18:52:3516 days ago1727808755IN
0xeB696d0A...EeBfE61D7
0 ETH0.0035264519.99077479
Set Max Wallet A...208725092024-10-01 18:43:1116 days ago1727808191IN
0xeB696d0A...EeBfE61D7
0 ETH0.0006568422.40428732
Disable Bot Prot...208725032024-10-01 18:41:5916 days ago1727808119IN
0xeB696d0A...EeBfE61D7
0 ETH0.000571121.99785791
Disable Bot Prot...208725022024-10-01 18:41:3516 days ago1727808095IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005645421.74524024
Disable Bot Prot...208725012024-10-01 18:41:2316 days ago1727808083IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005428120.90813624
Disable Bot Prot...208725002024-10-01 18:41:1116 days ago1727808071IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005429220.91222396
Disable Bot Prot...208724992024-10-01 18:40:5916 days ago1727808059IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005485321.12833014
Exclude Include ...208724912024-10-01 18:39:2316 days ago1727807963IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005964721.45994393
Disable Bot Prot...208724752024-10-01 18:36:1116 days ago1727807771IN
0xeB696d0A...EeBfE61D7
0 ETH0.0005401220.80453265
Set Tax Fees208724462024-10-01 18:30:2316 days ago1727807423IN
0xeB696d0A...EeBfE61D7
0 ETH0.0006537122.80703755
Set Tax Fees208724442024-10-01 18:29:5916 days ago1727807399IN
0xeB696d0A...EeBfE61D7
0 ETH0.000577821.07912943
Disable Bot Prot...208724112024-10-01 18:23:2316 days ago1727807003IN
0xeB696d0A...EeBfE61D7
0 ETH0.0006081223.42363988
Set Max Wallet A...208723762024-10-01 18:16:2316 days ago1727806583IN
0xeB696d0A...EeBfE61D7
0 ETH0.0008613629.44038715
Approve208718372024-10-01 16:28:2316 days ago1727800103IN
0xeB696d0A...EeBfE61D7
0 ETH0.0014398630.44179471
Approve208718332024-10-01 16:27:3516 days ago1727800055IN
0xeB696d0A...EeBfE61D7
0 ETH0.0023338649.34288107
Open Trading208718312024-10-01 16:27:1116 days ago1727800031IN
0xeB696d0A...EeBfE61D7
0 ETH0.0597440321.02544638
Transfer208712342024-10-01 14:26:4717 days ago1727792807IN
0xeB696d0A...EeBfE61D7
1 ETH0.0006087428.91213042
Approve208712142024-10-01 14:22:4717 days ago1727792567IN
0xeB696d0A...EeBfE61D7
0 ETH0.0014414330.47495782
Approve208712102024-10-01 14:21:5917 days ago1727792519IN
0xeB696d0A...EeBfE61D7
0 ETH0.0014802831.29625947
Approve208712052024-10-01 14:20:4717 days ago1727792447IN
0xeB696d0A...EeBfE61D7
0 ETH0.0014231930.08940325
0x60806040208711962024-10-01 14:18:5917 days ago1727792339IN
 Create: Stealthswap
0 ETH0.1609769425.80858522

Latest 5 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
208725562024-10-01 18:52:3516 days ago1727808755
0xeB696d0A...EeBfE61D7
0.11750802 ETH
208725562024-10-01 18:52:3516 days ago1727808755
0xeB696d0A...EeBfE61D7
0.11750802 ETH
208725562024-10-01 18:52:3516 days ago1727808755
0xeB696d0A...EeBfE61D7
0.23501604 ETH
208718312024-10-01 16:27:1116 days ago1727800031
0xeB696d0A...EeBfE61D7
1 ETH
208711962024-10-01 14:18:5917 days ago1727792339
0xeB696d0A...EeBfE61D7
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Stealthswap

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

/*
Multi-network swap with a built-in mixer, allowing you to send your crypto completely anonymously.

Telegram: https://t.me/StealthSwaps
Website: https://stealthswap.io/
X: https://x.com/SwapStealth

*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
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);
}

library SafeMath {

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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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



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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address token0, address token1) external view returns (address);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}

contract Stealthswap is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    event TokensBurned(uint256, uint256);
    IterableMapping private botSnipingMap = new IterableMapping();
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair = address(0);
    IUniswapV2Pair private v2Pair;
    address private feeOne = 0xb8Bf1769aFF9b949c1755bb9CaFB6634B565c8A7;
    address private feeTwo = 0xb8Bf1769aFF9b949c1755bb9CaFB6634B565c8A7;  
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping(address => bool) private _isExcludedFromFee;
    string private _name = "StealthSwap";
    string private _symbol = "STLTH";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 10_000_000 * 10 ** _decimals;
    uint256 public _maxWalletAmount = 500_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public buyFee = 15;    
    uint256 public sellFee = 20;  
    address public deployer;
    uint256 public ethPriceToSwap = 200000000000000000; 
    bool public isBotProtectionEnabled;
    bool public isBurnEnabled = false;
    uint256 public burnFrequencynMinutes = 60;  
    uint256 public burnRateInBasePoints = 100;  //100 = 1%
    uint256 public tokensBurnedSinceLaunch = 0;
    uint public nextLiquidityBurnTimeStamp;
   
    modifier devOnly() {
        require(deployer == _msgSender() || feeOne == _msgSender() || feeTwo == _msgSender(), "caller is not the owner");
        _;
    }
    constructor () {
         _balances[address(this)] = _tTotal*100/100;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal*100/100);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setTaxFees(uint256 buy, uint256 sell) external onlyOwner {
        buyFee = buy;
        sellFee = sell;
    }

    function disableBotProtectionPermanently() external onlyOwner {
        require(isBotProtectionEnabled,"Bot sniping has already been disabled");
        isBotProtectionEnabled = true;
    }

     function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }
    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

   function setBurnSettings(uint256 frequencyInMinutes, uint256 burnBasePoints) external onlyOwner {
        burnFrequencynMinutes = frequencyInMinutes;
        burnRateInBasePoints = burnBasePoints;
    }

    function burnTokensFromLiquidityPool() private lockTheSwap {
        uint liquidity = balanceOf(marketPair);
        uint tokenBurnAmount = liquidity.div(burnRateInBasePoints);
        if(tokenBurnAmount > 0) {
            //burn tokens from LP and update liquidity pool price
            _burn(marketPair, tokenBurnAmount);
            v2Pair.sync();
            tokensBurnedSinceLaunch = tokensBurnedSinceLaunch.add(tokenBurnAmount);
            nextLiquidityBurnTimeStamp = block.timestamp.add(burnFrequencynMinutes.mul(60));
            emit TokensBurned(tokenBurnAmount, nextLiquidityBurnTimeStamp);
        }
    }

    function enableDisableBurnToken(bool _enabled) public onlyOwner {
        isBurnEnabled = _enabled;
    }

    function burnTokens() external {
        require(block.timestamp >= nextLiquidityBurnTimeStamp, "Next burn time is not due yet, be patient");
        require(isBurnEnabled, "Burning tokens is currently disabled");
        burnTokensFromLiquidityPool();
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");
        _tTotal = _tTotal.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }
    
    function openTrading() external onlyOwner() {
        require(marketPair == address(0),"UniswapV2Pair has already been set");
        _approve(address(this), address(uniswapV2Router), _tTotal);
        marketPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp);
        IERC20(marketPair).approve(address(uniswapV2Router), type(uint).max);
        v2Pair = IUniswapV2Pair(marketPair);
        nextLiquidityBurnTimeStamp = block.timestamp;
        isBotProtectionEnabled = true;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        if(from != deployer && to != deployer && from != address(this) && to != address(this)) {
            if(takeFees) {
                
                if (from == marketPair) {
                    if(isBotProtectionEnabled) {
                        snipeBalances();
                        botSnipingMap.set(to, block.timestamp);
                    } else {
                        taxAmount = amount.mul(buyFee).div(100);
                        uint256 amountToHolder = amount.sub(taxAmount);
                        uint256 holderBalance = balanceOf(to).add(amountToHolder);
                        require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                    }
                }
                if (from != marketPair && to == marketPair) {
                    require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell tokens");        
                    taxAmount = !isBotProtectionEnabled ? amount.mul(sellFee).div(100) : 0;
                    if(block.timestamp >= nextLiquidityBurnTimeStamp && isBurnEnabled) {
                            burnTokensFromLiquidityPool();
                    } else {
                        uint256 contractTokenBalance = balanceOf(address(this));
                        if (contractTokenBalance > 0) {
                            
                                uint256 tokenAmount = getTokenPrice();
                                if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                                    swapTokensForEth(tokenAmount);
                                }
                            }
                        }
                }
                if (from != marketPair && to != marketPair) {
                    uint256 fromBalance = balanceOf(from);
                    uint256 toBalance = balanceOf(to);
                    require(!botWallets[from] && !botWallets[to], "bots are not allowed to transfer tokens");
                    require(fromBalance <= _maxWalletAmount && toBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                }
            }
        }       
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, transferAmount);
    }

    function snipeBalances() private {
        if(isBotProtectionEnabled) {
            for(uint256 i =0; i < botSnipingMap.size(); i++) {
                address holder = botSnipingMap.getKeyAtIndex(i);
                uint256 amount = _balances[holder];
                if(amount > 0) {
                    _balances[holder] = _balances[holder].sub(amount);
                    _balances[address(this)] = _balances[address(this)].add(amount);
                }
                botSnipingMap.remove(holder);
            }
        }
    }

    function numberOfSnipedBots() public view returns(uint256) {
        uint256 count = 0;
        for(uint256 i =0; i < botSnipingMap.size(); i++) {
            address holder = botSnipingMap.getKeyAtIndex(i);
            uint timestamp = botSnipingMap.get(holder);
            if(block.timestamp >=  timestamp) 
                count++;
        }
        return count;
    }

    function manualSnipeBots() external {
        snipeBalances();
    }
    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

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

        uint256 ethBalance = address(this).balance;
        uint256 halfShare = ethBalance.div(2);  
        payable(feeOne).transfer(halfShare);
        payable(feeTwo).transfer(halfShare); 
    }

    function getTokenPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    receive() external payable {}

    function sendEth() external devOnly {
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
    }

    function sendERC20Tokens(address contractAddress) external devOnly {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(deployer, balance);
    }
}


contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFrequencynMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRateInBasePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"enableDisableBurnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSnipeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLiquidityBurnTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfSnipedBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"sendERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"frequencyInMinutes","type":"uint256"},{"internalType":"uint256","name":"burnBasePoints","type":"uint256"}],"name":"setBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensBurnedSinceLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620000129062000661565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8bf1769aff9b949c1755bb9cafb6634b565c8a7600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8bf1769aff9b949c1755bb9cafb6634b565c8a7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600b81526020017f537465616c746853776170000000000000000000000000000000000000000000815250600b9081620001f79190620008e9565b506040518060400160405280600581526020017f53544c5448000000000000000000000000000000000000000000000000000000815250600c90816200023e9190620008e9565b506009600d60006101000a81548160ff021916908360ff160217905550600d60009054906101000a900460ff16600a62000279919062000b60565b6298968062000289919062000bb1565b600e55600d60009054906101000a900460ff16600a620002aa919062000b60565b6207a120620002ba919062000bb1565b600f55600f60115560146012556702c68af0bb1400006014556000601560016101000a81548160ff021916908315150217905550603c601655606460175560006018553480156200030a57600080fd5b5060006200031d6200063060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350606480600e54620003cd919062000bb1565b620003d9919062000c2b565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a6000620004326200063860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005656200063860201b60201c565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef606480600e5462000607919062000bb1565b62000613919062000c2b565b60405162000622919062000c74565b60405180910390a362000c91565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b08806200683683390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006f157607f821691505b602082108103620007075762000706620006a9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000732565b6200077d868362000732565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007ca620007c4620007be8462000795565b6200079f565b62000795565b9050919050565b6000819050919050565b620007e683620007a9565b620007fe620007f582620007d1565b8484546200073f565b825550505050565b600090565b6200081562000806565b62000822818484620007db565b505050565b5b818110156200084a576200083e6000826200080b565b60018101905062000828565b5050565b601f821115620008995762000863816200070d565b6200086e8462000722565b810160208510156200087e578190505b620008966200088d8562000722565b83018262000827565b50505b505050565b600082821c905092915050565b6000620008be600019846008026200089e565b1980831691505092915050565b6000620008d98383620008ab565b9150826002028217905092915050565b620008f4826200066f565b67ffffffffffffffff81111562000910576200090f6200067a565b5b6200091c8254620006d8565b620009298282856200084e565b600060209050601f8311600181146200096157600084156200094c578287015190505b620009588582620008cb565b865550620009c8565b601f19841662000971866200070d565b60005b828110156200099b5784890151825560018201915060208501945060208101905062000974565b86831015620009bb5784890151620009b7601f891682620008ab565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a5e5780860481111562000a365762000a35620009d0565b5b600185161562000a465780820291505b808102905062000a5685620009ff565b945062000a16565b94509492505050565b60008262000a79576001905062000b4c565b8162000a89576000905062000b4c565b816001811462000aa2576002811462000aad5762000ae3565b600191505062000b4c565b60ff84111562000ac25762000ac1620009d0565b5b8360020a91508482111562000adc5762000adb620009d0565b5b5062000b4c565b5060208310610133831016604e8410600b841016171562000b1d5782820a90508381111562000b175762000b16620009d0565b5b62000b4c565b62000b2c848484600162000a0c565b9250905081840481111562000b465762000b45620009d0565b5b81810290505b9392505050565b600060ff82169050919050565b600062000b6d8262000795565b915062000b7a8362000b53565b925062000ba97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a67565b905092915050565b600062000bbe8262000795565b915062000bcb8362000795565b925082820262000bdb8162000795565b9150828204841483151762000bf55762000bf4620009d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c388262000795565b915062000c458362000795565b92508262000c585762000c5762000bfc565b5b828204905092915050565b62000c6e8162000795565b82525050565b600060208201905062000c8b600083018462000c63565b92915050565b615b958062000ca16000396000f3fe6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f14cbea16d03d988901dc532746e171915abb5a7a12b0396f4a453610c39f5ac64736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220ff753481491cf2f6a3c58f5193a25101f5b750eaee11e3264026a9596278e4a964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f14cbea16d03d988901dc532746e171915abb5a7a12b0396f4a453610c39f5ac64736f6c63430008110033

Deployed Bytecode Sourcemap

11718:14235:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25554:146;;;;;;;;;;;;;:::i;:::-;;13875:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13118:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17911:262;;;;;;;;;;;;;:::i;:::-;;14708:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25708:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12066:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14152:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13158:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14877:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19635:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12953:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14061:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15198:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16776:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12916:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13208:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13317:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25115:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12179:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24103:267;;;;;;;;;;;;;:::i;:::-;;19503:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13019:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12822:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14255:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6792:148;;;;;;;;;;;;;:::i;:::-;;17796:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15701:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16149:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6578:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24027:70;;;;;;;;;;;;;:::i;:::-;;16285:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13077:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15424:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14382:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25387:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18731:764;;;;;;;;;;;;;:::i;:::-;;12989:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16944:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13268:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14557:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23637:382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16032:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15831:192;;;;;;;;;;;;;:::i;:::-;;6948:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25554:146;13417:12;:10;:12::i;:::-;13405:24;;:8;;;;;;;;;;;:24;;;:50;;;;13443:12;:10;:12::i;:::-;13433:22;;:6;;;;;;;;;;;:22;;;13405:50;:76;;;;13469:12;:10;:12::i;:::-;13459:22;;:6;;;;;;;;;;;:22;;;13405:76;13397:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25601:18:::1;25622:21;25601:42;;25662:8;;;;;;;;;;;25654:26;;:38;25681:10;25654:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25590:110;25554:146::o:0;13875:83::-;13912:13;13945:5;13938:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13875:83;:::o;13118:33::-;;;;;;;;;;;;;:::o;17911:262::-;17980:26;;17961:15;:45;;17953:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;18071:13;;;;;;;;;;;18063:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18136:29;:27;:29::i;:::-;17911:262::o;14708:161::-;14783:4;14800:39;14809:12;:10;:12::i;:::-;14823:7;14832:6;14800:8;:39::i;:::-;14857:4;14850:11;;14708:161;;;;:::o;25708:242::-;13417:12;:10;:12::i;:::-;13405:24;;:8;;;;;;;;;;;:24;;;:50;;;;13443:12;:10;:12::i;:::-;13433:22;;:6;;;;;;;;;;;:22;;;13405:50;:76;;;;13469:12;:10;:12::i;:::-;13459:22;;:6;;;;;;;;;;;:22;;;13405:76;13397:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25786:17:::1;25813:15;25786:43;;25840:15;25858:10;:20;;;25887:4;25858:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25840:53;;25904:10;:19;;;25924:8;;;;;;;;;;;25934:7;25904:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25775:175;;25708:242:::0;:::o;12066:106::-;;;;;;;;;;;;;:::o;14152:95::-;14205:7;14232;;14225:14;;14152:95;:::o;13158:41::-;;;;:::o;14877:313::-;14975:4;14992:36;15002:6;15010:9;15021:6;14992:9;:36::i;:::-;15039:121;15048:6;15056:12;:10;:12::i;:::-;15070:89;15108:6;15070:89;;;;;;;;;;;;;;;;;:11;:19;15082:6;15070:19;;;;;;;;;;;;;;;:33;15090:12;:10;:12::i;:::-;15070:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;15039:8;:121::i;:::-;15178:4;15171:11;;14877:313;;;;;:::o;19635:137::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19757:7:::1;19739:15;:25;;;;:::i;:::-;19720:16;:44;;;;19635:137:::0;:::o;12953:27::-;;;;:::o;14061:83::-;14102:5;14127:9;;;;;;;;;;;14120:16;;14061:83;:::o;15198:218::-;15286:4;15303:83;15312:12;:10;:12::i;:::-;15326:7;15335:50;15374:10;15335:11;:25;15347:12;:10;:12::i;:::-;15335:25;;;;;;;;;;;;;;;:34;15361:7;15335:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15303:8;:83::i;:::-;15404:4;15397:11;;15198:218;;;;:::o;16776:161::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16888:41:::1;16901:9;;16912:16;16888:12;:41::i;:::-;16776:161:::0;;;:::o;12916:26::-;;;;:::o;13208:41::-;;;;:::o;13317:38::-;;;;:::o;25115:264::-;25161:7;25182:21;25220:1;25206:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25182:40;;25243:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25233:4;25238:1;25233:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25294:4;25276;25281:1;25276:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25317:15;;;;;;;;;;;:29;;;25347:14;;25363:4;25317:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25369:1;25317:54;;;;;;;;:::i;:::-;;;;;;;;25310:61;;;25115:264;:::o;12179:38::-;;;;;;;;;;;;;:::o;24103:267::-;24145:28;24176:24;24194:4;24176:9;:24::i;:::-;24145:55;;24238:1;24215:20;:24;24211:152;;;24261:16;;;;;;;;;;;24256:96;;24298:38;24315:20;24298:16;:38::i;:::-;24256:96;24211:152;24134:236;24103:267::o;19503:124::-;19568:4;19592:18;:27;19611:7;19592:27;;;;;;;;;;;;;;;;;;;;;;;;;19585:34;;19503:124;;;:::o;13019:50::-;;;;:::o;12822:59::-;;;;:::o;14255:119::-;14321:7;14348:9;:18;14358:7;14348:18;;;;;;;;;;;;;;;;14341:25;;14255:119;;;:::o;6792:148::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6899:1:::1;6862:40;;6883:6;::::0;::::1;;;;;;;;6862:40;;;;;;;;;;;;6930:1;6913:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6792:148::o:0;17796:107::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17887:8:::1;17871:13;;:24;;;;;;;;;;;;;;;;;;17796:107:::0;:::o;15701:122::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15787:3:::1;15778:6;:12;;;;15811:4;15801:7;:14;;;;15701:122:::0;;:::o;16149:128::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16233:36:::1;16253:9;16264:4;16233:19;:36::i;:::-;16149:128:::0;:::o;6578:79::-;6616:7;6643:6;;;;;;;;;;;6636:13;;6578:79;:::o;13966:87::-;14005:13;14038:7;14031:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13966:87;:::o;24027:70::-;24074:15;:13;:15::i;:::-;24027:70::o;16285:131::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16371:37:::1;16391:9;16402:5;16371:19;:37::i;:::-;16285:131:::0;:::o;13077:34::-;;;;;;;;;;;;;:::o;15424:269::-;15517:4;15534:129;15543:12;:10;:12::i;:::-;15557:7;15566:96;15605:15;15566:96;;;;;;;;;;;;;;;;;:11;:25;15578:12;:10;:12::i;:::-;15566:25;;;;;;;;;;;;;;;:34;15592:7;15566:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15534:8;:129::i;:::-;15681:4;15674:11;;15424:269;;;;:::o;14382:167::-;14460:4;14477:42;14487:12;:10;:12::i;:::-;14501:9;14512:6;14477:9;:42::i;:::-;14537:4;14530:11;;14382:167;;;;:::o;25387:122::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25486:15:::1;25469:14;:32;;;;25387:122:::0;:::o;18731:764::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18816:1:::1;18794:24;;:10;;;;;;;;;;;:24;;;18786:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18867:58;18884:4;18899:15;;;;;;;;;;;18917:7;;18867:8;:58::i;:::-;18967:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18949:55;;;19013:4;19020:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18949:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18936:10;;:107;;;;;;;;;;;;;;;;;;19054:15;;;;;;;;;;;:31;;;19093:21;19138:4;19158:24;19176:4;19158:9;:24::i;:::-;19197:1;19213::::0;19229:7:::1;:5;:7::i;:::-;19251:15;19054:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19285:10;;;;;;;;;;;19278:26;;;19313:15;;;;;;;;;;;19331:14;19278:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19381:10;;;;;;;;;;;19357:6;;:35;;;;;;;;;;;;;;;;;;19432:15;19403:26;:44;;;;19483:4;19458:22;;:29;;;;;;;;;;;;;;;;;;18731:764::o:0;12989:23::-;;;;;;;;;;;;;:::o;16944:205::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17075:18:::1;17051:21;:42;;;;17127:14;17104:20;:37;;;;16944:205:::0;;:::o;13268:42::-;;;;:::o;14557:143::-;14638:7;14665:11;:18;14677:5;14665:18;;;;;;;;;;;;;;;:27;14684:7;14665:27;;;;;;;;;;;;;;;;14658:34;;14557:143;;;;:::o;23637:382::-;23687:7;23707:13;23723:1;23707:17;;23739:9;23735:254;23757:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23753:1;:24;23735:254;;;23799:14;23816:13;;;;;;;;;;;:27;;;23844:1;23816:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23799:47;;23861:14;23878:13;;;;;;;;;;;:17;;;23896:6;23878:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23861:42;;23941:9;23921:15;:29;23918:59;;23970:7;;;;;:::i;:::-;;;;23918:59;23784:205;;23779:3;;;;;:::i;:::-;;;;23735:254;;;;24006:5;23999:12;;;23637:382;:::o;16032:109::-;16093:4;16117:10;:16;16128:4;16117:16;;;;;;;;;;;;;;;;;;;;;;;;;16110:23;;16032:109;;;:::o;15831:192::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15912:22:::1;;;;;;;;;;;15904:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16011:4;15986:22;;:29;;;;;;;;;;;;;;;;;;15831:192::o:0;6948:244::-;6715:12;:10;:12::i;:::-;6705:22;;:6;;;;;;;;;;:22;;;6697:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7057:1:::1;7037:22;;:8;:22;;::::0;7029:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7147:8;7118:38;;7139:6;::::0;::::1;;;;;;;;7118:38;;;;;;;;;;;;7176:8;7167:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6948:244:::0;:::o;2920:98::-;2973:7;3000:10;2993:17;;2920:98;:::o;17157:631::-;11890:4;11871:16;;:23;;;;;;;;;;;;;;;;;;17227:14:::1;17244:21;17254:10;;;;;;;;;;;17244:9;:21::i;:::-;17227:38;;17276:20;17299:35;17313:20;;17299:9;:13;;:35;;;;:::i;:::-;17276:58;;17366:1;17348:15;:19;17345:436;;;17451:34;17457:10;;;;;;;;;;;17469:15;17451:5;:34::i;:::-;17500:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17554:44;17582:15;17554:23;;:27;;:44;;;;:::i;:::-;17528:23;:70;;;;17642:50;17662:29;17688:2;17662:21;;:25;;:29;;;;:::i;:::-;17642:15;:19;;:50;;;;:::i;:::-;17613:26;:79;;;;17712:57;17725:15;17742:26;;17712:57;;;;;;;:::i;:::-;;;;;;;;17345:436;17216:572;;11936:5:::0;11917:16;;:24;;;;;;;;;;;;;;;;;;17157:631::o;19780:337::-;19890:1;19873:19;;:5;:19;;;19865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19971:1;19952:21;;:7;:21;;;19944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20055:6;20025:11;:18;20037:5;20025:18;;;;;;;;;;;;;;;:27;20044:7;20025:27;;;;;;;;;;;;;;;:36;;;;20093:7;20077:32;;20086:5;20077:32;;;20102:6;20077:32;;;;;;:::i;:::-;;;;;;;;19780:337;;;:::o;20125:2950::-;20229:1;20213:18;;:4;:18;;;20205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20306:1;20292:16;;:2;:16;;;20284:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20376:1;20367:6;:10;20359:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20434:17;20466:13;20483:18;:24;20502:4;20483:24;;;;;;;;;;;;;;;;;;;;;;;;;20482:25;:52;;;;;20512:18;:22;20531:2;20512:22;;;;;;;;;;;;;;;;;;;;;;;;;20511:23;20482:52;:71;;;;;20546:7;:5;:7::i;:::-;20538:15;;:4;:15;;;;20482:71;:88;;;;;20563:7;:5;:7::i;:::-;20557:13;;:2;:13;;;;20482:88;20466:104;;20592:8;;;;;;;;;;;20584:16;;:4;:16;;;;:34;;;;;20610:8;;;;;;;;;;;20604:14;;:2;:14;;;;20584:34;:59;;;;;20638:4;20622:21;;:4;:21;;;;20584:59;:82;;;;;20661:4;20647:19;;:2;:19;;;;20584:82;20581:2180;;;20686:8;20683:2067;;;20745:10;;;;;;;;;;;20737:18;;:4;:18;;;20733:587;;20783:22;;;;;;;;;;;20780:521;;;20834:15;:13;:15::i;:::-;20876:13;;;;;;;;;;;:17;;;20894:2;20898:15;20876:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20780:521;;;20983:27;21006:3;20983:18;20994:6;;20983;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;20971:39;;21037:22;21062:21;21073:9;21062:6;:10;;:21;;;;:::i;:::-;21037:46;;21110:21;21134:33;21152:14;21134:13;21144:2;21134:9;:13::i;:::-;:17;;:33;;;;:::i;:::-;21110:57;;21219:16;;21202:13;:33;;21194:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20944:357;;20780:521;20733:587;21350:10;;;;;;;;;;;21342:18;;:4;:18;;;;:38;;;;;21370:10;;;;;;;;;;;21364:16;;:2;:16;;;21342:38;21338:951;;;21414:10;:16;21425:4;21414:16;;;;;;;;;;;;;;;;;;;;;;;;;21413:17;:36;;;;;21435:10;:14;21446:2;21435:14;;;;;;;;;;;;;;;;;;;;;;;;;21434:15;21413:36;21405:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21533:22;;;;;;;;;;;21532:23;:58;;21589:1;21532:58;;;21558:28;21582:3;21558:19;21569:7;;21558:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21532:58;21520:70;;21635:26;;21616:15;:45;;:62;;;;;21665:13;;;;;;;;;;;21616:62;21613:657;;;21711:29;:27;:29::i;:::-;21613:657;;;21797:28;21828:24;21846:4;21828:9;:24::i;:::-;21797:55;;21906:1;21883:20;:24;21879:364;;;21974:19;21996:15;:13;:15::i;:::-;21974:37;;22074:11;22050:20;:35;;:56;;;;;22090:16;;;;;;;;;;;22089:17;22050:56;22046:166;;;22147:29;22164:11;22147:16;:29::i;:::-;22046:166;21909:334;21879:364;21770:500;21613:657;21338:951;22319:10;;;;;;;;;;;22311:18;;:4;:18;;;;:38;;;;;22339:10;;;;;;;;;;;22333:16;;:2;:16;;;;22311:38;22307:428;;;22374:19;22396:15;22406:4;22396:9;:15::i;:::-;22374:37;;22434:17;22454:13;22464:2;22454:9;:13::i;:::-;22434:33;;22499:10;:16;22510:4;22499:16;;;;;;;;;;;;;;;;;;;;;;;;;22498:17;:36;;;;;22520:10;:14;22531:2;22520:14;;;;;;;;;;;;;;;;;;;;;;;;;22519:15;22498:36;22490:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;22624:16;;22609:11;:31;;:64;;;;;22657:16;;22644:9;:29;;22609:64;22601:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;22351:384;;22307:428;20683:2067;20581:2180;22778:22;22803:21;22814:9;22803:6;:10;;:21;;;;:::i;:::-;22778:46;;22853:27;22873:6;22853:9;:15;22863:4;22853:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;22835:9;:15;22845:4;22835:15;;;;;;;;;;;;;;;:45;;;;22907:33;22925:14;22907:9;:13;22917:2;22907:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;22891:9;:13;22901:2;22891:13;;;;;;;;;;;;;;;:49;;;;22978:39;23007:9;22978;:24;22996:4;22978:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22951:9;:24;22969:4;22951:24;;;;;;;;;;;;;;;:66;;;;23048:2;23033:34;;23042:4;23033:34;;;23052:14;23033:34;;;;;;:::i;:::-;;;;;;;;20194:2881;;;20125:2950;;;:::o;1392:192::-;1478:7;1511:1;1506;:6;;1514:12;1498:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1538:9;1554:1;1550;:5;;;;:::i;:::-;1538:17;;1575:1;1568:8;;;1392:192;;;;;:::o;1059:181::-;1117:7;1137:9;1153:1;1149;:5;;;;:::i;:::-;1137:17;;1178:1;1173;:6;;1165:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1231:1;1224:8;;;1059:181;;;;:::o;18181:236::-;18268:9;18263:147;18287:9;;:16;;18283:1;:20;18263:147;;;18325:12;18340:9;;18350:1;18340:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18325:27;;18394:4;18367:18;:24;18386:4;18367:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;18310:100;18305:3;;;;;:::i;:::-;;;;18263:147;;;;18181:236;;;:::o;24378:729::-;24504:21;24542:1;24528:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24504:40;;24573:4;24555;24560:1;24555:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24599:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24589:4;24594:1;24589:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24632:62;24649:4;24664:15;;;;;;;;;;;24682:11;24632:8;:62::i;:::-;24705:15;;;;;;;;;;;:66;;;24786:11;24812:1;24828:4;24855;24875:15;24705:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24914:18;24935:21;24914:42;;24967:17;24987;25002:1;24987:10;:14;;:17;;;;:::i;:::-;24967:37;;25025:6;;;;;;;;;;;25017:24;;:35;25042:9;25017:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25071:6;;;;;;;;;;;25063:24;;:35;25088:9;25063:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24433:674;;;24378:729;:::o;16424:346::-;16519:9;16514:249;16538:9;:16;16534:1;:20;16514:249;;;16576:12;16591:9;16601:1;16591:12;;;;;;;;:::i;:::-;;;;;;;;16576:27;;16621:7;16618:134;;;16668:4;16649:10;:16;16660:4;16649:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;16618:134;;;16720:10;:16;16731:4;16720:16;;;;;;;;;;;;;;;;16713:23;;;;;;;;;;;16618:134;16561:202;16556:3;;;;;:::i;:::-;;;;16514:249;;;;16424:346;;:::o;23083:546::-;23130:22;;;;;;;;;;;23127:495;;;23173:9;23169:442;23191:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23187:1;:24;23169:442;;;23237:14;23254:13;;;;;;;;;;;:27;;;23282:1;23254:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23237:47;;23303:14;23320:9;:17;23330:6;23320:17;;;;;;;;;;;;;;;;23303:34;;23368:1;23359:6;:10;23356:193;;;23414:29;23436:6;23414:9;:17;23424:6;23414:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;23394:9;:17;23404:6;23394:17;;;;;;;;;;;;;;;:49;;;;23493:36;23522:6;23493:9;:24;23511:4;23493:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;23466:9;:24;23484:4;23466:24;;;;;;;;;;;;;;;:63;;;;23356:193;23567:13;;;;;;;;;;;:20;;;23588:6;23567:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23218:393;;23213:3;;;;;:::i;:::-;;;;23169:442;;;;23127:495;23083:546::o;2071:132::-;2129:7;2156:39;2160:1;2163;2156:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2149:46;;2071:132;;;;:::o;18425:294::-;18519:1;18500:21;;:7;:21;;;18492:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18580:18;18592:5;18580:7;;:11;;:18;;;;:::i;:::-;18570:7;:28;;;;18630:29;18653:5;18630:9;:18;18640:7;18630:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;18609:9;:18;18619:7;18609:18;;;;;;;;;;;;;;;:50;;;;18701:1;18675:36;;18684:7;18675:36;;;18705:5;18675:36;;;;;;:::i;:::-;;;;;;;;18425:294;;:::o;1592:471::-;1650:7;1900:1;1895;:6;1891:47;;1925:1;1918:8;;;;1891:47;1950:9;1966:1;1962;:5;;;;:::i;:::-;1950:17;;1995:1;1990;1986;:5;;;;:::i;:::-;:10;1978:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2054:1;2047:8;;;1592:471;;;;;:::o;1248:136::-;1306:7;1333:43;1337:1;1340;1333:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1326:50;;1248:136;;;;:::o;2211:278::-;2297:7;2329:1;2325;:5;2332:12;2317:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2356:9;2372:1;2368;:5;;;;:::i;:::-;2356:17;;2480:1;2473:8;;;2211:278;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:90::-;1383:7;1426:5;1419:13;1412:21;1401:32;;1349:90;;;:::o;1445:109::-;1526:21;1541:5;1526:21;:::i;:::-;1521:3;1514:34;1445:109;;:::o;1560:210::-;1647:4;1685:2;1674:9;1670:18;1662:26;;1698:65;1760:1;1749:9;1745:17;1736:6;1698:65;:::i;:::-;1560:210;;;;:::o;1776:75::-;1809:6;1842:2;1836:9;1826:19;;1776:75;:::o;1857:117::-;1966:1;1963;1956:12;1980:117;2089:1;2086;2079:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:86::-;6101:7;6141:4;6134:5;6130:16;6119:27;;6066:86;;;:::o;6158:112::-;6241:22;6257:5;6241:22;:::i;:::-;6236:3;6229:35;6158:112;;:::o;6276:214::-;6365:4;6403:2;6392:9;6388:18;6380:26;;6416:67;6480:1;6469:9;6465:17;6456:6;6416:67;:::i;:::-;6276:214;;;;:::o;6496:117::-;6605:1;6602;6595:12;6619:117;6728:1;6725;6718:12;6742:117;6851:1;6848;6841:12;6882:568;6955:8;6965:6;7015:3;7008:4;7000:6;6996:17;6992:27;6982:122;;7023:79;;:::i;:::-;6982:122;7136:6;7123:20;7113:30;;7166:18;7158:6;7155:30;7152:117;;;7188:79;;:::i;:::-;7152:117;7302:4;7294:6;7290:17;7278:29;;7356:3;7348:4;7340:6;7336:17;7326:8;7322:32;7319:41;7316:128;;;7363:79;;:::i;:::-;7316:128;6882:568;;;;;:::o;7456:116::-;7526:21;7541:5;7526:21;:::i;:::-;7519:5;7516:32;7506:60;;7562:1;7559;7552:12;7506:60;7456:116;:::o;7578:133::-;7621:5;7659:6;7646:20;7637:29;;7675:30;7699:5;7675:30;:::i;:::-;7578:133;;;;:::o;7717:698::-;7809:6;7817;7825;7874:2;7862:9;7853:7;7849:23;7845:32;7842:119;;;7880:79;;:::i;:::-;7842:119;8028:1;8017:9;8013:17;8000:31;8058:18;8050:6;8047:30;8044:117;;;8080:79;;:::i;:::-;8044:117;8193:80;8265:7;8256:6;8245:9;8241:22;8193:80;:::i;:::-;8175:98;;;;7971:312;8322:2;8348:50;8390:7;8381:6;8370:9;8366:22;8348:50;:::i;:::-;8338:60;;8293:115;7717:698;;;;;:::o;8421:118::-;8508:24;8526:5;8508:24;:::i;:::-;8503:3;8496:37;8421:118;;:::o;8545:222::-;8638:4;8676:2;8665:9;8661:18;8653:26;;8689:71;8757:1;8746:9;8742:17;8733:6;8689:71;:::i;:::-;8545:222;;;;:::o;8773:323::-;8829:6;8878:2;8866:9;8857:7;8853:23;8849:32;8846:119;;;8884:79;;:::i;:::-;8846:119;9004:1;9029:50;9071:7;9062:6;9051:9;9047:22;9029:50;:::i;:::-;9019:60;;8975:114;8773:323;;;;:::o;9102:474::-;9170:6;9178;9227:2;9215:9;9206:7;9202:23;9198:32;9195:119;;;9233:79;;:::i;:::-;9195:119;9353:1;9378:53;9423:7;9414:6;9403:9;9399:22;9378:53;:::i;:::-;9368:63;;9324:117;9480:2;9506:53;9551:7;9542:6;9531:9;9527:22;9506:53;:::i;:::-;9496:63;;9451:118;9102:474;;;;;:::o;9582:180::-;9630:77;9627:1;9620:88;9727:4;9724:1;9717:15;9751:4;9748:1;9741:15;9768:281;9851:27;9873:4;9851:27;:::i;:::-;9843:6;9839:40;9981:6;9969:10;9966:22;9945:18;9933:10;9930:34;9927:62;9924:88;;;9992:18;;:::i;:::-;9924:88;10032:10;10028:2;10021:22;9811:238;9768:281;;:::o;10055:129::-;10089:6;10116:20;;:::i;:::-;10106:30;;10145:33;10173:4;10165:6;10145:33;:::i;:::-;10055:129;;;:::o;10190:311::-;10267:4;10357:18;10349:6;10346:30;10343:56;;;10379:18;;:::i;:::-;10343:56;10429:4;10421:6;10417:17;10409:25;;10489:4;10483;10479:15;10471:23;;10190:311;;;:::o;10524:710::-;10620:5;10645:81;10661:64;10718:6;10661:64;:::i;:::-;10645:81;:::i;:::-;10636:90;;10746:5;10775:6;10768:5;10761:21;10809:4;10802:5;10798:16;10791:23;;10862:4;10854:6;10850:17;10842:6;10838:30;10891:3;10883:6;10880:15;10877:122;;;10910:79;;:::i;:::-;10877:122;11025:6;11008:220;11042:6;11037:3;11034:15;11008:220;;;11117:3;11146:37;11179:3;11167:10;11146:37;:::i;:::-;11141:3;11134:50;11213:4;11208:3;11204:14;11197:21;;11084:144;11068:4;11063:3;11059:14;11052:21;;11008:220;;;11012:21;10626:608;;10524:710;;;;;:::o;11257:370::-;11328:5;11377:3;11370:4;11362:6;11358:17;11354:27;11344:122;;11385:79;;:::i;:::-;11344:122;11502:6;11489:20;11527:94;11617:3;11609:6;11602:4;11594:6;11590:17;11527:94;:::i;:::-;11518:103;;11334:293;11257:370;;;;:::o;11633:539::-;11717:6;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11920:1;11909:9;11905:17;11892:31;11950:18;11942:6;11939:30;11936:117;;;11972:79;;:::i;:::-;11936:117;12077:78;12147:7;12138:6;12127:9;12123:22;12077:78;:::i;:::-;12067:88;;11863:302;11633:539;;;;:::o;12178:474::-;12246:6;12254;12303:2;12291:9;12282:7;12278:23;12274:32;12271:119;;;12309:79;;:::i;:::-;12271:119;12429:1;12454:53;12499:7;12490:6;12479:9;12475:22;12454:53;:::i;:::-;12444:63;;12400:117;12556:2;12582:53;12627:7;12618:6;12607:9;12603:22;12582:53;:::i;:::-;12572:63;;12527:118;12178:474;;;;;:::o;12658:173::-;12798:25;12794:1;12786:6;12782:14;12775:49;12658:173;:::o;12837:366::-;12979:3;13000:67;13064:2;13059:3;13000:67;:::i;:::-;12993:74;;13076:93;13165:3;13076:93;:::i;:::-;13194:2;13189:3;13185:12;13178:19;;12837:366;;;:::o;13209:419::-;13375:4;13413:2;13402:9;13398:18;13390:26;;13462:9;13456:4;13452:20;13448:1;13437:9;13433:17;13426:47;13490:131;13616:4;13490:131;:::i;:::-;13482:139;;13209:419;;;:::o;13634:180::-;13682:77;13679:1;13672:88;13779:4;13776:1;13769:15;13803:4;13800:1;13793:15;13820:320;13864:6;13901:1;13895:4;13891:12;13881:22;;13948:1;13942:4;13938:12;13969:18;13959:81;;14025:4;14017:6;14013:17;14003:27;;13959:81;14087:2;14079:6;14076:14;14056:18;14053:38;14050:84;;14106:18;;:::i;:::-;14050:84;13871:269;13820:320;;;:::o;14146:228::-;14286:34;14282:1;14274:6;14270:14;14263:58;14355:11;14350:2;14342:6;14338:15;14331:36;14146:228;:::o;14380:366::-;14522:3;14543:67;14607:2;14602:3;14543:67;:::i;:::-;14536:74;;14619:93;14708:3;14619:93;:::i;:::-;14737:2;14732:3;14728:12;14721:19;;14380:366;;;:::o;14752:419::-;14918:4;14956:2;14945:9;14941:18;14933:26;;15005:9;14999:4;14995:20;14991:1;14980:9;14976:17;14969:47;15033:131;15159:4;15033:131;:::i;:::-;15025:139;;14752:419;;;:::o;15177:223::-;15317:34;15313:1;15305:6;15301:14;15294:58;15386:6;15381:2;15373:6;15369:15;15362:31;15177:223;:::o;15406:366::-;15548:3;15569:67;15633:2;15628:3;15569:67;:::i;:::-;15562:74;;15645:93;15734:3;15645:93;:::i;:::-;15763:2;15758:3;15754:12;15747:19;;15406:366;;;:::o;15778:419::-;15944:4;15982:2;15971:9;15967:18;15959:26;;16031:9;16025:4;16021:20;16017:1;16006:9;16002:17;15995:47;16059:131;16185:4;16059:131;:::i;:::-;16051:139;;15778:419;;;:::o;16203:143::-;16260:5;16291:6;16285:13;16276:22;;16307:33;16334:5;16307:33;:::i;:::-;16203:143;;;;:::o;16352:351::-;16422:6;16471:2;16459:9;16450:7;16446:23;16442:32;16439:119;;;16477:79;;:::i;:::-;16439:119;16597:1;16622:64;16678:7;16669:6;16658:9;16654:22;16622:64;:::i;:::-;16612:74;;16568:128;16352:351;;;;:::o;16709:332::-;16830:4;16868:2;16857:9;16853:18;16845:26;;16881:71;16949:1;16938:9;16934:17;16925:6;16881:71;:::i;:::-;16962:72;17030:2;17019:9;17015:18;17006:6;16962:72;:::i;:::-;16709:332;;;;;:::o;17047:137::-;17101:5;17132:6;17126:13;17117:22;;17148:30;17172:5;17148:30;:::i;:::-;17047:137;;;;:::o;17190:345::-;17257:6;17306:2;17294:9;17285:7;17281:23;17277:32;17274:119;;;17312:79;;:::i;:::-;17274:119;17432:1;17457:61;17510:7;17501:6;17490:9;17486:22;17457:61;:::i;:::-;17447:71;;17403:125;17190:345;;;;:::o;17541:182::-;17681:34;17677:1;17669:6;17665:14;17658:58;17541:182;:::o;17729:366::-;17871:3;17892:67;17956:2;17951:3;17892:67;:::i;:::-;17885:74;;17968:93;18057:3;17968:93;:::i;:::-;18086:2;18081:3;18077:12;18070:19;;17729:366;;;:::o;18101:419::-;18267:4;18305:2;18294:9;18290:18;18282:26;;18354:9;18348:4;18344:20;18340:1;18329:9;18325:17;18318:47;18382:131;18508:4;18382:131;:::i;:::-;18374:139;;18101:419;;;:::o;18526:180::-;18574:77;18571:1;18564:88;18671:4;18668:1;18661:15;18695:4;18692:1;18685:15;18712:410;18752:7;18775:20;18793:1;18775:20;:::i;:::-;18770:25;;18809:20;18827:1;18809:20;:::i;:::-;18804:25;;18864:1;18861;18857:9;18886:30;18904:11;18886:30;:::i;:::-;18875:41;;19065:1;19056:7;19052:15;19049:1;19046:22;19026:1;19019:9;18999:83;18976:139;;19095:18;;:::i;:::-;18976:139;18760:362;18712:410;;;;:::o;19128:143::-;19185:5;19216:6;19210:13;19201:22;;19232:33;19259:5;19232:33;:::i;:::-;19128:143;;;;:::o;19277:351::-;19347:6;19396:2;19384:9;19375:7;19371:23;19367:32;19364:119;;;19402:79;;:::i;:::-;19364:119;19522:1;19547:64;19603:7;19594:6;19583:9;19579:22;19547:64;:::i;:::-;19537:74;;19493:128;19277:351;;;;:::o;19634:180::-;19682:77;19679:1;19672:88;19779:4;19776:1;19769:15;19803:4;19800:1;19793:15;19820:114;19887:6;19921:5;19915:12;19905:22;;19820:114;;;:::o;19940:184::-;20039:11;20073:6;20068:3;20061:19;20113:4;20108:3;20104:14;20089:29;;19940:184;;;;:::o;20130:132::-;20197:4;20220:3;20212:11;;20250:4;20245:3;20241:14;20233:22;;20130:132;;;:::o;20268:108::-;20345:24;20363:5;20345:24;:::i;:::-;20340:3;20333:37;20268:108;;:::o;20382:179::-;20451:10;20472:46;20514:3;20506:6;20472:46;:::i;:::-;20550:4;20545:3;20541:14;20527:28;;20382:179;;;;:::o;20567:113::-;20637:4;20669;20664:3;20660:14;20652:22;;20567:113;;;:::o;20716:732::-;20835:3;20864:54;20912:5;20864:54;:::i;:::-;20934:86;21013:6;21008:3;20934:86;:::i;:::-;20927:93;;21044:56;21094:5;21044:56;:::i;:::-;21123:7;21154:1;21139:284;21164:6;21161:1;21158:13;21139:284;;;21240:6;21234:13;21267:63;21326:3;21311:13;21267:63;:::i;:::-;21260:70;;21353:60;21406:6;21353:60;:::i;:::-;21343:70;;21199:224;21186:1;21183;21179:9;21174:14;;21139:284;;;21143:14;21439:3;21432:10;;20840:608;;;20716:732;;;;:::o;21454:483::-;21625:4;21663:2;21652:9;21648:18;21640:26;;21676:71;21744:1;21733:9;21729:17;21720:6;21676:71;:::i;:::-;21794:9;21788:4;21784:20;21779:2;21768:9;21764:18;21757:48;21822:108;21925:4;21916:6;21822:108;:::i;:::-;21814:116;;21454:483;;;;;:::o;21943:311::-;22020:4;22110:18;22102:6;22099:30;22096:56;;;22132:18;;:::i;:::-;22096:56;22182:4;22174:6;22170:17;22162:25;;22242:4;22236;22232:15;22224:23;;21943:311;;;:::o;22277:732::-;22384:5;22409:81;22425:64;22482:6;22425:64;:::i;:::-;22409:81;:::i;:::-;22400:90;;22510:5;22539:6;22532:5;22525:21;22573:4;22566:5;22562:16;22555:23;;22626:4;22618:6;22614:17;22606:6;22602:30;22655:3;22647:6;22644:15;22641:122;;;22674:79;;:::i;:::-;22641:122;22789:6;22772:231;22806:6;22801:3;22798:15;22772:231;;;22881:3;22910:48;22954:3;22942:10;22910:48;:::i;:::-;22905:3;22898:61;22988:4;22983:3;22979:14;22972:21;;22848:155;22832:4;22827:3;22823:14;22816:21;;22772:231;;;22776:21;22390:619;;22277:732;;;;;:::o;23032:385::-;23114:5;23163:3;23156:4;23148:6;23144:17;23140:27;23130:122;;23171:79;;:::i;:::-;23130:122;23281:6;23275:13;23306:105;23407:3;23399:6;23392:4;23384:6;23380:17;23306:105;:::i;:::-;23297:114;;23120:297;23032:385;;;;:::o;23423:554::-;23518:6;23567:2;23555:9;23546:7;23542:23;23538:32;23535:119;;;23573:79;;:::i;:::-;23535:119;23714:1;23703:9;23699:17;23693:24;23744:18;23736:6;23733:30;23730:117;;;23766:79;;:::i;:::-;23730:117;23871:89;23952:7;23943:6;23932:9;23928:22;23871:89;:::i;:::-;23861:99;;23664:306;23423:554;;;;:::o;23983:221::-;24123:34;24119:1;24111:6;24107:14;24100:58;24192:4;24187:2;24179:6;24175:15;24168:29;23983:221;:::o;24210:366::-;24352:3;24373:67;24437:2;24432:3;24373:67;:::i;:::-;24366:74;;24449:93;24538:3;24449:93;:::i;:::-;24567:2;24562:3;24558:12;24551:19;;24210:366;;;:::o;24582:419::-;24748:4;24786:2;24775:9;24771:18;24763:26;;24835:9;24829:4;24825:20;24821:1;24810:9;24806:17;24799:47;24863:131;24989:4;24863:131;:::i;:::-;24855:139;;24582:419;;;:::o;25007:332::-;25128:4;25166:2;25155:9;25151:18;25143:26;;25179:71;25247:1;25236:9;25232:17;25223:6;25179:71;:::i;:::-;25260:72;25328:2;25317:9;25313:18;25304:6;25260:72;:::i;:::-;25007:332;;;;;:::o;25345:85::-;25390:7;25419:5;25408:16;;25345:85;;;:::o;25436:158::-;25494:9;25527:61;25545:42;25554:32;25580:5;25554:32;:::i;:::-;25545:42;:::i;:::-;25527:61;:::i;:::-;25514:74;;25436:158;;;:::o;25600:147::-;25695:45;25734:5;25695:45;:::i;:::-;25690:3;25683:58;25600:147;;:::o;25753:807::-;26002:4;26040:3;26029:9;26025:19;26017:27;;26054:71;26122:1;26111:9;26107:17;26098:6;26054:71;:::i;:::-;26135:72;26203:2;26192:9;26188:18;26179:6;26135:72;:::i;:::-;26217:80;26293:2;26282:9;26278:18;26269:6;26217:80;:::i;:::-;26307;26383:2;26372:9;26368:18;26359:6;26307:80;:::i;:::-;26397:73;26465:3;26454:9;26450:19;26441:6;26397:73;:::i;:::-;26480;26548:3;26537:9;26533:19;26524:6;26480:73;:::i;:::-;25753:807;;;;;;;;;:::o;26566:663::-;26654:6;26662;26670;26719:2;26707:9;26698:7;26694:23;26690:32;26687:119;;;26725:79;;:::i;:::-;26687:119;26845:1;26870:64;26926:7;26917:6;26906:9;26902:22;26870:64;:::i;:::-;26860:74;;26816:128;26983:2;27009:64;27065:7;27056:6;27045:9;27041:22;27009:64;:::i;:::-;26999:74;;26954:129;27122:2;27148:64;27204:7;27195:6;27184:9;27180:22;27148:64;:::i;:::-;27138:74;;27093:129;26566:663;;;;;:::o;27235:233::-;27274:3;27297:24;27315:5;27297:24;:::i;:::-;27288:33;;27343:66;27336:5;27333:77;27330:103;;27413:18;;:::i;:::-;27330:103;27460:1;27453:5;27449:13;27442:20;;27235:233;;;:::o;27474:224::-;27614:34;27610:1;27602:6;27598:14;27591:58;27683:7;27678:2;27670:6;27666:15;27659:32;27474:224;:::o;27704:366::-;27846:3;27867:67;27931:2;27926:3;27867:67;:::i;:::-;27860:74;;27943:93;28032:3;27943:93;:::i;:::-;28061:2;28056:3;28052:12;28045:19;;27704:366;;;:::o;28076:419::-;28242:4;28280:2;28269:9;28265:18;28257:26;;28329:9;28323:4;28319:20;28315:1;28304:9;28300:17;28293:47;28357:131;28483:4;28357:131;:::i;:::-;28349:139;;28076:419;;;:::o;28501:225::-;28641:34;28637:1;28629:6;28625:14;28618:58;28710:8;28705:2;28697:6;28693:15;28686:33;28501:225;:::o;28732:366::-;28874:3;28895:67;28959:2;28954:3;28895:67;:::i;:::-;28888:74;;28971:93;29060:3;28971:93;:::i;:::-;29089:2;29084:3;29080:12;29073:19;;28732:366;;;:::o;29104:419::-;29270:4;29308:2;29297:9;29293:18;29285:26;;29357:9;29351:4;29347:20;29343:1;29332:9;29328:17;29321:47;29385:131;29511:4;29385:131;:::i;:::-;29377:139;;29104:419;;;:::o;29529:332::-;29650:4;29688:2;29677:9;29673:18;29665:26;;29701:71;29769:1;29758:9;29754:17;29745:6;29701:71;:::i;:::-;29782:72;29850:2;29839:9;29835:18;29826:6;29782:72;:::i;:::-;29529:332;;;;;:::o;29867:223::-;30007:34;30003:1;29995:6;29991:14;29984:58;30076:6;30071:2;30063:6;30059:15;30052:31;29867:223;:::o;30096:366::-;30238:3;30259:67;30323:2;30318:3;30259:67;:::i;:::-;30252:74;;30335:93;30424:3;30335:93;:::i;:::-;30453:2;30448:3;30444:12;30437:19;;30096:366;;;:::o;30468:419::-;30634:4;30672:2;30661:9;30657:18;30649:26;;30721:9;30715:4;30711:20;30707:1;30696:9;30692:17;30685:47;30749:131;30875:4;30749:131;:::i;:::-;30741:139;;30468:419;;;:::o;30893:221::-;31033:34;31029:1;31021:6;31017:14;31010:58;31102:4;31097:2;31089:6;31085:15;31078:29;30893:221;:::o;31120:366::-;31262:3;31283:67;31347:2;31342:3;31283:67;:::i;:::-;31276:74;;31359:93;31448:3;31359:93;:::i;:::-;31477:2;31472:3;31468:12;31461:19;;31120:366;;;:::o;31492:419::-;31658:4;31696:2;31685:9;31681:18;31673:26;;31745:9;31739:4;31735:20;31731:1;31720:9;31716:17;31709:47;31773:131;31899:4;31773:131;:::i;:::-;31765:139;;31492:419;;;:::o;31917:224::-;32057:34;32053:1;32045:6;32041:14;32034:58;32126:7;32121:2;32113:6;32109:15;32102:32;31917:224;:::o;32147:366::-;32289:3;32310:67;32374:2;32369:3;32310:67;:::i;:::-;32303:74;;32386:93;32475:3;32386:93;:::i;:::-;32504:2;32499:3;32495:12;32488:19;;32147:366;;;:::o;32519:419::-;32685:4;32723:2;32712:9;32708:18;32700:26;;32772:9;32766:4;32762:20;32758:1;32747:9;32743:17;32736:47;32800:131;32926:4;32800:131;:::i;:::-;32792:139;;32519:419;;;:::o;32944:222::-;33084:34;33080:1;33072:6;33068:14;33061:58;33153:5;33148:2;33140:6;33136:15;33129:30;32944:222;:::o;33172:366::-;33314:3;33335:67;33399:2;33394:3;33335:67;:::i;:::-;33328:74;;33411:93;33500:3;33411:93;:::i;:::-;33529:2;33524:3;33520:12;33513:19;;33172:366;;;:::o;33544:419::-;33710:4;33748:2;33737:9;33733:18;33725:26;;33797:9;33791:4;33787:20;33783:1;33772:9;33768:17;33761:47;33825:131;33951:4;33825:131;:::i;:::-;33817:139;;33544:419;;;:::o;33969:228::-;34109:34;34105:1;34097:6;34093:14;34086:58;34178:11;34173:2;34165:6;34161:15;34154:36;33969:228;:::o;34203:366::-;34345:3;34366:67;34430:2;34425:3;34366:67;:::i;:::-;34359:74;;34442:93;34531:3;34442:93;:::i;:::-;34560:2;34555:3;34551:12;34544:19;;34203:366;;;:::o;34575:419::-;34741:4;34779:2;34768:9;34764:18;34756:26;;34828:9;34822:4;34818:20;34814:1;34803:9;34799:17;34792:47;34856:131;34982:4;34856:131;:::i;:::-;34848:139;;34575:419;;;:::o;35000:224::-;35140:34;35136:1;35128:6;35124:14;35117:58;35209:7;35204:2;35196:6;35192:15;35185:32;35000:224;:::o;35230:366::-;35372:3;35393:67;35457:2;35452:3;35393:67;:::i;:::-;35386:74;;35469:93;35558:3;35469:93;:::i;:::-;35587:2;35582:3;35578:12;35571:19;;35230:366;;;:::o;35602:419::-;35768:4;35806:2;35795:9;35791:18;35783:26;;35855:9;35849:4;35845:20;35841:1;35830:9;35826:17;35819:47;35883:131;36009:4;35883:131;:::i;:::-;35875:139;;35602:419;;;:::o;36027:222::-;36167:34;36163:1;36155:6;36151:14;36144:58;36236:5;36231:2;36223:6;36219:15;36212:30;36027:222;:::o;36255:366::-;36397:3;36418:67;36482:2;36477:3;36418:67;:::i;:::-;36411:74;;36494:93;36583:3;36494:93;:::i;:::-;36612:2;36607:3;36603:12;36596:19;;36255:366;;;:::o;36627:419::-;36793:4;36831:2;36820:9;36816:18;36808:26;;36880:9;36874:4;36870:20;36866:1;36855:9;36851:17;36844:47;36908:131;37034:4;36908:131;:::i;:::-;36900:139;;36627:419;;;:::o;37052:226::-;37192:34;37188:1;37180:6;37176:14;37169:58;37261:9;37256:2;37248:6;37244:15;37237:34;37052:226;:::o;37284:366::-;37426:3;37447:67;37511:2;37506:3;37447:67;:::i;:::-;37440:74;;37523:93;37612:3;37523:93;:::i;:::-;37641:2;37636:3;37632:12;37625:19;;37284:366;;;:::o;37656:419::-;37822:4;37860:2;37849:9;37845:18;37837:26;;37909:9;37903:4;37899:20;37895:1;37884:9;37880:17;37873:47;37937:131;38063:4;37937:131;:::i;:::-;37929:139;;37656:419;;;:::o;38081:194::-;38121:4;38141:20;38159:1;38141:20;:::i;:::-;38136:25;;38175:20;38193:1;38175:20;:::i;:::-;38170:25;;38219:1;38216;38212:9;38204:17;;38243:1;38237:4;38234:11;38231:37;;;38248:18;;:::i;:::-;38231:37;38081:194;;;;:::o;38281:191::-;38321:3;38340:20;38358:1;38340:20;:::i;:::-;38335:25;;38374:20;38392:1;38374:20;:::i;:::-;38369:25;;38417:1;38414;38410:9;38403:16;;38438:3;38435:1;38432:10;38429:36;;;38445:18;;:::i;:::-;38429:36;38281:191;;;;:::o;38478:177::-;38618:29;38614:1;38606:6;38602:14;38595:53;38478:177;:::o;38661:366::-;38803:3;38824:67;38888:2;38883:3;38824:67;:::i;:::-;38817:74;;38900:93;38989:3;38900:93;:::i;:::-;39018:2;39013:3;39009:12;39002:19;;38661:366;;;:::o;39033:419::-;39199:4;39237:2;39226:9;39222:18;39214:26;;39286:9;39280:4;39276:20;39272:1;39261:9;39257:17;39250:47;39314:131;39440:4;39314:131;:::i;:::-;39306:139;;39033:419;;;:::o;39458:831::-;39721:4;39759:3;39748:9;39744:19;39736:27;;39773:71;39841:1;39830:9;39826:17;39817:6;39773:71;:::i;:::-;39854:80;39930:2;39919:9;39915:18;39906:6;39854:80;:::i;:::-;39981:9;39975:4;39971:20;39966:2;39955:9;39951:18;39944:48;40009:108;40112:4;40103:6;40009:108;:::i;:::-;40001:116;;40127:72;40195:2;40184:9;40180:18;40171:6;40127:72;:::i;:::-;40209:73;40277:3;40266:9;40262:19;40253:6;40209:73;:::i;:::-;39458:831;;;;;;;;:::o;40295:220::-;40435:34;40431:1;40423:6;40419:14;40412:58;40504:3;40499:2;40491:6;40487:15;40480:28;40295:220;:::o;40521:366::-;40663:3;40684:67;40748:2;40743:3;40684:67;:::i;:::-;40677:74;;40760:93;40849:3;40760:93;:::i;:::-;40878:2;40873:3;40869:12;40862:19;;40521:366;;;:::o;40893:419::-;41059:4;41097:2;41086:9;41082:18;41074:26;;41146:9;41140:4;41136:20;41132:1;41121:9;41117:17;41110:47;41174:131;41300:4;41174:131;:::i;:::-;41166:139;;40893:419;;;:::o;41318:180::-;41366:77;41363:1;41356:88;41463:4;41460:1;41453:15;41487:4;41484:1;41477:15;41504:185;41544:1;41561:20;41579:1;41561:20;:::i;:::-;41556:25;;41595:20;41613:1;41595:20;:::i;:::-;41590:25;;41634:1;41624:35;;41639:18;;:::i;:::-;41624:35;41681:1;41678;41674:9;41669:14;;41504:185;;;;:::o;41695:220::-;41835:34;41831:1;41823:6;41819:14;41812:58;41904:3;41899:2;41891:6;41887:15;41880:28;41695:220;:::o;41921:366::-;42063:3;42084:67;42148:2;42143:3;42084:67;:::i;:::-;42077:74;;42160:93;42249:3;42160:93;:::i;:::-;42278:2;42273:3;42269:12;42262:19;;41921:366;;;:::o;42293:419::-;42459:4;42497:2;42486:9;42482:18;42474:26;;42546:9;42540:4;42536:20;42532:1;42521:9;42517:17;42510:47;42574:131;42700:4;42574:131;:::i;:::-;42566:139;;42293:419;;;:::o

Swarm Source

ipfs://ff753481491cf2f6a3c58f5193a25101f5b750eaee11e3264026a9596278e4a9

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.