ETH Price: $3,488.79 (+2.04%)
Gas: 12 Gwei

Contract

0xdf504bd3872648377d7B9Ebc9EDBfEc1d854d364
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201885472024-06-28 6:59:233 days ago1719557963IN
0xdf504bd3...1d854d364
0 ETH0.000149533.16738936
Approve201739832024-06-26 6:10:235 days ago1719382223IN
0xdf504bd3...1d854d364
0 ETH0.000105092.22616614
Approve201690552024-06-25 13:40:356 days ago1719322835IN
0xdf504bd3...1d854d364
0 ETH0.0005100310.81706306
Transfer201690152024-06-25 13:32:356 days ago1719322355IN
0xdf504bd3...1d854d364
0 ETH0.000487917.41111926
Approve201543802024-06-23 12:26:478 days ago1719145607IN
0xdf504bd3...1d854d364
0 ETH0.000120412.55059825
Approve201241452024-06-19 6:58:1112 days ago1718780291IN
0xdf504bd3...1d854d364
0 ETH0.000149533.17137925
Approve200578172024-06-10 0:22:1121 days ago1717978931IN
0xdf504bd3...1d854d364
0 ETH0.000282025.97375605
Approve199840382024-05-30 17:06:5932 days ago1717088819IN
0xdf504bd3...1d854d364
0 ETH0.0007921316.8
Approve199347342024-05-23 19:41:4738 days ago1716493307IN
0xdf504bd3...1d854d364
0 ETH0.0002848911.45681515
Approve197861402024-05-03 0:54:1159 days ago1714697651IN
0xdf504bd3...1d854d364
0 ETH0.000283696.00909165
Approve197847192024-05-02 20:08:2359 days ago1714680503IN
0xdf504bd3...1d854d364
0 ETH0.00043529.22999066
Approve196517732024-04-14 5:44:5978 days ago1713073499IN
0xdf504bd3...1d854d364
0 ETH0.0006460613.70198646
Approve196094022024-04-08 7:15:2384 days ago1712560523IN
0xdf504bd3...1d854d364
0 ETH0.000552611.70493507
Approve195597082024-04-01 8:10:5991 days ago1711959059IN
0xdf504bd3...1d854d364
0 ETH0.0009608620.35266992
Approve195529622024-03-31 9:22:1192 days ago1711876931IN
0xdf504bd3...1d854d364
0 ETH0.0008031317.01166974
Approve194782082024-03-20 20:12:11102 days ago1710965531IN
0xdf504bd3...1d854d364
0 ETH0.0022548248.09072321
Approve193508132024-03-02 23:38:47120 days ago1709422727IN
0xdf504bd3...1d854d364
0 ETH0.0009641144.05562788
Approve193508082024-03-02 23:37:47120 days ago1709422667IN
0xdf504bd3...1d854d364
0 ETH0.0009257842.30401114
Approve193205502024-02-27 18:02:59125 days ago1709056979IN
0xdf504bd3...1d854d364
0 ETH0.0028454460.34744555
Approve193201932024-02-27 16:50:47125 days ago1709052647IN
0xdf504bd3...1d854d364
0 ETH0.0013667154.96117429
Approve192610592024-02-19 10:02:23133 days ago1708336943IN
0xdf504bd3...1d854d364
0 ETH0.0014613830.95443093
Approve192538132024-02-18 9:30:47134 days ago1708248647IN
0xdf504bd3...1d854d364
0 ETH0.0005437221.81258513
Approve192516892024-02-18 2:19:35134 days ago1708222775IN
0xdf504bd3...1d854d364
0 ETH0.0007586816.09060013
Transfer192489392024-02-17 17:03:47135 days ago1708189427IN
0xdf504bd3...1d854d364
0 ETH0.0016086933.00901731
Approve192245002024-02-14 6:43:35138 days ago1707893015IN
0xdf504bd3...1d854d364
0 ETH0.0006971114.87179862
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
197847272024-05-02 20:09:5959 days ago1714680599
0xdf504bd3...1d854d364
0.00771599 ETH
197847272024-05-02 20:09:5959 days ago1714680599
0xdf504bd3...1d854d364
0.00771599 ETH
195503792024-03-31 0:39:5992 days ago1711845599
0xdf504bd3...1d854d364
0.0163833 ETH
195503792024-03-31 0:39:5992 days ago1711845599
0xdf504bd3...1d854d364
0.0163833 ETH
193207592024-02-27 18:44:59124 days ago1709059499
0xdf504bd3...1d854d364
0.02592077 ETH
193207592024-02-27 18:44:59124 days ago1709059499
0xdf504bd3...1d854d364
0.02592077 ETH
193205552024-02-27 18:03:59125 days ago1709057039
0xdf504bd3...1d854d364
0.00977164 ETH
193205552024-02-27 18:03:59125 days ago1709057039
0xdf504bd3...1d854d364
0.00977164 ETH
191813982024-02-08 5:36:11144 days ago1707370571
0xdf504bd3...1d854d364
0.01422241 ETH
191813982024-02-08 5:36:11144 days ago1707370571
0xdf504bd3...1d854d364
0.01422241 ETH
191465432024-02-03 8:08:23149 days ago1706947703
0xdf504bd3...1d854d364
0.01436963 ETH
191465432024-02-03 8:08:23149 days ago1706947703
0xdf504bd3...1d854d364
0.01436963 ETH
191455152024-02-03 4:38:35149 days ago1706935115
0xdf504bd3...1d854d364
0.01619601 ETH
191455152024-02-03 4:38:35149 days ago1706935115
0xdf504bd3...1d854d364
0.01619601 ETH
191294722024-01-31 22:35:47151 days ago1706740547
0xdf504bd3...1d854d364
0.01875113 ETH
191294722024-01-31 22:35:47151 days ago1706740547
0xdf504bd3...1d854d364
0.01875113 ETH
191224892024-01-30 23:05:47152 days ago1706655947
0xdf504bd3...1d854d364
0.02508425 ETH
191224892024-01-30 23:05:47152 days ago1706655947
0xdf504bd3...1d854d364
0.02508425 ETH
191204262024-01-30 16:09:59153 days ago1706630999
0xdf504bd3...1d854d364
0.02476521 ETH
191204262024-01-30 16:09:59153 days ago1706630999
0xdf504bd3...1d854d364
0.02476521 ETH
191149372024-01-29 21:43:35153 days ago1706564615
0xdf504bd3...1d854d364
0.03444077 ETH
191149372024-01-29 21:43:35153 days ago1706564615
0xdf504bd3...1d854d364
0.03444077 ETH
191134022024-01-29 16:34:23154 days ago1706546063
0xdf504bd3...1d854d364
0.03928402 ETH
191134022024-01-29 16:34:23154 days ago1706546063
0xdf504bd3...1d854d364
0.03928402 ETH
191127402024-01-29 14:20:35154 days ago1706538035
0xdf504bd3...1d854d364
0.05924522 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitWeave

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Website : https://bit-weave.com/
Telegram : https://t.me/bitweave
Twitter : https://twitter.com/bitweaveerc


*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.21;

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

    function WETH() external pure returns (address);

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

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

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

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

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

pragma solidity ^0.8.21;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;

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);
}

pragma solidity ^0.8.21;


interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.21;

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

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

