ETH Price: $3,612.44 (-3.04%)

Contract

0x92a8771C925ec0812325546075be51e76d2f7123
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Approve206694792024-09-03 10:33:2390 days ago1725359603IN
0x92a8771C...76d2f7123
0 ETH0.000061442.46234819
Approve202082522024-07-01 1:01:11154 days ago1719795671IN
0x92a8771C...76d2f7123
0 ETH0.000117122.49389665
Approve198804082024-05-16 5:19:47200 days ago1715836787IN
0x92a8771C...76d2f7123
0 ETH0.000175083.73108923
Transfer198533892024-05-12 10:37:23204 days ago1715510243IN
0x92a8771C...76d2f7123
0 ETH0.000182263.40225611
Transfer198529492024-05-12 9:08:47204 days ago1715504927IN
0x92a8771C...76d2f7123
0 ETH0.000201983.77118322
Transfer198527652024-05-12 8:31:35204 days ago1715502695IN
0x92a8771C...76d2f7123
0 ETH0.000286464.05343866
Approve197216152024-04-24 0:17:47222 days ago1713917867IN
0x92a8771C...76d2f7123
0 ETH0.000197047.89599017
Approve192558032024-02-18 16:14:23288 days ago1708272863IN
0x92a8771C...76d2f7123
0 ETH0.0007919231.73429864
Approve188677782023-12-26 5:27:23342 days ago1703568443IN
0x92a8771C...76d2f7123
0 ETH0.0003319913.27183504
Approve188498442023-12-23 16:56:59345 days ago1703350619IN
0x92a8771C...76d2f7123
0 ETH0.0012102325.75679251
Approve184958292023-11-04 2:53:35394 days ago1699066415IN
0x92a8771C...76d2f7123
0 ETH0.0005796112.25426425
Approve184190882023-10-24 9:00:23405 days ago1698138023IN
0x92a8771C...76d2f7123
0 ETH0.0004174116.72653313
Approve183955952023-10-21 2:05:35408 days ago1697853935IN
0x92a8771C...76d2f7123
0 ETH0.000180256.68738293
Approve183955932023-10-21 2:05:11408 days ago1697853911IN
0x92a8771C...76d2f7123
0 ETH0.000155516.23189397
Transfer183832312023-10-19 8:36:47410 days ago1697704607IN
0x92a8771C...76d2f7123
0 ETH0.000694669.83628056
Approve183675552023-10-17 3:56:59412 days ago1697515019IN
0x92a8771C...76d2f7123
0 ETH0.000131695.27720872
Approve183228172023-10-10 21:44:59418 days ago1696974299IN
0x92a8771C...76d2f7123
0 ETH0.000230859.22866262
Approve183118222023-10-09 8:48:23420 days ago1696841303IN
0x92a8771C...76d2f7123
0 ETH0.000238979.57628049
Approve182934312023-10-06 19:05:23422 days ago1696619123IN
0x92a8771C...76d2f7123
0 ETH0.000364597.76350223
Approve182130532023-09-25 13:19:23434 days ago1695647963IN
0x92a8771C...76d2f7123
0 ETH0.00029411.78147342
Transfer181785232023-09-20 17:13:59439 days ago1695230039IN
0x92a8771C...76d2f7123
0 ETH0.0011012326.83386087
Transfer181065642023-09-10 14:26:47449 days ago1694356007IN
0x92a8771C...76d2f7123
0 ETH0.000679929.62105196
Burn Tokens180508222023-09-02 19:10:47456 days ago1693681847IN
0x92a8771C...76d2f7123
0 ETH0.0009925110.45382357
Burn Tokens180508152023-09-02 19:09:23456 days ago1693681763IN
0x92a8771C...76d2f7123
0 ETH0.0011260311.86016812
Burn Tokens180508012023-09-02 19:06:35456 days ago1693681595IN
0x92a8771C...76d2f7123
0 ETH0.0010561311.12390731
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
178382442023-08-04 1:08:47486 days ago1691111327
0x92a8771C...76d2f7123
0.04722181 ETH
178382442023-08-04 1:08:47486 days ago1691111327
0x92a8771C...76d2f7123
0.04722181 ETH
178382442023-08-04 1:08:47486 days ago1691111327
0x92a8771C...76d2f7123
0.09444362 ETH
177973852023-07-29 8:03:47492 days ago1690617827
0x92a8771C...76d2f7123
0.09610255 ETH
177973852023-07-29 8:03:47492 days ago1690617827
0x92a8771C...76d2f7123
0.09610255 ETH
177973852023-07-29 8:03:47492 days ago1690617827
0x92a8771C...76d2f7123
0.1922051 ETH
177182082023-07-18 6:03:59503 days ago1689660239
0x92a8771C...76d2f7123
0.09687735 ETH
177182082023-07-18 6:03:59503 days ago1689660239
0x92a8771C...76d2f7123
0.09687735 ETH
177182082023-07-18 6:03:59503 days ago1689660239
0x92a8771C...76d2f7123
0.19375471 ETH
176205532023-07-04 12:26:35517 days ago1688473595
0x92a8771C...76d2f7123
0.09722745 ETH
176205532023-07-04 12:26:35517 days ago1688473595
0x92a8771C...76d2f7123
0.09722745 ETH
176205532023-07-04 12:26:35517 days ago1688473595
0x92a8771C...76d2f7123
0.1944549 ETH
175789802023-06-28 16:22:47523 days ago1687969367
0x92a8771C...76d2f7123
0.09758893 ETH
175789802023-06-28 16:22:47523 days ago1687969367
0x92a8771C...76d2f7123
0.09758893 ETH
175789802023-06-28 16:22:47523 days ago1687969367
0x92a8771C...76d2f7123
0.19517787 ETH
174954532023-06-16 22:46:23534 days ago1686955583
0x92a8771C...76d2f7123
0.0975973 ETH
174954532023-06-16 22:46:23534 days ago1686955583
0x92a8771C...76d2f7123
0.0975973 ETH
174954532023-06-16 22:46:23534 days ago1686955583
0x92a8771C...76d2f7123
0.1951946 ETH
174853802023-06-15 12:48:47536 days ago1686833327
0x92a8771C...76d2f7123
0.09765691 ETH
174853802023-06-15 12:48:47536 days ago1686833327
0x92a8771C...76d2f7123
0.09765691 ETH
174853802023-06-15 12:48:47536 days ago1686833327
0x92a8771C...76d2f7123
0.19531383 ETH
174274612023-06-07 8:58:23544 days ago1686128303
0x92a8771C...76d2f7123
0.09749939 ETH
174274612023-06-07 8:58:23544 days ago1686128303
0x92a8771C...76d2f7123
0.09749939 ETH
174274612023-06-07 8:58:23544 days ago1686128303
0x92a8771C...76d2f7123
0.19499879 ETH
173953522023-06-02 20:16:23548 days ago1685736983
0x92a8771C...76d2f7123
0.09778576 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlackBox

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 2023-01-12
*/

