ETH Price: $3,280.90 (+0.04%)
Gas: 4 Gwei

Contract

0x60A9654b3a0cC4FF9cd4F0e19789189d7685C88d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve170185202023-04-10 14:56:23474 days ago1681138583IN
0x60A9654b...d7685C88d
0 ETH0.0018880240.00401299
Approve169697922023-04-03 16:52:11481 days ago1680540731IN
0x60A9654b...d7685C88d
0 ETH0.0009367731.38906726
Approve169341332023-03-29 16:28:11486 days ago1680107291IN
0x60A9654b...d7685C88d
0 ETH0.0017654137.4059959
Approve169290232023-03-28 23:14:35486 days ago1680045275IN
0x60A9654b...d7685C88d
0 ETH0.0014933331.64109104
Approve169290112023-03-28 23:12:11486 days ago1680045131IN
0x60A9654b...d7685C88d
0 ETH0.0013632428.84800054
Approve169271092023-03-28 16:47:23487 days ago1680022043IN
0x60A9654b...d7685C88d
0 ETH0.0015083931.96029154
Approve169270702023-03-28 16:38:47487 days ago1680021527IN
0x60A9654b...d7685C88d
0 ETH0.0012866727.41574651
Approve169270692023-03-28 16:38:35487 days ago1680021515IN
0x60A9654b...d7685C88d
0 ETH0.0008478428.40918713
Approve169270342023-03-28 16:31:35487 days ago1680021095IN
0x60A9654b...d7685C88d
0 ETH0.0014504730.733087
Approve169270212023-03-28 16:28:35487 days ago1680020915IN
0x60A9654b...d7685C88d
0 ETH0.0012621626.74299795
Approve169270102023-03-28 16:26:23487 days ago1680020783IN
0x60A9654b...d7685C88d
0 ETH0.0014714531.17750668
Approve169269792023-03-28 16:20:11487 days ago1680020411IN
0x60A9654b...d7685C88d
0 ETH0.0013309528.31577419
Approve169269552023-03-28 16:15:23487 days ago1680020123IN
0x60A9654b...d7685C88d
0 ETH0.001251226.61908625
Approve169269452023-03-28 16:13:23487 days ago1680020003IN
0x60A9654b...d7685C88d
0 ETH0.0014280530.42818082
Approve169269342023-03-28 16:11:11487 days ago1680019871IN
0x60A9654b...d7685C88d
0 ETH0.0012625626.75146448
Approve169269052023-03-28 16:05:23487 days ago1680019523IN
0x60A9654b...d7685C88d
0 ETH0.0016353434.65
Approve169268882023-03-28 16:01:47487 days ago1680019307IN
0x60A9654b...d7685C88d
0 ETH0.001601833.93937326
Approve169268672023-03-28 15:57:35487 days ago1680019055IN
0x60A9654b...d7685C88d
0 ETH0.0012757927.18389237
Approve169268622023-03-28 15:56:35487 days ago1680018995IN
0x60A9654b...d7685C88d
0 ETH0.0012587926.67166606
Approve169268542023-03-28 15:54:59487 days ago1680018899IN
0x60A9654b...d7685C88d
0 ETH0.0008220227.54420391
Approve169268412023-03-28 15:52:23487 days ago1680018743IN
0x60A9654b...d7685C88d
0 ETH0.001423230.28613047
Approve169268402023-03-28 15:52:11487 days ago1680018731IN
0x60A9654b...d7685C88d
0 ETH0.0013902929.45791066
Approve169268302023-03-28 15:50:11487 days ago1680018611IN
0x60A9654b...d7685C88d
0 ETH0.0012299726.20093446
Approve169268152023-03-28 15:46:59487 days ago1680018419IN
0x60A9654b...d7685C88d
0 ETH0.0013702429.15920678
Approve169267932023-03-28 15:42:35487 days ago1680018155IN
0x60A9654b...d7685C88d
0 ETH0.0014244630.18191291
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
169327232023-03-29 11:42:23486 days ago1680090143
0x60A9654b...d7685C88d
0.01013007 ETH
169327232023-03-29 11:42:23486 days ago1680090143
0x60A9654b...d7685C88d
0.01013007 ETH
169288732023-03-28 22:43:59486 days ago1680043439
0x60A9654b...d7685C88d
0.01013007 ETH
169288732023-03-28 22:43:59486 days ago1680043439
0x60A9654b...d7685C88d
0.01013007 ETH
169271612023-03-28 16:57:59487 days ago1680022679
0x60A9654b...d7685C88d
0.01390933 ETH
169271612023-03-28 16:57:59487 days ago1680022679
0x60A9654b...d7685C88d
0.01390933 ETH
169270392023-03-28 16:32:35487 days ago1680021155
0x60A9654b...d7685C88d
0.02309478 ETH
169270392023-03-28 16:32:35487 days ago1680021155
0x60A9654b...d7685C88d
0.02309478 ETH
169269512023-03-28 16:14:35487 days ago1680020075
0x60A9654b...d7685C88d
0.02758402 ETH
169269512023-03-28 16:14:35487 days ago1680020075
0x60A9654b...d7685C88d
0.02758402 ETH
169268582023-03-28 15:55:47487 days ago1680018947
0x60A9654b...d7685C88d
0.04171627 ETH
169268582023-03-28 15:55:47487 days ago1680018947
0x60A9654b...d7685C88d
0.04171627 ETH
169268292023-03-28 15:49:47487 days ago1680018587
0x60A9654b...d7685C88d
0.04025359 ETH
169268292023-03-28 15:49:47487 days ago1680018587
0x60A9654b...d7685C88d
0.04025359 ETH
169267782023-03-28 15:39:23487 days ago1680017963
0x60A9654b...d7685C88d
0.07971346 ETH
169267782023-03-28 15:39:23487 days ago1680017963
0x60A9654b...d7685C88d
0.07971346 ETH
169266932023-03-28 15:22:23487 days ago1680016943
0x60A9654b...d7685C88d
0.10050236 ETH
169266932023-03-28 15:22:23487 days ago1680016943
0x60A9654b...d7685C88d
0.10050236 ETH
169266502023-03-28 15:13:35487 days ago1680016415
0x60A9654b...d7685C88d
0.05601363 ETH
169266502023-03-28 15:13:35487 days ago1680016415
0x60A9654b...d7685C88d
0.05601363 ETH
169266252023-03-28 15:08:35487 days ago1680016115
0x60A9654b...d7685C88d
0.09310737 ETH
169266252023-03-28 15:08:35487 days ago1680016115
0x60A9654b...d7685C88d
0.09310737 ETH
169265762023-03-28 14:58:47487 days ago1680015527
0x60A9654b...d7685C88d
0.18098994 ETH
169265762023-03-28 14:58:47487 days ago1680015527
0x60A9654b...d7685C88d
0.18098994 ETH
169265382023-03-28 14:51:11487 days ago1680015071
0x60A9654b...d7685C88d
0.14162362 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LLaMA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-28
*/