pragma solidity ^0.8.21;


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.21;


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;

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

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

    bool private swapping;

    address private marketingWallet;

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

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

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public blocks;

    uint256 public buyTotalFees;

    uint256 public sellTotalFees;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    mapping(uint256 => uint256) private blockSwaps;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("BitWeave", "WEAVE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 100000000 * 1e18; //100M

        maxTransactionAmount = 2000000 * 1e18; //2M
        maxWallet = 2000000 * 1e18; //2M
        swapTokensAtAmount = 200000 * 1e18;
        maxSwapAmount = 1000000 * 1e18; //1M

        marketingWallet = msg.sender;

        uint256 amountLP = totalSupply.mul(95).div(100);
        uint256 amountTeam = totalSupply.mul(5).div(100);

        _mint(address(this), amountLP); 
        _mint(msg.sender, amountTeam);

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

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

    receive() external payable {}

    function AddLP(address[] memory _whitelist) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        for(uint256 i; i < _whitelist.length; ++i){
            whitelistContract(_whitelist[i], true);
        }
    }

    function startTrading() external onlyOwner {
        
        blocks = 0;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount * (10 ** 18);
    }

    function updateMaxSwap(uint256 newAmount) external onlyOwner {
        maxSwapAmount = newAmount * (10 ** 18);
    }

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

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

    function whitelistContract(address _whitelist, bool isWL) public onlyOwner {
        _isExcludedMaxTransactionAmount[_whitelist] = isWL;

        _isExcludedFromFees[_whitelist] = isWL;
    }

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

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

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

    function manualswap(uint256 amount) external {
        require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        bool success;
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // function updateBuyFees(uint256 _marketingFee) external onlyOwner {
    //     buyTotalFees = _marketingFee;
    // }

    // function updateSellFees(uint256 _marketingFee) external onlyOwner {
    //     sellTotalFees = _marketingFee;
    // }

    function updateFees(uint256 _buy, uint256 _sell) external onlyOwner {
        require(_buy <= 5, "Exceed the limit");
        require(_sell <= 5, "Exceed the limit");
        buyTotalFees = _buy;
        sellTotalFees = _sell;
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(from, addresses[i], amounts[i] * (10 ** 18));
        }
    }

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

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

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if ((launchedAt + blocks) >= block.number) {
                    // Starting Taxes
                    sellTotalFees = 30;
                    buyTotalFees = 30;
                }

                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from]
                && !_isExcludedFromFees[to]
        ) {
            // Limit swaps per block
            if (blockSwaps[block.number] < 3) {
                swapping = true;

                swapBack();

                swapping = false;

                blockSwaps[block.number] = blockSwaps[block.number] + 1;
            }
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > maxSwapAmount) {
            contractBalance = maxSwapAmount;
        }

        // Halve the amount of liquidity tokens

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 totalETH = address(this).balance;

        (success,) = address(marketingWallet).call{value: totalETH}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"AddLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600881526020017f42697457656176650000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f57454156450000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000c98565b508060049081620000ee919062000c98565b5050506200011162000105620004de60201b60201c565b620004e560201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c816001620005a860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000de1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000de1565b6040518363ffffffff1660e01b81526004016200028b92919062000e22565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000de1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a0516001620005a860201b60201c565b6200032b60a05160016200068f60201b60201c565b5f6a52b7d2dcc80cd2e400000090506a01a784379d99db420000006007819055506a01a784379d99db42000000600981905550692a5a058fc295ed00000060088190555069d3c21bcecceda1000000600a819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f620003ec6064620003dd605f856200072d60201b90919060201c565b6200074460201b90919060201c565b90505f6200041a60646200040b6005866200072d60201b90919060201c565b6200074460201b90919060201c565b90506200042e30836200075b60201b60201c565b6200044033826200075b60201b60201c565b6200046262000454620008cb60201b60201c565b6001620008f360201b60201c565b62000475306001620008f360201b60201c565b6200048a61dead6001620008f360201b60201c565b620004ac6200049e620008cb60201b60201c565b6001620005a860201b60201c565b620004bf306001620005a860201b60201c565b620004d461dead6001620005a860201b60201c565b50505050620010b1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b8620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005de620008cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062000eab565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f81836200073c919062000ef8565b905092915050565b5f818362000753919062000f6f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c39062000ff4565b60405180910390fd5b620007df5f838362000a2a60201b60201c565b8060025f828254620007f2919062001014565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000846919062001014565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008ac91906200105f565b60405180910390a3620008c75f838362000a2f60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000903620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000929620008cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009799062000eab565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a1e919062001096565b60405180910390a25050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ab057607f821691505b60208210810362000ac65762000ac562000a6b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aed565b62000b36868362000aed565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b8062000b7a62000b748462000b4e565b62000b57565b62000b4e565b9050919050565b5f819050919050565b62000b9b8362000b60565b62000bb362000baa8262000b87565b84845462000af9565b825550505050565b5f90565b62000bc962000bbb565b62000bd681848462000b90565b505050565b5b8181101562000bfd5762000bf15f8262000bbf565b60018101905062000bdc565b5050565b601f82111562000c4c5762000c168162000acc565b62000c218462000ade565b8101602085101562000c31578190505b62000c4962000c408562000ade565b83018262000bdb565b50505b505050565b5f82821c905092915050565b5f62000c6e5f198460080262000c51565b1980831691505092915050565b5f62000c88838362000c5d565b9150826002028217905092915050565b62000ca38262000a34565b67ffffffffffffffff81111562000cbf5762000cbe62000a3e565b5b62000ccb825462000a98565b62000cd882828562000c01565b5f60209050601f83116001811462000d0e575f841562000cf9578287015190505b62000d05858262000c7b565b86555062000d74565b601f19841662000d1e8662000acc565b5f5b8281101562000d475784890151825560018201915060208501945060208101905062000d20565b8683101562000d67578489015162000d63601f89168262000c5d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000dab8262000d80565b9050919050565b62000dbd8162000d9f565b811462000dc8575f80fd5b50565b5f8151905062000ddb8162000db2565b92915050565b5f6020828403121562000df95762000df862000d7c565b5b5f62000e088482850162000dcb565b91505092915050565b62000e1c8162000d9f565b82525050565b5f60408201905062000e375f83018562000e11565b62000e46602083018462000e11565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e9360208362000e4d565b915062000ea08262000e5d565b602082019050919050565b5f6020820190508181035f83015262000ec48162000e85565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f048262000b4e565b915062000f118362000b4e565b925082820262000f218162000b4e565b9150828204841483151762000f3b5762000f3a62000ecb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f7b8262000b4e565b915062000f888362000b4e565b92508262000f9b5762000f9a62000f42565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000fdc601f8362000e4d565b915062000fe98262000fa6565b602082019050919050565b5f6020820190508181035f8301526200100d8162000fce565b9050919050565b5f620010208262000b4e565b91506200102d8362000b4e565b925082820190508082111562001048576200104762000ecb565b5b92915050565b620010598162000b4e565b82525050565b5f602082019050620010745f8301846200104e565b92915050565b5f8115159050919050565b62001090816200107a565b82525050565b5f602082019050620010ab5f83018462001085565b92915050565b60805160a0516149f96200110b5f395f8181610f50015281816116b70152611e7e01525f8181610ba401528181611d9901528181611dc701528181611eba01528181612ecf01528181612fae0152612fd501526149f95ff3fe608060405260043610610280575f3560e01c8063881dce601161014e578063bbc0c742116100c0578063d257b34f11610079578063d257b34f14610935578063d85ba0631461095d578063dd62ed3e14610987578063e2f45605146109c3578063f2fde38b146109ed578063f8b45b0514610a1557610287565b8063bbc0c7421461084b578063c024666814610875578063c18bc1951461089d578063c856dd30146108c5578063c8c8ebe4146108e1578063cce987d41461090b57610287565b80639a7a23d6116101125780639a7a23d61461071f578063a457c2d714610747578063a672990c14610783578063a9059cbb146107ab578063aacebbe3146107e7578063b62496f51461080f57610287565b8063881dce60146106515780638da5cb5b14610679578063924de9b7146106a357806395d89b41146106cb578063967ff23e146106f557610287565b806339509351116101f25780636ddd1713116101ab5780636ddd1713146105815780636fc3eaec146105ab57806370a08231146105c1578063715018a6146105fd578063751039fc146106135780637571336a1461062957610287565b8063395093511461047757806349bd5a5e146104b35780634a62bb65146104dd57806367243482146105075780636a486a8e1461052f5780636db794371461055957610287565b806318160ddd1161024457806318160ddd1461037f578063203e727e146103a957806323b872dd146103d157806327c8f8351461040d578063293230b814610437578063313ce5671461044d57610287565b806306fdde031461028b578063095ea7b3146102b557806310d5de53146102f1578063150074a31461032d5780631694505e1461035557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a3f565b6040516102ac9190613503565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906135c1565b610acf565b6040516102e89190613619565b60405180910390f35b3480156102fc575f80fd5b5061031760048036038101906103129190613632565b610aec565b6040516103249190613619565b60405180910390f35b348015610338575f80fd5b50610353600480360381019061034e919061365d565b610b09565b005b348015610360575f80fd5b50610369610ba2565b60405161037691906136e3565b60405180910390f35b34801561038a575f80fd5b50610393610bc6565b6040516103a0919061370b565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca919061365d565b610bcf565b005b3480156103dc575f80fd5b506103f760048036038101906103f29190613724565b610cde565b6040516104049190613619565b60405180910390f35b348015610418575f80fd5b50610421610dd0565b60405161042e9190613783565b60405180910390f35b348015610442575f80fd5b5061044b610dd6565b005b348015610458575f80fd5b50610461610e9f565b60405161046e91906137b7565b60405180910390f35b348015610482575f80fd5b5061049d600480360381019061049891906135c1565b610ea7565b6040516104aa9190613619565b60405180910390f35b3480156104be575f80fd5b506104c7610f4e565b6040516104d49190613783565b60405180910390f35b3480156104e8575f80fd5b506104f1610f72565b6040516104fe9190613619565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613886565b610f84565b005b34801561053a575f80fd5b5061054361102d565b604051610550919061370b565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190613904565b611033565b005b34801561058c575f80fd5b50610595611149565b6040516105a29190613619565b60405180910390f35b3480156105b6575f80fd5b506105bf61115c565b005b3480156105cc575f80fd5b506105e760048036038101906105e29190613632565b6111ea565b6040516105f4919061370b565b60405180910390f35b348015610608575f80fd5b5061061161122f565b005b34801561061e575f80fd5b506106276112b6565b005b348015610634575f80fd5b5061064f600480360381019061064a919061396c565b61134d565b005b34801561065c575f80fd5b506106776004803603810190610672919061365d565b611421565b005b348015610684575f80fd5b5061068d6114e2565b60405161069a9190613783565b60405180910390f35b3480156106ae575f80fd5b506106c960048036038101906106c491906139aa565b61150a565b005b3480156106d6575f80fd5b506106df6115a3565b6040516106ec9190613503565b60405180910390f35b348015610700575f80fd5b50610709611633565b604051610716919061370b565b60405180910390f35b34801561072a575f80fd5b506107456004803603810190610740919061396c565b611639565b005b348015610752575f80fd5b5061076d600480360381019061076891906135c1565b611751565b60405161077a9190613619565b60405180910390f35b34801561078e575f80fd5b506107a960048036038101906107a4919061396c565b611837565b005b3480156107b6575f80fd5b506107d160048036038101906107cc91906135c1565b61195f565b6040516107de9190613619565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613632565b61197c565b005b34801561081a575f80fd5b5061083560048036038101906108309190613632565b611ab6565b6040516108429190613619565b60405180910390f35b348015610856575f80fd5b5061085f611ad3565b60405161086c9190613619565b60405180910390f35b348015610880575f80fd5b5061089b6004803603810190610896919061396c565b611ae6565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061365d565b611c08565b005b6108df60048036038101906108da9190613b0d565b611d17565b005b3480156108ec575f80fd5b506108f5611f9d565b604051610902919061370b565b60405180910390f35b348015610916575f80fd5b5061091f611fa3565b60405161092c919061370b565b60405180910390f35b348015610940575f80fd5b5061095b6004803603810190610956919061365d565b611fa9565b005b348015610968575f80fd5b50610971612042565b60405161097e919061370b565b60405180910390f35b348015610992575f80fd5b506109ad60048036038101906109a89190613b54565b612048565b6040516109ba919061370b565b60405180910390f35b3480156109ce575f80fd5b506109d76120ca565b6040516109e4919061370b565b60405180910390f35b3480156109f8575f80fd5b50610a136004803603810190610a0e9190613632565b6120d0565b005b348015610a20575f80fd5b50610a296121c6565b604051610a36919061370b565b60405180910390f35b606060038054610a4e90613bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90613bbf565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f610ae2610adb6121cc565b84846121d3565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b116121cc565b73ffffffffffffffffffffffffffffffffffffffff16610b2f6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613c39565b60405180910390fd5b670de0b6b3a764000081610b999190613c84565b600a8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610bd76121cc565b73ffffffffffffffffffffffffffffffffffffffff16610bf56114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613c39565b60405180910390fd5b670de0b6b3a76400006103e86001610c61610bc6565b610c6b9190613c84565b610c759190613cf2565b610c7f9190613cf2565b811015610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613d92565b60405180910390fd5b670de0b6b3a764000081610cd59190613c84565b60078190555050565b5f610cea848484612396565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d316121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613e20565b60405180910390fd5b610dc485610dbc6121cc565b8584036121d3565b60019150509392505050565b61dead81565b610dde6121cc565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613c39565b60405180910390fd5b5f600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d81905550565b5f6012905090565b5f610f44610eb36121cc565b848460015f610ec06121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f3f9190613e3e565b6121d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f84849050118015610f9b57508383905082829050145b610fa3575f80fd5b5f3390505f5b858590508110156110255761101282878784818110610fcb57610fca613e71565b5b9050602002016020810190610fe09190613632565b670de0b6b3a7640000878786818110610ffc57610ffb613e71565b5b9050602002013561100d9190613c84565b612396565b808061101d90613e9e565b915050610fa9565b505050505050565b60105481565b61103b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166110596114e2565b73ffffffffffffffffffffffffffffffffffffffff16146110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690613c39565b60405180910390fd5b60058211156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613f2f565b60405180910390fd5b6005811115611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613f2f565b60405180910390fd5b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516111a290613f7a565b5f6040518083038185875af1925050503d805f81146111dc576040519150601f19603f3d011682016040523d82523d5f602084013e6111e1565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112376121cc565b73ffffffffffffffffffffffffffffffffffffffff166112556114e2565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c39565b60405180910390fd5b6112b45f612d6f565b565b6112be6121cc565b73ffffffffffffffffffffffffffffffffffffffff166112dc6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613c39565b60405180910390fd5b5f600b5f6101000a81548160ff021916908315150217905550565b6113556121cc565b73ffffffffffffffffffffffffffffffffffffffff166113736114e2565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613c39565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616121cc565b73ffffffffffffffffffffffffffffffffffffffff1614611480575f80fd5b611489306111ea565b811115801561149757505f81115b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613fd8565b60405180910390fd5b6114df81612e32565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115126121cc565b73ffffffffffffffffffffffffffffffffffffffff166115306114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90613c39565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546115b290613bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546115de90613bbf565b80156116295780601f1061160057610100808354040283529160200191611629565b820191905f5260205f20905b81548152906001019060200180831161160c57829003601f168201915b5050505050905090565b600e5481565b6116416121cc565b73ffffffffffffffffffffffffffffffffffffffff1661165f6114e2565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613c39565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90614066565b60405180910390fd5b61174d8282613065565b5050565b5f8060015f61175e6121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f906140f4565b60405180910390fd5b61182c6118236121cc565b858584036121d3565b600191505092915050565b61183f6121cc565b73ffffffffffffffffffffffffffffffffffffffff1661185d6114e2565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613c39565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61197261196b6121cc565b8484612396565b6001905092915050565b6119846121cc565b73ffffffffffffffffffffffffffffffffffffffff166119a26114e2565b73ffffffffffffffffffffffffffffffffffffffff16146119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90613c39565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611aee6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613c39565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bfc9190613619565b60405180910390a25050565b611c106121cc565b73ffffffffffffffffffffffffffffffffffffffff16611c2e6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613c39565b60405180910390fd5b670de0b6b3a76400006103e86005611c9a610bc6565b611ca49190613c84565b611cae9190613cf2565b611cb89190613cf2565b811015611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190614182565b60405180910390fd5b670de0b6b3a764000081611d0e9190613c84565b60098190555050565b611d1f6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611d3d6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613c39565b60405180910390fd5b611dc5307f0000000000000000000000000000000000000000000000000000000000000000611dc0610bc6565b6121d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611e0c306111ea565b5f80611e166114e2565b426040518863ffffffff1660e01b8152600401611e38969594939291906141d9565b60606040518083038185885af1158015611e54573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e79919061424c565b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611f1792919061429c565b6020604051808303815f875af1158015611f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5791906142d7565b505f5b8151811015611f9957611f88828281518110611f7957611f78613e71565b5b60200260200101516001611837565b80611f9290613e9e565b9050611f5a565b5050565b60075481565b600a5481565b611fb16121cc565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613c39565b60405180910390fd5b670de0b6b3a7640000816120399190613c84565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6120d86121cc565b73ffffffffffffffffffffffffffffffffffffffff166120f66114e2565b73ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613c39565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614372565b60405180910390fd5b6121c381612d6f565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614400565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a69061448e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612389919061370b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb9061451c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906145aa565b60405180910390fd5b5f81036124895761248483835f613103565b612d6a565b600b5f9054906101000a900460ff1615612994576124a56114e2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251357506124e36114e2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612585575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561259e5750600560149054906101000a900460ff16155b156129935743600e54600c546125b49190613e3e565b106125ca57601e601081905550601e600f819055505b600b60019054906101000a900460ff166126b95760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612679575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614612565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612756575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127fd576007548111156127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906146a0565b60405180910390fd5b6009546127ac836111ea565b826127b79190613e3e565b11156127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614708565b60405180910390fd5b612992565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289a575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128e9576007548111156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db90614796565b60405180910390fd5b612991565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661299057600954612943836111ea565b8261294e9190613e3e565b111561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614708565b60405180910390fd5b5b5b5b5b5b5f61299e306111ea565b90505f60085482101590508080156129c25750600b60029054906101000a900460ff165b80156129db5750600560149054906101000a900460ff16155b8015612a2e575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a81575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ad4575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6557600360145f4381526020019081526020015f20541015612b64576001600560146101000a81548160ff021916908315150217905550612b16613378565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b4e9190613e3e565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c14575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c1d575f90505b5f8115612d5a5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c7b57505f601054115b15612caf57612ca86064612c9a6010548861344590919063ffffffff16565b61345a90919063ffffffff16565b9050612d37565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d0657505f600f54115b15612d3657612d336064612d25600f548861344590919063ffffffff16565b61345a90919063ffffffff16565b90505b5b5f811115612d4b57612d4a873083613103565b5b8085612d5791906147b4565b94505b612d65878787613103565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612e4e57612e4d6139d5565b5b604051908082528060200260200182016040528015612e7c5781602001602082028036833780820191505090505b50905030815f81518110612e9357612e92613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f5a91906147fb565b81600181518110612f6e57612f6d613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd3307f0000000000000000000000000000000000000000000000000000000000000000846121d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130349594939291906148dd565b5f604051808303815f87803b15801561304b575f80fd5b505af115801561305d573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131689061451c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d6906145aa565b60405180910390fd5b6131ea83838361346f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561326d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613264906149a5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132fb9190613e3e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335f919061370b565b60405180910390a3613372848484613474565b50505050565b5f613382306111ea565b90505f808203613393575050613443565b600a548211156133a357600a5491505b5f8290506133b081612e32565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133f990613f7a565b5f6040518083038185875af1925050503d805f8114613433576040519150601f19603f3d011682016040523d82523d5f602084013e613438565b606091505b505080935050505050505b565b5f81836134529190613c84565b905092915050565b5f81836134679190613cf2565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134b0578082015181840152602081019050613495565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134d582613479565b6134df8185613483565b93506134ef818560208601613493565b6134f8816134bb565b840191505092915050565b5f6020820190508181035f83015261351b81846134cb565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61355d82613534565b9050919050565b61356d81613553565b8114613577575f80fd5b50565b5f8135905061358881613564565b92915050565b5f819050919050565b6135a08161358e565b81146135aa575f80fd5b50565b5f813590506135bb81613597565b92915050565b5f80604083850312156135d7576135d661352c565b5b5f6135e48582860161357a565b92505060206135f5858286016135ad565b9150509250929050565b5f8115159050919050565b613613816135ff565b82525050565b5f60208201905061362c5f83018461360a565b92915050565b5f602082840312156136475761364661352c565b5b5f6136548482850161357a565b91505092915050565b5f602082840312156136725761367161352c565b5b5f61367f848285016135ad565b91505092915050565b5f819050919050565b5f6136ab6136a66136a184613534565b613688565b613534565b9050919050565b5f6136bc82613691565b9050919050565b5f6136cd826136b2565b9050919050565b6136dd816136c3565b82525050565b5f6020820190506136f65f8301846136d4565b92915050565b6137058161358e565b82525050565b5f60208201905061371e5f8301846136fc565b92915050565b5f805f6060848603121561373b5761373a61352c565b5b5f6137488682870161357a565b93505060206137598682870161357a565b925050604061376a868287016135ad565b9150509250925092565b61377d81613553565b82525050565b5f6020820190506137965f830184613774565b92915050565b5f60ff82169050919050565b6137b18161379c565b82525050565b5f6020820190506137ca5f8301846137a8565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126137f1576137f06137d0565b5b8235905067ffffffffffffffff81111561380e5761380d6137d4565b5b60208301915083602082028301111561382a576138296137d8565b5b9250929050565b5f8083601f840112613846576138456137d0565b5b8235905067ffffffffffffffff811115613863576138626137d4565b5b60208301915083602082028301111561387f5761387e6137d8565b5b9250929050565b5f805f806040858703121561389e5761389d61352c565b5b5f85013567ffffffffffffffff8111156138bb576138ba613530565b5b6138c7878288016137dc565b9450945050602085013567ffffffffffffffff8111156138ea576138e9613530565b5b6138f687828801613831565b925092505092959194509250565b5f806040838503121561391a5761391961352c565b5b5f613927858286016135ad565b9250506020613938858286016135ad565b9150509250929050565b61394b816135ff565b8114613955575f80fd5b50565b5f8135905061396681613942565b92915050565b5f80604083850312156139825761398161352c565b5b5f61398f8582860161357a565b92505060206139a085828601613958565b9150509250929050565b5f602082840312156139bf576139be61352c565b5b5f6139cc84828501613958565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613a0b826134bb565b810181811067ffffffffffffffff82111715613a2a57613a296139d5565b5b80604052505050565b5f613a3c613523565b9050613a488282613a02565b919050565b5f67ffffffffffffffff821115613a6757613a666139d5565b5b602082029050602081019050919050565b5f613a8a613a8584613a4d565b613a33565b90508083825260208201905060208402830185811115613aad57613aac6137d8565b5b835b81811015613ad65780613ac2888261357a565b845260208401935050602081019050613aaf565b5050509392505050565b5f82601f830112613af457613af36137d0565b5b8135613b04848260208601613a78565b91505092915050565b5f60208284031215613b2257613b2161352c565b5b5f82013567ffffffffffffffff811115613b3f57613b3e613530565b5b613b4b84828501613ae0565b91505092915050565b5f8060408385031215613b6a57613b6961352c565b5b5f613b778582860161357a565b9250506020613b888582860161357a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bd657607f821691505b602082108103613be957613be8613b92565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c23602083613483565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c8e8261358e565b9150613c998361358e565b9250828202613ca78161358e565b91508282048414831517613cbe57613cbd613c57565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cfc8261358e565b9150613d078361358e565b925082613d1757613d16613cc5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613d7c602f83613483565b9150613d8782613d22565b604082019050919050565b5f6020820190508181035f830152613da981613d70565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e0a602883613483565b9150613e1582613db0565b604082019050919050565b5f6020820190508181035f830152613e3781613dfe565b9050919050565b5f613e488261358e565b9150613e538361358e565b9250828201905080821115613e6b57613e6a613c57565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613ea88261358e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613eda57613ed9613c57565b5b600182019050919050565b7f45786365656420746865206c696d6974000000000000000000000000000000005f82015250565b5f613f19601083613483565b9150613f2482613ee5565b602082019050919050565b5f6020820190508181035f830152613f4681613f0d565b9050919050565b5f81905092915050565b50565b5f613f655f83613f4d565b9150613f7082613f57565b5f82019050919050565b5f613f8482613f5a565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613fc2600c83613483565b9150613fcd82613f8e565b602082019050919050565b5f6020820190508181035f830152613fef81613fb6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614050603983613483565b915061405b82613ff6565b604082019050919050565b5f6020820190508181035f83015261407d81614044565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140de602583613483565b91506140e982614084565b604082019050919050565b5f6020820190508181035f83015261410b816140d2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61416c602483613483565b915061417782614112565b604082019050919050565b5f6020820190508181035f83015261419981614160565b9050919050565b5f819050919050565b5f6141c36141be6141b9846141a0565b613688565b61358e565b9050919050565b6141d3816141a9565b82525050565b5f60c0820190506141ec5f830189613774565b6141f960208301886136fc565b61420660408301876141ca565b61421360608301866141ca565b6142206080830185613774565b61422d60a08301846136fc565b979650505050505050565b5f8151905061424681613597565b92915050565b5f805f606084860312156142635761426261352c565b5b5f61427086828701614238565b935050602061428186828701614238565b925050604061429286828701614238565b9150509250925092565b5f6040820190506142af5f830185613774565b6142bc60208301846136fc565b9392505050565b5f815190506142d181613942565b92915050565b5f602082840312156142ec576142eb61352c565b5b5f6142f9848285016142c3565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61435c602683613483565b915061436782614302565b604082019050919050565b5f6020820190508181035f83015261438981614350565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143ea602483613483565b91506143f582614390565b604082019050919050565b5f6020820190508181035f830152614417816143de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614478602283613483565b91506144838261441e565b604082019050919050565b5f6020820190508181035f8301526144a58161446c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614506602583613483565b9150614511826144ac565b604082019050919050565b5f6020820190508181035f830152614533816144fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614594602383613483565b915061459f8261453a565b604082019050919050565b5f6020820190508181035f8301526145c181614588565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6145fc601683613483565b9150614607826145c8565b602082019050919050565b5f6020820190508181035f830152614629816145f0565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61468a603583613483565b915061469582614630565b604082019050919050565b5f6020820190508181035f8301526146b78161467e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6146f2601383613483565b91506146fd826146be565b602082019050919050565b5f6020820190508181035f83015261471f816146e6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614780603683613483565b915061478b82614726565b604082019050919050565b5f6020820190508181035f8301526147ad81614774565b9050919050565b5f6147be8261358e565b91506147c98361358e565b92508282039050818111156147e1576147e0613c57565b5b92915050565b5f815190506147f581613564565b92915050565b5f602082840312156148105761480f61352c565b5b5f61481d848285016147e7565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61485881613553565b82525050565b5f614869838361484f565b60208301905092915050565b5f602082019050919050565b5f61488b82614826565b6148958185614830565b93506148a083614840565b805f5b838110156148d05781516148b7888261485e565b97506148c283614875565b9250506001810190506148a3565b5085935050505092915050565b5f60a0820190506148f05f8301886136fc565b6148fd60208301876141ca565b818103604083015261490f8186614881565b905061491e6060830185613774565b61492b60808301846136fc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61498f602683613483565b915061499a82614935565b604082019050919050565b5f6020820190508181035f8301526149bc81614983565b905091905056fea2646970667358221220fb7764036c36ba66256fba28d4bacc196a50bc1a286712385b31aab33cf8021164736f6c63430008150033