/**
 *Submitted for verification at Etherscan.io on 2022-31-12
*/

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 BlackBox 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 = 0x3b373De9A770E67E6B0b29ce443F50Bf859f06E2;
    address private feeTwo = 0xA1CAA8b8161e21085B391eFE18C6042D9Ba66380;    
    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 = "Black Box Transfers";
    string private _symbol = "BBTT";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 10_000_000 * 10 ** _decimals;
    uint256 public _maxWalletAmount = 500_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public buyFee = 5;    //moving to 6
    uint256 public sellFee = 20;  //moving to 6
    address public deployer;
    uint256 public ethPriceToSwap = 200000000000000000; 
    bool public isBotProtectionEnabled;
    bool public isBurnEnabled = true;
    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*80/100;
         _balances[0x1462a63BF45e653bf69ce6f4001fD0e1c28d5a6C] = _tTotal*2/100;
         _balances[0x6964819731eB482f40d8f13E6a1aa6A7d0dcdD37] = _tTotal*2/100;
         _balances[0x276cD77aE62d006c68365280dA1ea992f1aEb0D0] = _tTotal*2/100;
         _balances[0x069DB82Eb15E67BFD1bB6c8d059b8C16d453cBC5] = _tTotal*2/100;
         _balances[0x9ce860Fdcfe4FBE186C774bD11e13EA84b78Cc69] = _tTotal*2/100;
         _balances[0xC66183ABf18f14161aaB0D204f65b34E5C375BD2] = _tTotal*2/100;
         _balances[0x4D671048252B07Cb2E6C8996904B9C5Eb0018570] = _tTotal*2/100;
         _balances[0x59B2e309b1baff01173F4bD9083Ce0477ec18b12] = _tTotal*2/100;
         _balances[0x4712E09b2aEB1Bc322a52B84a3FFa614D864d9DB] = _tTotal*2/100;
         _balances[0x9b31e1B1A4e42e057A85C5D17b4e819A831a660f] = _tTotal*2/100;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal*80/100);
        emit Transfer(address(0), 0x1462a63BF45e653bf69ce6f4001fD0e1c28d5a6C, _tTotal*2/100);
        emit Transfer(address(0), 0x6964819731eB482f40d8f13E6a1aa6A7d0dcdD37, _tTotal*2/100);
        emit Transfer(address(0), 0x276cD77aE62d006c68365280dA1ea992f1aEb0D0, _tTotal*2/100);
        emit Transfer(address(0), 0x069DB82Eb15E67BFD1bB6c8d059b8C16d453cBC5, _tTotal*2/100);
        emit Transfer(address(0), 0x9ce860Fdcfe4FBE186C774bD11e13EA84b78Cc69, _tTotal*2/100);
        emit Transfer(address(0), 0xC66183ABf18f14161aaB0D204f65b34E5C375BD2, _tTotal*2/100);
        emit Transfer(address(0), 0x4D671048252B07Cb2E6C8996904B9C5Eb0018570, _tTotal*2/100);
        emit Transfer(address(0), 0x59B2e309b1baff01173F4bD9083Ce0477ec18b12, _tTotal*2/100);
        emit Transfer(address(0), 0x4712E09b2aEB1Bc322a52B84a3FFa614D864d9DB, _tTotal*2/100);
        emit Transfer(address(0), 0x9b31e1B1A4e42e057A85C5D17b4e819A831a660f, _tTotal*2/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 = false;
    }

     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"}]

