ETH Price: $2,628.91 (+0.70%)
Gas: 9.11 Gwei

Contract

0x09022E64DA3FD13B662b52dEFEB4675a7ef03692
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve165060892023-01-28 15:03:59640 days ago1674918239IN
0x09022E64...a7ef03692
0 ETH0.0007617816.12823713
Approve165060872023-01-28 15:03:35640 days ago1674918215IN
0x09022E64...a7ef03692
0 ETH0.0008007916.95413355
Approve165060862023-01-28 15:03:23640 days ago1674918203IN
0x09022E64...a7ef03692
0 ETH0.0007513615.9277864
Update Max Walle...165060852023-01-28 15:03:11640 days ago1674918191IN
0x09022E64...a7ef03692
0 ETH0.0006938516.92113991
Approve165060842023-01-28 15:02:59640 days ago1674918179IN
0x09022E64...a7ef03692
0 ETH0.0008223117.43197934
Approve165060832023-01-28 15:02:47640 days ago1674918167IN
0x09022E64...a7ef03692
0 ETH0.0008256717.50318936
Approve165060792023-01-28 15:01:59640 days ago1674918119IN
0x09022E64...a7ef03692
0 ETH0.0007805416.52548933
Approve165060792023-01-28 15:01:59640 days ago1674918119IN
0x09022E64...a7ef03692
0 ETH0.0009694820.52548933
Approve165060752023-01-28 15:01:11640 days ago1674918071IN
0x09022E64...a7ef03692
0 ETH0.0008191717.34322327
Approve165060732023-01-28 15:00:47640 days ago1674918047IN
0x09022E64...a7ef03692
0 ETH0.00086818.37704049
Approve165060722023-01-28 15:00:35640 days ago1674918035IN
0x09022E64...a7ef03692
0 ETH0.0007585916.06071108
Approve165060722023-01-28 15:00:35640 days ago1674918035IN
0x09022E64...a7ef03692
0 ETH0.0008530618.06071108
Approve165060722023-01-28 15:00:35640 days ago1674918035IN
0x09022E64...a7ef03692
0 ETH0.0008530618.06071108
Approve165060722023-01-28 15:00:35640 days ago1674918035IN
0x09022E64...a7ef03692
0 ETH0.0008530618.06071108
Approve165060712023-01-28 15:00:23640 days ago1674918023IN
0x09022E64...a7ef03692
0 ETH0.0007753916.41646465
Approve165060712023-01-28 15:00:23640 days ago1674918023IN
0x09022E64...a7ef03692
0 ETH0.0007753916.41646465
Approve165060712023-01-28 15:00:23640 days ago1674918023IN
0x09022E64...a7ef03692
0 ETH0.0008852618.74240711
Approve165060692023-01-28 14:59:59640 days ago1674917999IN
0x09022E64...a7ef03692
0 ETH0.0008781418.69144688
Approve165060692023-01-28 14:59:59640 days ago1674917999IN
0x09022E64...a7ef03692
0 ETH0.0008781418.69144688
Approve165060692023-01-28 14:59:59640 days ago1674917999IN
0x09022E64...a7ef03692
0 ETH0.0040620386
Approve165060682023-01-28 14:59:47640 days ago1674917987IN
0x09022E64...a7ef03692
0 ETH0.0006888514.60269288
Approve165060682023-01-28 14:59:47640 days ago1674917987IN
0x09022E64...a7ef03692
0 ETH0.0006897214.60269288
Approve165060682023-01-28 14:59:47640 days ago1674917987IN
0x09022E64...a7ef03692
0 ETH0.0006888514.60269288
Approve165060682023-01-28 14:59:47640 days ago1674917987IN
0x09022E64...a7ef03692
0 ETH0.0006897214.60269288
Approve165060682023-01-28 14:59:47640 days ago1674917987IN
0x09022E64...a7ef03692
0 ETH0.0007541815.96733538
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01362605 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01362605 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01676876 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01676876 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01233691 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01233691 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.00446581 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.00446581 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01184306 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01184306 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01906732 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.01906732 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.02092678 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.02092678 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.04010029 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.04010029 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.08355356 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.08355356 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.09727591 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.09727591 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.10963073 ETH
165060962023-01-28 15:05:23640 days ago1674918323
0x09022E64...a7ef03692
0.10963073 ETH
165060952023-01-28 15:05:11640 days ago1674918311
0x09022E64...a7ef03692
0.12571573 ETH
165060952023-01-28 15:05:11640 days ago1674918311
0x09022E64...a7ef03692
0.12571573 ETH
165060672023-01-28 14:59:35640 days ago1674917975
0x09022E64...a7ef03692
0.0061534 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MemeToDream

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**
 * Meme To Dream ($MTD)
 * 
 * We build memecoin community with community driven $MTD, becoming a new hype on cryptocurrency space.
 *
 * Telegram: https://t.me/MemeToDream_ERC20
 * Website: https://memetodream.com
 * Twitter: https://twitter.com/MemetoDream_ETH
*/