Deployed Bytecode

0x608060405260043610610280575f3560e01c8063881dce601161014e578063bbc0c742116100c0578063d257b34f11610079578063d257b34f14610935578063d85ba0631461095d578063dd62ed3e14610987578063e2f45605146109c3578063f2fde38b146109ed578063f8b45b0514610a1557610287565b8063bbc0c7421461084b578063c024666814610875578063c18bc1951461089d578063c856dd30146108c5578063c8c8ebe4146108e1578063cce987d41461090b57610287565b80639a7a23d6116101125780639a7a23d61461071f578063a457c2d714610747578063a672990c14610783578063a9059cbb146107ab578063aacebbe3146107e7578063b62496f51461080f57610287565b8063881dce60146106515780638da5cb5b14610679578063924de9b7146106a357806395d89b41146106cb578063967ff23e146106f557610287565b806339509351116101f25780636ddd1713116101ab5780636ddd1713146105815780636fc3eaec146105ab57806370a08231146105c1578063715018a6146105fd578063751039fc146106135780637571336a1461062957610287565b8063395093511461047757806349bd5a5e146104b35780634a62bb65146104dd57806367243482146105075780636a486a8e1461052f5780636db794371461055957610287565b806318160ddd1161024457806318160ddd1461037f578063203e727e146103a957806323b872dd146103d157806327c8f8351461040d578063293230b814610437578063313ce5671461044d57610287565b806306fdde031461028b578063095ea7b3146102b557806310d5de53146102f1578063150074a31461032d5780631694505e1461035557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a3f565b6040516102ac9190613503565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906135c1565b610acf565b6040516102e89190613619565b60405180910390f35b3480156102fc575f80fd5b5061031760048036038101906103129190613632565b610aec565b6040516103249190613619565b60405180910390f35b348015610338575f80fd5b50610353600480360381019061034e919061365d565b610b09565b005b348015610360575f80fd5b50610369610ba2565b60405161037691906136e3565b60405180910390f35b34801561038a575f80fd5b50610393610bc6565b6040516103a0919061370b565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca919061365d565b610bcf565b005b3480156103dc575f80fd5b506103f760048036038101906103f29190613724565b610cde565b6040516104049190613619565b60405180910390f35b348015610418575f80fd5b50610421610dd0565b60405161042e9190613783565b60405180910390f35b348015610442575f80fd5b5061044b610dd6565b005b348015610458575f80fd5b50610461610e9f565b60405161046e91906137b7565b60405180910390f35b348015610482575f80fd5b5061049d600480360381019061049891906135c1565b610ea7565b6040516104aa9190613619565b60405180910390f35b3480156104be575f80fd5b506104c7610f4e565b6040516104d49190613783565b60405180910390f35b3480156104e8575f80fd5b506104f1610f72565b6040516104fe9190613619565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613886565b610f84565b005b34801561053a575f80fd5b5061054361102d565b604051610550919061370b565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190613904565b611033565b005b34801561058c575f80fd5b50610595611149565b6040516105a29190613619565b60405180910390f35b3480156105b6575f80fd5b506105bf61115c565b005b3480156105cc575f80fd5b506105e760048036038101906105e29190613632565b6111ea565b6040516105f4919061370b565b60405180910390f35b348015610608575f80fd5b5061061161122f565b005b34801561061e575f80fd5b506106276112b6565b005b348015610634575f80fd5b5061064f600480360381019061064a919061396c565b61134d565b005b34801561065c575f80fd5b506106776004803603810190610672919061365d565b611421565b005b348015610684575f80fd5b5061068d6114e2565b60405161069a9190613783565b60405180910390f35b3480156106ae575f80fd5b506106c960048036038101906106c491906139aa565b61150a565b005b3480156106d6575f80fd5b506106df6115a3565b6040516106ec9190613503565b60405180910390f35b348015610700575f80fd5b50610709611633565b604051610716919061370b565b60405180910390f35b34801561072a575f80fd5b506107456004803603810190610740919061396c565b611639565b005b348015610752575f80fd5b5061076d600480360381019061076891906135c1565b611751565b60405161077a9190613619565b60405180910390f35b34801561078e575f80fd5b506107a960048036038101906107a4919061396c565b611837565b005b3480156107b6575f80fd5b506107d160048036038101906107cc91906135c1565b61195f565b6040516107de9190613619565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613632565b61197c565b005b34801561081a575f80fd5b5061083560048036038101906108309190613632565b611ab6565b6040516108429190613619565b60405180910390f35b348015610856575f80fd5b5061085f611ad3565b60405161086c9190613619565b60405180910390f35b348015610880575f80fd5b5061089b6004803603810190610896919061396c565b611ae6565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061365d565b611c08565b005b6108df60048036038101906108da9190613b0d565b611d17565b005b3480156108ec575f80fd5b506108f5611f9d565b604051610902919061370b565b60405180910390f35b348015610916575f80fd5b5061091f611fa3565b60405161092c919061370b565b60405180910390f35b348015610940575f80fd5b5061095b6004803603810190610956919061365d565b611fa9565b005b348015610968575f80fd5b50610971612042565b60405161097e919061370b565b60405180910390f35b348015610992575f80fd5b506109ad60048036038101906109a89190613b54565b612048565b6040516109ba919061370b565b60405180910390f35b3480156109ce575f80fd5b506109d76120ca565b6040516109e4919061370b565b60405180910390f35b3480156109f8575f80fd5b50610a136004803603810190610a0e9190613632565b6120d0565b005b348015610a20575f80fd5b50610a296121c6565b604051610a36919061370b565b60405180910390f35b606060038054610a4e90613bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90613bbf565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f610ae2610adb6121cc565b84846121d3565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b116121cc565b73ffffffffffffffffffffffffffffffffffffffff16610b2f6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613c39565b60405180910390fd5b670de0b6b3a764000081610b999190613c84565b600a8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610bd76121cc565b73ffffffffffffffffffffffffffffffffffffffff16610bf56114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613c39565b60405180910390fd5b670de0b6b3a76400006103e86001610c61610bc6565b610c6b9190613c84565b610c759190613cf2565b610c7f9190613cf2565b811015610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613d92565b60405180910390fd5b670de0b6b3a764000081610cd59190613c84565b60078190555050565b5f610cea848484612396565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d316121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613e20565b60405180910390fd5b610dc485610dbc6121cc565b8584036121d3565b60019150509392505050565b61dead81565b610dde6121cc565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613c39565b60405180910390fd5b5f600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d81905550565b5f6012905090565b5f610f44610eb36121cc565b848460015f610ec06121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f3f9190613e3e565b6121d3565b6001905092915050565b7f000000000000000000000000967313796390d5fe2c472f23a278f45f7f0f6d4881565b600b5f9054906101000a900460ff1681565b5f84849050118015610f9b57508383905082829050145b610fa3575f80fd5b5f3390505f5b858590508110156110255761101282878784818110610fcb57610fca613e71565b5b9050602002016020810190610fe09190613632565b670de0b6b3a7640000878786818110610ffc57610ffb613e71565b5b9050602002013561100d9190613c84565b612396565b808061101d90613e9e565b915050610fa9565b505050505050565b60105481565b61103b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166110596114e2565b73ffffffffffffffffffffffffffffffffffffffff16146110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690613c39565b60405180910390fd5b60058211156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613f2f565b60405180910390fd5b6005811115611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613f2f565b60405180910390fd5b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516111a290613f7a565b5f6040518083038185875af1925050503d805f81146111dc576040519150601f19603f3d011682016040523d82523d5f602084013e6111e1565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112376121cc565b73ffffffffffffffffffffffffffffffffffffffff166112556114e2565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c39565b60405180910390fd5b6112b45f612d6f565b565b6112be6121cc565b73ffffffffffffffffffffffffffffffffffffffff166112dc6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613c39565b60405180910390fd5b5f600b5f6101000a81548160ff021916908315150217905550565b6113556121cc565b73ffffffffffffffffffffffffffffffffffffffff166113736114e2565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613c39565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114616121cc565b73ffffffffffffffffffffffffffffffffffffffff1614611480575f80fd5b611489306111ea565b811115801561149757505f81115b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613fd8565b60405180910390fd5b6114df81612e32565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115126121cc565b73ffffffffffffffffffffffffffffffffffffffff166115306114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90613c39565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546115b290613bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546115de90613bbf565b80156116295780601f1061160057610100808354040283529160200191611629565b820191905f5260205f20905b81548152906001019060200180831161160c57829003601f168201915b5050505050905090565b600e5481565b6116416121cc565b73ffffffffffffffffffffffffffffffffffffffff1661165f6114e2565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90613c39565b60405180910390fd5b7f000000000000000000000000967313796390d5fe2c472f23a278f45f7f0f6d4873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90614066565b60405180910390fd5b61174d8282613065565b5050565b5f8060015f61175e6121cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f906140f4565b60405180910390fd5b61182c6118236121cc565b858584036121d3565b600191505092915050565b61183f6121cc565b73ffffffffffffffffffffffffffffffffffffffff1661185d6114e2565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613c39565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61197261196b6121cc565b8484612396565b6001905092915050565b6119846121cc565b73ffffffffffffffffffffffffffffffffffffffff166119a26114e2565b73ffffffffffffffffffffffffffffffffffffffff16146119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90613c39565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611aee6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613c39565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bfc9190613619565b60405180910390a25050565b611c106121cc565b73ffffffffffffffffffffffffffffffffffffffff16611c2e6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613c39565b60405180910390fd5b670de0b6b3a76400006103e86005611c9a610bc6565b611ca49190613c84565b611cae9190613cf2565b611cb89190613cf2565b811015611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190614182565b60405180910390fd5b670de0b6b3a764000081611d0e9190613c84565b60098190555050565b611d1f6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611d3d6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613c39565b60405180910390fd5b611dc5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d611dc0610bc6565b6121d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611e0c306111ea565b5f80611e166114e2565b426040518863ffffffff1660e01b8152600401611e38969594939291906141d9565b60606040518083038185885af1158015611e54573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e79919061424c565b5050507f000000000000000000000000967313796390d5fe2c472f23a278f45f7f0f6d4873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611f1792919061429c565b6020604051808303815f875af1158015611f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5791906142d7565b505f5b8151811015611f9957611f88828281518110611f7957611f78613e71565b5b60200260200101516001611837565b80611f9290613e9e565b9050611f5a565b5050565b60075481565b600a5481565b611fb16121cc565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6114e2565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613c39565b60405180910390fd5b670de0b6b3a7640000816120399190613c84565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6120d86121cc565b73ffffffffffffffffffffffffffffffffffffffff166120f66114e2565b73ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613c39565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614372565b60405180910390fd5b6121c381612d6f565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614400565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a69061448e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612389919061370b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb9061451c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906145aa565b60405180910390fd5b5f81036124895761248483835f613103565b612d6a565b600b5f9054906101000a900460ff1615612994576124a56114e2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251357506124e36114e2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612585575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561259e5750600560149054906101000a900460ff16155b156129935743600e54600c546125b49190613e3e565b106125ca57601e601081905550601e600f819055505b600b60019054906101000a900460ff166126b95760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612679575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614612565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612756575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127fd576007548111156127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906146a0565b60405180910390fd5b6009546127ac836111ea565b826127b79190613e3e565b11156127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614708565b60405180910390fd5b612992565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289a575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128e9576007548111156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db90614796565b60405180910390fd5b612991565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661299057600954612943836111ea565b8261294e9190613e3e565b111561298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614708565b60405180910390fd5b5b5b5b5b5b5f61299e306111ea565b90505f60085482101590508080156129c25750600b60029054906101000a900460ff165b80156129db5750600560149054906101000a900460ff16155b8015612a2e575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a81575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ad4575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6557600360145f4381526020019081526020015f20541015612b64576001600560146101000a81548160ff021916908315150217905550612b16613378565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b4e9190613e3e565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c14575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c1d575f90505b5f8115612d5a5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c7b57505f601054115b15612caf57612ca86064612c9a6010548861344590919063ffffffff16565b61345a90919063ffffffff16565b9050612d37565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d0657505f600f54115b15612d3657612d336064612d25600f548861344590919063ffffffff16565b61345a90919063ffffffff16565b90505b5b5f811115612d4b57612d4a873083613103565b5b8085612d5791906147b4565b94505b612d65878787613103565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612e4e57612e4d6139d5565b5b604051908082528060200260200182016040528015612e7c5781602001602082028036833780820191505090505b50905030815f81518110612e9357612e92613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f5a91906147fb565b81600181518110612f6e57612f6d613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130349594939291906148dd565b5f604051808303815f87803b15801561304b575f80fd5b505af115801561305d573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131689061451c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d6906145aa565b60405180910390fd5b6131ea83838361346f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561326d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613264906149a5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132fb9190613e3e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335f919061370b565b60405180910390a3613372848484613474565b50505050565b5f613382306111ea565b90505f808203613393575050613443565b600a548211156133a357600a5491505b5f8290506133b081612e32565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133f990613f7a565b5f6040518083038185875af1925050503d805f8114613433576040519150601f19603f3d011682016040523d82523d5f602084013e613438565b606091505b505080935050505050505b565b5f81836134529190613c84565b905092915050565b5f81836134679190613cf2565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134b0578082015181840152602081019050613495565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134d582613479565b6134df8185613483565b93506134ef818560208601613493565b6134f8816134bb565b840191505092915050565b5f6020820190508181035f83015261351b81846134cb565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61355d82613534565b9050919050565b61356d81613553565b8114613577575f80fd5b50565b5f8135905061358881613564565b92915050565b5f819050919050565b6135a08161358e565b81146135aa575f80fd5b50565b5f813590506135bb81613597565b92915050565b5f80604083850312156135d7576135d661352c565b5b5f6135e48582860161357a565b92505060206135f5858286016135ad565b9150509250929050565b5f8115159050919050565b613613816135ff565b82525050565b5f60208201905061362c5f83018461360a565b92915050565b5f602082840312156136475761364661352c565b5b5f6136548482850161357a565b91505092915050565b5f602082840312156136725761367161352c565b5b5f61367f848285016135ad565b91505092915050565b5f819050919050565b5f6136ab6136a66136a184613534565b613688565b613534565b9050919050565b5f6136bc82613691565b9050919050565b5f6136cd826136b2565b9050919050565b6136dd816136c3565b82525050565b5f6020820190506136f65f8301846136d4565b92915050565b6137058161358e565b82525050565b5f60208201905061371e5f8301846136fc565b92915050565b5f805f6060848603121561373b5761373a61352c565b5b5f6137488682870161357a565b93505060206137598682870161357a565b925050604061376a868287016135ad565b9150509250925092565b61377d81613553565b82525050565b5f6020820190506137965f830184613774565b92915050565b5f60ff82169050919050565b6137b18161379c565b82525050565b5f6020820190506137ca5f8301846137a8565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126137f1576137f06137d0565b5b8235905067ffffffffffffffff81111561380e5761380d6137d4565b5b60208301915083602082028301111561382a576138296137d8565b5b9250929050565b5f8083601f840112613846576138456137d0565b5b8235905067ffffffffffffffff811115613863576138626137d4565b5b60208301915083602082028301111561387f5761387e6137d8565b5b9250929050565b5f805f806040858703121561389e5761389d61352c565b5b5f85013567ffffffffffffffff8111156138bb576138ba613530565b5b6138c7878288016137dc565b9450945050602085013567ffffffffffffffff8111156138ea576138e9613530565b5b6138f687828801613831565b925092505092959194509250565b5f806040838503121561391a5761391961352c565b5b5f613927858286016135ad565b9250506020613938858286016135ad565b9150509250929050565b61394b816135ff565b8114613955575f80fd5b50565b5f8135905061396681613942565b92915050565b5f80604083850312156139825761398161352c565b5b5f61398f8582860161357a565b92505060206139a085828601613958565b9150509250929050565b5f602082840312156139bf576139be61352c565b5b5f6139cc84828501613958565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613a0b826134bb565b810181811067ffffffffffffffff82111715613a2a57613a296139d5565b5b80604052505050565b5f613a3c613523565b9050613a488282613a02565b919050565b5f67ffffffffffffffff821115613a6757613a666139d5565b5b602082029050602081019050919050565b5f613a8a613a8584613a4d565b613a33565b90508083825260208201905060208402830185811115613aad57613aac6137d8565b5b835b81811015613ad65780613ac2888261357a565b845260208401935050602081019050613aaf565b5050509392505050565b5f82601f830112613af457613af36137d0565b5b8135613b04848260208601613a78565b91505092915050565b5f60208284031215613b2257613b2161352c565b5b5f82013567ffffffffffffffff811115613b3f57613b3e613530565b5b613b4b84828501613ae0565b91505092915050565b5f8060408385031215613b6a57613b6961352c565b5b5f613b778582860161357a565b9250506020613b888582860161357a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bd657607f821691505b602082108103613be957613be8613b92565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c23602083613483565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c8e8261358e565b9150613c998361358e565b9250828202613ca78161358e565b91508282048414831517613cbe57613cbd613c57565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cfc8261358e565b9150613d078361358e565b925082613d1757613d16613cc5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613d7c602f83613483565b9150613d8782613d22565b604082019050919050565b5f6020820190508181035f830152613da981613d70565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e0a602883613483565b9150613e1582613db0565b604082019050919050565b5f6020820190508181035f830152613e3781613dfe565b9050919050565b5f613e488261358e565b9150613e538361358e565b9250828201905080821115613e6b57613e6a613c57565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613ea88261358e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613eda57613ed9613c57565b5b600182019050919050565b7f45786365656420746865206c696d6974000000000000000000000000000000005f82015250565b5f613f19601083613483565b9150613f2482613ee5565b602082019050919050565b5f6020820190508181035f830152613f4681613f0d565b9050919050565b5f81905092915050565b50565b5f613f655f83613f4d565b9150613f7082613f57565b5f82019050919050565b5f613f8482613f5a565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613fc2600c83613483565b9150613fcd82613f8e565b602082019050919050565b5f6020820190508181035f830152613fef81613fb6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614050603983613483565b915061405b82613ff6565b604082019050919050565b5f6020820190508181035f83015261407d81614044565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140de602583613483565b91506140e982614084565b604082019050919050565b5f6020820190508181035f83015261410b816140d2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61416c602483613483565b915061417782614112565b604082019050919050565b5f6020820190508181035f83015261419981614160565b9050919050565b5f819050919050565b5f6141c36141be6141b9846141a0565b613688565b61358e565b9050919050565b6141d3816141a9565b82525050565b5f60c0820190506141ec5f830189613774565b6141f960208301886136fc565b61420660408301876141ca565b61421360608301866141ca565b6142206080830185613774565b61422d60a08301846136fc565b979650505050505050565b5f8151905061424681613597565b92915050565b5f805f606084860312156142635761426261352c565b5b5f61427086828701614238565b935050602061428186828701614238565b925050604061429286828701614238565b9150509250925092565b5f6040820190506142af5f830185613774565b6142bc60208301846136fc565b9392505050565b5f815190506142d181613942565b92915050565b5f602082840312156142ec576142eb61352c565b5b5f6142f9848285016142c3565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61435c602683613483565b915061436782614302565b604082019050919050565b5f6020820190508181035f83015261438981614350565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143ea602483613483565b91506143f582614390565b604082019050919050565b5f6020820190508181035f830152614417816143de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614478602283613483565b91506144838261441e565b604082019050919050565b5f6020820190508181035f8301526144a58161446c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614506602583613483565b9150614511826144ac565b604082019050919050565b5f6020820190508181035f830152614533816144fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614594602383613483565b915061459f8261453a565b604082019050919050565b5f6020820190508181035f8301526145c181614588565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6145fc601683613483565b9150614607826145c8565b602082019050919050565b5f6020820190508181035f830152614629816145f0565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61468a603583613483565b915061469582614630565b604082019050919050565b5f6020820190508181035f8301526146b78161467e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6146f2601383613483565b91506146fd826146be565b602082019050919050565b5f6020820190508181035f83015261471f816146e6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614780603683613483565b915061478b82614726565b604082019050919050565b5f6020820190508181035f8301526147ad81614774565b9050919050565b5f6147be8261358e565b91506147c98361358e565b92508282039050818111156147e1576147e0613c57565b5b92915050565b5f815190506147f581613564565b92915050565b5f602082840312156148105761480f61352c565b5b5f61481d848285016147e7565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61485881613553565b82525050565b5f614869838361484f565b60208301905092915050565b5f602082019050919050565b5f61488b82614826565b6148958185614830565b93506148a083614840565b805f5b838110156148d05781516148b7888261485e565b97506148c283614875565b9250506001810190506148a3565b5085935050505092915050565b5f60a0820190506148f05f8301886136fc565b6148fd60208301876141ca565b818103604083015261490f8186614881565b905061491e6060830185613774565b61492b60808301846136fc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61498f602683613483565b915061499a82614935565b604082019050919050565b5f6020820190508181035f8301526149bc81614983565b905091905056fea2646970667358221220fb7764036c36ba66256fba28d4bacc196a50bc1a286712385b31aab33cf8021164736f6c63430008150033