/*

$LLaMA token is based on Meta’s AI language model

LLaMA (Large Language Model Meta AI), a state-of-the-art foundational large language model designed to help researchers advance their work in this subfield of AI. Smaller, more performant models such as LLaMA enable others in the research community who don’t have access to large amounts of infrastructure to study these models, further democratizing access in this important, fast-changing field.

https://ai.facebook.com/blog/large-language-model-llama-meta-ai/

Website: https://llama-ai.org/

Telegram: https://t.me/LLaMAERC

Twitter: https://twitter.com/LlamaAIERC

*/
// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.17;

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

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _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);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {return _owner;}
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract LLaMA is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

    event 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 devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("LLaMA.AI", "LLaMA") {
        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 _buyMarketingFee = 40;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 100000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 25 / 1000; // 2.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 25 / 1000; // 2.5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner()); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 10, "Swap amount cannot be higher than 50% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    function manage_blacklist(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        (success,) = address(devWallet).call{value: ethForDev}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f4c4c614d412e41490000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c4c614d410000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dea565b5080600490816200010d919062000dea565b5050506000620001226200063d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200064560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f3b565b6040518363ffffffff1660e01b81526004016200034092919062000f7e565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f3b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200064560201b60201c565b620003e360a05160016200074260201b60201c565b60006028905060008060006028905060008060006a52b7d2dcc80cd2e400000090506103e860198262000417919062000fda565b62000423919062001054565b6008819055506103e86019826200043b919062000fda565b62000447919062001054565b600a819055506103e86005826200045f919062000fda565b6200046b919062001054565b6009819055508660108190555085601181905550846012819055506012546011546010546200049b91906200108c565b620004a791906200108c565b600f81905550836014819055508260158190555081601681905550601654601554601454620004d791906200108c565b620004e391906200108c565b601381905550620004f9620007e360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000549620007e360201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ab6200059d620007e360201b60201c565b60016200080d60201b60201c565b620005be3060016200080d60201b60201c565b620005d361dead60016200080d60201b60201c565b620005f5620005e7620007e360201b60201c565b60016200064560201b60201c565b620006083060016200064560201b60201c565b6200061d61dead60016200064560201b60201c565b6200062f33826200095a60201b60201c565b505050505050505062001296565b600033905090565b620006556200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006de9062001128565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081d6200063d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a69062001128565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094e919062001167565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c390620011d4565b60405180910390fd5b620009e06000838362000b0860201b60201c565b620009fc8160025462000b0d60201b620027b21790919060201c565b60028190555062000a5a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0d60201b620027b21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000afc919062001207565b60405180910390a35050565b505050565b600080828462000b1e91906200108c565b90508381101562000b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5d9062001274565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bf257607f821691505b60208210810362000c085762000c0762000baa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c33565b62000c7e868362000c33565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ccb62000cc562000cbf8462000c96565b62000ca0565b62000c96565b9050919050565b6000819050919050565b62000ce78362000caa565b62000cff62000cf68262000cd2565b84845462000c40565b825550505050565b600090565b62000d1662000d07565b62000d2381848462000cdc565b505050565b5b8181101562000d4b5762000d3f60008262000d0c565b60018101905062000d29565b5050565b601f82111562000d9a5762000d648162000c0e565b62000d6f8462000c23565b8101602085101562000d7f578190505b62000d9762000d8e8562000c23565b83018262000d28565b50505b505050565b600082821c905092915050565b600062000dbf6000198460080262000d9f565b1980831691505092915050565b600062000dda838362000dac565b9150826002028217905092915050565b62000df58262000b70565b67ffffffffffffffff81111562000e115762000e1062000b7b565b5b62000e1d825462000bd9565b62000e2a82828562000d4f565b600060209050601f83116001811462000e62576000841562000e4d578287015190505b62000e59858262000dcc565b86555062000ec9565b601f19841662000e728662000c0e565b60005b8281101562000e9c5784890151825560018201915060208501945060208101905062000e75565b8683101562000ebc578489015162000eb8601f89168262000dac565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f038262000ed6565b9050919050565b62000f158162000ef6565b811462000f2157600080fd5b50565b60008151905062000f358162000f0a565b92915050565b60006020828403121562000f545762000f5362000ed1565b5b600062000f648482850162000f24565b91505092915050565b62000f788162000ef6565b82525050565b600060408201905062000f95600083018562000f6d565b62000fa4602083018462000f6d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fe78262000c96565b915062000ff48362000c96565b9250828202620010048162000c96565b915082820484148315176200101e576200101d62000fab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010618262000c96565b91506200106e8362000c96565b92508262001081576200108062001025565b5b828204905092915050565b6000620010998262000c96565b9150620010a68362000c96565b9250828201905080821115620010c157620010c062000fab565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001110602083620010c7565b91506200111d82620010d8565b602082019050919050565b60006020820190508181036000830152620011438162001101565b9050919050565b60008115159050919050565b62001161816200114a565b82525050565b60006020820190506200117e600083018462001156565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011bc601f83620010c7565b9150620011c98262001184565b602082019050919050565b60006020820190508181036000830152620011ef81620011ad565b9050919050565b620012018162000c96565b82525050565b60006020820190506200121e6000830184620011f6565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200125c601b83620010c7565b9150620012698262001224565b602082019050919050565b600060208201905081810360008301526200128f816200124d565b9050919050565b60805160a051615550620012f4600039600081816112a301528181611c3f0152612e79015260008181610e4d01528181612e2101528181613e3801528181613f1901528181613f4001528181613fdc015261400301526155506000f3fe60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614142565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fd565b610e0d565b6040516103da9190614258565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614273565b610e2b565b6040516104179190614258565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b60405161044291906142ff565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d9190614329565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614273565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c19190614329565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec9190614329565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614344565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614371565b611106565b6040516105529190614258565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d3565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fd565b6111ee565b6040516105e59190614258565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d3565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614258565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614273565b6112d8565b6040516106789190614258565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a39190614329565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614258565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614273565b611347565b60405161070b9190614329565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614258565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614451565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d3565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614451565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f59190614329565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614491565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d3565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d3565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b69190614329565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e4565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614142565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614451565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e9190614329565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b6040516109899190614329565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b49190614329565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fd565b611ceb565b6040516109f19190614258565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fd565b611db8565b604051610a2e9190614258565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614273565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614273565b611f2d565b604051610a949190614258565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614258565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614451565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614491565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614344565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614258565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b909190614329565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614344565b6122fd565b604051610bcd9190614258565b60405180910390f35b348015610be257600080fd5b50610beb61246c565b604051610bf89190614329565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614511565b612472565b604051610c359190614329565b60405180910390f35b348015610c4a57600080fd5b50610c536124f9565b604051610c609190614329565b60405180910390f35b348015610c7557600080fd5b50610c7e6124ff565b604051610c8b9190614258565b60405180910390f35b348015610ca057600080fd5b50610ca96125ba565b604051610cb69190614329565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614273565b6125c0565b005b348015610cf457600080fd5b50610cfd612786565b604051610d0a9190614329565b60405180910390f35b348015610d1f57600080fd5b50610d2861278c565b604051610d359190614329565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614273565b612792565b604051610d729190614258565b60405180910390f35b606060038054610d8a90614580565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614580565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612810565b8484612818565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e81612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fd565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464c565b61109d91906146bd565b6110a791906146bd565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614760565b60405180910390fd5b670de0b6b3a7640000816110fd919061464c565b60088190555050565b60006111138484846129e1565b6111d48461111f612810565b6111cf856040518060600160405280602881526020016154ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612810565b84611292856001600061120c612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b612818565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fd565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fd565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fd565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ec565b6118ea91906147ec565b600f81905550601e600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486c565b60405180910390fd5b505050565b611943612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614580565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614580565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148fe565b60405180910390fd5b611cd582826137a3565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612810565b84611da9856040518060600160405280602581526020016154f66025913960016000611d22612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b6001905092915050565b6000611dcc611dc5612810565b84846129e1565b6001905092915050565b611dde612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fd565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614258565b60405180910390a25050565b6120a8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fd565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ec565b61216991906147ec565b601381905550601e60135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486c565b60405180910390fd5b505050565b6121c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fd565b60405180910390fd5b670de0b6b3a76400006103e86005612267610e6f565b612271919061464c565b61227b91906146bd565b61228591906146bd565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614990565b60405180910390fd5b670de0b6b3a7640000816122db919061464c565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fd565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464c565b6123b891906146bd565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a22565b60405180910390fd5b600a6005612406610e6f565b612410919061464c565b61241a91906146bd565b82111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614ab4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612509612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f906145fd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614b46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c191906147ec565b905083811015612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614bb2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614cd6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d49190614329565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614dfa565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b635750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9990614e66565b60405180910390fd5b60008103612bbb57612bb683836000613844565b61373a565b600b60009054906101000a900460ff161561327e57612bd8611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c465750612c16611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c7f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600560149054906101000a900460ff16155b1561327d57600b60019054906101000a900460ff16612dcc57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614ed2565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9457612de9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f935743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590614f8a565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130375750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130de57600854811115613081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130789061501c565b60405180910390fd5b600a5461308d83611347565b8261309891906147ec565b11156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090615088565b60405180910390fd5b61327c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131815750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576008548111156131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c29061511a565b60405180910390fd5b61327b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327a57600a5461322d83611347565b8261323891906147ec565b1115613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090615088565b60405180910390fd5b5b5b5b5b5b600061328930611347565b9050600060095482101590508080156132ae5750600b60029054906101000a900460ff165b80156132c75750600560149054906101000a900460ff16155b801561331d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133735750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133c95750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340d576001600560146101000a81548160ff0219169083151502179055506133f1613ad7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134cd57600090505b6000811561372a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353057506000601354115b156135ef57606460135486613545919061464c565b61354f91906146bd565b905060135460155482613562919061464c565b61356c91906146bd565b6018600082825461357d91906147ec565b9250508190555060135460165482613595919061464c565b61359f91906146bd565b601960008282546135b091906147ec565b92505081905550601354601454826135c8919061464c565b6135d291906146bd565b601760008282546135e391906147ec565b92505081905550613706565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a57506000600f54115b15613705576064600f548661365f919061464c565b61366991906146bd565b9050600f546011548261367c919061464c565b61368691906146bd565b6018600082825461369791906147ec565b92505081905550600f54601254826136af919061464c565b6136b991906146bd565b601960008282546136ca91906147ec565b92505081905550600f54601054826136e2919061464c565b6136ec91906146bd565b601760008282546136fd91906147ec565b925050819055505b5b600081111561371b5761371a873083613844565b5b8085613727919061513a565b94505b613735878787613844565b505050505b505050565b6000838311158290613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377e9190614142565b60405180910390fd5b5060008385613796919061513a565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391990614dfa565b60405180910390fd5b61392d838383613d94565b613998816040518060600160405280602681526020016154a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aca9190614329565b60405180910390a3505050565b6000613ae230611347565b90506000601954601754601854613af991906147ec565b613b0391906147ec565b9050600080831480613b155750600082145b15613b2257505050613d92565b6014600954613b31919061464c565b831115613b4a576014600954613b47919061464c565b92505b600060028360185486613b5d919061464c565b613b6791906146bd565b613b7191906146bd565b905060008185613b81919061513a565b90506000479050613b9182613d99565b60008147613b9f919061513a565b905060008660175483613bb2919061464c565b613bbc91906146bd565b905060008760195484613bcf919061464c565b613bd991906146bd565b90506000818385613bea919061513a565b613bf4919061513a565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c549061519f565b60006040518083038185875af1925050503d8060008114613c91576040519150601f19603f3d011682016040523d82523d6000602084013e613c96565b606091505b505080985050600087118015613cac5750600081115b15613cf957613cbb8782613fd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf0939291906151b4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d3f9061519f565b60006040518083038185875af1925050503d8060008114613d7c576040519150601f19603f3d011682016040523d82523d6000602084013e613d81565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db657613db56151eb565b5b604051908082528060200260200182016040528015613de45781602001602082028036833780820191505090505b5090503081600081518110613dfc57613dfb61521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec5919061525e565b81600181518110613ed957613ed861521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3e307f000000000000000000000000000000000000000000000000000000000000000084612818565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa0959493929190615384565b600060405180830381600087803b158015613fba57600080fd5b505af1158015613fce573d6000803e3d6000fd5b505050505050565b614001307f000000000000000000000000000000000000000000000000000000000000000084612818565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614068969594939291906153de565b60606040518083038185885af1158015614086573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ab9190615454565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ec5780820151818401526020810190506140d1565b60008484015250505050565b6000601f19601f8301169050919050565b6000614114826140b2565b61411e81856140bd565b935061412e8185602086016140ce565b614137816140f8565b840191505092915050565b6000602082019050818103600083015261415c8184614109565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419482614169565b9050919050565b6141a481614189565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b6000819050919050565b6141da816141c7565b81146141e557600080fd5b50565b6000813590506141f7816141d1565b92915050565b6000806040838503121561421457614213614164565b5b6000614222858286016141b2565b9250506020614233858286016141e8565b9150509250929050565b60008115159050919050565b6142528161423d565b82525050565b600060208201905061426d6000830184614249565b92915050565b60006020828403121561428957614288614164565b5b6000614297848285016141b2565b91505092915050565b6000819050919050565b60006142c56142c06142bb84614169565b6142a0565b614169565b9050919050565b60006142d7826142aa565b9050919050565b60006142e9826142cc565b9050919050565b6142f9816142de565b82525050565b600060208201905061431460008301846142f0565b92915050565b614323816141c7565b82525050565b600060208201905061433e600083018461431a565b92915050565b60006020828403121561435a57614359614164565b5b6000614368848285016141e8565b91505092915050565b60008060006060848603121561438a57614389614164565b5b6000614398868287016141b2565b93505060206143a9868287016141b2565b92505060406143ba868287016141e8565b9150509250925092565b6143cd81614189565b82525050565b60006020820190506143e860008301846143c4565b92915050565b600060ff82169050919050565b614404816143ee565b82525050565b600060208201905061441f60008301846143fb565b92915050565b61442e8161423d565b811461443957600080fd5b50565b60008135905061444b81614425565b92915050565b6000806040838503121561446857614467614164565b5b6000614476858286016141b2565b92505060206144878582860161443c565b9150509250929050565b6000806000606084860312156144aa576144a9614164565b5b60006144b8868287016141e8565b93505060206144c9868287016141e8565b92505060406144da868287016141e8565b9150509250925092565b6000602082840312156144fa576144f9614164565b5b60006145088482850161443c565b91505092915050565b6000806040838503121561452857614527614164565b5b6000614536858286016141b2565b9250506020614547858286016141b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459857607f821691505b6020821081036145ab576145aa614551565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e76020836140bd565b91506145f2826145b1565b602082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614657826141c7565b9150614662836141c7565b9250828202614670816141c7565b915082820484148315176146875761468661461d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c8826141c7565b91506146d3836141c7565b9250826146e3576146e261468e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474a602f836140bd565b9150614755826146ee565b604082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b66017836140bd565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b60006147f7826141c7565b9150614802836141c7565b925082820190508082111561481a5761481961461d565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614856601d836140bd565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e86039836140bd565b91506148f38261488c565b604082019050919050565b60006020820190508181036000830152614917816148db565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061497a6024836140bd565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0c6035836140bd565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e2035302520746f74616c20737570706c792e00000000000000000000000000602082015250565b6000614a9e6033836140bd565b9150614aa982614a42565b604082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b306026836140bd565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9c601b836140bd565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2e6024836140bd565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc06022836140bd565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d526025836140bd565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de46023836140bd565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e50600b836140bd565b9150614e5b82614e1a565b602082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebc6016836140bd565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f746049836140bd565b9150614f7f82614ef2565b606082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150066035836140bd565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150726013836140bd565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151046036836140bd565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b6000615145826141c7565b9150615150836141c7565b92508282039050818111156151685761516761461d565b5b92915050565b600081905092915050565b50565b600061518960008361516e565b915061519482615179565b600082019050919050565b60006151aa8261517c565b9150819050919050565b60006060820190506151c9600083018661431a565b6151d6602083018561431a565b6151e3604083018461431a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152588161419b565b92915050565b60006020828403121561527457615273614164565b5b600061528284828501615249565b91505092915050565b6000819050919050565b60006152b06152ab6152a68461528b565b6142a0565b6141c7565b9050919050565b6152c081615295565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fb81614189565b82525050565b600061530d83836152f2565b60208301905092915050565b6000602082019050919050565b6000615331826152c6565b61533b81856152d1565b9350615346836152e2565b8060005b8381101561537757815161535e8882615301565b975061536983615319565b92505060018101905061534a565b5085935050505092915050565b600060a082019050615399600083018861431a565b6153a660208301876152b7565b81810360408301526153b88186615326565b90506153c760608301856143c4565b6153d4608083018461431a565b9695505050505050565b600060c0820190506153f360008301896143c4565b615400602083018861431a565b61540d60408301876152b7565b61541a60608301866152b7565b61542760808301856143c4565b61543460a083018461431a565b979650505050505050565b60008151905061544e816141d1565b92915050565b60008060006060848603121561546d5761546c614164565b5b600061547b8682870161543f565b935050602061548c8682870161543f565b925050604061549d8682870161543f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122054cf9d28b168871fcf95142edfcd82a4c9c88ab9c0e9617cfd30d87a719ff7ae64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614142565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fd565b610e0d565b6040516103da9190614258565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614273565b610e2b565b6040516104179190614258565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b60405161044291906142ff565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d9190614329565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614273565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c19190614329565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec9190614329565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614344565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614371565b611106565b6040516105529190614258565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d3565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fd565b6111ee565b6040516105e59190614258565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d3565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614258565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614273565b6112d8565b6040516106789190614258565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a39190614329565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614258565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614273565b611347565b60405161070b9190614329565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614258565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614451565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d3565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614451565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f59190614329565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614491565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d3565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d3565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b69190614329565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e4565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614142565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614451565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e9190614329565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b6040516109899190614329565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b49190614329565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fd565b611ceb565b6040516109f19190614258565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fd565b611db8565b604051610a2e9190614258565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614273565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614273565b611f2d565b604051610a949190614258565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614258565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614451565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614491565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614344565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614258565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b909190614329565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614344565b6122fd565b604051610bcd9190614258565b60405180910390f35b348015610be257600080fd5b50610beb61246c565b604051610bf89190614329565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614511565b612472565b604051610c359190614329565b60405180910390f35b348015610c4a57600080fd5b50610c536124f9565b604051610c609190614329565b60405180910390f35b348015610c7557600080fd5b50610c7e6124ff565b604051610c8b9190614258565b60405180910390f35b348015610ca057600080fd5b50610ca96125ba565b604051610cb69190614329565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614273565b6125c0565b005b348015610cf457600080fd5b50610cfd612786565b604051610d0a9190614329565b60405180910390f35b348015610d1f57600080fd5b50610d2861278c565b604051610d359190614329565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614273565b612792565b604051610d729190614258565b60405180910390f35b606060038054610d8a90614580565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614580565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612810565b8484612818565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e81612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fd565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464c565b61109d91906146bd565b6110a791906146bd565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614760565b60405180910390fd5b670de0b6b3a7640000816110fd919061464c565b60088190555050565b60006111138484846129e1565b6111d48461111f612810565b6111cf856040518060600160405280602881526020016154ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612810565b84611292856001600061120c612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b612818565b6001905092915050565b7f000000000000000000000000adfa5d4b3cfaaa332e5c7d60eb3ffa434ac13cb381565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fd565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fd565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fd565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ec565b6118ea91906147ec565b600f81905550601e600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486c565b60405180910390fd5b505050565b611943612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fd565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fd565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614580565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614580565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fd565b60405180910390fd5b7f000000000000000000000000adfa5d4b3cfaaa332e5c7d60eb3ffa434ac13cb373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148fe565b60405180910390fd5b611cd582826137a3565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612810565b84611da9856040518060600160405280602581526020016154f66025913960016000611d22612810565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b612818565b6001905092915050565b6000611dcc611dc5612810565b84846129e1565b6001905092915050565b611dde612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fd565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614258565b60405180910390a25050565b6120a8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fd565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ec565b61216991906147ec565b601381905550601e60135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486c565b60405180910390fd5b505050565b6121c2612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fd565b60405180910390fd5b670de0b6b3a76400006103e86005612267610e6f565b612271919061464c565b61227b91906146bd565b61228591906146bd565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614990565b60405180910390fd5b670de0b6b3a7640000816122db919061464c565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fd565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464c565b6123b891906146bd565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a22565b60405180910390fd5b600a6005612406610e6f565b612410919061464c565b61241a91906146bd565b82111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614ab4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612509612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f906145fd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c8612810565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906145fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614b46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c191906147ec565b905083811015612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614bb2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614cd6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d49190614329565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab690614dfa565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b635750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9990614e66565b60405180910390fd5b60008103612bbb57612bb683836000613844565b61373a565b600b60009054906101000a900460ff161561327e57612bd8611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c465750612c16611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c7f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600560149054906101000a900460ff16155b1561327d57600b60019054906101000a900460ff16612dcc57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614ed2565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9457612de9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec857507f000000000000000000000000adfa5d4b3cfaaa332e5c7d60eb3ffa434ac13cb373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f935743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590614f8a565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130375750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130de57600854811115613081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130789061501c565b60405180910390fd5b600a5461308d83611347565b8261309891906147ec565b11156130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090615088565b60405180910390fd5b61327c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131815750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576008548111156131cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c29061511a565b60405180910390fd5b61327b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327a57600a5461322d83611347565b8261323891906147ec565b1115613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090615088565b60405180910390fd5b5b5b5b5b5b600061328930611347565b9050600060095482101590508080156132ae5750600b60029054906101000a900460ff165b80156132c75750600560149054906101000a900460ff16155b801561331d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133735750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133c95750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340d576001600560146101000a81548160ff0219169083151502179055506133f1613ad7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134cd57600090505b6000811561372a57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353057506000601354115b156135ef57606460135486613545919061464c565b61354f91906146bd565b905060135460155482613562919061464c565b61356c91906146bd565b6018600082825461357d91906147ec565b9250508190555060135460165482613595919061464c565b61359f91906146bd565b601960008282546135b091906147ec565b92505081905550601354601454826135c8919061464c565b6135d291906146bd565b601760008282546135e391906147ec565b92505081905550613706565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a57506000600f54115b15613705576064600f548661365f919061464c565b61366991906146bd565b9050600f546011548261367c919061464c565b61368691906146bd565b6018600082825461369791906147ec565b92505081905550600f54601254826136af919061464c565b6136b991906146bd565b601960008282546136ca91906147ec565b92505081905550600f54601054826136e2919061464c565b6136ec91906146bd565b601760008282546136fd91906147ec565b925050819055505b5b600081111561371b5761371a873083613844565b5b8085613727919061513a565b94505b613735878787613844565b505050505b505050565b6000838311158290613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377e9190614142565b60405180910390fd5b5060008385613796919061513a565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391990614dfa565b60405180910390fd5b61392d838383613d94565b613998816040518060600160405280602681526020016154a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aca9190614329565b60405180910390a3505050565b6000613ae230611347565b90506000601954601754601854613af991906147ec565b613b0391906147ec565b9050600080831480613b155750600082145b15613b2257505050613d92565b6014600954613b31919061464c565b831115613b4a576014600954613b47919061464c565b92505b600060028360185486613b5d919061464c565b613b6791906146bd565b613b7191906146bd565b905060008185613b81919061513a565b90506000479050613b9182613d99565b60008147613b9f919061513a565b905060008660175483613bb2919061464c565b613bbc91906146bd565b905060008760195484613bcf919061464c565b613bd991906146bd565b90506000818385613bea919061513a565b613bf4919061513a565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c549061519f565b60006040518083038185875af1925050503d8060008114613c91576040519150601f19603f3d011682016040523d82523d6000602084013e613c96565b606091505b505080985050600087118015613cac5750600081115b15613cf957613cbb8782613fd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf0939291906151b4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d3f9061519f565b60006040518083038185875af1925050503d8060008114613d7c576040519150601f19603f3d011682016040523d82523d6000602084013e613d81565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db657613db56151eb565b5b604051908082528060200260200182016040528015613de45781602001602082028036833780820191505090505b5090503081600081518110613dfc57613dfb61521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec5919061525e565b81600181518110613ed957613ed861521a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612818565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa0959493929190615384565b600060405180830381600087803b158015613fba57600080fd5b505af1158015613fce573d6000803e3d6000fd5b505050505050565b614001307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612818565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614068969594939291906153de565b60606040518083038185885af1158015614086573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ab9190615454565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ec5780820151818401526020810190506140d1565b60008484015250505050565b6000601f19601f8301169050919050565b6000614114826140b2565b61411e81856140bd565b935061412e8185602086016140ce565b614137816140f8565b840191505092915050565b6000602082019050818103600083015261415c8184614109565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419482614169565b9050919050565b6141a481614189565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b6000819050919050565b6141da816141c7565b81146141e557600080fd5b50565b6000813590506141f7816141d1565b92915050565b6000806040838503121561421457614213614164565b5b6000614222858286016141b2565b9250506020614233858286016141e8565b9150509250929050565b60008115159050919050565b6142528161423d565b82525050565b600060208201905061426d6000830184614249565b92915050565b60006020828403121561428957614288614164565b5b6000614297848285016141b2565b91505092915050565b6000819050919050565b60006142c56142c06142bb84614169565b6142a0565b614169565b9050919050565b60006142d7826142aa565b9050919050565b60006142e9826142cc565b9050919050565b6142f9816142de565b82525050565b600060208201905061431460008301846142f0565b92915050565b614323816141c7565b82525050565b600060208201905061433e600083018461431a565b92915050565b60006020828403121561435a57614359614164565b5b6000614368848285016141e8565b91505092915050565b60008060006060848603121561438a57614389614164565b5b6000614398868287016141b2565b93505060206143a9868287016141b2565b92505060406143ba868287016141e8565b9150509250925092565b6143cd81614189565b82525050565b60006020820190506143e860008301846143c4565b92915050565b600060ff82169050919050565b614404816143ee565b82525050565b600060208201905061441f60008301846143fb565b92915050565b61442e8161423d565b811461443957600080fd5b50565b60008135905061444b81614425565b92915050565b6000806040838503121561446857614467614164565b5b6000614476858286016141b2565b92505060206144878582860161443c565b9150509250929050565b6000806000606084860312156144aa576144a9614164565b5b60006144b8868287016141e8565b93505060206144c9868287016141e8565b92505060406144da868287016141e8565b9150509250925092565b6000602082840312156144fa576144f9614164565b5b60006145088482850161443c565b91505092915050565b6000806040838503121561452857614527614164565b5b6000614536858286016141b2565b9250506020614547858286016141b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459857607f821691505b6020821081036145ab576145aa614551565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e76020836140bd565b91506145f2826145b1565b602082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614657826141c7565b9150614662836141c7565b9250828202614670816141c7565b915082820484148315176146875761468661461d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c8826141c7565b91506146d3836141c7565b9250826146e3576146e261468e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474a602f836140bd565b9150614755826146ee565b604082019050919050565b600060208201905081810360008301526147798161473d565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b66017836140bd565b91506147c182614780565b602082019050919050565b600060208201905081810360008301526147e5816147a9565b9050919050565b60006147f7826141c7565b9150614802836141c7565b925082820190508082111561481a5761481961461d565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614856601d836140bd565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e86039836140bd565b91506148f38261488c565b604082019050919050565b60006020820190508181036000830152614917816148db565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061497a6024836140bd565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0c6035836140bd565b9150614a17826149b0565b604082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e2035302520746f74616c20737570706c792e00000000000000000000000000602082015250565b6000614a9e6033836140bd565b9150614aa982614a42565b604082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b306026836140bd565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9c601b836140bd565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2e6024836140bd565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc06022836140bd565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d526025836140bd565b9150614d5d82614cf6565b604082019050919050565b60006020820190508181036000830152614d8181614d45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de46023836140bd565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e50600b836140bd565b9150614e5b82614e1a565b602082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebc6016836140bd565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f746049836140bd565b9150614f7f82614ef2565b606082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150066035836140bd565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150726013836140bd565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151046036836140bd565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b6000615145826141c7565b9150615150836141c7565b92508282039050818111156151685761516761461d565b5b92915050565b600081905092915050565b50565b600061518960008361516e565b915061519482615179565b600082019050919050565b60006151aa8261517c565b9150819050919050565b60006060820190506151c9600083018661431a565b6151d6602083018561431a565b6151e3604083018461431a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152588161419b565b92915050565b60006020828403121561527457615273614164565b5b600061528284828501615249565b91505092915050565b6000819050919050565b60006152b06152ab6152a68461528b565b6142a0565b6141c7565b9050919050565b6152c081615295565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fb81614189565b82525050565b600061530d83836152f2565b60208301905092915050565b6000602082019050919050565b6000615331826152c6565b61533b81856152d1565b9350615346836152e2565b8060005b8381101561537757815161535e8882615301565b975061536983615319565b92505060018101905061534a565b5085935050505092915050565b600060a082019050615399600083018861431a565b6153a660208301876152b7565b81810360408301526153b88186615326565b90506153c760608301856143c4565b6153d4608083018461431a565b9695505050505050565b600060c0820190506153f360008301896143c4565b615400602083018861431a565b61540d60408301876152b7565b61541a60608301866152b7565b61542760808301856143c4565b61543460a083018461431a565b979650505050505050565b60008151905061544e816141d1565b92915050565b60008060006060848603121561546d5761546c614164565b5b600061547b8682870161543f565b935050602061548c8682870161543f565b925050604061549d8682870161543f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122054cf9d28b168871fcf95142edfcd82a4c9c88ab9c0e9617cfd30d87a719ff7ae64736f6c63430008110033

Deployed Bytecode Sourcemap

10946:15219:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3623:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12331:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10988:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3070:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18852:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12110:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12070;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16401:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3798:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11091:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2987:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4159:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11046:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11372:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19023:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11921:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11452:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3168:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8498:148;;;;;;;;;;;;;:::i;:::-;;15617:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16870:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11183:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19156:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11810:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17227:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15449:112;;;;;;;;;;;;;:::i;:::-;;8304:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11220:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11956:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17114:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2893:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18184:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11884:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12150:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12032:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4383:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3285:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18632:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12553:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11412:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17994:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17608:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16643:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11728:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11257:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16011:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11776:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3466:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11299:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15802:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11847:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8652:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11994:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11339:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11675:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2803:84;2857:13;2880:5;2873:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:84;:::o;3623:169::-;3706:4;3723:39;3732:12;:10;:12::i;:::-;3746:7;3755:6;3723:8;:39::i;:::-;3780:4;3773:11;;3623:169;;;;:::o;12331:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;10988:51::-;;;:::o;3070:92::-;3131:7;3148:12;;3141:19;;3070:92;:::o;18852:157::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18959:9:::1;;;;;;;;;;;18931:38;;18948:9;18931:38;;;;;;;;;;;;18992:9;18980;;:21;;;;;;;;;;;;;;;;;;18852:157:::0;:::o;12110:33::-;;;;:::o;12070:::-;;;;:::o;16401:234::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16520:4:::1;16514;16510:1;16494:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16493:31;;;;:::i;:::-;16483:6;:41;;16475:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;16620:6;16610;:17;;;;:::i;:::-;16587:20;:40;;;;16401:234:::0;:::o;3798:355::-;3938:4;3955:36;3965:6;3973:9;3984:6;3955:9;:36::i;:::-;4002:121;4011:6;4019:12;:10;:12::i;:::-;4033:89;4071:6;4033:89;;;;;;;;;;;;;;;;;:11;:19;4045:6;4033:19;;;;;;;;;;;;;;;:33;4053:12;:10;:12::i;:::-;4033:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4002:8;:121::i;:::-;4141:4;4134:11;;3798:355;;;;;:::o;11091:53::-;11137:6;11091:53;:::o;2987:77::-;3045:5;3060:2;3053:9;;2987:77;:::o;4159:218::-;4247:4;4264:83;4273:12;:10;:12::i;:::-;4287:7;4296:50;4335:10;4296:11;:25;4308:12;:10;:12::i;:::-;4296:25;;;;;;;;;;;;;;;:34;4322:7;4296:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4264:8;:83::i;:::-;4365:4;4358:11;;4159:218;;;;:::o;11046:38::-;;;:::o;11372:33::-;;;;;;;;;;;;;:::o;19023:125::-;19088:4;19112:19;:28;19132:7;19112:28;;;;;;;;;;;;;;;;;;;;;;;;;19105:35;;19023:125;;;:::o;11921:28::-;;;;:::o;11452:31::-;;;;;;;;;;;;;:::o;3168:111::-;3242:7;3259:9;:18;3269:7;3259:18;;;;;;;;;;;;;;;;3252:25;;3168:111;;;:::o;8498:148::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8605:1:::1;8568:40;;8589:6;;;;;;;;;;;8568:40;;;;;;;;;;;;8636:1;8619:6;;:19;;;;;;;;;;;;;;;;;;8498:148::o:0;15617:120::-;15669:4;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15702:5:::1;15685:14;;:22;;;;;;;;;;;;;;;;;;15725:4;15718:11;;15617:120:::0;:::o;16870:144::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17002:4:::1;16960:31;:39;16992:6;16960:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16870:144:::0;;:::o;11183:30::-;;;;;;;;;;;;;:::o;19156:195::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19271:1:::1;19251:22;;:8;:22;;::::0;19243:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19337:6;19311:13;:23;19325:8;19311:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19156:195:::0;;:::o;11810:30::-;;;;:::o;17227:369::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17361:13:::1;17343:15;:31;;;;17403:13;17385:15;:31;;;;17439:7;17427:9;:19;;;;17508:9;;17490:15;;17472;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17457:12;:60;;;;17552:2;17536:12;;:18;;17528:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17227:369:::0;;;:::o;15449:112::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15520:4:::1;15504:13;;:20;;;;;;;;;;;;;;;;;;15549:4;15535:11;;:18;;;;;;;;;;;;;;;;;;15449:112::o:0;8304:63::-;8342:7;8359:6;;;;;;;;;;;8352:13;;8304:63;:::o;11220:24::-;;;;;;;;;;;;;:::o;11956:31::-;;;;:::o;17114:101::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:7:::1;17186:11;;:21;;;;;;;;;;;;;;;;;;17114:101:::0;:::o;2893:88::-;2949:13;2972:7;2965:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:88;:::o;18184:244::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18291:13:::1;18283:21;;:4;:21;;::::0;18275:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18379:41;18408:4;18414:5;18379:28;:41::i;:::-;18184:244:::0;;:::o;11884:24::-;;;;:::o;12150:27::-;;;;:::o;12032:25::-;;;;:::o;4383:269::-;4476:4;4493:129;4502:12;:10;:12::i;:::-;4516:7;4525:96;4564:15;4525:96;;;;;;;;;;;;;;;;;:11;:25;4537:12;:10;:12::i;:::-;4525:25;;;;;;;;;;;;;;;:34;4551:7;4525:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4493:8;:129::i;:::-;4640:4;4633:11;;4383:269;;;;:::o;3285:175::-;3371:4;3388:42;3398:12;:10;:12::i;:::-;3412:9;3423:6;3388:9;:42::i;:::-;3448:4;3441:11;;3285:175;;;;:::o;18632:208::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18769:15:::1;;;;;;;;;;;18726:59;;18749:18;18726:59;;;;;;;;;;;;18814:18;18796:15;;:36;;;;;;;;;;;;;;;;;;18632:208:::0;:::o;12553:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;11412:33::-;;;;;;;;;;;;;:::o;17994:182::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18110:8:::1;18079:19;:28;18099:7;18079:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18150:7;18134:34;;;18159:8;18134:34;;;;;;:::i;:::-;;;;;;;;17994:182:::0;;:::o;17608:378::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17744:13:::1;17725:16;:32;;;;17787:13;17768:16;:32;;;;17824:7;17811:10;:20;;;;17896:10;;17877:16;;17858;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;17842:13;:64;;;;17942:2;17925:13;;:19;;17917:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:378:::0;;;:::o;16643:215::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16765:4:::1;16759;16755:1;16739:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16738:31;;;;:::i;:::-;16728:6;:41;;16720:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;16843:6;16833;:17;;;;:::i;:::-;16821:9;:29;;;;16643:215:::0;:::o;11728:39::-;;;;;;;;;;;;;:::o;11257:35::-;;;;:::o;16011:378::-;16092:4;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16148:6:::1;16144:1;16128:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;16115:9;:39;;16107:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;16263:2;16259:1;16243:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:22;;;;:::i;:::-;16230:9;:35;;16222:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;16352:9;16331:18;:30;;;;16378:4;16371:11;;16011:378:::0;;;:::o;11776:27::-;;;;:::o;3466:151::-;3555:7;3582:11;:18;3594:5;3582:18;;;;;;;;;;;;;;;:27;3601:7;3582:27;;;;;;;;;;;;;;;;3575:34;;3466:151;;;;:::o;11299:33::-;;;;:::o;15802:134::-;15862:4;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15901:5:::1;15878:20;;:28;;;;;;;;;;;;;;;;;;15924:4;15917:11;;15802:134:::0;:::o;11847:30::-;;;;:::o;8652:244::-;8423:12;:10;:12::i;:::-;8413:22;;:6;;;;;;;;;;;:22;;;8405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8761:1:::1;8741:22;;:8;:22;;::::0;8733:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8851:8;8822:38;;8843:6;;;;;;;;;;;8822:38;;;;;;;;;;;;8880:8;8871:6;;:17;;;;;;;;;;;;;;;;;;8652:244:::0;:::o;11994:31::-;;;;:::o;11339:24::-;;;;:::o;11675:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;6573:179::-;6631:7;6651:9;6667:1;6663;:5;;;;:::i;:::-;6651:17;;6692:1;6687;:6;;6679:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6743:1;6736:8;;;6573:179;;;;:::o;876:98::-;929:7;956:10;949:17;;876:98;:::o;6033:378::-;6186:1;6169:19;;:5;:19;;;6161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6267:1;6248:21;;:7;:21;;;6240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6349:6;6319:11;:18;6331:5;6319:18;;;;;;;;;;;;;;;:27;6338:7;6319:27;;;;;;;;;;;;;;;:36;;;;6387:7;6371:32;;6380:5;6371:32;;;6396:6;6371:32;;;;;;:::i;:::-;;;;;;;;6033:378;;;:::o;19359:4174::-;19507:1;19491:18;;:4;:18;;;19483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19584:1;19570:16;;:2;:16;;;19562:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19646:13;:19;19660:4;19646:19;;;;;;;;;;;;;;;;;;;;;;;;;19645:20;:42;;;;;19670:13;:17;19684:2;19670:17;;;;;;;;;;;;;;;;;;;;;;;;;19669:18;19645:42;19637:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19737:1;19727:6;:11;19724:92;;19755:28;19771:4;19777:2;19781:1;19755:15;:28::i;:::-;19798:7;;19724:92;19839:14;;;;;;;;;;;19836:1841;;;19899:7;:5;:7::i;:::-;19891:15;;:4;:15;;;;:49;;;;;19933:7;:5;:7::i;:::-;19927:13;;:2;:13;;;;19891:49;:86;;;;;19975:1;19961:16;;:2;:16;;;;19891:86;:128;;;;;20012:6;19998:21;;:2;:21;;;;19891:128;:158;;;;;20041:8;;;;;;;;;;;20040:9;19891:158;19869:1797;;;20087:13;;;;;;;;;;;20083:148;;20132:19;:25;20152:4;20132:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20161:19;:23;20181:2;20161:23;;;;;;;;;;;;;;;;;;;;;;;;;20132:52;20124:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20083:148;20389:20;;;;;;;;;;;20385:423;;;20443:7;:5;:7::i;:::-;20437:13;;:2;:13;;;;:47;;;;;20468:15;20454:30;;:2;:30;;;;20437:47;:79;;;;;20502:13;20488:28;;:2;:28;;;;20437:79;20433:356;;;20594:12;20552:28;:39;20581:9;20552:39;;;;;;;;;;;;;;;;:54;20544:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20753:12;20711:28;:39;20740:9;20711:39;;;;;;;;;;;;;;;:54;;;;20433:356;20385:423;20877:25;:31;20903:4;20877:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20913:31;:35;20945:2;20913:35;;;;;;;;;;;;;;;;;;;;;;;;;20912:36;20877:71;20873:778;;;20995:20;;20985:6;:30;;20977:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21134:9;;21117:13;21127:2;21117:9;:13::i;:::-;21108:6;:22;;;;:::i;:::-;:35;;21100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20873:778;;;21261:25;:29;21287:2;21261:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21295:31;:37;21327:4;21295:37;;;;;;;;;;;;;;;;;;;;;;;;;21294:38;21261:71;21257:394;;;21379:20;;21369:6;:30;;21361:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;21257:394;;;21505:31;:35;21537:2;21505:35;;;;;;;;;;;;;;;;;;;;;;;;;21501:150;;21598:9;;21581:13;21591:2;21581:9;:13::i;:::-;21572:6;:22;;;;:::i;:::-;:35;;21564:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21501:150;21257:394;20873:778;19869:1797;19836:1841;21691:28;21722:24;21740:4;21722:9;:24::i;:::-;21691:55;;21767:12;21806:18;;21782:20;:42;;21767:57;;21855:7;:35;;;;;21879:11;;;;;;;;;;;21855:35;:61;;;;;21908:8;;;;;;;;;;;21907:9;21855:61;:110;;;;;21934:25;:31;21960:4;21934:31;;;;;;;;;;;;;;;;;;;;;;;;;21933:32;21855:110;:153;;;;;21983:19;:25;22003:4;21983:25;;;;;;;;;;;;;;;;;;;;;;;;;21982:26;21855:153;:194;;;;;22026:19;:23;22046:2;22026:23;;;;;;;;;;;;;;;;;;;;;;;;;22025:24;21855:194;21837:338;;;22087:4;22076:8;;:15;;;;;;;;;;;;;;;;;;22120:10;:8;:10::i;:::-;22158:5;22147:8;;:16;;;;;;;;;;;;;;;;;;21837:338;22187:12;22203:8;;;;;;;;;;;22202:9;22187:24;;22312:19;:25;22332:4;22312:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22341:19;:23;22361:2;22341:23;;;;;;;;;;;;;;;;;;;;;;;;;22312:52;22309:99;;;22391:5;22381:15;;22309:99;22428:12;22532:7;22529:951;;;22583:25;:29;22609:2;22583:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;22632:1;22616:13;;:17;22583:50;22579:732;;;22683:3;22669:13;;22660:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;22653:33;;22753:13;;22734:16;;22727:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22705:18;;:61;;;;;;;:::i;:::-;;;;;;;;22821:13;;22808:10;;22801:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;22785:12;;:49;;;;;;;:::i;:::-;;;;;;;;22901:13;;22882:16;;22875:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22853:18;;:61;;;;;;;:::i;:::-;;;;;;;;22579:732;;;22975:25;:31;23001:4;22975:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23025:1;23010:12;;:16;22975:51;22972:339;;;23073:3;23060:12;;23051:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;23044:32;;23139:12;;23121:15;;23114:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23092:18;;:59;;;;;;;:::i;:::-;;;;;;;;23205:12;;23193:9;;23186:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;23170:12;;:47;;;;;;;:::i;:::-;;;;;;;;23283:12;;23265:15;;23258:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23236:18;;:59;;;;;;;:::i;:::-;;;;;;;;22972:339;22579:732;23349:1;23342:4;:8;23339:93;;;23374:42;23390:4;23404;23411;23374:15;:42::i;:::-;23339:93;23464:4;23454:14;;;;;:::i;:::-;;;22529:951;23492:33;23508:4;23514:2;23518:6;23492:15;:33::i;:::-;19472:4061;;;;19359:4174;;;;:::o;6900:190::-;6986:7;7019:1;7014;:6;;7022:12;7006:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7046:9;7062:1;7058;:5;;;;:::i;:::-;7046:17;;7081:1;7074:8;;;6900:190;;;;;:::o;18436:188::-;18553:5;18519:25;:31;18545:4;18519:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18610:5;18576:40;;18604:4;18576:40;;;;;;;;;;;;18436:188;;:::o;4658:569::-;4816:1;4798:20;;:6;:20;;;4790:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4900:1;4879:23;;:9;:23;;;4871:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4953:47;4974:6;4982:9;4993:6;4953:20;:47::i;:::-;5031:71;5053:6;5031:71;;;;;;;;;;;;;;;;;:9;:17;5041:6;5031:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;5011:9;:17;5021:6;5011:17;;;;;;;;;;;;;;;:91;;;;5136:32;5161:6;5136:9;:20;5146:9;5136:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5113:9;:20;5123:9;5113:20;;;;;;;;;;;;;;;:55;;;;5201:9;5184:35;;5193:6;5184:35;;;5212:6;5184:35;;;;;;:::i;:::-;;;;;;;;4658:569;;;:::o;24691:1463::-;24730:23;24756:24;24774:4;24756:9;:24::i;:::-;24730:50;;24791:25;24861:12;;24840:18;;24819;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24791:82;;24884:12;24931:1;24912:15;:20;:46;;;;24957:1;24936:17;:22;24912:46;24909:60;;;24961:7;;;;;24909:60;25021:2;25000:18;;:23;;;;:::i;:::-;24982:15;:41;24979:111;;;25076:2;25055:18;;:23;;;;:::i;:::-;25037:41;;24979:111;25100:23;25185:1;25165:17;25144:18;;25126:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;25100:86;;25197:26;25244:15;25226;:33;;;;:::i;:::-;25197:62;;25270:25;25298:21;25270:49;;25330:36;25347:18;25330:16;:36::i;:::-;25378:18;25423:17;25399:21;:41;;;;:::i;:::-;25378:62;;25451:23;25509:17;25490:18;;25477:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;25451:75;;25537:17;25583;25570:12;;25557:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;25537:63;;25611:23;25668:9;25650:15;25637:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;25611:66;;25709:1;25688:18;:22;;;;25742:1;25721:18;:22;;;;25769:1;25754:12;:16;;;;25802:9;;;;;;;;;;;25794:23;;25825:9;25794:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25781:58;;;;;25871:1;25853:15;:19;:42;;;;;25894:1;25876:15;:19;25853:42;25850:210;;;25911:46;25924:15;25941;25911:12;:46::i;:::-;25977:71;25992:18;26012:15;26029:18;;25977:71;;;;;;;;:::i;:::-;;;;;;;;25850:210;26091:15;;;;;;;;;;;26083:29;;26120:21;26083:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26070:76;;;;;24719:1435;;;;;;;;;;24691:1463;:::o;6417:125::-;;;;:::o;23541:601::-;23669:21;23707:1;23693:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23669:40;;23738:4;23720;23725:1;23720:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23764:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23754:4;23759:1;23754:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23799:62;23816:4;23831:15;23849:11;23799:8;:62::i;:::-;23900:15;:66;;;23981:11;24007:1;24051:4;24078;24098:15;23900:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596:546;23541:601;:::o;24166:517::-;24314:62;24331:4;24346:15;24364:11;24314:8;:62::i;:::-;24419:15;:31;;;24458:9;24491:4;24511:11;24537:1;24580;11137:6;24649:15;24419:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24166:517;;:::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;1430:117::-;1539:1;1536;1529: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:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:173::-;12675:25;12671:1;12663:6;12659:14;12652:49;12535:173;:::o;12714:366::-;12856:3;12877:67;12941:2;12936:3;12877:67;:::i;:::-;12870:74;;12953:93;13042:3;12953:93;:::i;:::-;13071:2;13066:3;13062:12;13055:19;;12714:366;;;:::o;13086:419::-;13252:4;13290:2;13279:9;13275:18;13267:26;;13339:9;13333:4;13329:20;13325:1;13314:9;13310:17;13303:47;13367:131;13493:4;13367:131;:::i;:::-;13359:139;;13086:419;;;:::o;13511:191::-;13551:3;13570:20;13588:1;13570:20;:::i;:::-;13565:25;;13604:20;13622:1;13604:20;:::i;:::-;13599:25;;13647:1;13644;13640:9;13633:16;;13668:3;13665:1;13662:10;13659:36;;;13675:18;;:::i;:::-;13659:36;13511:191;;;;:::o;13708:179::-;13848:31;13844:1;13836:6;13832:14;13825:55;13708:179;:::o;13893:366::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:419::-;14431:4;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14265:419;;;:::o;14690:244::-;14830:34;14826:1;14818:6;14814:14;14807:58;14899:27;14894:2;14886:6;14882:15;14875:52;14690:244;:::o;14940:366::-;15082:3;15103:67;15167:2;15162:3;15103:67;:::i;:::-;15096:74;;15179:93;15268:3;15179:93;:::i;:::-;15297:2;15292:3;15288:12;15281:19;;14940:366;;;:::o;15312:419::-;15478:4;15516:2;15505:9;15501:18;15493:26;;15565:9;15559:4;15555:20;15551:1;15540:9;15536:17;15529:47;15593:131;15719:4;15593:131;:::i;:::-;15585:139;;15312:419;;;:::o;15737:223::-;15877:34;15873:1;15865:6;15861:14;15854:58;15946:6;15941:2;15933:6;15929:15;15922:31;15737:223;:::o;15966:366::-;16108:3;16129:67;16193:2;16188:3;16129:67;:::i;:::-;16122:74;;16205:93;16294:3;16205:93;:::i;:::-;16323:2;16318:3;16314:12;16307:19;;15966:366;;;:::o;16338:419::-;16504:4;16542:2;16531:9;16527:18;16519:26;;16591:9;16585:4;16581:20;16577:1;16566:9;16562:17;16555:47;16619:131;16745:4;16619:131;:::i;:::-;16611:139;;16338:419;;;:::o;16763:240::-;16903:34;16899:1;16891:6;16887:14;16880:58;16972:23;16967:2;16959:6;16955:15;16948:48;16763:240;:::o;17009:366::-;17151:3;17172:67;17236:2;17231:3;17172:67;:::i;:::-;17165:74;;17248:93;17337:3;17248:93;:::i;:::-;17366:2;17361:3;17357:12;17350:19;;17009:366;;;:::o;17381:419::-;17547:4;17585:2;17574:9;17570:18;17562:26;;17634:9;17628:4;17624:20;17620:1;17609:9;17605:17;17598:47;17662:131;17788:4;17662:131;:::i;:::-;17654:139;;17381:419;;;:::o;17806:238::-;17946:34;17942:1;17934:6;17930:14;17923:58;18015:21;18010:2;18002:6;17998:15;17991:46;17806:238;:::o;18050:366::-;18192:3;18213:67;18277:2;18272:3;18213:67;:::i;:::-;18206:74;;18289:93;18378:3;18289:93;:::i;:::-;18407:2;18402:3;18398:12;18391:19;;18050:366;;;:::o;18422:419::-;18588:4;18626:2;18615:9;18611:18;18603:26;;18675:9;18669:4;18665:20;18661:1;18650:9;18646:17;18639:47;18703:131;18829:4;18703:131;:::i;:::-;18695:139;;18422:419;;;:::o;18847:225::-;18987:34;18983:1;18975:6;18971:14;18964:58;19056:8;19051:2;19043:6;19039:15;19032:33;18847:225;:::o;19078:366::-;19220:3;19241:67;19305:2;19300:3;19241:67;:::i;:::-;19234:74;;19317:93;19406:3;19317:93;:::i;:::-;19435:2;19430:3;19426:12;19419:19;;19078:366;;;:::o;19450:419::-;19616:4;19654:2;19643:9;19639:18;19631:26;;19703:9;19697:4;19693:20;19689:1;19678:9;19674:17;19667:47;19731:131;19857:4;19731:131;:::i;:::-;19723:139;;19450:419;;;:::o;19875:177::-;20015:29;20011:1;20003:6;19999:14;19992:53;19875:177;:::o;20058:366::-;20200:3;20221:67;20285:2;20280:3;20221:67;:::i;:::-;20214:74;;20297:93;20386:3;20297:93;:::i;:::-;20415:2;20410:3;20406:12;20399:19;;20058:366;;;:::o;20430:419::-;20596:4;20634:2;20623:9;20619:18;20611:26;;20683:9;20677:4;20673:20;20669:1;20658:9;20654:17;20647:47;20711:131;20837:4;20711:131;:::i;:::-;20703:139;;20430:419;;;:::o;20855:223::-;20995:34;20991:1;20983:6;20979:14;20972:58;21064:6;21059:2;21051:6;21047:15;21040:31;20855:223;:::o;21084:366::-;21226:3;21247:67;21311:2;21306:3;21247:67;:::i;:::-;21240:74;;21323:93;21412:3;21323:93;:::i;:::-;21441:2;21436:3;21432:12;21425:19;;21084:366;;;:::o;21456:419::-;21622:4;21660:2;21649:9;21645:18;21637:26;;21709:9;21703:4;21699:20;21695:1;21684:9;21680:17;21673:47;21737:131;21863:4;21737:131;:::i;:::-;21729:139;;21456:419;;;:::o;21881:221::-;22021:34;22017:1;22009:6;22005:14;21998:58;22090:4;22085:2;22077:6;22073:15;22066:29;21881:221;:::o;22108:366::-;22250:3;22271:67;22335:2;22330:3;22271:67;:::i;:::-;22264:74;;22347:93;22436:3;22347:93;:::i;:::-;22465:2;22460:3;22456:12;22449:19;;22108:366;;;:::o;22480:419::-;22646:4;22684:2;22673:9;22669:18;22661:26;;22733:9;22727:4;22723:20;22719:1;22708:9;22704:17;22697:47;22761:131;22887:4;22761:131;:::i;:::-;22753:139;;22480:419;;;:::o;22905:224::-;23045:34;23041:1;23033:6;23029:14;23022:58;23114:7;23109:2;23101:6;23097:15;23090:32;22905:224;:::o;23135:366::-;23277:3;23298:67;23362:2;23357:3;23298:67;:::i;:::-;23291:74;;23374:93;23463:3;23374:93;:::i;:::-;23492:2;23487:3;23483:12;23476:19;;23135:366;;;:::o;23507:419::-;23673:4;23711:2;23700:9;23696:18;23688:26;;23760:9;23754:4;23750:20;23746:1;23735:9;23731:17;23724:47;23788:131;23914:4;23788:131;:::i;:::-;23780:139;;23507:419;;;:::o;23932:222::-;24072:34;24068:1;24060:6;24056:14;24049:58;24141:5;24136:2;24128:6;24124:15;24117:30;23932:222;:::o;24160:366::-;24302:3;24323:67;24387:2;24382:3;24323:67;:::i;:::-;24316:74;;24399:93;24488:3;24399:93;:::i;:::-;24517:2;24512:3;24508:12;24501:19;;24160:366;;;:::o;24532:419::-;24698:4;24736:2;24725:9;24721:18;24713:26;;24785:9;24779:4;24775:20;24771:1;24760:9;24756:17;24749:47;24813:131;24939:4;24813:131;:::i;:::-;24805:139;;24532:419;;;:::o;24957:161::-;25097:13;25093:1;25085:6;25081:14;25074:37;24957:161;:::o;25124:366::-;25266:3;25287:67;25351:2;25346:3;25287:67;:::i;:::-;25280:74;;25363:93;25452:3;25363:93;:::i;:::-;25481:2;25476:3;25472:12;25465:19;;25124:366;;;:::o;25496:419::-;25662:4;25700:2;25689:9;25685:18;25677:26;;25749:9;25743:4;25739:20;25735:1;25724:9;25720:17;25713:47;25777:131;25903:4;25777:131;:::i;:::-;25769:139;;25496:419;;;:::o;25921:172::-;26061:24;26057:1;26049:6;26045:14;26038:48;25921:172;:::o;26099:366::-;26241:3;26262:67;26326:2;26321:3;26262:67;:::i;:::-;26255:74;;26338:93;26427:3;26338:93;:::i;:::-;26456:2;26451:3;26447:12;26440:19;;26099:366;;;:::o;26471:419::-;26637:4;26675:2;26664:9;26660:18;26652:26;;26724:9;26718:4;26714:20;26710:1;26699:9;26695:17;26688:47;26752:131;26878:4;26752:131;:::i;:::-;26744:139;;26471:419;;;:::o;26896:297::-;27036:34;27032:1;27024:6;27020:14;27013:58;27105:34;27100:2;27092:6;27088:15;27081:59;27174:11;27169:2;27161:6;27157:15;27150:36;26896:297;:::o;27199:366::-;27341:3;27362:67;27426:2;27421:3;27362:67;:::i;:::-;27355:74;;27438:93;27527:3;27438:93;:::i;:::-;27556:2;27551:3;27547:12;27540:19;;27199:366;;;:::o;27571:419::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:240::-;28136:34;28132:1;28124:6;28120:14;28113:58;28205:23;28200:2;28192:6;28188:15;28181:48;27996:240;:::o;28242:366::-;28384:3;28405:67;28469:2;28464:3;28405:67;:::i;:::-;28398:74;;28481:93;28570:3;28481:93;:::i;:::-;28599:2;28594:3;28590:12;28583:19;;28242:366;;;:::o;28614:419::-;28780:4;28818:2;28807:9;28803:18;28795:26;;28867:9;28861:4;28857:20;28853:1;28842:9;28838:17;28831:47;28895:131;29021:4;28895:131;:::i;:::-;28887:139;;28614:419;;;:::o;29039:169::-;29179:21;29175:1;29167:6;29163:14;29156:45;29039:169;:::o;29214:366::-;29356:3;29377:67;29441:2;29436:3;29377:67;:::i;:::-;29370:74;;29453:93;29542:3;29453:93;:::i;:::-;29571:2;29566:3;29562:12;29555:19;;29214:366;;;:::o;29586:419::-;29752:4;29790:2;29779:9;29775:18;29767:26;;29839:9;29833:4;29829:20;29825:1;29814:9;29810:17;29803:47;29867:131;29993:4;29867:131;:::i;:::-;29859:139;;29586:419;;;:::o;30011:241::-;30151:34;30147:1;30139:6;30135:14;30128:58;30220:24;30215:2;30207:6;30203:15;30196:49;30011:241;:::o;30258:366::-;30400:3;30421:67;30485:2;30480:3;30421:67;:::i;:::-;30414:74;;30497:93;30586:3;30497:93;:::i;:::-;30615:2;30610:3;30606:12;30599:19;;30258:366;;;:::o;30630:419::-;30796:4;30834:2;30823:9;30819:18;30811:26;;30883:9;30877:4;30873:20;30869:1;30858:9;30854:17;30847:47;30911:131;31037:4;30911:131;:::i;:::-;30903:139;;30630:419;;;:::o;31055:194::-;31095:4;31115:20;31133:1;31115:20;:::i;:::-;31110:25;;31149:20;31167:1;31149:20;:::i;:::-;31144:25;;31193:1;31190;31186:9;31178:17;;31217:1;31211:4;31208:11;31205:37;;;31222:18;;:::i;:::-;31205:37;31055:194;;;;:::o;31255:147::-;31356:11;31393:3;31378:18;;31255:147;;;;:::o;31408:114::-;;:::o;31528:398::-;31687:3;31708:83;31789:1;31784:3;31708:83;:::i;:::-;31701:90;;31800:93;31889:3;31800:93;:::i;:::-;31918:1;31913:3;31909:11;31902:18;;31528:398;;;:::o;31932:379::-;32116:3;32138:147;32281:3;32138:147;:::i;:::-;32131:154;;32302:3;32295:10;;31932:379;;;:::o;32317:442::-;32466:4;32504:2;32493:9;32489:18;32481:26;;32517:71;32585:1;32574:9;32570:17;32561:6;32517:71;:::i;:::-;32598:72;32666:2;32655:9;32651:18;32642:6;32598:72;:::i;:::-;32680;32748:2;32737:9;32733:18;32724:6;32680:72;:::i;:::-;32317:442;;;;;;:::o;32765:180::-;32813:77;32810:1;32803:88;32910:4;32907:1;32900:15;32934:4;32931:1;32924:15;32951:180;32999:77;32996:1;32989:88;33096:4;33093:1;33086:15;33120:4;33117:1;33110:15;33137:143;33194:5;33225:6;33219:13;33210:22;;33241:33;33268:5;33241:33;:::i;:::-;33137:143;;;;:::o;33286:351::-;33356:6;33405:2;33393:9;33384:7;33380:23;33376:32;33373:119;;;33411:79;;:::i;:::-;33373:119;33531:1;33556:64;33612:7;33603:6;33592:9;33588:22;33556:64;:::i;:::-;33546:74;;33502:128;33286:351;;;;:::o;33643:85::-;33688:7;33717:5;33706:16;;33643:85;;;:::o;33734:158::-;33792:9;33825:61;33843:42;33852:32;33878:5;33852:32;:::i;:::-;33843:42;:::i;:::-;33825:61;:::i;:::-;33812:74;;33734:158;;;:::o;33898:147::-;33993:45;34032:5;33993:45;:::i;:::-;33988:3;33981:58;33898:147;;:::o;34051:114::-;34118:6;34152:5;34146:12;34136:22;;34051:114;;;:::o;34171:184::-;34270:11;34304:6;34299:3;34292:19;34344:4;34339:3;34335:14;34320:29;;34171:184;;;;:::o;34361:132::-;34428:4;34451:3;34443:11;;34481:4;34476:3;34472:14;34464:22;;34361:132;;;:::o;34499:108::-;34576:24;34594:5;34576:24;:::i;:::-;34571:3;34564:37;34499:108;;:::o;34613:179::-;34682:10;34703:46;34745:3;34737:6;34703:46;:::i;:::-;34781:4;34776:3;34772:14;34758:28;;34613:179;;;;:::o;34798:113::-;34868:4;34900;34895:3;34891:14;34883:22;;34798:113;;;:::o;34947:732::-;35066:3;35095:54;35143:5;35095:54;:::i;:::-;35165:86;35244:6;35239:3;35165:86;:::i;:::-;35158:93;;35275:56;35325:5;35275:56;:::i;:::-;35354:7;35385:1;35370:284;35395:6;35392:1;35389:13;35370:284;;;35471:6;35465:13;35498:63;35557:3;35542:13;35498:63;:::i;:::-;35491:70;;35584:60;35637:6;35584:60;:::i;:::-;35574:70;;35430:224;35417:1;35414;35410:9;35405:14;;35370:284;;;35374:14;35670:3;35663:10;;35071:608;;;34947:732;;;;:::o;35685:831::-;35948:4;35986:3;35975:9;35971:19;35963:27;;36000:71;36068:1;36057:9;36053:17;36044:6;36000:71;:::i;:::-;36081:80;36157:2;36146:9;36142:18;36133:6;36081:80;:::i;:::-;36208:9;36202:4;36198:20;36193:2;36182:9;36178:18;36171:48;36236:108;36339:4;36330:6;36236:108;:::i;:::-;36228:116;;36354:72;36422:2;36411:9;36407:18;36398:6;36354:72;:::i;:::-;36436:73;36504:3;36493:9;36489:19;36480:6;36436:73;:::i;:::-;35685:831;;;;;;;;:::o;36522:807::-;36771:4;36809:3;36798:9;36794:19;36786:27;;36823:71;36891:1;36880:9;36876:17;36867:6;36823:71;:::i;:::-;36904:72;36972:2;36961:9;36957:18;36948:6;36904:72;:::i;:::-;36986:80;37062:2;37051:9;37047:18;37038:6;36986:80;:::i;:::-;37076;37152:2;37141:9;37137:18;37128:6;37076:80;:::i;:::-;37166:73;37234:3;37223:9;37219:19;37210:6;37166:73;:::i;:::-;37249;37317:3;37306:9;37302:19;37293:6;37249:73;:::i;:::-;36522:807;;;;;;;;;:::o;37335:143::-;37392:5;37423:6;37417:13;37408:22;;37439:33;37466:5;37439:33;:::i;:::-;37335:143;;;;:::o;37484:663::-;37572:6;37580;37588;37637:2;37625:9;37616:7;37612:23;37608:32;37605:119;;;37643:79;;:::i;:::-;37605:119;37763:1;37788:64;37844:7;37835:6;37824:9;37820:22;37788:64;:::i;:::-;37778:74;;37734:128;37901:2;37927:64;37983:7;37974:6;37963:9;37959:22;37927:64;:::i;:::-;37917:74;;37872:129;38040:2;38066:64;38122:7;38113:6;38102:9;38098:22;38066:64;:::i;:::-;38056:74;;38011:129;37484:663;;;;;:::o

Swarm Source

ipfs://54cf9d28b168871fcf95142edfcd82a4c9c88ab9c0e9617cfd30d87a719ff7ae

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.