// SPDX-License-Identifier: Unlicensed

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) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;

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

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

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private 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 SwapAndLiquidity(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Meme To Dream", "MTD", 18) {
        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 = 7;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 17;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 100000000 * 10**decimals();

        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply *  2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;

        marketingWallet = address(0xC5ED2bc60c4b77D4571ABF833E66Fd3510900864);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner returns (bool) {
        tradingActive = true;
        swapEnabled = tradingActive;
        return true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(
            newAmount >= ((totalSupply() * 1) / 100000) / 10**decimals(),
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount * (10**decimals());
        return true;
    }

    function updateMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum * (10**decimals());
        maxTransactionAmount = newTxnNum * (10**decimals());
    }

    function updateFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee) external onlyOwner {
        require(_buyMarketingFee + _buyLiquidityFee <= 25, "Must keep fees at 25% or less");
        require(_sellMarketingFee + _sellLiquidityFee <= 25, "Must keep fees at 25% or less");
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "Fee Address cannot be zero address");
        address oldAddress = marketingWallet;
        marketingWallet = newWallet;
        emit MarketingWalletUpdated(newWallet, oldAddress);
    }

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

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

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

    function rescueBalance(uint256 _mount) external onlyOwner {
        require(address(this).balance >= _mount, "Insufficient balance");
        payable(msg.sender).transfer(_mount);
    }

    function rescueToken(address _tokenAddress, address _to, uint256 _amount) public onlyOwner {
        require(_tokenAddress != address(this), "Owner can't claim contract's balance of its own tokens");
        ERC20(_tokenAddress).transfer(_to, _amount);
    }

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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 (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

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

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

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
        totalTokensToSwap /
        2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquidity(
                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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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":"SwapAndLiquidity","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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExclude","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"uint256","name":"_mount","type":"uint256"}],"name":"rescueBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","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"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600d81526020017f4d656d6520546f20447265616d000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d5444000000000000000000000000000000000000000000000000000000000081525060128260039081620000e2919062000d2c565b508160049081620000f4919062000d2c565b5080600560006101000a81548160ff021916908360ff16021790555050505062000133620001276200055c60201b60201c565b6200056460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015f8160016200062a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000205919062000e7d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000e7d565b6040518363ffffffff1660e01b8152600401620002b292919062000ec0565b6020604051808303816000875af1158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000e7d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034060a05160016200062a60201b60201c565b6200035560a05160016200071460201b60201c565b6000600790506000806011905060008062000375620007b560201b60201c565b600a6200038391906200107d565b6305f5e100620003949190620010ce565b90506064600282620003a79190620010ce565b620003b3919062001148565b6007819055506064600282620003ca9190620010ce565b620003d6919062001148565b600981905550612710600582620003ee9190620010ce565b620003fa919062001148565b60088190555084600c8190555083600d81905550600d54600c5462000420919062001180565b600b8190555082600f8190555081601081905550601054600f5462000446919062001180565b600e81905550600e5460138190555073c5ed2bc60c4b77d4571abf833e66fd3510900864600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004cc620004be620007cc60201b60201c565b6001620007f660201b60201c565b620004df306001620007f660201b60201c565b620004f461dead6001620007f660201b60201c565b6200051662000508620007cc60201b60201c565b60016200062a60201b60201c565b620005293060016200062a60201b60201c565b6200053e61dead60016200062a60201b60201c565b6200055033826200093060201b60201c565b50505050505062001318565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200063a6200055c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000660620007cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b0906200121c565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900460ff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008066200055c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200082c620007cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000885576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087c906200121c565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092491906200125b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099990620012c8565b60405180910390fd5b620009b66000838362000aa860201b60201c565b8060026000828254620009ca919062001180565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a21919062001180565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a889190620012fb565b60405180910390a362000aa46000838362000aad60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b3457607f821691505b60208210810362000b4a5762000b4962000aec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b75565b62000bc0868362000b75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c0d62000c0762000c018462000bd8565b62000be2565b62000bd8565b9050919050565b6000819050919050565b62000c298362000bec565b62000c4162000c388262000c14565b84845462000b82565b825550505050565b600090565b62000c5862000c49565b62000c6581848462000c1e565b505050565b5b8181101562000c8d5762000c8160008262000c4e565b60018101905062000c6b565b5050565b601f82111562000cdc5762000ca68162000b50565b62000cb18462000b65565b8101602085101562000cc1578190505b62000cd962000cd08562000b65565b83018262000c6a565b50505b505050565b600082821c905092915050565b600062000d016000198460080262000ce1565b1980831691505092915050565b600062000d1c838362000cee565b9150826002028217905092915050565b62000d378262000ab2565b67ffffffffffffffff81111562000d535762000d5262000abd565b5b62000d5f825462000b1b565b62000d6c82828562000c91565b600060209050601f83116001811462000da4576000841562000d8f578287015190505b62000d9b858262000d0e565b86555062000e0b565b601f19841662000db48662000b50565b60005b8281101562000dde5784890151825560018201915060208501945060208101905062000db7565b8683101562000dfe578489015162000dfa601f89168262000cee565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e458262000e18565b9050919050565b62000e578162000e38565b811462000e6357600080fd5b50565b60008151905062000e778162000e4c565b92915050565b60006020828403121562000e965762000e9562000e13565b5b600062000ea68482850162000e66565b91505092915050565b62000eba8162000e38565b82525050565b600060408201905062000ed7600083018562000eaf565b62000ee6602083018462000eaf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f7b5780860481111562000f535762000f5262000eed565b5b600185161562000f635780820291505b808102905062000f738562000f1c565b945062000f33565b94509492505050565b60008262000f96576001905062001069565b8162000fa6576000905062001069565b816001811462000fbf576002811462000fca5762001000565b600191505062001069565b60ff84111562000fdf5762000fde62000eed565b5b8360020a91508482111562000ff95762000ff862000eed565b5b5062001069565b5060208310610133831016604e8410600b84101617156200103a5782820a90508381111562001034576200103362000eed565b5b62001069565b62001049848484600162000f29565b9250905081840481111562001063576200106262000eed565b5b81810290505b9392505050565b600060ff82169050919050565b60006200108a8262000bd8565b9150620010978362001070565b9250620010c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f84565b905092915050565b6000620010db8262000bd8565b9150620010e88362000bd8565b9250828202620010f88162000bd8565b9150828204841483151762001112576200111162000eed565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011558262000bd8565b9150620011628362000bd8565b92508262001175576200117462001119565b5b828204905092915050565b60006200118d8262000bd8565b91506200119a8362000bd8565b9250828201905080821115620011b557620011b462000eed565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001204602083620011bb565b91506200121182620011cc565b602082019050919050565b600060208201905081810360008301526200123781620011f5565b9050919050565b60008115159050919050565b62001255816200123e565b82525050565b60006020820190506200127260008301846200124a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012b0601f83620011bb565b9150620012bd8262001278565b602082019050919050565b60006020820190508181036000830152620012e381620012a1565b9050919050565b620012f58162000bd8565b82525050565b6000602082019050620013126000830184620012ea565b92915050565b60805160a051614850620013616000396000610b3801526000818161094901528181612ee301528181612fc401528181612feb0152818161308701526130ae01526148506000f3fe6080604052600436106102135760003560e01c80638da5cb5b11610118578063c6616ba1116100a0578063dd62ed3e1161006f578063dd62ed3e146107b2578063e2f45605146107ef578063e5711e8b1461081a578063f2fde38b14610843578063f8b45b051461086c5761021a565b8063c6616ba1146106f6578063c8c8ebe41461071f578063d257b34f1461074a578063d85ba063146107875761021a565b8063a457c2d7116100e7578063a457c2d7146105ff578063a9059cbb1461063c578063aacebbe314610679578063bbc0c742146106a2578063c0246668146106cd5761021a565b80638da5cb5b1461055757806395d89b411461058257806396188399146105ad57806398bf93bb146105d65761021a565b80634a62bb651161019b578063715018a61161016a578063715018a614610496578063751039fc146104ad5780637571336a146104d857806375f0a874146105015780638a8c523c1461052c5761021a565b80634a62bb65146103d85780636a486a8e146104035780636ddd17131461042e57806370a08231146104595761021a565b806323b872dd116101e257806323b872dd146102dd57806327c8f8351461031a578063313ce56714610345578063395093511461037057806349bd5a5e146103ad5761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806318160ddd146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610897565b60405161024191906131ed565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906132a8565b610929565b60405161027e9190613303565b60405180910390f35b34801561029357600080fd5b5061029c610947565b6040516102a9919061337d565b60405180910390f35b3480156102be57600080fd5b506102c761096b565b6040516102d491906133a7565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906133c2565b610975565b6040516103119190613303565b60405180910390f35b34801561032657600080fd5b5061032f610a6d565b60405161033c9190613424565b60405180910390f35b34801561035157600080fd5b5061035a610a73565b604051610367919061345b565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906132a8565b610a8a565b6040516103a49190613303565b60405180910390f35b3480156103b957600080fd5b506103c2610b36565b6040516103cf9190613424565b60405180910390f35b3480156103e457600080fd5b506103ed610b5a565b6040516103fa9190613303565b60405180910390f35b34801561040f57600080fd5b50610418610b6d565b60405161042591906133a7565b60405180910390f35b34801561043a57600080fd5b50610443610b73565b6040516104509190613303565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613476565b610b86565b60405161048d91906133a7565b60405180910390f35b3480156104a257600080fd5b506104ab610bce565b005b3480156104b957600080fd5b506104c2610c56565b6040516104cf9190613303565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa91906134cf565b610cf6565b005b34801561050d57600080fd5b50610516610dcd565b6040516105239190613424565b60405180910390f35b34801561053857600080fd5b50610541610df3565b60405161054e9190613303565b60405180910390f35b34801561056357600080fd5b5061056c610ebc565b6040516105799190613424565b60405180910390f35b34801561058e57600080fd5b50610597610ee6565b6040516105a491906131ed565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061350f565b610f78565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061354f565b611144565b005b34801561060b57600080fd5b50610626600480360381019061062191906132a8565b61124d565b6040516106339190613303565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906132a8565b611338565b6040516106709190613303565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613476565b611356565b005b3480156106ae57600080fd5b506106b7611507565b6040516106c49190613303565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef91906134cf565b61151a565b005b34801561070257600080fd5b5061071d6004803603810190610718919061357c565b61163f565b005b34801561072b57600080fd5b506107346117b0565b60405161074191906133a7565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c919061354f565b6117b6565b60405161077e9190613303565b60405180910390f35b34801561079357600080fd5b5061079c611965565b6040516107a991906133a7565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906135e3565b61196b565b6040516107e691906133a7565b60405180910390f35b3480156107fb57600080fd5b506108046119f2565b60405161081191906133a7565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c91906133c2565b6119f8565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613476565b611b66565b005b34801561087857600080fd5b50610881611c5d565b60405161088e91906133a7565b60405180910390f35b6060600380546108a690613652565b80601f01602080910402602001604051908101604052809291908181526020018280546108d290613652565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b5050505050905090565b600061093d610936611c63565b8484611c6b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610982848484611e34565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109cd611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a44906136f5565b60405180910390fd5b610a6185610a59611c63565b858403611c6b565b60019150509392505050565b61dead81565b6000600560009054906101000a900460ff16905090565b6000610b2c610a97611c63565b848460016000610aa5611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b279190613744565b611c6b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd6611c63565b73ffffffffffffffffffffffffffffffffffffffff16610bf4610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906137c4565b60405180910390fd5b610c5460006128a6565b565b6000610c60611c63565b73ffffffffffffffffffffffffffffffffffffffff16610c7e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb906137c4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610cfe611c63565b73ffffffffffffffffffffffffffffffffffffffff16610d1c610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906137c4565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610dfd611c63565b73ffffffffffffffffffffffffffffffffffffffff16610e1b610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e68906137c4565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550600a60019054906101000a900460ff16600a60026101000a81548160ff0219169083151502179055506001905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ef590613652565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190613652565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b5050505050905090565b610f80611c63565b73ffffffffffffffffffffffffffffffffffffffff16610f9e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906137c4565b60405180910390fd5b610ffc610a73565b600a6110089190613917565b6103e8600561101561096b565b61101f9190613962565b61102991906139d3565b61103391906139d3565b821015611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613a76565b60405180910390fd5b61107d610a73565b600a6110899190613917565b6103e8600561109661096b565b6110a09190613962565b6110aa91906139d3565b6110b491906139d3565b8110156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613b08565b60405180910390fd5b6110fe610a73565b600a61110a9190613917565b816111159190613962565b600981905550611123610a73565b600a61112f9190613917565b8261113a9190613962565b6007819055505050565b61114c611c63565b73ffffffffffffffffffffffffffffffffffffffff1661116a610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906137c4565b60405180910390fd5b80471015611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613b74565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611249573d6000803e3d6000fd5b5050565b6000806001600061125c611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613c06565b60405180910390fd5b61132d611324611c63565b85858403611c6b565b600191505092915050565b600061134c611345611c63565b8484611e34565b6001905092915050565b61135e611c63565b73ffffffffffffffffffffffffffffffffffffffff1661137c610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613c98565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a35050565b600a60019054906101000a900460ff1681565b611522611c63565b73ffffffffffffffffffffffffffffffffffffffff16611540610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906137c4565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116339190613303565b60405180910390a25050565b611647611c63565b73ffffffffffffffffffffffffffffffffffffffff16611665610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906137c4565b60405180910390fd5b601983856116c99190613744565b111561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613d04565b60405180910390fd5b601981836117189190613744565b1115611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613d04565b60405180910390fd5b83600c8190555082600d81905550600d54600c546117779190613744565b600b8190555081600f8190555080601081905550601054600f5461179b9190613744565b600e81905550600e5460138190555050505050565b60075481565b60006117c0611c63565b73ffffffffffffffffffffffffffffffffffffffff166117de610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b906137c4565b60405180910390fd5b61183c610a73565b600a6118489190613917565b620186a0600161185661096b565b6118609190613962565b61186a91906139d3565b61187491906139d3565b8210156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613d96565b60405180910390fd5b6118be610a73565b600a6118ca9190613917565b6103e860056118d761096b565b6118e19190613962565b6118eb91906139d3565b6118f591906139d3565b821115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613e28565b60405180910390fd5b61193f610a73565b600a61194b9190613917565b826119569190613962565b60088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611a00611c63565b73ffffffffffffffffffffffffffffffffffffffff16611a1e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906137c4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613eba565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611b1d929190613eda565b6020604051808303816000875af1158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b609190613f18565b50505050565b611b6e611c63565b73ffffffffffffffffffffffffffffffffffffffff16611b8c610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613fb7565b60405180910390fd5b611c5a816128a6565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614049565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d40906140db565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e2791906133a7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a9061416d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906141ff565b60405180910390fd5b60008103611f2b57611f268383600061296c565b6128a1565b600a60009054906101000a900460ff161561242657611f48610ebc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb65750611f86610ebc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612029575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120425750600560159054906101000a900460ff16155b1561242557600a60019054906101000a900460ff1661213c57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120fc5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61213b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121329061426b565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121df5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228657600754811115612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906142fd565b60405180910390fd5b60095461223583610b86565b826122409190613744565b1115612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614369565b60405180910390fd5b612424565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123295750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561237857600754811115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906143fb565b60405180910390fd5b612423565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612422576009546123d583610b86565b826123e09190613744565b1115612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614369565b60405180910390fd5b5b5b5b5b5b600061243130610b86565b9050600060085482101590508080156124565750600a60029054906101000a900460ff165b801561246f5750600560159054906101000a900460ff16155b80156124c55750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561251b5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125715750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b5576001600560156101000a81548160ff021916908315150217905550612599612beb565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061266b5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561267557600090505b6000811561288857601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d857506000600e54115b156127725761270560646126f7600e5488612df890919063ffffffff16565b612e0e90919063ffffffff16565b9050600e54601054826127189190613962565b61272291906139d3565b601260008282546127339190613744565b92505081905550600e54600f548261274b9190613962565b61275591906139d3565b601160008282546127669190613744565b92505081905550612864565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127cd57506000600b54115b15612863576127fa60646127ec600b5488612df890919063ffffffff16565b612e0e90919063ffffffff16565b9050600b54600d548261280d9190613962565b61281791906139d3565b601260008282546128289190613744565b92505081905550600b54600c54826128409190613962565b61284a91906139d3565b6011600082825461285b9190613744565b925050819055505b5b60008111156128795761287887308361296c565b5b8085612885919061441b565b94505b61289387878761296c565b601354600e81905550505050505b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d29061416d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a41906141ff565b60405180910390fd5b612a55838383612e24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad2906144c1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b6e9190613744565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd291906133a7565b60405180910390a3612be5848484612e29565b50505050565b6000612bf630610b86565b90506000601154601254612c0a9190613744565b9050600080831480612c1c5750600082145b15612c2957505050612df6565b6014600854612c389190613962565b831115612c51576014600854612c4e9190613962565b92505b600060028360125486612c649190613962565b612c6e91906139d3565b612c7891906139d3565b90506000612c8f8286612e2e90919063ffffffff16565b90506000479050612c9f82612e44565b6000612cb48247612e2e90919063ffffffff16565b90506000612cdf87612cd160115485612df890919063ffffffff16565b612e0e90919063ffffffff16565b905060008183612cef919061441b565b905060006012819055506000601181905550600086118015612d115750600081115b15612d5e57612d208682613081565b7f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb8582601254604051612d55939291906144e1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612da490614549565b60006040518083038185875af1925050503d8060008114612de1576040519150601f19603f3d011682016040523d82523d6000602084013e612de6565b606091505b5050809750505050505050505050505b565b60008183612e069190613962565b905092915050565b60008183612e1c91906139d3565b905092915050565b505050565b505050565b60008183612e3c919061441b565b905092915050565b6000600267ffffffffffffffff811115612e6157612e6061455e565b5b604051908082528060200260200182016040528015612e8f5781602001602082028036833780820191505090505b5090503081600081518110612ea757612ea661458d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7091906145d1565b81600181518110612f8457612f8361458d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe9307f000000000000000000000000000000000000000000000000000000000000000084611c6b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161304b9594939291906146f7565b600060405180830381600087803b15801561306557600080fd5b505af1158015613079573d6000803e3d6000fd5b505050505050565b6130ac307f000000000000000000000000000000000000000000000000000000000000000084611c6b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161311396959493929190614751565b60606040518083038185885af1158015613131573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061315691906147c7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561319757808201518184015260208101905061317c565b60008484015250505050565b6000601f19601f8301169050919050565b60006131bf8261315d565b6131c98185613168565b93506131d9818560208601613179565b6131e2816131a3565b840191505092915050565b6000602082019050818103600083015261320781846131b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061323f82613214565b9050919050565b61324f81613234565b811461325a57600080fd5b50565b60008135905061326c81613246565b92915050565b6000819050919050565b61328581613272565b811461329057600080fd5b50565b6000813590506132a28161327c565b92915050565b600080604083850312156132bf576132be61320f565b5b60006132cd8582860161325d565b92505060206132de85828601613293565b9150509250929050565b60008115159050919050565b6132fd816132e8565b82525050565b600060208201905061331860008301846132f4565b92915050565b6000819050919050565b600061334361333e61333984613214565b61331e565b613214565b9050919050565b600061335582613328565b9050919050565b60006133678261334a565b9050919050565b6133778161335c565b82525050565b6000602082019050613392600083018461336e565b92915050565b6133a181613272565b82525050565b60006020820190506133bc6000830184613398565b92915050565b6000806000606084860312156133db576133da61320f565b5b60006133e98682870161325d565b93505060206133fa8682870161325d565b925050604061340b86828701613293565b9150509250925092565b61341e81613234565b82525050565b60006020820190506134396000830184613415565b92915050565b600060ff82169050919050565b6134558161343f565b82525050565b6000602082019050613470600083018461344c565b92915050565b60006020828403121561348c5761348b61320f565b5b600061349a8482850161325d565b91505092915050565b6134ac816132e8565b81146134b757600080fd5b50565b6000813590506134c9816134a3565b92915050565b600080604083850312156134e6576134e561320f565b5b60006134f48582860161325d565b9250506020613505858286016134ba565b9150509250929050565b600080604083850312156135265761352561320f565b5b600061353485828601613293565b925050602061354585828601613293565b9150509250929050565b6000602082840312156135655761356461320f565b5b600061357384828501613293565b91505092915050565b600080600080608085870312156135965761359561320f565b5b60006135a487828801613293565b94505060206135b587828801613293565b93505060406135c687828801613293565b92505060606135d787828801613293565b91505092959194509250565b600080604083850312156135fa576135f961320f565b5b60006136088582860161325d565b92505060206136198582860161325d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061366a57607f821691505b60208210810361367d5761367c613623565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136df602883613168565b91506136ea82613683565b604082019050919050565b6000602082019050818103600083015261370e816136d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061374f82613272565b915061375a83613272565b925082820190508082111561377257613771613715565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137ae602083613168565b91506137b982613778565b602082019050919050565b600060208201905081810360008301526137dd816137a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561383b5780860481111561381757613816613715565b5b60018516156138265780820291505b8081029050613834856137e4565b94506137fb565b94509492505050565b6000826138545760019050613910565b816138625760009050613910565b81600181146138785760028114613882576138b1565b6001915050613910565b60ff84111561389457613893613715565b5b8360020a9150848211156138ab576138aa613715565b5b50613910565b5060208310610133831016604e8410600b84101617156138e65782820a9050838111156138e1576138e0613715565b5b613910565b6138f384848460016137f1565b9250905081840481111561390a57613909613715565b5b81810290505b9392505050565b600061392282613272565b915061392d8361343f565b925061395a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613844565b905092915050565b600061396d82613272565b915061397883613272565b925082820261398681613272565b9150828204841483151761399d5761399c613715565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139de82613272565b91506139e983613272565b9250826139f9576139f86139a4565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a60602183613168565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613af2602483613168565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613b5e601483613168565b9150613b6982613b28565b602082019050919050565b60006020820190508181036000830152613b8d81613b51565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bf0602583613168565b9150613bfb82613b94565b604082019050919050565b60006020820190508181036000830152613c1f81613be3565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c82602283613168565b9150613c8d82613c26565b604082019050919050565b60006020820190508181036000830152613cb181613c75565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613cee601d83613168565b9150613cf982613cb8565b602082019050919050565b60006020820190508181036000830152613d1d81613ce1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d80603583613168565b9150613d8b82613d24565b604082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e12603483613168565b9150613e1d82613db6565b604082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000613ea4603683613168565b9150613eaf82613e48565b604082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b6000604082019050613eef6000830185613415565b613efc6020830184613398565b9392505050565b600081519050613f12816134a3565b92915050565b600060208284031215613f2e57613f2d61320f565b5b6000613f3c84828501613f03565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa1602683613168565b9150613fac82613f45565b604082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614033602483613168565b915061403e82613fd7565b604082019050919050565b6000602082019050818103600083015261406281614026565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140c5602283613168565b91506140d082614069565b604082019050919050565b600060208201905081810360008301526140f4816140b8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614157602583613168565b9150614162826140fb565b604082019050919050565b600060208201905081810360008301526141868161414a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141e9602383613168565b91506141f48261418d565b604082019050919050565b60006020820190508181036000830152614218816141dc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614255601683613168565b91506142608261421f565b602082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142e7603583613168565b91506142f28261428b565b604082019050919050565b60006020820190508181036000830152614316816142da565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614353601383613168565b915061435e8261431d565b602082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143e5603683613168565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b600061442682613272565b915061443183613272565b925082820390508181111561444957614448613715565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144ab602683613168565b91506144b68261444f565b604082019050919050565b600060208201905081810360008301526144da8161449e565b9050919050565b60006060820190506144f66000830186613398565b6145036020830185613398565b6145106040830184613398565b949350505050565b600081905092915050565b50565b6000614533600083614518565b915061453e82614523565b600082019050919050565b600061455482614526565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cb81613246565b92915050565b6000602082840312156145e7576145e661320f565b5b60006145f5848285016145bc565b91505092915050565b6000819050919050565b600061462361461e614619846145fe565b61331e565b613272565b9050919050565b61463381614608565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61466e81613234565b82525050565b60006146808383614665565b60208301905092915050565b6000602082019050919050565b60006146a482614639565b6146ae8185614644565b93506146b983614655565b8060005b838110156146ea5781516146d18882614674565b97506146dc8361468c565b9250506001810190506146bd565b5085935050505092915050565b600060a08201905061470c6000830188613398565b614719602083018761462a565b818103604083015261472b8186614699565b905061473a6060830185613415565b6147476080830184613398565b9695505050505050565b600060c0820190506147666000830189613415565b6147736020830188613398565b614780604083018761462a565b61478d606083018661462a565b61479a6080830185613415565b6147a760a0830184613398565b979650505050505050565b6000815190506147c18161327c565b92915050565b6000806000606084860312156147e0576147df61320f565b5b60006147ee868287016147b2565b93505060206147ff868287016147b2565b9250506040614810868287016147b2565b915050925092509256fea2646970667358221220e139189bab92187903369c6be41f7fc6d86138dabf54d9c6592a889d689c022a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638da5cb5b11610118578063c6616ba1116100a0578063dd62ed3e1161006f578063dd62ed3e146107b2578063e2f45605146107ef578063e5711e8b1461081a578063f2fde38b14610843578063f8b45b051461086c5761021a565b8063c6616ba1146106f6578063c8c8ebe41461071f578063d257b34f1461074a578063d85ba063146107875761021a565b8063a457c2d7116100e7578063a457c2d7146105ff578063a9059cbb1461063c578063aacebbe314610679578063bbc0c742146106a2578063c0246668146106cd5761021a565b80638da5cb5b1461055757806395d89b411461058257806396188399146105ad57806398bf93bb146105d65761021a565b80634a62bb651161019b578063715018a61161016a578063715018a614610496578063751039fc146104ad5780637571336a146104d857806375f0a874146105015780638a8c523c1461052c5761021a565b80634a62bb65146103d85780636a486a8e146104035780636ddd17131461042e57806370a08231146104595761021a565b806323b872dd116101e257806323b872dd146102dd57806327c8f8351461031a578063313ce56714610345578063395093511461037057806349bd5a5e146103ad5761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806318160ddd146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610897565b60405161024191906131ed565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906132a8565b610929565b60405161027e9190613303565b60405180910390f35b34801561029357600080fd5b5061029c610947565b6040516102a9919061337d565b60405180910390f35b3480156102be57600080fd5b506102c761096b565b6040516102d491906133a7565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906133c2565b610975565b6040516103119190613303565b60405180910390f35b34801561032657600080fd5b5061032f610a6d565b60405161033c9190613424565b60405180910390f35b34801561035157600080fd5b5061035a610a73565b604051610367919061345b565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906132a8565b610a8a565b6040516103a49190613303565b60405180910390f35b3480156103b957600080fd5b506103c2610b36565b6040516103cf9190613424565b60405180910390f35b3480156103e457600080fd5b506103ed610b5a565b6040516103fa9190613303565b60405180910390f35b34801561040f57600080fd5b50610418610b6d565b60405161042591906133a7565b60405180910390f35b34801561043a57600080fd5b50610443610b73565b6040516104509190613303565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613476565b610b86565b60405161048d91906133a7565b60405180910390f35b3480156104a257600080fd5b506104ab610bce565b005b3480156104b957600080fd5b506104c2610c56565b6040516104cf9190613303565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa91906134cf565b610cf6565b005b34801561050d57600080fd5b50610516610dcd565b6040516105239190613424565b60405180910390f35b34801561053857600080fd5b50610541610df3565b60405161054e9190613303565b60405180910390f35b34801561056357600080fd5b5061056c610ebc565b6040516105799190613424565b60405180910390f35b34801561058e57600080fd5b50610597610ee6565b6040516105a491906131ed565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061350f565b610f78565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061354f565b611144565b005b34801561060b57600080fd5b50610626600480360381019061062191906132a8565b61124d565b6040516106339190613303565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e91906132a8565b611338565b6040516106709190613303565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613476565b611356565b005b3480156106ae57600080fd5b506106b7611507565b6040516106c49190613303565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef91906134cf565b61151a565b005b34801561070257600080fd5b5061071d6004803603810190610718919061357c565b61163f565b005b34801561072b57600080fd5b506107346117b0565b60405161074191906133a7565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c919061354f565b6117b6565b60405161077e9190613303565b60405180910390f35b34801561079357600080fd5b5061079c611965565b6040516107a991906133a7565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906135e3565b61196b565b6040516107e691906133a7565b60405180910390f35b3480156107fb57600080fd5b506108046119f2565b60405161081191906133a7565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c91906133c2565b6119f8565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613476565b611b66565b005b34801561087857600080fd5b50610881611c5d565b60405161088e91906133a7565b60405180910390f35b6060600380546108a690613652565b80601f01602080910402602001604051908101604052809291908181526020018280546108d290613652565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b5050505050905090565b600061093d610936611c63565b8484611c6b565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610982848484611e34565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109cd611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a44906136f5565b60405180910390fd5b610a6185610a59611c63565b858403611c6b565b60019150509392505050565b61dead81565b6000600560009054906101000a900460ff16905090565b6000610b2c610a97611c63565b848460016000610aa5611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b279190613744565b611c6b565b6001905092915050565b7f0000000000000000000000003473dcd0977ebb26c106c379e032e06223fc967c81565b600a60009054906101000a900460ff1681565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd6611c63565b73ffffffffffffffffffffffffffffffffffffffff16610bf4610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906137c4565b60405180910390fd5b610c5460006128a6565b565b6000610c60611c63565b73ffffffffffffffffffffffffffffffffffffffff16610c7e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb906137c4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b610cfe611c63565b73ffffffffffffffffffffffffffffffffffffffff16610d1c610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906137c4565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610dfd611c63565b73ffffffffffffffffffffffffffffffffffffffff16610e1b610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e68906137c4565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550600a60019054906101000a900460ff16600a60026101000a81548160ff0219169083151502179055506001905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ef590613652565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190613652565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b5050505050905090565b610f80611c63565b73ffffffffffffffffffffffffffffffffffffffff16610f9e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906137c4565b60405180910390fd5b610ffc610a73565b600a6110089190613917565b6103e8600561101561096b565b61101f9190613962565b61102991906139d3565b61103391906139d3565b821015611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613a76565b60405180910390fd5b61107d610a73565b600a6110899190613917565b6103e8600561109661096b565b6110a09190613962565b6110aa91906139d3565b6110b491906139d3565b8110156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613b08565b60405180910390fd5b6110fe610a73565b600a61110a9190613917565b816111159190613962565b600981905550611123610a73565b600a61112f9190613917565b8261113a9190613962565b6007819055505050565b61114c611c63565b73ffffffffffffffffffffffffffffffffffffffff1661116a610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906137c4565b60405180910390fd5b80471015611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613b74565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611249573d6000803e3d6000fd5b5050565b6000806001600061125c611c63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613c06565b60405180910390fd5b61132d611324611c63565b85858403611c6b565b600191505092915050565b600061134c611345611c63565b8484611e34565b6001905092915050565b61135e611c63565b73ffffffffffffffffffffffffffffffffffffffff1661137c610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613c98565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a35050565b600a60019054906101000a900460ff1681565b611522611c63565b73ffffffffffffffffffffffffffffffffffffffff16611540610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906137c4565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116339190613303565b60405180910390a25050565b611647611c63565b73ffffffffffffffffffffffffffffffffffffffff16611665610ebc565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906137c4565b60405180910390fd5b601983856116c99190613744565b111561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613d04565b60405180910390fd5b601981836117189190613744565b1115611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090613d04565b60405180910390fd5b83600c8190555082600d81905550600d54600c546117779190613744565b600b8190555081600f8190555080601081905550601054600f5461179b9190613744565b600e81905550600e5460138190555050505050565b60075481565b60006117c0611c63565b73ffffffffffffffffffffffffffffffffffffffff166117de610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b906137c4565b60405180910390fd5b61183c610a73565b600a6118489190613917565b620186a0600161185661096b565b6118609190613962565b61186a91906139d3565b61187491906139d3565b8210156118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90613d96565b60405180910390fd5b6118be610a73565b600a6118ca9190613917565b6103e860056118d761096b565b6118e19190613962565b6118eb91906139d3565b6118f591906139d3565b821115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613e28565b60405180910390fd5b61193f610a73565b600a61194b9190613917565b826119569190613962565b60088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611a00611c63565b73ffffffffffffffffffffffffffffffffffffffff16611a1e610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906137c4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613eba565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611b1d929190613eda565b6020604051808303816000875af1158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b609190613f18565b50505050565b611b6e611c63565b73ffffffffffffffffffffffffffffffffffffffff16611b8c610ebc565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906137c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613fb7565b60405180910390fd5b611c5a816128a6565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614049565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d40906140db565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e2791906133a7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a9061416d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906141ff565b60405180910390fd5b60008103611f2b57611f268383600061296c565b6128a1565b600a60009054906101000a900460ff161561242657611f48610ebc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb65750611f86610ebc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612029575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120425750600560159054906101000a900460ff16155b1561242557600a60019054906101000a900460ff1661213c57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120fc5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61213b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121329061426b565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121df5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228657600754811115612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906142fd565b60405180910390fd5b60095461223583610b86565b826122409190613744565b1115612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614369565b60405180910390fd5b612424565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123295750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561237857600754811115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906143fb565b60405180910390fd5b612423565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612422576009546123d583610b86565b826123e09190613744565b1115612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614369565b60405180910390fd5b5b5b5b5b5b600061243130610b86565b9050600060085482101590508080156124565750600a60029054906101000a900460ff165b801561246f5750600560159054906101000a900460ff16155b80156124c55750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561251b5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125715750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b5576001600560156101000a81548160ff021916908315150217905550612599612beb565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061266b5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561267557600090505b6000811561288857601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d857506000600e54115b156127725761270560646126f7600e5488612df890919063ffffffff16565b612e0e90919063ffffffff16565b9050600e54601054826127189190613962565b61272291906139d3565b601260008282546127339190613744565b92505081905550600e54600f548261274b9190613962565b61275591906139d3565b601160008282546127669190613744565b92505081905550612864565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127cd57506000600b54115b15612863576127fa60646127ec600b5488612df890919063ffffffff16565b612e0e90919063ffffffff16565b9050600b54600d548261280d9190613962565b61281791906139d3565b601260008282546128289190613744565b92505081905550600b54600c54826128409190613962565b61284a91906139d3565b6011600082825461285b9190613744565b925050819055505b5b60008111156128795761287887308361296c565b5b8085612885919061441b565b94505b61289387878761296c565b601354600e81905550505050505b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d29061416d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a41906141ff565b60405180910390fd5b612a55838383612e24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad2906144c1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b6e9190613744565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd291906133a7565b60405180910390a3612be5848484612e29565b50505050565b6000612bf630610b86565b90506000601154601254612c0a9190613744565b9050600080831480612c1c5750600082145b15612c2957505050612df6565b6014600854612c389190613962565b831115612c51576014600854612c4e9190613962565b92505b600060028360125486612c649190613962565b612c6e91906139d3565b612c7891906139d3565b90506000612c8f8286612e2e90919063ffffffff16565b90506000479050612c9f82612e44565b6000612cb48247612e2e90919063ffffffff16565b90506000612cdf87612cd160115485612df890919063ffffffff16565b612e0e90919063ffffffff16565b905060008183612cef919061441b565b905060006012819055506000601181905550600086118015612d115750600081115b15612d5e57612d208682613081565b7f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb8582601254604051612d55939291906144e1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612da490614549565b60006040518083038185875af1925050503d8060008114612de1576040519150601f19603f3d011682016040523d82523d6000602084013e612de6565b606091505b5050809750505050505050505050505b565b60008183612e069190613962565b905092915050565b60008183612e1c91906139d3565b905092915050565b505050565b505050565b60008183612e3c919061441b565b905092915050565b6000600267ffffffffffffffff811115612e6157612e6061455e565b5b604051908082528060200260200182016040528015612e8f5781602001602082028036833780820191505090505b5090503081600081518110612ea757612ea661458d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7091906145d1565b81600181518110612f8457612f8361458d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161304b9594939291906146f7565b600060405180830381600087803b15801561306557600080fd5b505af1158015613079573d6000803e3d6000fd5b505050505050565b6130ac307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161311396959493929190614751565b60606040518083038185885af1158015613131573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061315691906147c7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561319757808201518184015260208101905061317c565b60008484015250505050565b6000601f19601f8301169050919050565b60006131bf8261315d565b6131c98185613168565b93506131d9818560208601613179565b6131e2816131a3565b840191505092915050565b6000602082019050818103600083015261320781846131b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061323f82613214565b9050919050565b61324f81613234565b811461325a57600080fd5b50565b60008135905061326c81613246565b92915050565b6000819050919050565b61328581613272565b811461329057600080fd5b50565b6000813590506132a28161327c565b92915050565b600080604083850312156132bf576132be61320f565b5b60006132cd8582860161325d565b92505060206132de85828601613293565b9150509250929050565b60008115159050919050565b6132fd816132e8565b82525050565b600060208201905061331860008301846132f4565b92915050565b6000819050919050565b600061334361333e61333984613214565b61331e565b613214565b9050919050565b600061335582613328565b9050919050565b60006133678261334a565b9050919050565b6133778161335c565b82525050565b6000602082019050613392600083018461336e565b92915050565b6133a181613272565b82525050565b60006020820190506133bc6000830184613398565b92915050565b6000806000606084860312156133db576133da61320f565b5b60006133e98682870161325d565b93505060206133fa8682870161325d565b925050604061340b86828701613293565b9150509250925092565b61341e81613234565b82525050565b60006020820190506134396000830184613415565b92915050565b600060ff82169050919050565b6134558161343f565b82525050565b6000602082019050613470600083018461344c565b92915050565b60006020828403121561348c5761348b61320f565b5b600061349a8482850161325d565b91505092915050565b6134ac816132e8565b81146134b757600080fd5b50565b6000813590506134c9816134a3565b92915050565b600080604083850312156134e6576134e561320f565b5b60006134f48582860161325d565b9250506020613505858286016134ba565b9150509250929050565b600080604083850312156135265761352561320f565b5b600061353485828601613293565b925050602061354585828601613293565b9150509250929050565b6000602082840312156135655761356461320f565b5b600061357384828501613293565b91505092915050565b600080600080608085870312156135965761359561320f565b5b60006135a487828801613293565b94505060206135b587828801613293565b93505060406135c687828801613293565b92505060606135d787828801613293565b91505092959194509250565b600080604083850312156135fa576135f961320f565b5b60006136088582860161325d565b92505060206136198582860161325d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061366a57607f821691505b60208210810361367d5761367c613623565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136df602883613168565b91506136ea82613683565b604082019050919050565b6000602082019050818103600083015261370e816136d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061374f82613272565b915061375a83613272565b925082820190508082111561377257613771613715565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137ae602083613168565b91506137b982613778565b602082019050919050565b600060208201905081810360008301526137dd816137a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561383b5780860481111561381757613816613715565b5b60018516156138265780820291505b8081029050613834856137e4565b94506137fb565b94509492505050565b6000826138545760019050613910565b816138625760009050613910565b81600181146138785760028114613882576138b1565b6001915050613910565b60ff84111561389457613893613715565b5b8360020a9150848211156138ab576138aa613715565b5b50613910565b5060208310610133831016604e8410600b84101617156138e65782820a9050838111156138e1576138e0613715565b5b613910565b6138f384848460016137f1565b9250905081840481111561390a57613909613715565b5b81810290505b9392505050565b600061392282613272565b915061392d8361343f565b925061395a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613844565b905092915050565b600061396d82613272565b915061397883613272565b925082820261398681613272565b9150828204841483151761399d5761399c613715565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139de82613272565b91506139e983613272565b9250826139f9576139f86139a4565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a60602183613168565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613af2602483613168565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613b5e601483613168565b9150613b6982613b28565b602082019050919050565b60006020820190508181036000830152613b8d81613b51565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bf0602583613168565b9150613bfb82613b94565b604082019050919050565b60006020820190508181036000830152613c1f81613be3565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c82602283613168565b9150613c8d82613c26565b604082019050919050565b60006020820190508181036000830152613cb181613c75565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613cee601d83613168565b9150613cf982613cb8565b602082019050919050565b60006020820190508181036000830152613d1d81613ce1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d80603583613168565b9150613d8b82613d24565b604082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e12603483613168565b9150613e1d82613db6565b604082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000613ea4603683613168565b9150613eaf82613e48565b604082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b6000604082019050613eef6000830185613415565b613efc6020830184613398565b9392505050565b600081519050613f12816134a3565b92915050565b600060208284031215613f2e57613f2d61320f565b5b6000613f3c84828501613f03565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa1602683613168565b9150613fac82613f45565b604082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614033602483613168565b915061403e82613fd7565b604082019050919050565b6000602082019050818103600083015261406281614026565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140c5602283613168565b91506140d082614069565b604082019050919050565b600060208201905081810360008301526140f4816140b8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614157602583613168565b9150614162826140fb565b604082019050919050565b600060208201905081810360008301526141868161414a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141e9602383613168565b91506141f48261418d565b604082019050919050565b60006020820190508181036000830152614218816141dc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614255601683613168565b91506142608261421f565b602082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142e7603583613168565b91506142f28261428b565b604082019050919050565b60006020820190508181036000830152614316816142da565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614353601383613168565b915061435e8261431d565b602082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143e5603683613168565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b600061442682613272565b915061443183613272565b925082820390508181111561444957614448613715565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144ab602683613168565b91506144b68261444f565b604082019050919050565b600060208201905081810360008301526144da8161449e565b9050919050565b60006060820190506144f66000830186613398565b6145036020830185613398565b6145106040830184613398565b949350505050565b600081905092915050565b50565b6000614533600083614518565b915061453e82614523565b600082019050919050565b600061455482614526565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cb81613246565b92915050565b6000602082840312156145e7576145e661320f565b5b60006145f5848285016145bc565b91505092915050565b6000819050919050565b600061462361461e614619846145fe565b61331e565b613272565b9050919050565b61463381614608565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61466e81613234565b82525050565b60006146808383614665565b60208301905092915050565b6000602082019050919050565b60006146a482614639565b6146ae8185614644565b93506146b983614655565b8060005b838110156146ea5781516146d18882614674565b97506146dc8361468c565b9250506001810190506146bd565b5085935050505092915050565b600060a08201905061470c6000830188613398565b614719602083018761462a565b818103604083015261472b8186614699565b905061473a6060830185613415565b6147476080830184613398565b9695505050505050565b600060c0820190506147666000830189613415565b6147736020830188613398565b614780604083018761462a565b61478d606083018661462a565b61479a6080830185613415565b6147a760a0830184613398565b979650505050505050565b6000815190506147c18161327c565b92915050565b6000806000606084860312156147e0576147df61320f565b5b60006147ee868287016147b2565b93505060206147ff868287016147b2565b9250506040614810868287016147b2565b915050925092509256fea2646970667358221220e139189bab92187903369c6be41f7fc6d86138dabf54d9c6592a889d689c022a64736f6c63430008110033