Deployed Bytecode Sourcemap

11847:11421:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7355:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8269:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12660:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15635:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11925:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7676:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15761:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8446:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12028:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15174:219;;;;;;;;;;;;;:::i;:::-;;7575:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8912:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11983:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12310:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18536:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12564:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18075:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12390:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17210:149;;;;;;;;;;;;;:::i;:::-;;7792:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6401:103;;;;;;;;;;;;;:::i;:::-;;15401:84;;;;;;;;;;;;;:::i;:::-;;16441:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16979:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6178:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16681:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7463:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12498:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17367:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9135:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16238:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7927:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18320:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12732:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12350:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16789:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16009:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14673:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12160:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12273:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15493:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12528:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8110:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6512:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12242:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7355:100;7409:13;7442:5;7435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7355:100;:::o;8269:169::-;8352:4;8369:39;8378:12;:10;:12::i;:::-;8392:7;8401:6;8369:8;:39::i;:::-;8426:4;8419:11;;8269:169;;;;:::o;12660:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15635:118::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15736:8:::1;15723:9;:22;;;;:::i;:::-;15707:13;:38;;;;15635:118:::0;:::o;11925:51::-;;;:::o;7676:108::-;7737:7;7764:12;;7757:19;;7676:108;:::o;15761:240::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15884:4:::1;15876;15871:1;15855:13;:11;:13::i;:::-;:17;;;;:::i;:::-;15854:26;;;;:::i;:::-;15853:35;;;;:::i;:::-;15843:6;:45;;15835:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;15984:8;15974:6;:19;;;;:::i;:::-;15951:20;:42;;;;15761:240:::0;:::o;8446:458::-;8552:4;8569:36;8579:6;8587:9;8598:6;8569:9;:36::i;:::-;8618:24;8645:11;:19;8657:6;8645:19;;;;;;;;;;;;;;;:33;8665:12;:10;:12::i;:::-;8645:33;;;;;;;;;;;;;;;;8618:60;;8717:6;8697:16;:26;;8689:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8804:57;8813:6;8821:12;:10;:12::i;:::-;8854:6;8835:16;:25;8804:8;:57::i;:::-;8892:4;8885:11;;;8446:458;;;;;:::o;12028:53::-;12074:6;12028:53;:::o;15174:219::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15247:1:::1;15238:6;:10;;;;15275:4;15259:13;;:20;;;;;;;;;;;;;;;;;;15304:4;15290:11;;:18;;;;;;;;;;;;;;;;;;15332:12;15319:10;:25;;;;15370:15;15355:12;:30;;;;15174:219::o:0;7575:93::-;7633:5;7658:2;7651:9;;7575:93;:::o;8912:215::-;9000:4;9017:80;9026:12;:10;:12::i;:::-;9040:7;9086:10;9049:11;:25;9061:12;:10;:12::i;:::-;9049:25;;;;;;;;;;;;;;;:34;9075:7;9049:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9017:8;:80::i;:::-;9115:4;9108:11;;8912:215;;;;:::o;11983:38::-;;;:::o;12310:33::-;;;;;;;;;;;;;:::o;18536:346::-;18658:1;18639:9;;:16;;:20;:58;;;;;18681:9;;:16;;18663:7;;:14;;:34;18639:58;18631:67;;;;;;18709:12;18724:10;18709:25;;18752:9;18747:128;18771:9;;:16;;18767:1;:20;18747:128;;;18809:54;18819:4;18825:9;;18835:1;18825:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18853:8;18839:7;;18847:1;18839:10;;;;;;;:::i;:::-;;;;;;;;:23;;;;:::i;:::-;18809:9;:54::i;:::-;18789:3;;;;;:::i;:::-;;;;18747:128;;;;18620:262;18536:346;;;;:::o;12564:28::-;;;;:::o;18075:237::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18170:1:::1;18162:4;:9;;18154:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18220:1;18211:5;:10;;18203:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18268:4;18253:12;:19;;;;18299:5;18283:13;:21;;;;18075:237:::0;;:::o;12390:31::-;;;;;;;;;;;;;:::o;17210:149::-;17252:12;17296:15;;;;;;;;;;;17288:29;;17325:21;17288:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17275:76;;;;;17241:118;17210:149::o;7792:127::-;7866:7;7893:9;:18;7903:7;7893:18;;;;;;;;;;;;;;;;7886:25;;7792:127;;;:::o;6401:103::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6466:30:::1;6493:1;6466:18;:30::i;:::-;6401:103::o:0;15401:84::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15472:5:::1;15455:14;;:22;;;;;;;;;;;;;;;;;;15401:84::o:0;16441:144::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16573:4:::1;16531:31;:39;16563:6;16531:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16441:144:::0;;:::o;16979:223::-;17059:15;;;;;;;;;;;17043:31;;:12;:10;:12::i;:::-;:31;;;17035:40;;;;;;17104:24;17122:4;17104:9;:24::i;:::-;17094:6;:34;;:48;;;;;17141:1;17132:6;:10;17094:48;17086:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17170:24;17187:6;17170:16;:24::i;:::-;16979:223;:::o;6178:87::-;6224:7;6251:6;;;;;;;;;;;6244:13;;6178:87;:::o;16681:100::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16766:7:::1;16752:11;;:21;;;;;;;;;;;;;;;;;;16681:100:::0;:::o;7463:104::-;7519:13;7552:7;7545:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7463:104;:::o;12498:21::-;;;;:::o;17367:244::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17474:13:::1;17466:21;;:4;:21;;::::0;17458:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17562:41;17591:4;17597:5;17562:28;:41::i;:::-;17367:244:::0;;:::o;9135:413::-;9228:4;9245:24;9272:11;:25;9284:12;:10;:12::i;:::-;9272:25;;;;;;;;;;;;;;;:34;9298:7;9272:34;;;;;;;;;;;;;;;;9245:61;;9345:15;9325:16;:35;;9317:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9438:67;9447:12;:10;:12::i;:::-;9461:7;9489:15;9470:16;:34;9438:8;:67::i;:::-;9536:4;9529:11;;;9135:413;;;;:::o;16238:195::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16370:4:::1;16324:31;:43;16356:10;16324:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;16421:4;16387:19;:31;16407:10;16387:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;16238:195:::0;;:::o;7927:175::-;8013:4;8030:42;8040:12;:10;:12::i;:::-;8054:9;8065:6;8030:9;:42::i;:::-;8090:4;8083:11;;7927:175;;;;:::o;18320:208::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18457:15:::1;;;;;;;;;;;18414:59;;18437:18;18414:59;;;;;;;;;;;;18502:18;18484:15;;:36;;;;;;;;;;;;;;;;;;18320:208:::0;:::o;12732:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12350:33::-;;;;;;;;;;;;;:::o;16789:182::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16905:8:::1;16874:19;:28;16894:7;16874:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16945:7;16929:34;;;16954:8;16929:34;;;;;;:::i;:::-;;;;;;;;16789:182:::0;;:::o;16009:221::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16135:4:::1;16127;16122:1;16106:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16105:26;;;;:::i;:::-;16104:35;;;;:::i;:::-;16094:6;:45;;16086:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;16213:8;16203:6;:19;;;;:::i;:::-;16191:9;:31;;;;16009:221:::0;:::o;14673:493::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14755:64:::1;14772:4;14787:15;14805:13;:11;:13::i;:::-;14755:8;:64::i;:::-;14830:15;:31;;;14869:21;14900:4;14906:24;14924:4;14906:9;:24::i;:::-;14931:1;14933::::0;14935:7:::1;:5;:7::i;:::-;14943:15;14830:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14977:13;14970:29;;;15008:15;15026:14;14970:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15056:9;15052:107;15071:10;:17;15067:1;:21;15052:107;;;15109:38;15127:10;15138:1;15127:13;;;;;;;;:::i;:::-;;;;;;;;15142:4;15109:17;:38::i;:::-;15090:3;;;;:::i;:::-;;;15052:107;;;;14673:493:::0;:::o;12160:35::-;;;;:::o;12273:28::-;;;;:::o;15493:134::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15610:8:::1;15597:9;:22;;;;:::i;:::-;15576:18;:43;;;;15493:134:::0;:::o;12528:27::-;;;;:::o;8110:151::-;8199:7;8226:11;:18;8238:5;8226:18;;;;;;;;;;;;;;;:27;8245:7;8226:27;;;;;;;;;;;;;;;;8219:34;;8110:151;;;;:::o;12202:33::-;;;;:::o;6512:201::-;6324:12;:10;:12::i;:::-;6313:23;;:7;:5;:7::i;:::-;:23;;;6305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6621:1:::1;6601:22;;:8;:22;;::::0;6593:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6677:28;6696:8;6677:18;:28::i;:::-;6512:201:::0;:::o;12242:24::-;;;;:::o;5694:98::-;5747:7;5774:10;5767:17;;5694:98;:::o;11269:346::-;11388:1;11371:19;;:5;:19;;;11363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11469:1;11450:21;;:7;:21;;;11442:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11553:6;11523:11;:18;11535:5;11523:18;;;;;;;;;;;;;;;:27;11542:7;11523:27;;;;;;;;;;;;;;;:36;;;;11591:7;11575:32;;11584:5;11575:32;;;11600:6;11575:32;;;;;;:::i;:::-;;;;;;;;11269:346;;;:::o;18890:3186::-;19004:1;18988:18;;:4;:18;;;18980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19081:1;19067:16;;:2;:16;;;19059:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19150:1;19140:6;:11;19136:93;;19168:28;19184:4;19190:2;19194:1;19168:15;:28::i;:::-;19211:7;;19136:93;19245:14;;;;;;;;;;;19241:1310;;;19288:7;:5;:7::i;:::-;19280:15;;:4;:15;;;;:32;;;;;19305:7;:5;:7::i;:::-;19299:13;;:2;:13;;;;19280:32;:52;;;;;19330:1;19316:16;;:2;:16;;;;19280:52;:77;;;;;19350:6;19336:21;;:2;:21;;;;19280:77;:90;;;;;19362:8;;;;;;;;;;;19361:9;19280:90;19276:1264;;;19420:12;19409:6;;19396:10;;:19;;;;:::i;:::-;19395:37;19391:183;;19512:2;19496:13;:18;;;;19552:2;19537:12;:17;;;;19391:183;19599:13;;;;;;;;;;;19594:150;;19645:19;:25;19665:4;19645:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19674:19;:23;19694:2;19674:23;;;;;;;;;;;;;;;;;;;;;;;;;19645:52;19637:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19594:150;19796:25;:31;19822:4;19796:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19832:31;:35;19864:2;19832:35;;;;;;;;;;;;;;;;;;;;;;;;;19831:36;19796:71;19792:733;;;19910:20;;19900:6;:30;;19892:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20045:9;;20028:13;20038:2;20028:9;:13::i;:::-;20019:6;:22;;;;:::i;:::-;:35;;20011:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19792:733;;;20154:25;:29;20180:2;20154:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20188:31;:37;20220:4;20188:37;;;;;;;;;;;;;;;;;;;;;;;;;20187:38;20154:71;20150:375;;;20268:20;;20258:6;:30;;20250:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;20150:375;;;20378:31;:35;20410:2;20378:35;;;;;;;;;;;;;;;;;;;;;;;;;20373:152;;20472:9;;20455:13;20465:2;20455:9;:13::i;:::-;20446:6;:22;;;;:::i;:::-;:35;;20438:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20373:152;20150:375;19792:733;19276:1264;19241:1310;20563:28;20594:24;20612:4;20594:9;:24::i;:::-;20563:55;;20631:12;20670:18;;20646:20;:42;;20631:57;;20719:7;:22;;;;;20730:11;;;;;;;;;;;20719:22;:35;;;;;20746:8;;;;;;;;;;;20745:9;20719:35;:71;;;;;20759:25;:31;20785:4;20759:31;;;;;;;;;;;;;;;;;;;;;;;;;20758:32;20719:71;:101;;;;;20795:19;:25;20815:4;20795:25;;;;;;;;;;;;;;;;;;;;;;;;;20794:26;20719:101;:146;;;;;20842:19;:23;20862:2;20842:23;;;;;;;;;;;;;;;;;;;;;;;;;20841:24;20719:146;20701:468;;;20961:1;20934:10;:24;20945:12;20934:24;;;;;;;;;;;;:28;20930:228;;;20994:4;20983:8;;:15;;;;;;;;;;;;;;;;;;21019:10;:8;:10::i;:::-;21061:5;21050:8;;:16;;;;;;;;;;;;;;;;;;21141:1;21114:10;:24;21125:12;21114:24;;;;;;;;;;;;:28;;;;:::i;:::-;21087:10;:24;21098:12;21087:24;;;;;;;;;;;:55;;;;20930:228;20701:468;21181:12;21197:8;;;;;;;;;;;21196:9;21181:24;;21307:19;:25;21327:4;21307:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21336:19;:23;21356:2;21336:23;;;;;;;;;;;;;;;;;;;;;;;;;21307:52;21303:100;;;21386:5;21376:15;;21303:100;21415:12;21520:7;21516:507;;;21572:25;:29;21598:2;21572:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;21621:1;21605:13;;:17;21572:50;21568:306;;;21650:34;21680:3;21650:25;21661:13;;21650:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;21643:41;;21568:306;;;21746:25;:31;21772:4;21746:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;21796:1;21781:12;;:16;21746:51;21742:132;;;21825:33;21854:3;21825:24;21836:12;;21825:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;21818:40;;21742:132;21568:306;21901:1;21894:4;:8;21890:91;;;21923:42;21939:4;21953;21960;21923:15;:42::i;:::-;21890:91;22007:4;21997:14;;;;;:::i;:::-;;;21516:507;22035:33;22051:4;22057:2;22061:6;22035:15;:33::i;:::-;18969:3107;;;;18890:3186;;;;:::o;6721:191::-;6795:16;6814:6;;;;;;;;;;;6795:25;;6840:8;6831:6;;:17;;;;;;;;;;;;;;;;;;6895:8;6864:40;;6885:8;6864:40;;;;;;;;;;;;6784:128;6721:191;:::o;22084:589::-;22210:21;22248:1;22234:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22210:40;;22279:4;22261;22266:1;22261:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22305:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22295:4;22300:1;22295:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22340:62;22357:4;22372:15;22390:11;22340:8;:62::i;:::-;22441:15;:66;;;22522:11;22548:1;22592:4;22619;22639:15;22441:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22139:534;22084:589;:::o;17619:188::-;17736:5;17702:25;:31;17728:4;17702:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17793:5;17759:40;;17787:4;17759:40;;;;;;;;;;;;17619:188;;:::o;9556:699::-;9680:1;9662:20;;:6;:20;;;9654:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9764:1;9743:23;;:9;:23;;;9735:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9819:47;9840:6;9848:9;9859:6;9819:20;:47::i;:::-;9879:21;9903:9;:17;9913:6;9903:17;;;;;;;;;;;;;;;;9879:41;;9956:6;9939:13;:23;;9931:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10077:6;10061:13;:22;10041:9;:17;10051:6;10041:17;;;;;;;;;;;;;;;:42;;;;10129:6;10105:9;:20;10115:9;10105:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10170:9;10153:35;;10162:6;10153:35;;;10181:6;10153:35;;;;;;:::i;:::-;;;;;;;;10201:46;10221:6;10229:9;10240:6;10201:19;:46::i;:::-;9643:612;9556:699;;;:::o;22681:584::-;22720:23;22746:24;22764:4;22746:9;:24::i;:::-;22720:50;;22781:12;22829:1;22810:15;:20;22806:59;;22847:7;;;;22806:59;22899:13;;22881:15;:31;22877:95;;;22947:13;;22929:31;;22877:95;23035:26;23064:15;23035:44;;23092:36;23109:18;23092:16;:36::i;:::-;23141:16;23160:21;23141:40;;23215:15;;;;;;;;;;;23207:29;;23244:8;23207:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23194:63;;;;;22709:556;;;;22681:584;:::o;3702:98::-;3760:7;3791:1;3787;:5;;;;:::i;:::-;3780:12;;3702:98;;;;:::o;3808:::-;3866:7;3897:1;3893;:5;;;;:::i;:::-;3886:12;;3808:98;;;;:::o;11623:91::-;;;;:::o;11722:90::-;;;;:::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:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::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:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:152::-;4538:9;4571:37;4602:5;4571:37;:::i;:::-;4558:50;;4462:152;;;:::o;4620:183::-;4733:63;4790:5;4733:63;:::i;:::-;4728:3;4721:76;4620:183;;:::o;4809:274::-;4928:4;4966:2;4955:9;4951:18;4943:26;;4979:97;5073:1;5062:9;5058:17;5049:6;4979:97;:::i;:::-;4809:274;;;;:::o;5089:118::-;5176:24;5194:5;5176:24;:::i;:::-;5171:3;5164:37;5089:118;;:::o;5213:222::-;5306:4;5344:2;5333:9;5329:18;5321:26;;5357:71;5425:1;5414:9;5410:17;5401:6;5357:71;:::i;:::-;5213:222;;;;:::o;5441:619::-;5518:6;5526;5534;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:53;5779:7;5770:6;5759:9;5755:22;5734:53;:::i;:::-;5724:63;;5680:117;5836:2;5862:53;5907:7;5898:6;5887:9;5883:22;5862:53;:::i;:::-;5852:63;;5807:118;5964:2;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5935:118;5441:619;;;;;:::o;6066:118::-;6153:24;6171:5;6153:24;:::i;:::-;6148:3;6141:37;6066:118;;:::o;6190:222::-;6283:4;6321:2;6310:9;6306:18;6298:26;;6334:71;6402:1;6391:9;6387:17;6378:6;6334:71;:::i;:::-;6190:222;;;;:::o;6418:86::-;6453:7;6493:4;6486:5;6482:16;6471:27;;6418:86;;;:::o;6510:112::-;6593:22;6609:5;6593:22;:::i;:::-;6588:3;6581:35;6510:112;;:::o;6628:214::-;6717:4;6755:2;6744:9;6740:18;6732:26;;6768:67;6832:1;6821:9;6817:17;6808:6;6768:67;:::i;:::-;6628:214;;;;:::o;6848:117::-;6957:1;6954;6947:12;6971:117;7080:1;7077;7070:12;7094:117;7203:1;7200;7193:12;7234:568;7307:8;7317:6;7367:3;7360:4;7352:6;7348:17;7344:27;7334:122;;7375:79;;:::i;:::-;7334:122;7488:6;7475:20;7465:30;;7518:18;7510:6;7507:30;7504:117;;;7540:79;;:::i;:::-;7504:117;7654:4;7646:6;7642:17;7630:29;;7708:3;7700:4;7692:6;7688:17;7678:8;7674:32;7671:41;7668:128;;;7715:79;;:::i;:::-;7668:128;7234:568;;;;;:::o;7825:::-;7898:8;7908:6;7958:3;7951:4;7943:6;7939:17;7935:27;7925:122;;7966:79;;:::i;:::-;7925:122;8079:6;8066:20;8056:30;;8109:18;8101:6;8098:30;8095:117;;;8131:79;;:::i;:::-;8095:117;8245:4;8237:6;8233:17;8221:29;;8299:3;8291:4;8283:6;8279:17;8269:8;8265:32;8262:41;8259:128;;;8306:79;;:::i;:::-;8259:128;7825:568;;;;;:::o;8399:934::-;8521:6;8529;8537;8545;8594:2;8582:9;8573:7;8569:23;8565:32;8562:119;;;8600:79;;:::i;:::-;8562:119;8748:1;8737:9;8733:17;8720:31;8778:18;8770:6;8767:30;8764:117;;;8800:79;;:::i;:::-;8764:117;8913:80;8985:7;8976:6;8965:9;8961:22;8913:80;:::i;:::-;8895:98;;;;8691:312;9070:2;9059:9;9055:18;9042:32;9101:18;9093:6;9090:30;9087:117;;;9123:79;;:::i;:::-;9087:117;9236:80;9308:7;9299:6;9288:9;9284:22;9236:80;:::i;:::-;9218:98;;;;9013:313;8399:934;;;;;;;:::o;9339:474::-;9407:6;9415;9464:2;9452:9;9443:7;9439:23;9435:32;9432:119;;;9470:79;;:::i;:::-;9432:119;9590:1;9615:53;9660:7;9651:6;9640:9;9636:22;9615:53;:::i;:::-;9605:63;;9561:117;9717:2;9743:53;9788:7;9779:6;9768:9;9764:22;9743:53;:::i;:::-;9733:63;;9688:118;9339:474;;;;;:::o;9819:116::-;9889:21;9904:5;9889:21;:::i;:::-;9882:5;9879:32;9869:60;;9925:1;9922;9915:12;9869:60;9819:116;:::o;9941:133::-;9984:5;10022:6;10009:20;10000:29;;10038:30;10062:5;10038:30;:::i;:::-;9941:133;;;;:::o;10080:468::-;10145:6;10153;10202:2;10190:9;10181:7;10177:23;10173:32;10170:119;;;10208:79;;:::i;:::-;10170:119;10328:1;10353:53;10398:7;10389:6;10378:9;10374:22;10353:53;:::i;:::-;10343:63;;10299:117;10455:2;10481:50;10523:7;10514:6;10503:9;10499:22;10481:50;:::i;:::-;10471:60;;10426:115;10080:468;;;;;:::o;10554:323::-;10610:6;10659:2;10647:9;10638:7;10634:23;10630:32;10627:119;;;10665:79;;:::i;:::-;10627:119;10785:1;10810:50;10852:7;10843:6;10832:9;10828:22;10810:50;:::i;:::-;10800:60;;10756:114;10554:323;;;;:::o;10883:180::-;10931:77;10928:1;10921:88;11028:4;11025:1;11018:15;11052:4;11049:1;11042:15;11069:281;11152:27;11174:4;11152:27;:::i;:::-;11144:6;11140:40;11282:6;11270:10;11267:22;11246:18;11234:10;11231:34;11228:62;11225:88;;;11293:18;;:::i;:::-;11225:88;11333:10;11329:2;11322:22;11112:238;11069:281;;:::o;11356:129::-;11390:6;11417:20;;:::i;:::-;11407:30;;11446:33;11474:4;11466:6;11446:33;:::i;:::-;11356:129;;;:::o;11491:311::-;11568:4;11658:18;11650:6;11647:30;11644:56;;;11680:18;;:::i;:::-;11644:56;11730:4;11722:6;11718:17;11710:25;;11790:4;11784;11780:15;11772:23;;11491:311;;;:::o;11825:710::-;11921:5;11946:81;11962:64;12019:6;11962:64;:::i;:::-;11946:81;:::i;:::-;11937:90;;12047:5;12076:6;12069:5;12062:21;12110:4;12103:5;12099:16;12092:23;;12163:4;12155:6;12151:17;12143:6;12139:30;12192:3;12184:6;12181:15;12178:122;;;12211:79;;:::i;:::-;12178:122;12326:6;12309:220;12343:6;12338:3;12335:15;12309:220;;;12418:3;12447:37;12480:3;12468:10;12447:37;:::i;:::-;12442:3;12435:50;12514:4;12509:3;12505:14;12498:21;;12385:144;12369:4;12364:3;12360:14;12353:21;;12309:220;;;12313:21;11927:608;;11825:710;;;;;:::o;12558:370::-;12629:5;12678:3;12671:4;12663:6;12659:17;12655:27;12645:122;;12686:79;;:::i;:::-;12645:122;12803:6;12790:20;12828:94;12918:3;12910:6;12903:4;12895:6;12891:17;12828:94;:::i;:::-;12819:103;;12635:293;12558:370;;;;:::o;12934:539::-;13018:6;13067:2;13055:9;13046:7;13042:23;13038:32;13035:119;;;13073:79;;:::i;:::-;13035:119;13221:1;13210:9;13206:17;13193:31;13251:18;13243:6;13240:30;13237:117;;;13273:79;;:::i;:::-;13237:117;13378:78;13448:7;13439:6;13428:9;13424:22;13378:78;:::i;:::-;13368:88;;13164:302;12934:539;;;;:::o;13479:474::-;13547:6;13555;13604:2;13592:9;13583:7;13579:23;13575:32;13572:119;;;13610:79;;:::i;:::-;13572:119;13730:1;13755:53;13800:7;13791:6;13780:9;13776:22;13755:53;:::i;:::-;13745:63;;13701:117;13857:2;13883:53;13928:7;13919:6;13908:9;13904:22;13883:53;:::i;:::-;13873:63;;13828:118;13479:474;;;;;:::o;13959:180::-;14007:77;14004:1;13997:88;14104:4;14101:1;14094:15;14128:4;14125:1;14118:15;14145:320;14189:6;14226:1;14220:4;14216:12;14206:22;;14273:1;14267:4;14263:12;14294:18;14284:81;;14350:4;14342:6;14338:17;14328:27;;14284:81;14412:2;14404:6;14401:14;14381:18;14378:38;14375:84;;14431:18;;:::i;:::-;14375:84;14196:269;14145:320;;;:::o;14471:182::-;14611:34;14607:1;14599:6;14595:14;14588:58;14471:182;:::o;14659:366::-;14801:3;14822:67;14886:2;14881:3;14822:67;:::i;:::-;14815:74;;14898:93;14987:3;14898:93;:::i;:::-;15016:2;15011:3;15007:12;15000:19;;14659:366;;;:::o;15031:419::-;15197:4;15235:2;15224:9;15220:18;15212:26;;15284:9;15278:4;15274:20;15270:1;15259:9;15255:17;15248:47;15312:131;15438:4;15312:131;:::i;:::-;15304:139;;15031:419;;;:::o;15456:180::-;15504:77;15501:1;15494:88;15601:4;15598:1;15591:15;15625:4;15622:1;15615:15;15642:410;15682:7;15705:20;15723:1;15705:20;:::i;:::-;15700:25;;15739:20;15757:1;15739:20;:::i;:::-;15734:25;;15794:1;15791;15787:9;15816:30;15834:11;15816:30;:::i;:::-;15805:41;;15995:1;15986:7;15982:15;15979:1;15976:22;15956:1;15949:9;15929:83;15906:139;;16025:18;;:::i;:::-;15906:139;15690:362;15642:410;;;;:::o;16058:180::-;16106:77;16103:1;16096:88;16203:4;16200:1;16193:15;16227:4;16224:1;16217:15;16244:185;16284:1;16301:20;16319:1;16301:20;:::i;:::-;16296:25;;16335:20;16353:1;16335:20;:::i;:::-;16330:25;;16374:1;16364:35;;16379:18;;:::i;:::-;16364:35;16421:1;16418;16414:9;16409:14;;16244:185;;;;:::o;16435:234::-;16575:34;16571:1;16563:6;16559:14;16552:58;16644:17;16639:2;16631:6;16627:15;16620:42;16435:234;:::o;16675:366::-;16817:3;16838:67;16902:2;16897:3;16838:67;:::i;:::-;16831:74;;16914:93;17003:3;16914:93;:::i;:::-;17032:2;17027:3;17023:12;17016:19;;16675:366;;;:::o;17047:419::-;17213:4;17251:2;17240:9;17236:18;17228:26;;17300:9;17294:4;17290:20;17286:1;17275:9;17271:17;17264:47;17328:131;17454:4;17328:131;:::i;:::-;17320:139;;17047:419;;;:::o;17472:227::-;17612:34;17608:1;17600:6;17596:14;17589:58;17681:10;17676:2;17668:6;17664:15;17657:35;17472:227;:::o;17705:366::-;17847:3;17868:67;17932:2;17927:3;17868:67;:::i;:::-;17861:74;;17944:93;18033:3;17944:93;:::i;:::-;18062:2;18057:3;18053:12;18046:19;;17705:366;;;:::o;18077:419::-;18243:4;18281:2;18270:9;18266:18;18258:26;;18330:9;18324:4;18320:20;18316:1;18305:9;18301:17;18294:47;18358:131;18484:4;18358:131;:::i;:::-;18350:139;;18077:419;;;:::o;18502:191::-;18542:3;18561:20;18579:1;18561:20;:::i;:::-;18556:25;;18595:20;18613:1;18595:20;:::i;:::-;18590:25;;18638:1;18635;18631:9;18624:16;;18659:3;18656:1;18653:10;18650:36;;;18666:18;;:::i;:::-;18650:36;18502:191;;;;:::o;18699:180::-;18747:77;18744:1;18737:88;18844:4;18841:1;18834:15;18868:4;18865:1;18858:15;18885:233;18924:3;18947:24;18965:5;18947:24;:::i;:::-;18938:33;;18993:66;18986:5;18983:77;18980:103;;19063:18;;:::i;:::-;18980:103;19110:1;19103:5;19099:13;19092:20;;18885:233;;;:::o;19124:166::-;19264:18;19260:1;19252:6;19248:14;19241:42;19124:166;:::o;19296:366::-;19438:3;19459:67;19523:2;19518:3;19459:67;:::i;:::-;19452:74;;19535:93;19624:3;19535:93;:::i;:::-;19653:2;19648:3;19644:12;19637:19;;19296:366;;;:::o;19668:419::-;19834:4;19872:2;19861:9;19857:18;19849:26;;19921:9;19915:4;19911:20;19907:1;19896:9;19892:17;19885:47;19949:131;20075:4;19949:131;:::i;:::-;19941:139;;19668:419;;;:::o;20093:147::-;20194:11;20231:3;20216:18;;20093:147;;;;:::o;20246:114::-;;:::o;20366:398::-;20525:3;20546:83;20627:1;20622:3;20546:83;:::i;:::-;20539:90;;20638:93;20727:3;20638:93;:::i;:::-;20756:1;20751:3;20747:11;20740:18;;20366:398;;;:::o;20770:379::-;20954:3;20976:147;21119:3;20976:147;:::i;:::-;20969:154;;21140:3;21133:10;;20770:379;;;:::o;21155:162::-;21295:14;21291:1;21283:6;21279:14;21272:38;21155:162;:::o;21323:366::-;21465:3;21486:67;21550:2;21545:3;21486:67;:::i;:::-;21479:74;;21562:93;21651:3;21562:93;:::i;:::-;21680:2;21675:3;21671:12;21664:19;;21323:366;;;:::o;21695:419::-;21861:4;21899:2;21888:9;21884:18;21876:26;;21948:9;21942:4;21938:20;21934:1;21923:9;21919:17;21912:47;21976:131;22102:4;21976:131;:::i;:::-;21968:139;;21695:419;;;:::o;22120:244::-;22260:34;22256:1;22248:6;22244:14;22237:58;22329:27;22324:2;22316:6;22312:15;22305:52;22120:244;:::o;22370:366::-;22512:3;22533:67;22597:2;22592:3;22533:67;:::i;:::-;22526:74;;22609:93;22698:3;22609:93;:::i;:::-;22727:2;22722:3;22718:12;22711:19;;22370:366;;;:::o;22742:419::-;22908:4;22946:2;22935:9;22931:18;22923:26;;22995:9;22989:4;22985:20;22981:1;22970:9;22966:17;22959:47;23023:131;23149:4;23023:131;:::i;:::-;23015:139;;22742:419;;;:::o;23167:224::-;23307:34;23303:1;23295:6;23291:14;23284:58;23376:7;23371:2;23363:6;23359:15;23352:32;23167:224;:::o;23397:366::-;23539:3;23560:67;23624:2;23619:3;23560:67;:::i;:::-;23553:74;;23636:93;23725:3;23636:93;:::i;:::-;23754:2;23749:3;23745:12;23738:19;;23397:366;;;:::o;23769:419::-;23935:4;23973:2;23962:9;23958:18;23950:26;;24022:9;24016:4;24012:20;24008:1;23997:9;23993:17;23986:47;24050:131;24176:4;24050:131;:::i;:::-;24042:139;;23769:419;;;:::o;24194:223::-;24334:34;24330:1;24322:6;24318:14;24311:58;24403:6;24398:2;24390:6;24386:15;24379:31;24194:223;:::o;24423:366::-;24565:3;24586:67;24650:2;24645:3;24586:67;:::i;:::-;24579:74;;24662:93;24751:3;24662:93;:::i;:::-;24780:2;24775:3;24771:12;24764:19;;24423:366;;;:::o;24795:419::-;24961:4;24999:2;24988:9;24984:18;24976:26;;25048:9;25042:4;25038:20;25034:1;25023:9;25019:17;25012:47;25076:131;25202:4;25076:131;:::i;:::-;25068:139;;24795:419;;;:::o;25220:85::-;25265:7;25294:5;25283:16;;25220:85;;;:::o;25311:158::-;25369:9;25402:61;25420:42;25429:32;25455:5;25429:32;:::i;:::-;25420:42;:::i;:::-;25402:61;:::i;:::-;25389:74;;25311:158;;;:::o;25475:147::-;25570:45;25609:5;25570:45;:::i;:::-;25565:3;25558:58;25475:147;;:::o;25628:807::-;25877:4;25915:3;25904:9;25900:19;25892:27;;25929:71;25997:1;25986:9;25982:17;25973:6;25929:71;:::i;:::-;26010:72;26078:2;26067:9;26063:18;26054:6;26010:72;:::i;:::-;26092:80;26168:2;26157:9;26153:18;26144:6;26092:80;:::i;:::-;26182;26258:2;26247:9;26243:18;26234:6;26182:80;:::i;:::-;26272:73;26340:3;26329:9;26325:19;26316:6;26272:73;:::i;:::-;26355;26423:3;26412:9;26408:19;26399:6;26355:73;:::i;:::-;25628:807;;;;;;;;;:::o;26441:143::-;26498:5;26529:6;26523:13;26514:22;;26545:33;26572:5;26545:33;:::i;:::-;26441:143;;;;:::o;26590:663::-;26678:6;26686;26694;26743:2;26731:9;26722:7;26718:23;26714:32;26711:119;;;26749:79;;:::i;:::-;26711:119;26869:1;26894:64;26950:7;26941:6;26930:9;26926:22;26894:64;:::i;:::-;26884:74;;26840:128;27007:2;27033:64;27089:7;27080:6;27069:9;27065:22;27033:64;:::i;:::-;27023:74;;26978:129;27146:2;27172:64;27228:7;27219:6;27208:9;27204:22;27172:64;:::i;:::-;27162:74;;27117:129;26590:663;;;;;:::o;27259:332::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27431:71;27499:1;27488:9;27484:17;27475:6;27431:71;:::i;:::-;27512:72;27580:2;27569:9;27565:18;27556:6;27512:72;:::i;:::-;27259:332;;;;;:::o;27597:137::-;27651:5;27682:6;27676:13;27667:22;;27698:30;27722:5;27698:30;:::i;:::-;27597:137;;;;:::o;27740:345::-;27807:6;27856:2;27844:9;27835:7;27831:23;27827:32;27824:119;;;27862:79;;:::i;:::-;27824:119;27982:1;28007:61;28060:7;28051:6;28040:9;28036:22;28007:61;:::i;:::-;27997:71;;27953:125;27740:345;;;;:::o;28091:225::-;28231:34;28227:1;28219:6;28215:14;28208:58;28300:8;28295:2;28287:6;28283:15;28276:33;28091:225;:::o;28322:366::-;28464:3;28485:67;28549:2;28544:3;28485:67;:::i;:::-;28478:74;;28561:93;28650:3;28561:93;:::i;:::-;28679:2;28674:3;28670:12;28663:19;;28322:366;;;:::o;28694:419::-;28860:4;28898:2;28887:9;28883:18;28875:26;;28947:9;28941:4;28937:20;28933:1;28922:9;28918:17;28911:47;28975:131;29101:4;28975:131;:::i;:::-;28967:139;;28694:419;;;:::o;29119:223::-;29259:34;29255:1;29247:6;29243:14;29236:58;29328:6;29323:2;29315:6;29311:15;29304:31;29119:223;:::o;29348:366::-;29490:3;29511:67;29575:2;29570:3;29511:67;:::i;:::-;29504:74;;29587:93;29676:3;29587:93;:::i;:::-;29705:2;29700:3;29696:12;29689:19;;29348:366;;;:::o;29720:419::-;29886:4;29924:2;29913:9;29909:18;29901:26;;29973:9;29967:4;29963:20;29959:1;29948:9;29944:17;29937:47;30001:131;30127:4;30001:131;:::i;:::-;29993:139;;29720:419;;;:::o;30145:221::-;30285:34;30281:1;30273:6;30269:14;30262:58;30354:4;30349:2;30341:6;30337:15;30330:29;30145:221;:::o;30372:366::-;30514:3;30535:67;30599:2;30594:3;30535:67;:::i;:::-;30528:74;;30611:93;30700:3;30611:93;:::i;:::-;30729:2;30724:3;30720:12;30713:19;;30372:366;;;:::o;30744:419::-;30910:4;30948:2;30937:9;30933:18;30925:26;;30997:9;30991:4;30987:20;30983:1;30972:9;30968:17;30961:47;31025:131;31151:4;31025:131;:::i;:::-;31017:139;;30744:419;;;:::o;31169:224::-;31309:34;31305:1;31297:6;31293:14;31286:58;31378:7;31373:2;31365:6;31361:15;31354:32;31169:224;:::o;31399:366::-;31541:3;31562:67;31626:2;31621:3;31562:67;:::i;:::-;31555:74;;31638:93;31727:3;31638:93;:::i;:::-;31756:2;31751:3;31747:12;31740:19;;31399:366;;;:::o;31771:419::-;31937:4;31975:2;31964:9;31960:18;31952:26;;32024:9;32018:4;32014:20;32010:1;31999:9;31995:17;31988:47;32052:131;32178:4;32052:131;:::i;:::-;32044:139;;31771:419;;;:::o;32196:222::-;32336:34;32332:1;32324:6;32320:14;32313:58;32405:5;32400:2;32392:6;32388:15;32381:30;32196:222;:::o;32424:366::-;32566:3;32587:67;32651:2;32646:3;32587:67;:::i;:::-;32580:74;;32663:93;32752:3;32663:93;:::i;:::-;32781:2;32776:3;32772:12;32765:19;;32424:366;;;:::o;32796:419::-;32962:4;33000:2;32989:9;32985:18;32977:26;;33049:9;33043:4;33039:20;33035:1;33024:9;33020:17;33013:47;33077:131;33203:4;33077:131;:::i;:::-;33069:139;;32796:419;;;:::o;33221:172::-;33361:24;33357:1;33349:6;33345:14;33338:48;33221:172;:::o;33399:366::-;33541:3;33562:67;33626:2;33621:3;33562:67;:::i;:::-;33555:74;;33638:93;33727:3;33638:93;:::i;:::-;33756:2;33751:3;33747:12;33740:19;;33399:366;;;:::o;33771:419::-;33937:4;33975:2;33964:9;33960:18;33952:26;;34024:9;34018:4;34014:20;34010:1;33999:9;33995:17;33988:47;34052:131;34178:4;34052:131;:::i;:::-;34044:139;;33771:419;;;:::o;34196:240::-;34336:34;34332:1;34324:6;34320:14;34313:58;34405:23;34400:2;34392:6;34388:15;34381:48;34196:240;:::o;34442:366::-;34584:3;34605:67;34669:2;34664:3;34605:67;:::i;:::-;34598:74;;34681:93;34770:3;34681:93;:::i;:::-;34799:2;34794:3;34790:12;34783:19;;34442:366;;;:::o;34814:419::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34814:419;;;:::o;35239:169::-;35379:21;35375:1;35367:6;35363:14;35356:45;35239:169;:::o;35414:366::-;35556:3;35577:67;35641:2;35636:3;35577:67;:::i;:::-;35570:74;;35653:93;35742:3;35653:93;:::i;:::-;35771:2;35766:3;35762:12;35755:19;;35414:366;;;:::o;35786:419::-;35952:4;35990:2;35979:9;35975:18;35967:26;;36039:9;36033:4;36029:20;36025:1;36014:9;36010:17;36003:47;36067:131;36193:4;36067:131;:::i;:::-;36059:139;;35786:419;;;:::o;36211:241::-;36351:34;36347:1;36339:6;36335:14;36328:58;36420:24;36415:2;36407:6;36403:15;36396:49;36211:241;:::o;36458:366::-;36600:3;36621:67;36685:2;36680:3;36621:67;:::i;:::-;36614:74;;36697:93;36786:3;36697:93;:::i;:::-;36815:2;36810:3;36806:12;36799:19;;36458:366;;;:::o;36830:419::-;36996:4;37034:2;37023:9;37019:18;37011:26;;37083:9;37077:4;37073:20;37069:1;37058:9;37054:17;37047:47;37111:131;37237:4;37111:131;:::i;:::-;37103:139;;36830:419;;;:::o;37255:194::-;37295:4;37315:20;37333:1;37315:20;:::i;:::-;37310:25;;37349:20;37367:1;37349:20;:::i;:::-;37344:25;;37393:1;37390;37386:9;37378:17;;37417:1;37411:4;37408:11;37405:37;;;37422:18;;:::i;:::-;37405:37;37255:194;;;;:::o;37455:143::-;37512:5;37543:6;37537:13;37528:22;;37559:33;37586:5;37559:33;:::i;:::-;37455:143;;;;:::o;37604:351::-;37674:6;37723:2;37711:9;37702:7;37698:23;37694:32;37691:119;;;37729:79;;:::i;:::-;37691:119;37849:1;37874:64;37930:7;37921:6;37910:9;37906:22;37874:64;:::i;:::-;37864:74;;37820:128;37604:351;;;;:::o;37961:114::-;38028:6;38062:5;38056:12;38046:22;;37961:114;;;:::o;38081:184::-;38180:11;38214:6;38209:3;38202:19;38254:4;38249:3;38245:14;38230:29;;38081:184;;;;:::o;38271:132::-;38338:4;38361:3;38353:11;;38391:4;38386:3;38382:14;38374:22;;38271:132;;;:::o;38409:108::-;38486:24;38504:5;38486:24;:::i;:::-;38481:3;38474:37;38409:108;;:::o;38523:179::-;38592:10;38613:46;38655:3;38647:6;38613:46;:::i;:::-;38691:4;38686:3;38682:14;38668:28;;38523:179;;;;:::o;38708:113::-;38778:4;38810;38805:3;38801:14;38793:22;;38708:113;;;:::o;38857:732::-;38976:3;39005:54;39053:5;39005:54;:::i;:::-;39075:86;39154:6;39149:3;39075:86;:::i;:::-;39068:93;;39185:56;39235:5;39185:56;:::i;:::-;39264:7;39295:1;39280:284;39305:6;39302:1;39299:13;39280:284;;;39381:6;39375:13;39408:63;39467:3;39452:13;39408:63;:::i;:::-;39401:70;;39494:60;39547:6;39494:60;:::i;:::-;39484:70;;39340:224;39327:1;39324;39320:9;39315:14;;39280:284;;;39284:14;39580:3;39573:10;;38981:608;;;38857:732;;;;:::o;39595:831::-;39858:4;39896:3;39885:9;39881:19;39873:27;;39910:71;39978:1;39967:9;39963:17;39954:6;39910:71;:::i;:::-;39991:80;40067:2;40056:9;40052:18;40043:6;39991:80;:::i;:::-;40118:9;40112:4;40108:20;40103:2;40092:9;40088:18;40081:48;40146:108;40249:4;40240:6;40146:108;:::i;:::-;40138:116;;40264:72;40332:2;40321:9;40317:18;40308:6;40264:72;:::i;:::-;40346:73;40414:3;40403:9;40399:19;40390:6;40346:73;:::i;:::-;39595:831;;;;;;;;:::o;40432:225::-;40572:34;40568:1;40560:6;40556:14;40549:58;40641:8;40636:2;40628:6;40624:15;40617:33;40432:225;:::o;40663:366::-;40805:3;40826:67;40890:2;40885:3;40826:67;:::i;:::-;40819:74;;40902:93;40991:3;40902:93;:::i;:::-;41020:2;41015:3;41011:12;41004:19;;40663:366;;;:::o;41035:419::-;41201:4;41239:2;41228:9;41224:18;41216:26;;41288:9;41282:4;41278:20;41274:1;41263:9;41259:17;41252:47;41316:131;41442:4;41316:131;:::i;:::-;41308:139;;41035:419;;;:::o

Swarm Source

ipfs://fb7764036c36ba66256fba28d4bacc196a50bc1a286712385b31aab33cf80211

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.