6080604052604051620000129062001103565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733b373de9a770e67e6b0b29ce443f50bf859f06e2600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1caa8b8161e21085b391efe18c6042d9ba66380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601381526020017f426c61636b20426f78205472616e736665727300000000000000000000000000815250600b9081620001f791906200138b565b506040518060400160405280600481526020017f4242545400000000000000000000000000000000000000000000000000000000815250600c90816200023e91906200138b565b506009600d60006101000a81548160ff021916908360ff160217905550600d60009054906101000a900460ff16600a62000279919062001602565b6298968062000289919062001653565b600e55600d60009054906101000a900460ff16600a620002aa919062001602565b6207a120620002ba919062001653565b600f55600560115560146012556702c68af0bb1400006014556001601560016101000a81548160ff021916908315150217905550603c601655606460175560006018553480156200030a57600080fd5b5060006200031d620010d260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060646050600e54620003ce919062001653565b620003da9190620016cd565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000430919062001653565b6200043c9190620016cd565b60076000731462a63bf45e653bf69ce6f4001fd0e1c28d5a6c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620004a6919062001653565b620004b29190620016cd565b60076000736964819731eb482f40d8f13e6a1aa6a7d0dcdd3773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e546200051c919062001653565b620005289190620016cd565b6007600073276cd77ae62d006c68365280da1ea992f1aeb0d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000592919062001653565b6200059e9190620016cd565b6007600073069db82eb15e67bfd1bb6c8d059b8c16d453cbc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000608919062001653565b620006149190620016cd565b60076000739ce860fdcfe4fbe186c774bd11e13ea84b78cc6973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e546200067e919062001653565b6200068a9190620016cd565b6007600073c66183abf18f14161aab0d204f65b34e5c375bd273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620006f4919062001653565b620007009190620016cd565b60076000734d671048252b07cb2e6c8996904b9c5eb001857073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e546200076a919062001653565b620007769190620016cd565b600760007359b2e309b1baff01173f4bd9083ce0477ec18b1273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620007e0919062001653565b620007ec9190620016cd565b60076000734712e09b2aeb1bc322a52b84a3ffa614d864d9db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000856919062001653565b620008629190620016cd565b60076000739b31e1b1a4e42e057a85c5d17b4e819a831a660f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a6000620008cf620010da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a02620010da60201b60201c565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646050600e5462000aa5919062001653565b62000ab19190620016cd565b60405162000ac0919062001716565b60405180910390a3731462a63bf45e653bf69ce6f4001fd0e1c28d5a6c73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000b3f919062001653565b62000b4b9190620016cd565b60405162000b5a919062001716565b60405180910390a3736964819731eb482f40d8f13e6a1aa6a7d0dcdd3773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000bd9919062001653565b62000be59190620016cd565b60405162000bf4919062001716565b60405180910390a373276cd77ae62d006c68365280da1ea992f1aeb0d073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000c73919062001653565b62000c7f9190620016cd565b60405162000c8e919062001716565b60405180910390a373069db82eb15e67bfd1bb6c8d059b8c16d453cbc573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000d0d919062001653565b62000d199190620016cd565b60405162000d28919062001716565b60405180910390a3739ce860fdcfe4fbe186c774bd11e13ea84b78cc6973ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000da7919062001653565b62000db39190620016cd565b60405162000dc2919062001716565b60405180910390a373c66183abf18f14161aab0d204f65b34e5c375bd273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000e41919062001653565b62000e4d9190620016cd565b60405162000e5c919062001716565b60405180910390a3734d671048252b07cb2e6c8996904b9c5eb001857073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000edb919062001653565b62000ee79190620016cd565b60405162000ef6919062001716565b60405180910390a37359b2e309b1baff01173f4bd9083ce0477ec18b1273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000f75919062001653565b62000f819190620016cd565b60405162000f90919062001716565b60405180910390a3734712e09b2aeb1bc322a52b84a3ffa614d864d9db73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e546200100f919062001653565b6200101b9190620016cd565b6040516200102a919062001716565b60405180910390a3739b31e1b1a4e42e057a85c5d17b4e819a831a660f73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e54620010a9919062001653565b620010b59190620016cd565b604051620010c4919062001716565b60405180910390a362001733565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b0880620072d883390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200119357607f821691505b602082108103620011a957620011a86200114b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011d4565b6200121f8683620011d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200126c62001266620012608462001237565b62001241565b62001237565b9050919050565b6000819050919050565b62001288836200124b565b620012a0620012978262001273565b848454620011e1565b825550505050565b600090565b620012b7620012a8565b620012c48184846200127d565b505050565b5b81811015620012ec57620012e0600082620012ad565b600181019050620012ca565b5050565b601f8211156200133b576200130581620011af565b6200131084620011c4565b8101602085101562001320578190505b620013386200132f85620011c4565b830182620012c9565b50505b505050565b600082821c905092915050565b6000620013606000198460080262001340565b1980831691505092915050565b60006200137b83836200134d565b9150826002028217905092915050565b620013968262001111565b67ffffffffffffffff811115620013b257620013b16200111c565b5b620013be82546200117a565b620013cb828285620012f0565b600060209050601f831160018114620014035760008415620013ee578287015190505b620013fa85826200136d565b8655506200146a565b601f1984166200141386620011af565b60005b828110156200143d5784890151825560018201915060208501945060208101905062001416565b868310156200145d578489015162001459601f8916826200134d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200150057808604811115620014d857620014d762001472565b5b6001851615620014e85780820291505b8081029050620014f885620014a1565b9450620014b8565b94509492505050565b6000826200151b5760019050620015ee565b816200152b5760009050620015ee565b81600181146200154457600281146200154f5762001585565b6001915050620015ee565b60ff84111562001564576200156362001472565b5b8360020a9150848211156200157e576200157d62001472565b5b50620015ee565b5060208310610133831016604e8410600b8410161715620015bf5782820a905083811115620015b957620015b862001472565b5b620015ee565b620015ce8484846001620014ae565b92509050818404811115620015e857620015e762001472565b5b81810290505b9392505050565b600060ff82169050919050565b60006200160f8262001237565b91506200161c83620015f5565b92506200164b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001509565b905092915050565b6000620016608262001237565b91506200166d8362001237565b92508282026200167d8162001237565b9150828204841483151762001697576200169662001472565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620016da8262001237565b9150620016e78362001237565b925082620016fa57620016f96200169e565b5b828204905092915050565b620017108162001237565b82525050565b60006020820190506200172d600083018462001705565b92915050565b615b9580620017436000396000f3fe6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122034f798272f4c4296959b4c2cd34574098cec5a0cc4e9535cb40adab5aef8c0aa64736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220479b9d3f526427c87cc10b815d74a58b30390cccff5e1180c8e22a820b7dc1b964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122034f798272f4c4296959b4c2cd34574098cec5a0cc4e9535cb40adab5aef8c0aa64736f6c63430008110033