Deployed Bytecode Sourcemap

14219:12575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3000:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3921:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14300:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3328:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4098:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14403:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3220:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4598:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14358:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14649:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14881:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14729:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3444:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1061:103;;;;;;;;;;;;;:::i;:::-;;17759:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19973:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14495:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17593:158;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;838:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3108:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18417:540;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20521:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4821:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3579:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19661:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14689:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20137:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18965:688;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14534:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17888:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14769:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3762:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14576:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20717:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1172:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14616:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3000:100;3054:13;3087:5;3080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3000:100;:::o;3921:169::-;4004:4;4021:39;4030:12;:10;:12::i;:::-;4044:7;4053:6;4021:8;:39::i;:::-;4078:4;4071:11;;3921:169;;;;:::o;14300:51::-;;;:::o;3328:108::-;3389:7;3416:12;;3409:19;;3328:108;:::o;4098:492::-;4238:4;4255:36;4265:6;4273:9;4284:6;4255:9;:36::i;:::-;4304:24;4331:11;:19;4343:6;4331:19;;;;;;;;;;;;;;;:33;4351:12;:10;:12::i;:::-;4331:33;;;;;;;;;;;;;;;;4304:60;;4403:6;4383:16;:26;;4375:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4490:57;4499:6;4507:12;:10;:12::i;:::-;4540:6;4521:16;:25;4490:8;:57::i;:::-;4578:4;4571:11;;;4098:492;;;;;:::o;14403:53::-;14449:6;14403:53;:::o;3220:100::-;3278:5;3303:9;;;;;;;;;;;3296:16;;3220:100;:::o;4598:215::-;4686:4;4703:80;4712:12;:10;:12::i;:::-;4726:7;4772:10;4735:11;:25;4747:12;:10;:12::i;:::-;4735:25;;;;;;;;;;;;;;;:34;4761:7;4735:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4703:8;:80::i;:::-;4801:4;4794:11;;4598:215;;;;:::o;14358:38::-;;;:::o;14649:33::-;;;;;;;;;;;;;:::o;14881:28::-;;;;:::o;14729:31::-;;;;;;;;;;;;;:::o;3444:127::-;3518:7;3545:9;:18;3555:7;3545:18;;;;;;;;;;;;;;;;3538:25;;3444:127;;;:::o;1061:103::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1126:30:::1;1153:1;1126:18;:30::i;:::-;1061:103::o:0;17759:121::-;17811:4;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17845:5:::1;17828:14;;:22;;;;;;;;;;;;;;;;;;17868:4;17861:11;;17759:121:::0;:::o;19973:156::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20112:9:::1;20069:31;:40;20101:7;20069:40;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;19973:156:::0;;:::o;14495:30::-;;;;;;;;;;;;;:::o;17593:158::-;17646:4;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17679:4:::1;17663:13;;:20;;;;;;;;;;;;;;;;;;17708:13;;;;;;;;;;;17694:11;;:27;;;;;;;;;;;;;;;;;;17739:4;17732:11;;17593:158:::0;:::o;838:87::-;884:7;911:6;;;;;;;;;;;904:13;;838:87;:::o;3108:104::-;3164:13;3197:7;3190:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3108:104;:::o;18417:540::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18598:10:::1;:8;:10::i;:::-;18594:2;:14;;;;:::i;:::-;18586:4;18581:1;18565:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18564:26;;;;:::i;:::-;18563:45;;;;:::i;:::-;18550:9;:58;;18528:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;18756:10;:8;:10::i;:::-;18752:2;:14;;;;:::i;:::-;18744:4;18739:1;18723:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18722:26;;;;:::i;:::-;18721:45;;;;:::i;:::-;18702:15;:64;;18680:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;18876:10;:8;:10::i;:::-;18872:2;:14;;;;:::i;:::-;18853:15;:34;;;;:::i;:::-;18841:9;:46;;;;18938:10;:8;:10::i;:::-;18934:2;:14;;;;:::i;:::-;18921:9;:28;;;;:::i;:::-;18898:20;:51;;;;18417:540:::0;;:::o;20521:188::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20623:6:::1;20598:21;:31;;20590:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20673:10;20665:28;;:36;20694:6;20665:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20521:188:::0;:::o;4821:413::-;4914:4;4931:24;4958:11;:25;4970:12;:10;:12::i;:::-;4958:25;;;;;;;;;;;;;;;:34;4984:7;4958:34;;;;;;;;;;;;;;;;4931:61;;5031:15;5011:16;:35;;5003:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5124:67;5133:12;:10;:12::i;:::-;5147:7;5175:15;5156:16;:34;5124:8;:67::i;:::-;5222:4;5215:11;;;4821:413;;;;:::o;3579:175::-;3665:4;3682:42;3692:12;:10;:12::i;:::-;3706:9;3717:6;3682:9;:42::i;:::-;3742:4;3735:11;;3579:175;;;;:::o;19661:304::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19770:1:::1;19749:23;;:9;:23;;::::0;19741:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19822:18;19843:15;;;;;;;;;;;19822:36;;19887:9;19869:15;;:27;;;;;;;;;;;;;;;;;;19946:10;19912:45;;19935:9;19912:45;;;;;;;;;;;;19730:235;19661:304:::0;:::o;14689:33::-;;;;;;;;;;;;;:::o;20137:182::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20253:8:::1;20222:19;:28;20242:7;20222:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20293:7;20277:34;;;20302:8;20277:34;;;;;;:::i;:::-;;;;;;;;20137:182:::0;;:::o;18965:688::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19168:2:::1;19148:16;19129;:35;;;;:::i;:::-;:41;;19121:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;19264:2;19243:17;19223;:37;;;;:::i;:::-;:43;;19215:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19329:16;19311:15;:34;;;;19374:16;19356:15;:34;;;;19434:15;;19416;;:33;;;;:::i;:::-;19401:12;:48;;;;19481:17;19462:16;:36;;;;19528:17;19509:16;:36;;;;19591:16;;19572;;:35;;;;:::i;:::-;19556:13;:51;;;;19632:13;;19618:11;:27;;;;18965:688:::0;;;;:::o;14534:35::-;;;;:::o;17888:521::-;17969:4;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18057:10:::1;:8;:10::i;:::-;18053:2;:14;;;;:::i;:::-;18043:6;18038:1;18022:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18021:28;;;;:::i;:::-;18020:47;;;;:::i;:::-;18007:9;:60;;17985:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;18229:10;:8;:10::i;:::-;18225:2;:14;;;;:::i;:::-;18217:4;18212:1;18196:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18195:26;;;;:::i;:::-;18194:45;;;;:::i;:::-;18181:9;:58;;18159:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;18368:10;:8;:10::i;:::-;18364:2;:14;;;;:::i;:::-;18351:9;:28;;;;:::i;:::-;18330:18;:49;;;;18397:4;18390:11;;17888:521:::0;;;:::o;14769:27::-;;;;:::o;3762:151::-;3851:7;3878:11;:18;3890:5;3878:18;;;;;;;;;;;;;;;:27;3897:7;3878:27;;;;;;;;;;;;;;;;3871:34;;3762:151;;;;:::o;14576:33::-;;;;:::o;20717:261::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20852:4:::1;20827:30;;:13;:30;;::::0;20819:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20933:13;20927:29;;;20957:3;20962:7;20927:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20717:261:::0;;;:::o;1172:201::-;984:12;:10;:12::i;:::-;973:23;;:7;:5;:7::i;:::-;:23;;;965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1281:1:::1;1261:22;;:8;:22;;::::0;1253:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1337:28;1356:8;1337:18;:28::i;:::-;1172:201:::0;:::o;14616:24::-;;;;:::o;384:98::-;437:7;464:10;457:17;;384:98;:::o;6390:380::-;6543:1;6526:19;;:5;:19;;;6518:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6624:1;6605:21;;:7;:21;;;6597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6708:6;6678:11;:18;6690:5;6678:18;;;;;;;;;;;;;;;:27;6697:7;6678:27;;;;;;;;;;;;;;;:36;;;;6746:7;6730:32;;6739:5;6730:32;;;6755:6;6730:32;;;;;;:::i;:::-;;;;;;;;6390:380;;;:::o;20986:3458::-;21134:1;21118:18;;:4;:18;;;21110:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21211:1;21197:16;;:2;:16;;;21189:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21280:1;21270:6;:11;21266:93;;21298:28;21314:4;21320:2;21324:1;21298:15;:28::i;:::-;21341:7;;21266:93;21375:14;;;;;;;;;;;21371:1532;;;21436:7;:5;:7::i;:::-;21428:15;;:4;:15;;;;:49;;;;;21470:7;:5;:7::i;:::-;21464:13;;:2;:13;;;;21428:49;:86;;;;;21512:1;21498:16;;:2;:16;;;;21428:86;:128;;;;;21549:6;21535:21;;:2;:21;;;;21428:128;:158;;;;;21578:8;;;;;;;;;;;21577:9;21428:158;21406:1486;;;21626:13;;;;;;;;;;;21621:223;;21698:19;:25;21718:4;21698:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21727:19;:23;21747:2;21727:23;;;;;;;;;;;;;;;;;;;;;;;;;21698:52;21664:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21621:223;21868:25;:31;21894:4;21868:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21904:31;:35;21936:2;21904:35;;;;;;;;;;;;;;;;;;;;;;;;;21903:36;21868:71;21864:1013;;;22008:20;;21998:6;:30;;21964:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22216:9;;22199:13;22209:2;22199:9;:13::i;:::-;22190:6;:22;;;;:::i;:::-;:35;;22156:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21864:1013;;;22343:25;:29;22369:2;22343:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22377:31;:37;22409:4;22377:37;;;;;;;;;;;;;;;;;;;;;;;;;22376:38;22343:71;22339:538;;;22483:20;;22473:6;:30;;22439:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22339:538;;;22657:31;:35;22689:2;22657:35;;;;;;;;;;;;;;;;;;;;;;;;;22652:225;;22777:9;;22760:13;22770:2;22760:9;:13::i;:::-;22751:6;:22;;;;:::i;:::-;:35;;22717:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22652:225;22339:538;21864:1013;21406:1486;21371:1532;22915:28;22946:24;22964:4;22946:9;:24::i;:::-;22915:55;;22983:12;23022:18;;22998:20;:42;;22983:57;;23071:7;:35;;;;;23095:11;;;;;;;;;;;23071:35;:61;;;;;23124:8;;;;;;;;;;;23123:9;23071:61;:110;;;;;23150:25;:31;23176:4;23150:31;;;;;;;;;;;;;;;;;;;;;;;;;23149:32;23071:110;:153;;;;;23199:19;:25;23219:4;23199:25;;;;;;;;;;;;;;;;;;;;;;;;;23198:26;23071:153;:194;;;;;23242:19;:23;23262:2;23242:23;;;;;;;;;;;;;;;;;;;;;;;;;23241:24;23071:194;23053:326;;;23303:4;23292:8;;:15;;;;;;;;;;;;;;;;;;23324:10;:8;:10::i;:::-;23362:5;23351:8;;:16;;;;;;;;;;;;;;;;;;23053:326;23391:12;23407:8;;;;;;;;;;;23406:9;23391:24;;23432:19;:25;23452:4;23432:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23461:19;:23;23481:2;23461:23;;;;;;;;;;;;;;;;;;;;;;;;;23432:52;23428:100;;;23511:5;23501:15;;23428:100;23540:12;23573:7;23569:784;;;23601:25;:29;23627:2;23601:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23650:1;23634:13;;:17;23601:50;23597:607;;;23679:34;23709:3;23679:25;23690:13;;23679:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23672:41;;23782:13;;23762:16;;23755:4;:23;;;;:::i;:::-;23754:41;;;;:::i;:::-;23732:18;;:63;;;;;;;:::i;:::-;;;;;;;;23864:13;;23844:16;;23837:4;:23;;;;:::i;:::-;23836:41;;;;:::i;:::-;23814:18;;:63;;;;;;;:::i;:::-;;;;;;;;23597:607;;;23916:25;:31;23942:4;23916:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23966:1;23951:12;;:16;23916:51;23912:292;;;23995:33;24024:3;23995:24;24006:12;;23995:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;23988:40;;24096:12;;24077:15;;24070:4;:22;;;;:::i;:::-;24069:39;;;;:::i;:::-;24047:18;;:61;;;;;;;:::i;:::-;;;;;;;;24176:12;;24157:15;;24150:4;:22;;;;:::i;:::-;24149:39;;;;:::i;:::-;24127:18;;:61;;;;;;;:::i;:::-;;;;;;;;23912:292;23597:607;24231:1;24224:4;:8;24220:91;;;24253:42;24269:4;24283;24290;24253:15;:42::i;:::-;24220:91;24337:4;24327:14;;;;;:::i;:::-;;;23569:784;24365:33;24381:4;24387:2;24391:6;24365:15;:33::i;:::-;24425:11;;24409:13;:27;;;;21099:3345;;;;20986:3458;;;;:::o;1381:191::-;1455:16;1474:6;;;;;;;;;;;1455:25;;1500:8;1491:6;;:17;;;;;;;;;;;;;;;;;;1555:8;1524:40;;1545:8;1524:40;;;;;;;;;;;;1444:128;1381:191;:::o;5242:733::-;5400:1;5382:20;;:6;:20;;;5374:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5484:1;5463:23;;:9;:23;;;5455:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5539:47;5560:6;5568:9;5579:6;5539:20;:47::i;:::-;5599:21;5623:9;:17;5633:6;5623:17;;;;;;;;;;;;;;;;5599:41;;5676:6;5659:13;:23;;5651:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5797:6;5781:13;:22;5761:9;:17;5771:6;5761:17;;;;;;;;;;;;;;;:42;;;;5849:6;5825:9;:20;5835:9;5825:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5890:9;5873:35;;5882:6;5873:35;;;5901:6;5873:35;;;;;;:::i;:::-;;;;;;;;5921:46;5941:6;5949:9;5960:6;5921:19;:46::i;:::-;5363:612;5242:733;;;:::o;25339:1452::-;25378:23;25404:24;25422:4;25404:9;:24::i;:::-;25378:50;;25439:25;25497:18;;25467;;:48;;;;:::i;:::-;25439:76;;25526:12;25574:1;25555:15;:20;:46;;;;25600:1;25579:17;:22;25555:46;25551:85;;;25618:7;;;;;25551:85;25691:2;25670:18;;:23;;;;:::i;:::-;25652:15;:41;25648:115;;;25749:2;25728:18;;:23;;;;:::i;:::-;25710:41;;25648:115;25775:23;25880:1;25851:17;25820:18;;25802:15;:36;;;;:::i;:::-;25801:67;;;;:::i;:::-;:80;;;;:::i;:::-;25775:106;;25892:26;25921:36;25941:15;25921;:19;;:36;;;;:::i;:::-;25892:65;;25970:25;25998:21;25970:49;;26032:36;26049:18;26032:16;:36::i;:::-;26081:18;26102:44;26128:17;26102:21;:25;;:44;;;;:::i;:::-;26081:65;;26159:23;26185:81;26238:17;26185:34;26200:18;;26185:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;26159:107;;26279:23;26318:15;26305:10;:28;;;;:::i;:::-;26279:54;;26367:1;26346:18;:22;;;;26400:1;26379:18;:22;;;;26436:1;26418:15;:19;:42;;;;;26459:1;26441:15;:19;26418:42;26414:280;;;26477:46;26490:15;26507;26477:12;:46::i;:::-;26543:139;26578:18;26615:15;26649:18;;26543:139;;;;;;;;:::i;:::-;;;;;;;;26414:280;26728:15;;;;;;;;;;;26720:29;;26757:21;26720:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26706:77;;;;;25367:1424;;;;;;;;;25339:1452;:::o;8304:98::-;8362:7;8393:1;8389;:5;;;;:::i;:::-;8382:12;;8304:98;;;;:::o;8410:::-;8468:7;8499:1;8495;:5;;;;:::i;:::-;8488:12;;8410:98;;;;:::o;6778:125::-;;;;:::o;6911:124::-;;;;:::o;8198:98::-;8256:7;8287:1;8283;:5;;;;:::i;:::-;8276:12;;8198:98;;;;:::o;24452:503::-;24520:21;24558:1;24544:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24520:40;;24589:4;24571;24576:1;24571:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24615:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24605:4;24610:1;24605:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24650:62;24667:4;24682:15;24700:11;24650:8;:62::i;:::-;24751:15;:66;;;24832:11;24858:1;24874:4;24901;24921:15;24751:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24507:448;24452:503;:::o;24963:368::-;25046:62;25063:4;25078:15;25096:11;25046:8;:62::i;:::-;25121:15;:31;;;25160:9;25193:4;25213:11;25239:1;25255;14449:6;25297:15;25121:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24963:368;;:::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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:329::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7938:117;7733:329;;;;:::o;8068:765::-;8154:6;8162;8170;8178;8227:3;8215:9;8206:7;8202:23;8198:33;8195:120;;;8234:79;;:::i;:::-;8195:120;8354:1;8379:53;8424:7;8415:6;8404:9;8400:22;8379:53;:::i;:::-;8369:63;;8325:117;8481:2;8507:53;8552:7;8543:6;8532:9;8528:22;8507:53;:::i;:::-;8497:63;;8452:118;8609:2;8635:53;8680:7;8671:6;8660:9;8656:22;8635:53;:::i;:::-;8625:63;;8580:118;8737:2;8763:53;8808:7;8799:6;8788:9;8784:22;8763:53;:::i;:::-;8753:63;;8708:118;8068:765;;;;;;;:::o;8839:474::-;8907:6;8915;8964:2;8952:9;8943:7;8939:23;8935:32;8932:119;;;8970:79;;:::i;:::-;8932:119;9090:1;9115:53;9160:7;9151:6;9140:9;9136:22;9115:53;:::i;:::-;9105:63;;9061:117;9217:2;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9188:118;8839:474;;;;;:::o;9319:180::-;9367:77;9364:1;9357:88;9464:4;9461:1;9454:15;9488:4;9485:1;9478:15;9505:320;9549:6;9586:1;9580:4;9576:12;9566:22;;9633:1;9627:4;9623:12;9654:18;9644:81;;9710:4;9702:6;9698:17;9688:27;;9644:81;9772:2;9764:6;9761:14;9741:18;9738:38;9735:84;;9791:18;;:::i;:::-;9735:84;9556:269;9505:320;;;:::o;9831:227::-;9971:34;9967:1;9959:6;9955:14;9948:58;10040:10;10035:2;10027:6;10023:15;10016:35;9831:227;:::o;10064:366::-;10206:3;10227:67;10291:2;10286:3;10227:67;:::i;:::-;10220:74;;10303:93;10392:3;10303:93;:::i;:::-;10421:2;10416:3;10412:12;10405:19;;10064:366;;;:::o;10436:419::-;10602:4;10640:2;10629:9;10625:18;10617:26;;10689:9;10683:4;10679:20;10675:1;10664:9;10660:17;10653:47;10717:131;10843:4;10717:131;:::i;:::-;10709:139;;10436:419;;;:::o;10861:180::-;10909:77;10906:1;10899:88;11006:4;11003:1;10996:15;11030:4;11027:1;11020:15;11047:191;11087:3;11106:20;11124:1;11106:20;:::i;:::-;11101:25;;11140:20;11158:1;11140:20;:::i;:::-;11135:25;;11183:1;11180;11176:9;11169:16;;11204:3;11201:1;11198:10;11195:36;;;11211:18;;:::i;:::-;11195:36;11047:191;;;;:::o;11244:182::-;11384:34;11380:1;11372:6;11368:14;11361:58;11244:182;:::o;11432:366::-;11574:3;11595:67;11659:2;11654:3;11595:67;:::i;:::-;11588:74;;11671:93;11760:3;11671:93;:::i;:::-;11789:2;11784:3;11780:12;11773:19;;11432:366;;;:::o;11804:419::-;11970:4;12008:2;11997:9;11993:18;11985:26;;12057:9;12051:4;12047:20;12043:1;12032:9;12028:17;12021:47;12085:131;12211:4;12085:131;:::i;:::-;12077:139;;11804:419;;;:::o;12229:102::-;12271:8;12318:5;12315:1;12311:13;12290:34;;12229:102;;;:::o;12337:848::-;12398:5;12405:4;12429:6;12420:15;;12453:5;12444:14;;12467:712;12488:1;12478:8;12475:15;12467:712;;;12583:4;12578:3;12574:14;12568:4;12565:24;12562:50;;;12592:18;;:::i;:::-;12562:50;12642:1;12632:8;12628:16;12625:451;;;13057:4;13050:5;13046:16;13037:25;;12625:451;13107:4;13101;13097:15;13089:23;;13137:32;13160:8;13137:32;:::i;:::-;13125:44;;12467:712;;;12337:848;;;;;;;:::o;13191:1073::-;13245:5;13436:8;13426:40;;13457:1;13448:10;;13459:5;;13426:40;13485:4;13475:36;;13502:1;13493:10;;13504:5;;13475:36;13571:4;13619:1;13614:27;;;;13655:1;13650:191;;;;13564:277;;13614:27;13632:1;13623:10;;13634:5;;;13650:191;13695:3;13685:8;13682:17;13679:43;;;13702:18;;:::i;:::-;13679:43;13751:8;13748:1;13744:16;13735:25;;13786:3;13779:5;13776:14;13773:40;;;13793:18;;:::i;:::-;13773:40;13826:5;;;13564:277;;13950:2;13940:8;13937:16;13931:3;13925:4;13922:13;13918:36;13900:2;13890:8;13887:16;13882:2;13876:4;13873:12;13869:35;13853:111;13850:246;;;14006:8;14000:4;13996:19;13987:28;;14041:3;14034:5;14031:14;14028:40;;;14048:18;;:::i;:::-;14028:40;14081:5;;13850:246;14121:42;14159:3;14149:8;14143:4;14140:1;14121:42;:::i;:::-;14106:57;;;;14195:4;14190:3;14186:14;14179:5;14176:25;14173:51;;;14204:18;;:::i;:::-;14173:51;14253:4;14246:5;14242:16;14233:25;;13191:1073;;;;;;:::o;14270:281::-;14328:5;14352:23;14370:4;14352:23;:::i;:::-;14344:31;;14396:25;14412:8;14396:25;:::i;:::-;14384:37;;14440:104;14477:66;14467:8;14461:4;14440:104;:::i;:::-;14431:113;;14270:281;;;;:::o;14557:410::-;14597:7;14620:20;14638:1;14620:20;:::i;:::-;14615:25;;14654:20;14672:1;14654:20;:::i;:::-;14649:25;;14709:1;14706;14702:9;14731:30;14749:11;14731:30;:::i;:::-;14720:41;;14910:1;14901:7;14897:15;14894:1;14891:22;14871:1;14864:9;14844:83;14821:139;;14940:18;;:::i;:::-;14821:139;14605:362;14557:410;;;;:::o;14973:180::-;15021:77;15018:1;15011:88;15118:4;15115:1;15108:15;15142:4;15139:1;15132:15;15159:185;15199:1;15216:20;15234:1;15216:20;:::i;:::-;15211:25;;15250:20;15268:1;15250:20;:::i;:::-;15245:25;;15289:1;15279:35;;15294:18;;:::i;:::-;15279:35;15336:1;15333;15329:9;15324:14;;15159:185;;;;:::o;15350:220::-;15490:34;15486:1;15478:6;15474:14;15467:58;15559:3;15554:2;15546:6;15542:15;15535:28;15350:220;:::o;15576:366::-;15718:3;15739:67;15803:2;15798:3;15739:67;:::i;:::-;15732:74;;15815:93;15904:3;15815:93;:::i;:::-;15933:2;15928:3;15924:12;15917:19;;15576:366;;;:::o;15948:419::-;16114:4;16152:2;16141:9;16137:18;16129:26;;16201:9;16195:4;16191:20;16187:1;16176:9;16172:17;16165:47;16229:131;16355:4;16229:131;:::i;:::-;16221:139;;15948:419;;;:::o;16373:223::-;16513:34;16509:1;16501:6;16497:14;16490:58;16582:6;16577:2;16569:6;16565:15;16558:31;16373:223;:::o;16602:366::-;16744:3;16765:67;16829:2;16824:3;16765:67;:::i;:::-;16758:74;;16841:93;16930:3;16841:93;:::i;:::-;16959:2;16954:3;16950:12;16943:19;;16602:366;;;:::o;16974:419::-;17140:4;17178:2;17167:9;17163:18;17155:26;;17227:9;17221:4;17217:20;17213:1;17202:9;17198:17;17191:47;17255:131;17381:4;17255:131;:::i;:::-;17247:139;;16974:419;;;:::o;17399:170::-;17539:22;17535:1;17527:6;17523:14;17516:46;17399:170;:::o;17575:366::-;17717:3;17738:67;17802:2;17797:3;17738:67;:::i;:::-;17731:74;;17814:93;17903:3;17814:93;:::i;:::-;17932:2;17927:3;17923:12;17916:19;;17575:366;;;:::o;17947:419::-;18113:4;18151:2;18140:9;18136:18;18128:26;;18200:9;18194:4;18190:20;18186:1;18175:9;18171:17;18164:47;18228:131;18354:4;18228:131;:::i;:::-;18220:139;;17947:419;;;:::o;18372:224::-;18512:34;18508:1;18500:6;18496:14;18489:58;18581:7;18576:2;18568:6;18564:15;18557:32;18372:224;:::o;18602:366::-;18744:3;18765:67;18829:2;18824:3;18765:67;:::i;:::-;18758:74;;18841:93;18930:3;18841:93;:::i;:::-;18959:2;18954:3;18950:12;18943:19;;18602:366;;;:::o;18974:419::-;19140:4;19178:2;19167:9;19163:18;19155:26;;19227:9;19221:4;19217:20;19213:1;19202:9;19198:17;19191:47;19255:131;19381:4;19255:131;:::i;:::-;19247:139;;18974:419;;;:::o;19399:221::-;19539:34;19535:1;19527:6;19523:14;19516:58;19608:4;19603:2;19595:6;19591:15;19584:29;19399:221;:::o;19626:366::-;19768:3;19789:67;19853:2;19848:3;19789:67;:::i;:::-;19782:74;;19865:93;19954:3;19865:93;:::i;:::-;19983:2;19978:3;19974:12;19967:19;;19626:366;;;:::o;19998:419::-;20164:4;20202:2;20191:9;20187:18;20179:26;;20251:9;20245:4;20241:20;20237:1;20226:9;20222:17;20215:47;20279:131;20405:4;20279:131;:::i;:::-;20271:139;;19998:419;;;:::o;20423:179::-;20563:31;20559:1;20551:6;20547:14;20540:55;20423:179;:::o;20608:366::-;20750:3;20771:67;20835:2;20830:3;20771:67;:::i;:::-;20764:74;;20847:93;20936:3;20847:93;:::i;:::-;20965:2;20960:3;20956:12;20949:19;;20608:366;;;:::o;20980:419::-;21146:4;21184:2;21173:9;21169:18;21161:26;;21233:9;21227:4;21223:20;21219:1;21208:9;21204:17;21197:47;21261:131;21387:4;21261:131;:::i;:::-;21253:139;;20980:419;;;:::o;21405:240::-;21545:34;21541:1;21533:6;21529:14;21522:58;21614:23;21609:2;21601:6;21597:15;21590:48;21405:240;:::o;21651:366::-;21793:3;21814:67;21878:2;21873:3;21814:67;:::i;:::-;21807:74;;21890:93;21979:3;21890:93;:::i;:::-;22008:2;22003:3;21999:12;21992:19;;21651:366;;;:::o;22023:419::-;22189:4;22227:2;22216:9;22212:18;22204:26;;22276:9;22270:4;22266:20;22262:1;22251:9;22247:17;22240:47;22304:131;22430:4;22304:131;:::i;:::-;22296:139;;22023:419;;;:::o;22448:239::-;22588:34;22584:1;22576:6;22572:14;22565:58;22657:22;22652:2;22644:6;22640:15;22633:47;22448:239;:::o;22693:366::-;22835:3;22856:67;22920:2;22915:3;22856:67;:::i;:::-;22849:74;;22932:93;23021:3;22932:93;:::i;:::-;23050:2;23045:3;23041:12;23034:19;;22693:366;;;:::o;23065:419::-;23231:4;23269:2;23258:9;23254:18;23246:26;;23318:9;23312:4;23308:20;23304:1;23293:9;23289:17;23282:47;23346:131;23472:4;23346:131;:::i;:::-;23338:139;;23065:419;;;:::o;23490:241::-;23630:34;23626:1;23618:6;23614:14;23607:58;23699:24;23694:2;23686:6;23682:15;23675:49;23490:241;:::o;23737:366::-;23879:3;23900:67;23964:2;23959:3;23900:67;:::i;:::-;23893:74;;23976:93;24065:3;23976:93;:::i;:::-;24094:2;24089:3;24085:12;24078:19;;23737:366;;;:::o;24109:419::-;24275:4;24313:2;24302:9;24298:18;24290:26;;24362:9;24356:4;24352:20;24348:1;24337:9;24333:17;24326:47;24390:131;24516:4;24390:131;:::i;:::-;24382:139;;24109:419;;;:::o;24534:332::-;24655:4;24693:2;24682:9;24678:18;24670:26;;24706:71;24774:1;24763:9;24759:17;24750:6;24706:71;:::i;:::-;24787:72;24855:2;24844:9;24840:18;24831:6;24787:72;:::i;:::-;24534:332;;;;;:::o;24872:137::-;24926:5;24957:6;24951:13;24942:22;;24973:30;24997:5;24973:30;:::i;:::-;24872:137;;;;:::o;25015:345::-;25082:6;25131:2;25119:9;25110:7;25106:23;25102:32;25099:119;;;25137:79;;:::i;:::-;25099:119;25257:1;25282:61;25335:7;25326:6;25315:9;25311:22;25282:61;:::i;:::-;25272:71;;25228:125;25015:345;;;;:::o;25366:225::-;25506:34;25502:1;25494:6;25490:14;25483:58;25575:8;25570:2;25562:6;25558:15;25551:33;25366:225;:::o;25597:366::-;25739:3;25760:67;25824:2;25819:3;25760:67;:::i;:::-;25753:74;;25836:93;25925:3;25836:93;:::i;:::-;25954:2;25949:3;25945:12;25938:19;;25597:366;;;:::o;25969:419::-;26135:4;26173:2;26162:9;26158:18;26150:26;;26222:9;26216:4;26212:20;26208:1;26197:9;26193:17;26186:47;26250:131;26376:4;26250:131;:::i;:::-;26242:139;;25969:419;;;:::o;26394:223::-;26534:34;26530:1;26522:6;26518:14;26511:58;26603:6;26598:2;26590:6;26586:15;26579:31;26394:223;:::o;26623:366::-;26765:3;26786:67;26850:2;26845:3;26786:67;:::i;:::-;26779:74;;26862:93;26951:3;26862:93;:::i;:::-;26980:2;26975:3;26971:12;26964:19;;26623:366;;;:::o;26995:419::-;27161:4;27199:2;27188:9;27184:18;27176:26;;27248:9;27242:4;27238:20;27234:1;27223:9;27219:17;27212:47;27276:131;27402:4;27276:131;:::i;:::-;27268:139;;26995:419;;;:::o;27420:221::-;27560:34;27556:1;27548:6;27544:14;27537:58;27629:4;27624:2;27616:6;27612:15;27605:29;27420:221;:::o;27647:366::-;27789:3;27810:67;27874:2;27869:3;27810:67;:::i;:::-;27803:74;;27886:93;27975:3;27886:93;:::i;:::-;28004:2;27999:3;27995:12;27988:19;;27647:366;;;:::o;28019:419::-;28185:4;28223:2;28212:9;28208:18;28200:26;;28272:9;28266:4;28262:20;28258:1;28247:9;28243:17;28236:47;28300:131;28426:4;28300:131;:::i;:::-;28292:139;;28019:419;;;:::o;28444:224::-;28584:34;28580:1;28572:6;28568:14;28561:58;28653:7;28648:2;28640:6;28636:15;28629:32;28444:224;:::o;28674:366::-;28816:3;28837:67;28901:2;28896:3;28837:67;:::i;:::-;28830:74;;28913:93;29002:3;28913:93;:::i;:::-;29031:2;29026:3;29022:12;29015:19;;28674:366;;;:::o;29046:419::-;29212:4;29250:2;29239:9;29235:18;29227:26;;29299:9;29293:4;29289:20;29285:1;29274:9;29270:17;29263:47;29327:131;29453:4;29327:131;:::i;:::-;29319:139;;29046:419;;;:::o;29471:222::-;29611:34;29607:1;29599:6;29595:14;29588:58;29680:5;29675:2;29667:6;29663:15;29656:30;29471:222;:::o;29699:366::-;29841:3;29862:67;29926:2;29921:3;29862:67;:::i;:::-;29855:74;;29938:93;30027:3;29938:93;:::i;:::-;30056:2;30051:3;30047:12;30040:19;;29699:366;;;:::o;30071:419::-;30237:4;30275:2;30264:9;30260:18;30252:26;;30324:9;30318:4;30314:20;30310:1;30299:9;30295:17;30288:47;30352:131;30478:4;30352:131;:::i;:::-;30344:139;;30071:419;;;:::o;30496:172::-;30636:24;30632:1;30624:6;30620:14;30613:48;30496:172;:::o;30674:366::-;30816:3;30837:67;30901:2;30896:3;30837:67;:::i;:::-;30830:74;;30913:93;31002:3;30913:93;:::i;:::-;31031:2;31026:3;31022:12;31015:19;;30674:366;;;:::o;31046:419::-;31212:4;31250:2;31239:9;31235:18;31227:26;;31299:9;31293:4;31289:20;31285:1;31274:9;31270:17;31263:47;31327:131;31453:4;31327:131;:::i;:::-;31319:139;;31046:419;;;:::o;31471:240::-;31611:34;31607:1;31599:6;31595:14;31588:58;31680:23;31675:2;31667:6;31663:15;31656:48;31471:240;:::o;31717:366::-;31859:3;31880:67;31944:2;31939:3;31880:67;:::i;:::-;31873:74;;31956:93;32045:3;31956:93;:::i;:::-;32074:2;32069:3;32065:12;32058:19;;31717:366;;;:::o;32089:419::-;32255:4;32293:2;32282:9;32278:18;32270:26;;32342:9;32336:4;32332:20;32328:1;32317:9;32313:17;32306:47;32370:131;32496:4;32370:131;:::i;:::-;32362:139;;32089:419;;;:::o;32514:169::-;32654:21;32650:1;32642:6;32638:14;32631:45;32514:169;:::o;32689:366::-;32831:3;32852:67;32916:2;32911:3;32852:67;:::i;:::-;32845:74;;32928:93;33017:3;32928:93;:::i;:::-;33046:2;33041:3;33037:12;33030:19;;32689:366;;;:::o;33061:419::-;33227:4;33265:2;33254:9;33250:18;33242:26;;33314:9;33308:4;33304:20;33300:1;33289:9;33285:17;33278:47;33342:131;33468:4;33342:131;:::i;:::-;33334:139;;33061:419;;;:::o;33486:241::-;33626:34;33622:1;33614:6;33610:14;33603:58;33695:24;33690:2;33682:6;33678:15;33671:49;33486:241;:::o;33733:366::-;33875:3;33896:67;33960:2;33955:3;33896:67;:::i;:::-;33889:74;;33972:93;34061:3;33972:93;:::i;:::-;34090:2;34085:3;34081:12;34074:19;;33733:366;;;:::o;34105:419::-;34271:4;34309:2;34298:9;34294:18;34286:26;;34358:9;34352:4;34348:20;34344:1;34333:9;34329:17;34322:47;34386:131;34512:4;34386:131;:::i;:::-;34378:139;;34105:419;;;:::o;34530:194::-;34570:4;34590:20;34608:1;34590:20;:::i;:::-;34585:25;;34624:20;34642:1;34624:20;:::i;:::-;34619:25;;34668:1;34665;34661:9;34653:17;;34692:1;34686:4;34683:11;34680:37;;;34697:18;;:::i;:::-;34680:37;34530:194;;;;:::o;34730:225::-;34870:34;34866:1;34858:6;34854:14;34847:58;34939:8;34934:2;34926:6;34922:15;34915:33;34730:225;:::o;34961:366::-;35103:3;35124:67;35188:2;35183:3;35124:67;:::i;:::-;35117:74;;35200:93;35289:3;35200:93;:::i;:::-;35318:2;35313:3;35309:12;35302:19;;34961:366;;;:::o;35333:419::-;35499:4;35537:2;35526:9;35522:18;35514:26;;35586:9;35580:4;35576:20;35572:1;35561:9;35557:17;35550:47;35614:131;35740:4;35614:131;:::i;:::-;35606:139;;35333:419;;;:::o;35758:442::-;35907:4;35945:2;35934:9;35930:18;35922:26;;35958:71;36026:1;36015:9;36011:17;36002:6;35958:71;:::i;:::-;36039:72;36107:2;36096:9;36092:18;36083:6;36039:72;:::i;:::-;36121;36189:2;36178:9;36174:18;36165:6;36121:72;:::i;:::-;35758:442;;;;;;:::o;36206:147::-;36307:11;36344:3;36329:18;;36206:147;;;;:::o;36359:114::-;;:::o;36479:398::-;36638:3;36659:83;36740:1;36735:3;36659:83;:::i;:::-;36652:90;;36751:93;36840:3;36751:93;:::i;:::-;36869:1;36864:3;36860:11;36853:18;;36479:398;;;:::o;36883:379::-;37067:3;37089:147;37232:3;37089:147;:::i;:::-;37082:154;;37253:3;37246:10;;36883:379;;;:::o;37268:180::-;37316:77;37313:1;37306:88;37413:4;37410:1;37403:15;37437:4;37434:1;37427:15;37454:180;37502:77;37499:1;37492:88;37599:4;37596:1;37589:15;37623:4;37620:1;37613:15;37640:143;37697:5;37728:6;37722:13;37713:22;;37744:33;37771:5;37744:33;:::i;:::-;37640:143;;;;:::o;37789:351::-;37859:6;37908:2;37896:9;37887:7;37883:23;37879:32;37876:119;;;37914:79;;:::i;:::-;37876:119;38034:1;38059:64;38115:7;38106:6;38095:9;38091:22;38059:64;:::i;:::-;38049:74;;38005:128;37789:351;;;;:::o;38146:85::-;38191:7;38220:5;38209:16;;38146:85;;;:::o;38237:158::-;38295:9;38328:61;38346:42;38355:32;38381:5;38355:32;:::i;:::-;38346:42;:::i;:::-;38328:61;:::i;:::-;38315:74;;38237:158;;;:::o;38401:147::-;38496:45;38535:5;38496:45;:::i;:::-;38491:3;38484:58;38401:147;;:::o;38554:114::-;38621:6;38655:5;38649:12;38639:22;;38554:114;;;:::o;38674:184::-;38773:11;38807:6;38802:3;38795:19;38847:4;38842:3;38838:14;38823:29;;38674:184;;;;:::o;38864:132::-;38931:4;38954:3;38946:11;;38984:4;38979:3;38975:14;38967:22;;38864:132;;;:::o;39002:108::-;39079:24;39097:5;39079:24;:::i;:::-;39074:3;39067:37;39002:108;;:::o;39116:179::-;39185:10;39206:46;39248:3;39240:6;39206:46;:::i;:::-;39284:4;39279:3;39275:14;39261:28;;39116:179;;;;:::o;39301:113::-;39371:4;39403;39398:3;39394:14;39386:22;;39301:113;;;:::o;39450:732::-;39569:3;39598:54;39646:5;39598:54;:::i;:::-;39668:86;39747:6;39742:3;39668:86;:::i;:::-;39661:93;;39778:56;39828:5;39778:56;:::i;:::-;39857:7;39888:1;39873:284;39898:6;39895:1;39892:13;39873:284;;;39974:6;39968:13;40001:63;40060:3;40045:13;40001:63;:::i;:::-;39994:70;;40087:60;40140:6;40087:60;:::i;:::-;40077:70;;39933:224;39920:1;39917;39913:9;39908:14;;39873:284;;;39877:14;40173:3;40166:10;;39574:608;;;39450:732;;;;:::o;40188:831::-;40451:4;40489:3;40478:9;40474:19;40466:27;;40503:71;40571:1;40560:9;40556:17;40547:6;40503:71;:::i;:::-;40584:80;40660:2;40649:9;40645:18;40636:6;40584:80;:::i;:::-;40711:9;40705:4;40701:20;40696:2;40685:9;40681:18;40674:48;40739:108;40842:4;40833:6;40739:108;:::i;:::-;40731:116;;40857:72;40925:2;40914:9;40910:18;40901:6;40857:72;:::i;:::-;40939:73;41007:3;40996:9;40992:19;40983:6;40939:73;:::i;:::-;40188:831;;;;;;;;:::o;41025:807::-;41274:4;41312:3;41301:9;41297:19;41289:27;;41326:71;41394:1;41383:9;41379:17;41370:6;41326:71;:::i;:::-;41407:72;41475:2;41464:9;41460:18;41451:6;41407:72;:::i;:::-;41489:80;41565:2;41554:9;41550:18;41541:6;41489:80;:::i;:::-;41579;41655:2;41644:9;41640:18;41631:6;41579:80;:::i;:::-;41669:73;41737:3;41726:9;41722:19;41713:6;41669:73;:::i;:::-;41752;41820:3;41809:9;41805:19;41796:6;41752:73;:::i;:::-;41025:807;;;;;;;;;:::o;41838:143::-;41895:5;41926:6;41920:13;41911:22;;41942:33;41969:5;41942:33;:::i;:::-;41838:143;;;;:::o;41987:663::-;42075:6;42083;42091;42140:2;42128:9;42119:7;42115:23;42111:32;42108:119;;;42146:79;;:::i;:::-;42108:119;42266:1;42291:64;42347:7;42338:6;42327:9;42323:22;42291:64;:::i;:::-;42281:74;;42237:128;42404:2;42430:64;42486:7;42477:6;42466:9;42462:22;42430:64;:::i;:::-;42420:74;;42375:129;42543:2;42569:64;42625:7;42616:6;42605:9;42601:22;42569:64;:::i;:::-;42559:74;;42514:129;41987:663;;;;;:::o

Swarm Source

ipfs://e139189bab92187903369c6be41f7fc6d86138dabf54d9c6592a889d689c022a

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.