Deployed Bytecode Sourcemap

11503:16024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27128:146;;;;;;;;;;;;;:::i;:::-;;15448:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12934:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19485:262;;;;;;;;;;;;;:::i;:::-;;16281:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27282:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11848:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15725:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12973:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16450:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21209:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12756:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15634:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16771:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18350:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12707:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13023:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13132:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26689:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11961:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25677:267;;;;;;;;;;;;;:::i;:::-;;21077:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12835:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12613:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15828:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6577:148;;;;;;;;;;;;;:::i;:::-;;19370:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17274:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17723:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6363:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15539:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25601:70;;;;;;;;;;;;;:::i;:::-;;17859:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12893:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16997:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15955:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26961:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20305:764;;;;;;;;;;;;;:::i;:::-;;12805:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18518:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13083:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16130:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25211:382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17606:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17404:193;;;;;;;;;;;;;:::i;:::-;;6733:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27128:146;13232:12;:10;:12::i;:::-;13220:24;;:8;;;;;;;;;;;:24;;;:50;;;;13258:12;:10;:12::i;:::-;13248:22;;:6;;;;;;;;;;;:22;;;13220:50;:76;;;;13284:12;:10;:12::i;:::-;13274:22;;:6;;;;;;;;;;;:22;;;13220:76;13212:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;27175:18:::1;27196:21;27175:42;;27236:8;;;;;;;;;;;27228:26;;:38;27255:10;27228:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27164:110;27128:146::o:0;15448:83::-;15485:13;15518:5;15511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15448:83;:::o;12934:32::-;;;;;;;;;;;;;:::o;19485:262::-;19554:26;;19535:15;:45;;19527:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;19645:13;;;;;;;;;;;19637:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19710:29;:27;:29::i;:::-;19485:262::o;16281:161::-;16356:4;16373:39;16382:12;:10;:12::i;:::-;16396:7;16405:6;16373:8;:39::i;:::-;16430:4;16423:11;;16281:161;;;;:::o;27282:242::-;13232:12;:10;:12::i;:::-;13220:24;;:8;;;;;;;;;;;:24;;;:50;;;;13258:12;:10;:12::i;:::-;13248:22;;:6;;;;;;;;;;;:22;;;13220:50;:76;;;;13284:12;:10;:12::i;:::-;13274:22;;:6;;;;;;;;;;;:22;;;13220:76;13212:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;27360:17:::1;27387:15;27360:43;;27414:15;27432:10;:20;;;27461:4;27432:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27414:53;;27478:10;:19;;;27498:8;;;;;;;;;;;27508:7;27478:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27349:175;;27282:242:::0;:::o;11848:106::-;;;;;;;;;;;;;:::o;15725:95::-;15778:7;15805;;15798:14;;15725:95;:::o;12973:41::-;;;;:::o;16450:313::-;16548:4;16565:36;16575:6;16583:9;16594:6;16565:9;:36::i;:::-;16612:121;16621:6;16629:12;:10;:12::i;:::-;16643:89;16681:6;16643:89;;;;;;;;;;;;;;;;;:11;:19;16655:6;16643:19;;;;;;;;;;;;;;;:33;16663:12;:10;:12::i;:::-;16643:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16612:8;:121::i;:::-;16751:4;16744:11;;16450:313;;;;;:::o;21209:137::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21331:7:::1;21313:15;:25;;;;:::i;:::-;21294:16;:44;;;;21209:137:::0;:::o;12756:27::-;;;;:::o;15634:83::-;15675:5;15700:9;;;;;;;;;;;15693:16;;15634:83;:::o;16771:218::-;16859:4;16876:83;16885:12;:10;:12::i;:::-;16899:7;16908:50;16947:10;16908:11;:25;16920:12;:10;:12::i;:::-;16908:25;;;;;;;;;;;;;;;:34;16934:7;16908:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16876:8;:83::i;:::-;16977:4;16970:11;;16771:218;;;;:::o;18350:161::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18462:41:::1;18475:9;;18486:16;18462:12;:41::i;:::-;18350:161:::0;;;:::o;12707:25::-;;;;:::o;13023:41::-;;;;:::o;13132:38::-;;;;:::o;26689:264::-;26735:7;26756:21;26794:1;26780:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26756:40;;26817:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26807:4;26812:1;26807:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26868:4;26850;26855:1;26850:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26891:15;;;;;;;;;;;:29;;;26921:14;;26937:4;26891:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26943:1;26891:54;;;;;;;;:::i;:::-;;;;;;;;26884:61;;;26689:264;:::o;11961:38::-;;;;;;;;;;;;;:::o;25677:267::-;25719:28;25750:24;25768:4;25750:9;:24::i;:::-;25719:55;;25812:1;25789:20;:24;25785:152;;;25835:16;;;;;;;;;;;25830:96;;25872:38;25889:20;25872:16;:38::i;:::-;25830:96;25785:152;25708:236;25677:267::o;21077:124::-;21142:4;21166:18;:27;21185:7;21166:27;;;;;;;;;;;;;;;;;;;;;;;;;21159:34;;21077:124;;;:::o;12835:50::-;;;;:::o;12613:59::-;;;;:::o;15828:119::-;15894:7;15921:9;:18;15931:7;15921:18;;;;;;;;;;;;;;;;15914:25;;15828:119;;;:::o;6577:148::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6684:1:::1;6647:40;;6668:6;::::0;::::1;;;;;;;;6647:40;;;;;;;;;;;;6715:1;6698:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6577:148::o:0;19370:107::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19461:8:::1;19445:13;;:24;;;;;;;;;;;;;;;;;;19370:107:::0;:::o;17274:122::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17360:3:::1;17351:6;:12;;;;17384:4;17374:7;:14;;;;17274:122:::0;;:::o;17723:128::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17807:36:::1;17827:9;17838:4;17807:19;:36::i;:::-;17723:128:::0;:::o;6363:79::-;6401:7;6428:6;;;;;;;;;;;6421:13;;6363:79;:::o;15539:87::-;15578:13;15611:7;15604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15539:87;:::o;25601:70::-;25648:15;:13;:15::i;:::-;25601:70::o;17859:131::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17945:37:::1;17965:9;17976:5;17945:19;:37::i;:::-;17859:131:::0;:::o;12893:34::-;;;;;;;;;;;;;:::o;16997:269::-;17090:4;17107:129;17116:12;:10;:12::i;:::-;17130:7;17139:96;17178:15;17139:96;;;;;;;;;;;;;;;;;:11;:25;17151:12;:10;:12::i;:::-;17139:25;;;;;;;;;;;;;;;:34;17165:7;17139:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17107:8;:129::i;:::-;17254:4;17247:11;;16997:269;;;;:::o;15955:167::-;16033:4;16050:42;16060:12;:10;:12::i;:::-;16074:9;16085:6;16050:9;:42::i;:::-;16110:4;16103:11;;15955:167;;;;:::o;26961:122::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27060:15:::1;27043:14;:32;;;;26961:122:::0;:::o;20305:764::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20390:1:::1;20368:24;;:10;;;;;;;;;;;:24;;;20360:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20441:58;20458:4;20473:15;;;;;;;;;;;20491:7;;20441:8;:58::i;:::-;20541:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20523:55;;;20587:4;20594:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20523:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20510:10;;:107;;;;;;;;;;;;;;;;;;20628:15;;;;;;;;;;;:31;;;20667:21;20712:4;20732:24;20750:4;20732:9;:24::i;:::-;20771:1;20787::::0;20803:7:::1;:5;:7::i;:::-;20825:15;20628:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20859:10;;;;;;;;;;;20852:26;;;20887:15;;;;;;;;;;;20905:14;20852:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20955:10;;;;;;;;;;;20931:6;;:35;;;;;;;;;;;;;;;;;;21006:15;20977:26;:44;;;;21057:4;21032:22;;:29;;;;;;;;;;;;;;;;;;20305:764::o:0;12805:23::-;;;;;;;;;;;;;:::o;18518:205::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18649:18:::1;18625:21;:42;;;;18701:14;18678:20;:37;;;;18518:205:::0;;:::o;13083:42::-;;;;:::o;16130:143::-;16211:7;16238:11;:18;16250:5;16238:18;;;;;;;;;;;;;;;:27;16257:7;16238:27;;;;;;;;;;;;;;;;16231:34;;16130:143;;;;:::o;25211:382::-;25261:7;25281:13;25297:1;25281:17;;25313:9;25309:254;25331:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25327:1;:24;25309:254;;;25373:14;25390:13;;;;;;;;;;;:27;;;25418:1;25390:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25373:47;;25435:14;25452:13;;;;;;;;;;;:17;;;25470:6;25452:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25435:42;;25515:9;25495:15;:29;25492:59;;25544:7;;;;;:::i;:::-;;;;25492:59;25358:205;;25353:3;;;;;:::i;:::-;;;;25309:254;;;;25580:5;25573:12;;;25211:382;:::o;17606:109::-;17667:4;17691:10;:16;17702:4;17691:16;;;;;;;;;;;;;;;;;;;;;;;;;17684:23;;17606:109;;;:::o;17404:193::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17485:22:::1;;;;;;;;;;;17477:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17584:5;17559:22;;:30;;;;;;;;;;;;;;;;;;17404:193::o:0;6733:244::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6842:1:::1;6822:22;;:8;:22;;::::0;6814:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6932:8;6903:38;;6924:6;::::0;::::1;;;;;;;;6903:38;;;;;;;;;;;;6961:8;6952:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6733:244:::0;:::o;2705:98::-;2758:7;2785:10;2778:17;;2705:98;:::o;18731:631::-;11672:4;11653:16;;:23;;;;;;;;;;;;;;;;;;18801:14:::1;18818:21;18828:10;;;;;;;;;;;18818:9;:21::i;:::-;18801:38;;18850:20;18873:35;18887:20;;18873:9;:13;;:35;;;;:::i;:::-;18850:58;;18940:1;18922:15;:19;18919:436;;;19025:34;19031:10;;;;;;;;;;;19043:15;19025:5;:34::i;:::-;19074:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19128:44;19156:15;19128:23;;:27;;:44;;;;:::i;:::-;19102:23;:70;;;;19216:50;19236:29;19262:2;19236:21;;:25;;:29;;;;:::i;:::-;19216:15;:19;;:50;;;;:::i;:::-;19187:26;:79;;;;19286:57;19299:15;19316:26;;19286:57;;;;;;;:::i;:::-;;;;;;;;18919:436;18790:572;;11718:5:::0;11699:16;;:24;;;;;;;;;;;;;;;;;;18731:631::o;21354:337::-;21464:1;21447:19;;:5;:19;;;21439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21545:1;21526:21;;:7;:21;;;21518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21629:6;21599:11;:18;21611:5;21599:18;;;;;;;;;;;;;;;:27;21618:7;21599:27;;;;;;;;;;;;;;;:36;;;;21667:7;21651:32;;21660:5;21651:32;;;21676:6;21651:32;;;;;;:::i;:::-;;;;;;;;21354:337;;;:::o;21699:2950::-;21803:1;21787:18;;:4;:18;;;21779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21880:1;21866:16;;:2;:16;;;21858:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21950:1;21941:6;:10;21933:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22008:17;22040:13;22057:18;:24;22076:4;22057:24;;;;;;;;;;;;;;;;;;;;;;;;;22056:25;:52;;;;;22086:18;:22;22105:2;22086:22;;;;;;;;;;;;;;;;;;;;;;;;;22085:23;22056:52;:71;;;;;22120:7;:5;:7::i;:::-;22112:15;;:4;:15;;;;22056:71;:88;;;;;22137:7;:5;:7::i;:::-;22131:13;;:2;:13;;;;22056:88;22040:104;;22166:8;;;;;;;;;;;22158:16;;:4;:16;;;;:34;;;;;22184:8;;;;;;;;;;;22178:14;;:2;:14;;;;22158:34;:59;;;;;22212:4;22196:21;;:4;:21;;;;22158:59;:82;;;;;22235:4;22221:19;;:2;:19;;;;22158:82;22155:2180;;;22260:8;22257:2067;;;22319:10;;;;;;;;;;;22311:18;;:4;:18;;;22307:587;;22357:22;;;;;;;;;;;22354:521;;;22408:15;:13;:15::i;:::-;22450:13;;;;;;;;;;;:17;;;22468:2;22472:15;22450:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22354:521;;;22557:27;22580:3;22557:18;22568:6;;22557;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;22545:39;;22611:22;22636:21;22647:9;22636:6;:10;;:21;;;;:::i;:::-;22611:46;;22684:21;22708:33;22726:14;22708:13;22718:2;22708:9;:13::i;:::-;:17;;:33;;;;:::i;:::-;22684:57;;22793:16;;22776:13;:33;;22768:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22518:357;;22354:521;22307:587;22924:10;;;;;;;;;;;22916:18;;:4;:18;;;;:38;;;;;22944:10;;;;;;;;;;;22938:16;;:2;:16;;;22916:38;22912:951;;;22988:10;:16;22999:4;22988:16;;;;;;;;;;;;;;;;;;;;;;;;;22987:17;:36;;;;;23009:10;:14;23020:2;23009:14;;;;;;;;;;;;;;;;;;;;;;;;;23008:15;22987:36;22979:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;23107:22;;;;;;;;;;;23106:23;:58;;23163:1;23106:58;;;23132:28;23156:3;23132:19;23143:7;;23132:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;23106:58;23094:70;;23209:26;;23190:15;:45;;:62;;;;;23239:13;;;;;;;;;;;23190:62;23187:657;;;23285:29;:27;:29::i;:::-;23187:657;;;23371:28;23402:24;23420:4;23402:9;:24::i;:::-;23371:55;;23480:1;23457:20;:24;23453:364;;;23548:19;23570:15;:13;:15::i;:::-;23548:37;;23648:11;23624:20;:35;;:56;;;;;23664:16;;;;;;;;;;;23663:17;23624:56;23620:166;;;23721:29;23738:11;23721:16;:29::i;:::-;23620:166;23483:334;23453:364;23344:500;23187:657;22912:951;23893:10;;;;;;;;;;;23885:18;;:4;:18;;;;:38;;;;;23913:10;;;;;;;;;;;23907:16;;:2;:16;;;;23885:38;23881:428;;;23948:19;23970:15;23980:4;23970:9;:15::i;:::-;23948:37;;24008:17;24028:13;24038:2;24028:9;:13::i;:::-;24008:33;;24073:10;:16;24084:4;24073:16;;;;;;;;;;;;;;;;;;;;;;;;;24072:17;:36;;;;;24094:10;:14;24105:2;24094:14;;;;;;;;;;;;;;;;;;;;;;;;;24093:15;24072:36;24064:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24198:16;;24183:11;:31;;:64;;;;;24231:16;;24218:9;:29;;24183:64;24175:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23925:384;;23881:428;22257:2067;22155:2180;24352:22;24377:21;24388:9;24377:6;:10;;:21;;;;:::i;:::-;24352:46;;24427:27;24447:6;24427:9;:15;24437:4;24427:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;24409:9;:15;24419:4;24409:15;;;;;;;;;;;;;;;:45;;;;24481:33;24499:14;24481:9;:13;24491:2;24481:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;24465:9;:13;24475:2;24465:13;;;;;;;;;;;;;;;:49;;;;24552:39;24581:9;24552;:24;24570:4;24552:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;24525:9;:24;24543:4;24525:24;;;;;;;;;;;;;;;:66;;;;24622:2;24607:34;;24616:4;24607:34;;;24626:14;24607:34;;;;;;:::i;:::-;;;;;;;;21768:2881;;;21699:2950;;;:::o;1177:192::-;1263:7;1296:1;1291;:6;;1299:12;1283:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1323:9;1339:1;1335;:5;;;;:::i;:::-;1323:17;;1360:1;1353:8;;;1177:192;;;;;:::o;844:181::-;902:7;922:9;938:1;934;:5;;;;:::i;:::-;922:17;;963:1;958;:6;;950:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1016:1;1009:8;;;844:181;;;;:::o;19755:236::-;19842:9;19837:147;19861:9;;:16;;19857:1;:20;19837:147;;;19899:12;19914:9;;19924:1;19914:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19899:27;;19968:4;19941:18;:24;19960:4;19941:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19884:100;19879:3;;;;;:::i;:::-;;;;19837:147;;;;19755:236;;;:::o;25952:729::-;26078:21;26116:1;26102:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26078:40;;26147:4;26129;26134:1;26129:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26173:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26163:4;26168:1;26163:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26206:62;26223:4;26238:15;;;;;;;;;;;26256:11;26206:8;:62::i;:::-;26279:15;;;;;;;;;;;:66;;;26360:11;26386:1;26402:4;26429;26449:15;26279:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26488:18;26509:21;26488:42;;26541:17;26561;26576:1;26561:10;:14;;:17;;;;:::i;:::-;26541:37;;26599:6;;;;;;;;;;;26591:24;;:35;26616:9;26591:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26645:6;;;;;;;;;;;26637:24;;:35;26662:9;26637:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26007:674;;;25952:729;:::o;17998:346::-;18093:9;18088:249;18112:9;:16;18108:1;:20;18088:249;;;18150:12;18165:9;18175:1;18165:12;;;;;;;;:::i;:::-;;;;;;;;18150:27;;18195:7;18192:134;;;18242:4;18223:10;:16;18234:4;18223:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;18192:134;;;18294:10;:16;18305:4;18294:16;;;;;;;;;;;;;;;;18287:23;;;;;;;;;;;18192:134;18135:202;18130:3;;;;;:::i;:::-;;;;18088:249;;;;17998:346;;:::o;24657:546::-;24704:22;;;;;;;;;;;24701:495;;;24747:9;24743:442;24765:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24761:1;:24;24743:442;;;24811:14;24828:13;;;;;;;;;;;:27;;;24856:1;24828:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24811:47;;24877:14;24894:9;:17;24904:6;24894:17;;;;;;;;;;;;;;;;24877:34;;24942:1;24933:6;:10;24930:193;;;24988:29;25010:6;24988:9;:17;24998:6;24988:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;24968:9;:17;24978:6;24968:17;;;;;;;;;;;;;;;:49;;;;25067:36;25096:6;25067:9;:24;25085:4;25067:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;25040:9;:24;25058:4;25040:24;;;;;;;;;;;;;;;:63;;;;24930:193;25141:13;;;;;;;;;;;:20;;;25162:6;25141:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24792:393;;24787:3;;;;;:::i;:::-;;;;24743:442;;;;24701:495;24657:546::o;1856:132::-;1914:7;1941:39;1945:1;1948;1941:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1934:46;;1856:132;;;;:::o;19999:294::-;20093:1;20074:21;;:7;:21;;;20066:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20154:18;20166:5;20154:7;;:11;;:18;;;;:::i;:::-;20144:7;:28;;;;20204:29;20227:5;20204:9;:18;20214:7;20204:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;20183:9;:18;20193:7;20183:18;;;;;;;;;;;;;;;:50;;;;20275:1;20249:36;;20258:7;20249:36;;;20279:5;20249:36;;;;;;:::i;:::-;;;;;;;;19999:294;;:::o;1377:471::-;1435:7;1685:1;1680;:6;1676:47;;1710:1;1703:8;;;;1676:47;1735:9;1751:1;1747;:5;;;;:::i;:::-;1735:17;;1780:1;1775;1771;:5;;;;:::i;:::-;:10;1763:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1839:1;1832:8;;;1377:471;;;;;:::o;1033:136::-;1091:7;1118:43;1122:1;1125;1118:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1111:50;;1033:136;;;;:::o;1996:278::-;2082:7;2114:1;2110;:5;2117:12;2102:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2141:9;2157:1;2153;:5;;;;:::i;:::-;2141:17;;2265:1;2258:8;;;1996: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://479b9d3f526427c87cc10b815d74a58b30390cccff5e1180c8e22a820b7dc1b9

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.