ETH Price: $2,640.83 (+1.37%)
Gas: 8.97 Gwei

Token

MemeMagic (MAGIC)
 

Overview

Max Total Supply

1,704,202,369,420 MAGIC

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 MAGIC

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-21
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

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


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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Token is ERC20, Ownable {
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address payable public MAGICWallet = payable(0xaF4728f8671b06af7ac6838598e1078672472280);
    address payable public MarketingWallet = payable(0x30BF2D8A85E42A3E0E4dB6eC3E17482DA143df8F);
    address payable public BurnAdress = payable (0x000000000000000000000000000000000000dEaD); //input 0x00000000dead
    address public contractAddress = address(this);

    uint256 public maxTransactionAmount =  1704202369420e18; 
    uint256 public swapTokensAtAmount = 100000;
    uint256 public maxWallet;
    

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


    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping (address => uint256) private _holderFirstBuyTimestamp;
    mapping (address => bool) public _blacklist;
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyMAGICFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellMAGICFee;
    uint256 public sellBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForMAGIC;

    uint256 launchedAt;

    mapping (address => bool) public _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxWalletAmount;
    mapping (address => bool) public automatedMarketMakerPairs;
    

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event MarketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event MAGICWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event BurnAdressUpdated(address indexed newWallet, address indexed oldWallet);

    constructor() ERC20("MemeMagic", "MAGIC") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        maxWallet = 34_084_047_388  * 1e18;

        uint256 _buyMarketingFee = 0;
        uint256 _buyMAGICFee = 0;
        uint256 _buyBurnfee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellMAGICFee = 0;
        uint256 _sellBurnfee = 0;

        uint256 totalSupply = 1704202369420e18;

        buyMarketingFee = _buyMarketingFee;
        buyMAGICFee = _buyMAGICFee;
        buyBurnFee = _buyBurnfee;
        buyTotalFees = buyMarketingFee + buyMAGICFee + buyBurnFee;

        sellMarketingFee = _sellMarketingFee;
        sellMAGICFee = _sellMAGICFee;
        sellBurnFee = _sellBurnfee;
        sellTotalFees = sellMarketingFee + sellMAGICFee + sellBurnFee;

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

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

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(MarketingWallet, true);
        excludeFromMaxWallet(MAGICWallet, true);

        _mint(owner(), totalSupply*100/100);
    }

    receive() external payable {

    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        launchedAt = block.number;
    }

    function areLimitsInEffect(bool limits) external onlyOwner returns (bool){
        limitsInEffect = limits;
        return limits;
    }

    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function updateMaxTxnAmount(uint256 newNumofTokens) external onlyOwner {
        maxTransactionAmount = newNumofTokens;
    }


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

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

    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _MarketingFee, uint256 _MAGICFee, uint256 _BurnFee) external onlyOwner {
        buyMarketingFee = _MarketingFee;
        buyMAGICFee = _MAGICFee;
        buyBurnFee = _BurnFee;
        buyTotalFees = buyMarketingFee + buyMAGICFee + buyBurnFee;
        require(buyTotalFees <= 50, "Must keep fees at 6% or less");
    }

    function updateSellFees(uint256 _MarketingFee, uint256 _MAGICFee, uint256 _BurnFee) external onlyOwner {
        sellMarketingFee = _MarketingFee;
        sellMAGICFee = _MAGICFee;
        sellBurnFee = _BurnFee;
        sellTotalFees = sellMarketingFee + sellMAGICFee + sellBurnFee;
        require(sellTotalFees <= 50, "Must keep fees at 6% or less");
    }

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

    function antiBotIsEnabled(bool enabled) public onlyOwner{
        antiBotEnabled = enabled;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        MarketingWallet = payable(newMarketingWallet);
    }

    function updateMAGICWallet(address newWallet) external onlyOwner {
        MAGICWallet = payable(newWallet);
    } 

    function updateBurnAddress(address newWallet) external onlyOwner {
        BurnAdress = payable(newWallet);
    } 

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         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 (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                
                }
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");

                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        if (
            antiBotEnabled && 
            to != uniswapV2Pair && 
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) { 
            _blacklist[to] = true;
        }
        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*sellTotalFees/100;
                tokensForMAGIC += fees * sellMAGICFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount*buyTotalFees/100;
                tokensForMAGIC += fees * buyMAGICFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            if(fees > 10){
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    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);
        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, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }



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

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

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH); 

        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketing = ethBalance*tokensForMarketing/totalTokensToSwap;
        uint256 ethForMAGIC = ethBalance*tokensForMAGIC/totalTokensToSwap;

        payable(MarketingWallet).transfer(ethForMarketing);
        payable(MAGICWallet).transfer(ethForMAGIC);

        tokensForMarketing = 0;
        tokensForMAGIC = 0;
    }

    function recoverAllTokens() external onlyOwner { 
        super._transfer(address(this), owner(), balanceOf(contractAddress));
    }

    function recoverAllETH() external onlyOwner {
       payable(owner()).transfer(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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"BurnAdressUpdated","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":"MAGICWalletUpdated","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":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":[],"name":"BurnAdress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAGICWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"antiBotIsEnabled","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"limits","type":"bool"}],"name":"areLimitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMAGICFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractAddress","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"recoverAllETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMAGICFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMAGIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_MAGICFee","type":"uint256"},{"internalType":"uint256","name":"_BurnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMAGICWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumofTokens","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_MAGICFee","type":"uint256"},{"internalType":"uint256","name":"_BurnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273af4728f8671b06af7ac6838598e107867247228060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507330bf2d8a85e42a3e0e4db6ec3e17482da143df8f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506c15829328ec016281ddceb00000600a55620186a0600b556001600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff0219169083151502179055505f600d60026101000a81548160ff0219169083151502179055505f600d60036101000a81548160ff0219169083151502179055505f60115f6101000a81548160ff021916908315150217905550348015620001d3575f80fd5b506040518060400160405280600981526020017f4d656d654d6167696300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4147494300000000000000000000000000000000000000000000000000000081525081600390816200025191906200107d565b5080600490816200026391906200107d565b5050505f620002776200085860201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200033f8160016200085f60201b60201c565b620003528160016200095860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f69190620011c6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004829190620011c6565b6040518363ffffffff1660e01b8152600401620004a192919062001207565b6020604051808303815f875af1158015620004be573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004e49190620011c6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200052c60a05160016200085f60201b60201c565b6200054160a05160016200095860201b60201c565b6200055660a051600162000a5160201b60201c565b6b6e21a9c7422815ad36f00000600c819055505f805f805f805f6c15829328ec016281ddceb000009050866013819055508560148190555084601581905550601554601454601354620005aa91906200125f565b620005b691906200125f565b601281905550836017819055508260188190555081601981905550601954601854601754620005e691906200125f565b620005f291906200125f565b6016819055506200061a6200060c62000aef60201b60201c565b600162000b1760201b60201c565b6200062d30600162000b1760201b60201c565b6200064261dead600162000b1760201b60201c565b6200067660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b1760201b60201c565b620006aa60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b1760201b60201c565b620006cc620006be62000aef60201b60201c565b60016200085f60201b60201c565b620006df3060016200085f60201b60201c565b620006f461dead60016200085f60201b60201c565b6200072860075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200085f60201b60201c565b6200075c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200085f60201b60201c565b6200077e6200077062000aef60201b60201c565b60016200095860201b60201c565b620007913060016200095860201b60201c565b620007a661dead60016200095860201b60201c565b620007da60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200095860201b60201c565b6200080e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200095860201b60201c565b6200084a6200082262000aef60201b60201c565b6064808462000832919062001299565b6200083e919062001310565b62000c6060201b60201c565b505050505050505062001496565b5f33905090565b6200086f6200085860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000900576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f790620013a5565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b620009686200085860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f090620013a5565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000b276200085860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000bb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000baf90620013a5565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000c549190620013e1565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cc8906200144a565b60405180910390fd5b62000ce45f838362000dfd60201b60201c565b62000cfb8160025462000e0260201b90919060201c565b60028190555062000d52815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000e0260201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000df191906200147b565b60405180910390a35050565b505050565b5f818362000e1191906200125f565b905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e9557607f821691505b60208210810362000eab5762000eaa62000e50565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000f0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ed2565b62000f1b868362000ed2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000f6562000f5f62000f598462000f33565b62000f3c565b62000f33565b9050919050565b5f819050919050565b62000f808362000f45565b62000f9862000f8f8262000f6c565b84845462000ede565b825550505050565b5f90565b62000fae62000fa0565b62000fbb81848462000f75565b505050565b5b8181101562000fe25762000fd65f8262000fa4565b60018101905062000fc1565b5050565b601f821115620010315762000ffb8162000eb1565b620010068462000ec3565b8101602085101562001016578190505b6200102e620010258562000ec3565b83018262000fc0565b50505b505050565b5f82821c905092915050565b5f620010535f198460080262001036565b1980831691505092915050565b5f6200106d838362001042565b9150826002028217905092915050565b620010888262000e19565b67ffffffffffffffff811115620010a457620010a362000e23565b5b620010b0825462000e7d565b620010bd82828562000fe6565b5f60209050601f831160018114620010f3575f8415620010de578287015190505b620010ea858262001060565b86555062001159565b601f198416620011038662000eb1565b5f5b828110156200112c5784890151825560018201915060208501945060208101905062001105565b868310156200114c578489015162001148601f89168262001042565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620011908262001165565b9050919050565b620011a28162001184565b8114620011ad575f80fd5b50565b5f81519050620011c08162001197565b92915050565b5f60208284031215620011de57620011dd62001161565b5b5f620011ed84828501620011b0565b91505092915050565b620012018162001184565b82525050565b5f6040820190506200121c5f830185620011f6565b6200122b6020830184620011f6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200126b8262000f33565b9150620012788362000f33565b925082820190508082111562001293576200129262001232565b5b92915050565b5f620012a58262000f33565b9150620012b28362000f33565b9250828202620012c28162000f33565b91508282048414831517620012dc57620012db62001232565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200131c8262000f33565b9150620013298362000f33565b9250826200133c576200133b620012e3565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200138d60208362001347565b91506200139a8262001357565b602082019050919050565b5f6020820190508181035f830152620013be816200137f565b9050919050565b5f8115159050919050565b620013db81620013c5565b82525050565b5f602082019050620013f65f830184620013d0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001432601f8362001347565b91506200143f82620013fc565b602082019050919050565b5f6020820190508181035f830152620014638162001424565b9050919050565b620014758162000f33565b82525050565b5f602082019050620014905f8301846200146a565b92915050565b60805160a05161518f620014e95f395f81816112ee01528181611c9701528181612fea015261349801525f818161106c01528181612f9201528181613f5d0152818161403c0152614063015261518f5ff3fe6080604052600436106103ba575f3560e01c806395d89b41116101f1578063c8c8ebe41161010c578063e0bf7fd11161009f578063f2fde38b1161006e578063f2fde38b14610e17578063f6b4dfb414610e3f578063f8b45b0514610e69578063f9a342c914610e93576103c1565b8063e0bf7fd114610d5d578063e2f4560514610d99578063e71dc3f514610dc3578063e884f26014610ded576103c1565b8063d8148eb5116100db578063d8148eb514610ca3578063d85ba06314610ccd578063d8c6404b14610cf7578063dd62ed3e14610d21576103c1565b8063c8c8ebe414610bed578063d10268ad14610c17578063d257b34f14610c3f578063d2fcc00114610c7b576103c1565b8063b31efe4a11610184578063c024666811610153578063c024666814610b4b578063c17b5b8c14610b73578063c18bc19514610b9b578063c876d0b914610bc3576103c1565b8063b31efe4a14610aa5578063b62496f514610abb578063bbc0c74214610af7578063bc15c5f614610b21576103c1565b8063a457c2d7116101c0578063a457c2d7146109db578063a9059cbb14610a17578063aacebbe314610a53578063adb873bd14610a7b576103c1565b806395d89b411461091157806396880b171461093b5780639a7a23d614610977578063a20623ce1461099f576103c1565b80634a62bb65116102e1578063715018a6116102745780638a8c523c116102435780638a8c523c1461087f5780638da5cb5b1461089557806392136913146108bf578063924de9b7146108e9576103c1565b8063715018a6146107ef5780637571336a146108055780637bce5a041461082d5780638095d56414610857576103c1565b80636a486a8e116102b05780636a486a8e146107375780636bd89cdd146107615780636ddd17131461078957806370a08231146107b3576103c1565b80634a62bb65146106935780634fbee193146106bd5780635945267a146106f95780635d8ce6561461070f576103c1565b806318160ddd116103595780632598cdb2116103285780632598cdb2146105d9578063313ce56714610603578063395093511461062d57806349bd5a5e14610669576103c1565b806318160ddd146105215780631f3fed8f1461054b578063203e727e1461057557806323b872dd1461059d576103c1565b8063095ea7b311610395578063095ea7b31461045557806310d5de531461049157806314f324d3146104cd5780631694505e146104f7576103c1565b8062a7b6c1146103c557806301b70dab146103ef57806306fdde031461042b576103c1565b366103c157005b5f80fd5b3480156103d0575f80fd5b506103d9610ebd565b6040516103e6919061410b565b60405180910390f35b3480156103fa575f80fd5b506104156004803603810190610410919061415d565b610ec3565b6040516104229190614197565b60405180910390f35b348015610436575f80fd5b5061043f610f7b565b60405161044c919061423a565b60405180910390f35b348015610460575f80fd5b5061047b600480360381019061047691906142de565b61100b565b6040516104889190614197565b60405180910390f35b34801561049c575f80fd5b506104b760048036038101906104b2919061431c565b611028565b6040516104c49190614197565b60405180910390f35b3480156104d8575f80fd5b506104e1611045565b6040516104ee9190614367565b60405180910390f35b348015610502575f80fd5b5061050b61106a565b60405161051891906143db565b60405180910390f35b34801561052c575f80fd5b5061053561108e565b604051610542919061410b565b60405180910390f35b348015610556575f80fd5b5061055f611097565b60405161056c919061410b565b60405180910390f35b348015610580575f80fd5b5061059b600480360381019061059691906143f4565b61109d565b005b3480156105a8575f80fd5b506105c360048036038101906105be919061441f565b61113d565b6040516105d09190614197565b60405180910390f35b3480156105e4575f80fd5b506105ed611211565b6040516105fa9190614367565b60405180910390f35b34801561060e575f80fd5b50610617611236565b604051610624919061448a565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906142de565b61123e565b6040516106609190614197565b60405180910390f35b348015610674575f80fd5b5061067d6112ec565b60405161068a91906144b2565b60405180910390f35b34801561069e575f80fd5b506106a7611310565b6040516106b49190614197565b60405180910390f35b3480156106c8575f80fd5b506106e360048036038101906106de919061431c565b611322565b6040516106f09190614197565b60405180910390f35b348015610704575f80fd5b5061070d611374565b005b34801561071a575f80fd5b506107356004803603810190610730919061431c565b611447565b005b348015610742575f80fd5b5061074b611520565b604051610758919061410b565b60405180910390f35b34801561076c575f80fd5b506107876004803603810190610782919061431c565b611526565b005b348015610794575f80fd5b5061079d6115ff565b6040516107aa9190614197565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d4919061431c565b611612565b6040516107e6919061410b565b60405180910390f35b3480156107fa575f80fd5b50610803611657565b005b348015610810575f80fd5b5061082b600480360381019061082691906144cb565b6117aa565b005b348015610838575f80fd5b50610841611898565b60405161084e919061410b565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190614509565b61189e565b005b34801561088a575f80fd5b506108936119b7565b005b3480156108a0575f80fd5b506108a9611a71565b6040516108b691906144b2565b60405180910390f35b3480156108ca575f80fd5b506108d3611a99565b6040516108e0919061410b565b60405180910390f35b3480156108f4575f80fd5b5061090f600480360381019061090a919061415d565b611a9f565b005b34801561091c575f80fd5b50610925611b52565b604051610932919061423a565b60405180910390f35b348015610946575f80fd5b50610961600480360381019061095c919061431c565b611be2565b60405161096e9190614197565b60405180910390f35b348015610982575f80fd5b5061099d600480360381019061099891906144cb565b611bff565b005b3480156109aa575f80fd5b506109c560048036038101906109c0919061431c565b611d31565b6040516109d29190614197565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc91906142de565b611d4e565b604051610a0e9190614197565b60405180910390f35b348015610a22575f80fd5b50610a3d6004803603810190610a3891906142de565b611e16565b604051610a4a9190614197565b60405180910390f35b348015610a5e575f80fd5b50610a796004803603810190610a74919061431c565b611e33565b005b348015610a86575f80fd5b50610a8f611f0c565b604051610a9c919061410b565b60405180910390f35b348015610ab0575f80fd5b50610ab9611f12565b005b348015610ac6575f80fd5b50610ae16004803603810190610adc919061431c565b611ff5565b604051610aee9190614197565b60405180910390f35b348015610b02575f80fd5b50610b0b612011565b604051610b189190614197565b60405180910390f35b348015610b2c575f80fd5b50610b35612024565b604051610b42919061410b565b60405180910390f35b348015610b56575f80fd5b50610b716004803603810190610b6c91906144cb565b61202a565b005b348015610b7e575f80fd5b50610b996004803603810190610b949190614509565b612166565b005b348015610ba6575f80fd5b50610bc16004803603810190610bbc91906143f4565b61227f565b005b348015610bce575f80fd5b50610bd76123a8565b604051610be49190614197565b60405180910390f35b348015610bf8575f80fd5b50610c016123ba565b604051610c0e919061410b565b60405180910390f35b348015610c22575f80fd5b50610c3d6004803603810190610c38919061415d565b6123c0565b005b348015610c4a575f80fd5b50610c656004803603810190610c6091906143f4565b612473565b604051610c729190614197565b60405180910390f35b348015610c86575f80fd5b50610ca16004803603810190610c9c91906144cb565b61251a565b005b348015610cae575f80fd5b50610cb7612608565b604051610cc49190614367565b60405180910390f35b348015610cd8575f80fd5b50610ce161262d565b604051610cee919061410b565b60405180910390f35b348015610d02575f80fd5b50610d0b612633565b604051610d189190614197565b60405180910390f35b348015610d2c575f80fd5b50610d476004803603810190610d429190614559565b612646565b604051610d54919061410b565b60405180910390f35b348015610d68575f80fd5b50610d836004803603810190610d7e919061431c565b6126c8565b604051610d909190614197565b60405180910390f35b348015610da4575f80fd5b50610dad6126e5565b604051610dba919061410b565b60405180910390f35b348015610dce575f80fd5b50610dd76126eb565b604051610de4919061410b565b60405180910390f35b348015610df8575f80fd5b50610e016126f1565b604051610e0e9190614197565b60405180910390f35b348015610e22575f80fd5b50610e3d6004803603810190610e38919061431c565b6127a8565b005b348015610e4a575f80fd5b50610e5361296a565b604051610e6091906144b2565b60405180910390f35b348015610e74575f80fd5b50610e7d61298f565b604051610e8a919061410b565b60405180910390f35b348015610e9e575f80fd5b50610ea7612995565b604051610eb4919061410b565b60405180910390f35b60145481565b5f610ecc61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906145e1565b60405180910390fd5b81600d5f6101000a81548160ff021916908315150217905550819050919050565b606060038054610f8a9061462c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb69061462c565b80156110015780601f10610fd857610100808354040283529160200191611001565b820191905f5260205f20905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b5f61101e61101761299b565b84846129a2565b6001905092915050565b601e602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b601a5481565b6110a561299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a906145e1565b60405180910390fd5b80600a8190555050565b5f611149848484612b65565b6112068461115561299b565b6112018560405180606001604052806028815260200161510d6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111b861299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b6129a2565b600190509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112e261124a61299b565b846112dd8560015f61125a61299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613a1c90919063ffffffff16565b6129a2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d5f9054906101000a900460ff1681565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61137c61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906145e1565b60405180910390fd5b61144530611416611a71565b61144060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611612565b613a31565b565b61144f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d4906145e1565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b61152e61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906145e1565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61165f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e4906145e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117b261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611837906145e1565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135481565b6118a661299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b906145e1565b60405180910390fd5b82601381905550816014819055508060158190555060155460145460135461195c9190614689565b6119669190614689565b601281905550603260125411156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614706565b60405180910390fd5b505050565b6119bf61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906145e1565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555043601c81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b611aa761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c906145e1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611b619061462c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8d9061462c565b8015611bd85780601f10611baf57610100808354040283529160200191611bd8565b820191905f5260205f20905b815481529060010190602001808311611bbb57829003601f168201915b5050505050905090565b601f602052805f5260405f205f915054906101000a900460ff1681565b611c0761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906145e1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90614794565b60405180910390fd5b611d2d8282613cba565b5050565b6010602052805f5260405f205f915054906101000a900460ff1681565b5f611e0c611d5a61299b565b84611e07856040518060600160405280602581526020016151356025913960015f611d8361299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b6129a2565b6001905092915050565b5f611e29611e2261299b565b8484612b65565b6001905092915050565b611e3b61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906145e1565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b611f1a61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f906145e1565b60405180910390fd5b611fb0611a71565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611ff2573d5f803e3d5ffd5b50565b60208052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b60185481565b61203261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906145e1565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161215a9190614197565b60405180910390a25050565b61216e61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f3906145e1565b60405180910390fd5b8260178190555081601881905550806019819055506019546018546017546122249190614689565b61222e9190614689565b6016819055506032601654111561227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614706565b60405180910390fd5b505050565b61228761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c906145e1565b60405180910390fd5b670de0b6b3a76400006103e8600561232b61108e565b61233591906147b2565b61233f9190614820565b6123499190614820565b81101561238b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612382906148c0565b60405180910390fd5b670de0b6b3a76400008161239f91906147b2565b600c8190555050565b60115f9054906101000a900460ff1681565b600a5481565b6123c861299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906145e1565b60405180910390fd5b80600d60036101000a81548160ff02191690831515021790555050565b5f61247c61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612501906145e1565b60405180910390fd5b81600b8190555060019050919050565b61252261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a7906145e1565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d60039054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b60155481565b5f6126fa61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f906145e1565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6127b061299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906145e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a39061494e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a07906149dc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614a6a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b58919061410b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90614af8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3890614b86565b60405180910390fd5b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612cdf575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1590614c14565b60405180910390fd5b5f8103612d3557612d3083835f613a31565b6139c3565b600d5f9054906101000a900460ff161561347f57612d51611a71565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dbf5750612d8f611a71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612df757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e31575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e4a5750600560149054906101000a900460ff16155b1561347e57600d60019054906101000a900460ff16612f3e57601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612efe5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3490614c7c565b60405180910390fd5b5b60115f9054906101000a900460ff161561310157612f5a611a71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fe157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131005743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b490614d30565b60405180910390fd5b43600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561319e5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131ed57600a548111156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614dbe565b60405180910390fd5b6132d6565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561328a5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132d557600a548111156132d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cb90614e4c565b60405180910390fd5b5b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133735750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133d557600c5461338483611612565b8261338f9190614689565b11156133d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c790614eb4565b60405180910390fd5b61347d565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661347c57600c5461342f83611612565b8261343a9190614689565b111561347b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347290614eb4565b60405180910390fd5b5b5b5b5b600d60039054906101000a900460ff1680156134e757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135335750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561358e57600160105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f61359830611612565b90505f600b5482101590508080156135bc5750600d60029054906101000a900460ff165b80156135d55750600560149054906101000a900460ff16155b8015613628575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561367b5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136ce5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613711576001600560146101000a81548160ff0219169083151502179055506136f6613d58565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806137c05750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156137c9575f90505b5f81156139b35760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561382757505f601654115b156138b15760646016548661383c91906147b2565b6138469190614820565b90506016546018548261385991906147b2565b6138639190614820565b601b5f8282546138739190614689565b925050819055506016546017548261388b91906147b2565b6138959190614820565b601a5f8282546138a59190614689565b9250508190555061398f565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561390857505f601254115b1561398e5760646012548661391d91906147b2565b6139279190614820565b90506012546014548261393a91906147b2565b6139449190614820565b601b5f8282546139549190614689565b925050819055506012546013548261396c91906147b2565b6139769190614820565b601a5f8282546139869190614689565b925050819055505b5b600a8111156139a4576139a3873083613a31565b5b80856139b09190614ed2565b94505b6139be878787613a31565b505050505b505050565b5f838311158290613a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a06919061423a565b60405180910390fd5b5082840390509392505050565b5f8183613a299190614689565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9690614af8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0490614b86565b60405180910390fd5b613b18838383613ebb565b613b81816040518060600160405280602681526020016150e7602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613c10815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613a1c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cad919061410b565b60405180910390a3505050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613d6230611612565b90505f601b54601a54613d759190614689565b90505f821480613d855750606481145b15613d91575050613eb9565b5f829050613d9e81613ec0565b5f4790505f83601a5483613db291906147b2565b613dbc9190614820565b90505f84601b5484613dce91906147b2565b613dd89190614820565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613e3e573d5f803e3d5ffd5b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613ea3573d5f803e3d5ffd5b505f601a819055505f601b819055505050505050505b565b505050565b5f600267ffffffffffffffff811115613edc57613edb614f05565b5b604051908082528060200260200182016040528015613f0a5781602001602082028036833780820191505090505b50905030815f81518110613f2157613f20614f32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fe89190614f73565b81600181518110613ffc57613ffb614f32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614061307f0000000000000000000000000000000000000000000000000000000000000000846129a2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016140c295949392919061508e565b5f604051808303815f87803b1580156140d9575f80fd5b505af11580156140eb573d5f803e3d5ffd5b505050505050565b5f819050919050565b614105816140f3565b82525050565b5f60208201905061411e5f8301846140fc565b92915050565b5f80fd5b5f8115159050919050565b61413c81614128565b8114614146575f80fd5b50565b5f8135905061415781614133565b92915050565b5f6020828403121561417257614171614124565b5b5f61417f84828501614149565b91505092915050565b61419181614128565b82525050565b5f6020820190506141aa5f830184614188565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156141e75780820151818401526020810190506141cc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61420c826141b0565b61421681856141ba565b93506142268185602086016141ca565b61422f816141f2565b840191505092915050565b5f6020820190508181035f8301526142528184614202565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6142838261425a565b9050919050565b61429381614279565b811461429d575f80fd5b50565b5f813590506142ae8161428a565b92915050565b6142bd816140f3565b81146142c7575f80fd5b50565b5f813590506142d8816142b4565b92915050565b5f80604083850312156142f4576142f3614124565b5b5f614301858286016142a0565b9250506020614312858286016142ca565b9150509250929050565b5f6020828403121561433157614330614124565b5b5f61433e848285016142a0565b91505092915050565b5f6143518261425a565b9050919050565b61436181614347565b82525050565b5f60208201905061437a5f830184614358565b92915050565b5f819050919050565b5f6143a361439e6143998461425a565b614380565b61425a565b9050919050565b5f6143b482614389565b9050919050565b5f6143c5826143aa565b9050919050565b6143d5816143bb565b82525050565b5f6020820190506143ee5f8301846143cc565b92915050565b5f6020828403121561440957614408614124565b5b5f614416848285016142ca565b91505092915050565b5f805f6060848603121561443657614435614124565b5b5f614443868287016142a0565b9350506020614454868287016142a0565b9250506040614465868287016142ca565b9150509250925092565b5f60ff82169050919050565b6144848161446f565b82525050565b5f60208201905061449d5f83018461447b565b92915050565b6144ac81614279565b82525050565b5f6020820190506144c55f8301846144a3565b92915050565b5f80604083850312156144e1576144e0614124565b5b5f6144ee858286016142a0565b92505060206144ff85828601614149565b9150509250929050565b5f805f606084860312156145205761451f614124565b5b5f61452d868287016142ca565b935050602061453e868287016142ca565b925050604061454f868287016142ca565b9150509250925092565b5f806040838503121561456f5761456e614124565b5b5f61457c858286016142a0565b925050602061458d858286016142a0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6145cb6020836141ba565b91506145d682614597565b602082019050919050565b5f6020820190508181035f8301526145f8816145bf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061464357607f821691505b602082108103614656576146556145ff565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614693826140f3565b915061469e836140f3565b92508282019050808211156146b6576146b561465c565b5b92915050565b7f4d757374206b6565702066656573206174203625206f72206c657373000000005f82015250565b5f6146f0601c836141ba565b91506146fb826146bc565b602082019050919050565b5f6020820190508181035f83015261471d816146e4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61477e6039836141ba565b915061478982614724565b604082019050919050565b5f6020820190508181035f8301526147ab81614772565b9050919050565b5f6147bc826140f3565b91506147c7836140f3565b92508282026147d5816140f3565b915082820484148315176147ec576147eb61465c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61482a826140f3565b9150614835836140f3565b925082614845576148446147f3565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6148aa6024836141ba565b91506148b582614850565b604082019050919050565b5f6020820190508181035f8301526148d78161489e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6149386026836141ba565b9150614943826148de565b604082019050919050565b5f6020820190508181035f8301526149658161492c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149c66024836141ba565b91506149d18261496c565b604082019050919050565b5f6020820190508181035f8301526149f3816149ba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a546022836141ba565b9150614a5f826149fa565b604082019050919050565b5f6020820190508181035f830152614a8181614a48565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ae26025836141ba565b9150614aed82614a88565b604082019050919050565b5f6020820190508181035f830152614b0f81614ad6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b706023836141ba565b9150614b7b82614b16565b604082019050919050565b5f6020820190508181035f830152614b9d81614b64565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614bfe6031836141ba565b9150614c0982614ba4565b604082019050919050565b5f6020820190508181035f830152614c2b81614bf2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c666016836141ba565b9150614c7182614c32565b602082019050919050565b5f6020820190508181035f830152614c9381614c5a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614d1a6049836141ba565b9150614d2582614c9a565b606082019050919050565b5f6020820190508181035f830152614d4781614d0e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614da86035836141ba565b9150614db382614d4e565b604082019050919050565b5f6020820190508181035f830152614dd581614d9c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e366036836141ba565b9150614e4182614ddc565b604082019050919050565b5f6020820190508181035f830152614e6381614e2a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e9e6013836141ba565b9150614ea982614e6a565b602082019050919050565b5f6020820190508181035f830152614ecb81614e92565b9050919050565b5f614edc826140f3565b9150614ee7836140f3565b9250828203905081811115614eff57614efe61465c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614f6d8161428a565b92915050565b5f60208284031215614f8857614f87614124565b5b5f614f9584828501614f5f565b91505092915050565b5f819050919050565b5f614fc1614fbc614fb784614f9e565b614380565b6140f3565b9050919050565b614fd181614fa7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61500981614279565b82525050565b5f61501a8383615000565b60208301905092915050565b5f602082019050919050565b5f61503c82614fd7565b6150468185614fe1565b935061505183614ff1565b805f5b83811015615081578151615068888261500f565b975061507383615026565b925050600181019050615054565b5085935050505092915050565b5f60a0820190506150a15f8301886140fc565b6150ae6020830187614fc8565b81810360408301526150c08186615032565b90506150cf60608301856144a3565b6150dc60808301846140fc565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122073cffa0f140acebea4f439831dd47daccee7e3319a4b118b4c23895526a9e5a164736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103ba575f3560e01c806395d89b41116101f1578063c8c8ebe41161010c578063e0bf7fd11161009f578063f2fde38b1161006e578063f2fde38b14610e17578063f6b4dfb414610e3f578063f8b45b0514610e69578063f9a342c914610e93576103c1565b8063e0bf7fd114610d5d578063e2f4560514610d99578063e71dc3f514610dc3578063e884f26014610ded576103c1565b8063d8148eb5116100db578063d8148eb514610ca3578063d85ba06314610ccd578063d8c6404b14610cf7578063dd62ed3e14610d21576103c1565b8063c8c8ebe414610bed578063d10268ad14610c17578063d257b34f14610c3f578063d2fcc00114610c7b576103c1565b8063b31efe4a11610184578063c024666811610153578063c024666814610b4b578063c17b5b8c14610b73578063c18bc19514610b9b578063c876d0b914610bc3576103c1565b8063b31efe4a14610aa5578063b62496f514610abb578063bbc0c74214610af7578063bc15c5f614610b21576103c1565b8063a457c2d7116101c0578063a457c2d7146109db578063a9059cbb14610a17578063aacebbe314610a53578063adb873bd14610a7b576103c1565b806395d89b411461091157806396880b171461093b5780639a7a23d614610977578063a20623ce1461099f576103c1565b80634a62bb65116102e1578063715018a6116102745780638a8c523c116102435780638a8c523c1461087f5780638da5cb5b1461089557806392136913146108bf578063924de9b7146108e9576103c1565b8063715018a6146107ef5780637571336a146108055780637bce5a041461082d5780638095d56414610857576103c1565b80636a486a8e116102b05780636a486a8e146107375780636bd89cdd146107615780636ddd17131461078957806370a08231146107b3576103c1565b80634a62bb65146106935780634fbee193146106bd5780635945267a146106f95780635d8ce6561461070f576103c1565b806318160ddd116103595780632598cdb2116103285780632598cdb2146105d9578063313ce56714610603578063395093511461062d57806349bd5a5e14610669576103c1565b806318160ddd146105215780631f3fed8f1461054b578063203e727e1461057557806323b872dd1461059d576103c1565b8063095ea7b311610395578063095ea7b31461045557806310d5de531461049157806314f324d3146104cd5780631694505e146104f7576103c1565b8062a7b6c1146103c557806301b70dab146103ef57806306fdde031461042b576103c1565b366103c157005b5f80fd5b3480156103d0575f80fd5b506103d9610ebd565b6040516103e6919061410b565b60405180910390f35b3480156103fa575f80fd5b506104156004803603810190610410919061415d565b610ec3565b6040516104229190614197565b60405180910390f35b348015610436575f80fd5b5061043f610f7b565b60405161044c919061423a565b60405180910390f35b348015610460575f80fd5b5061047b600480360381019061047691906142de565b61100b565b6040516104889190614197565b60405180910390f35b34801561049c575f80fd5b506104b760048036038101906104b2919061431c565b611028565b6040516104c49190614197565b60405180910390f35b3480156104d8575f80fd5b506104e1611045565b6040516104ee9190614367565b60405180910390f35b348015610502575f80fd5b5061050b61106a565b60405161051891906143db565b60405180910390f35b34801561052c575f80fd5b5061053561108e565b604051610542919061410b565b60405180910390f35b348015610556575f80fd5b5061055f611097565b60405161056c919061410b565b60405180910390f35b348015610580575f80fd5b5061059b600480360381019061059691906143f4565b61109d565b005b3480156105a8575f80fd5b506105c360048036038101906105be919061441f565b61113d565b6040516105d09190614197565b60405180910390f35b3480156105e4575f80fd5b506105ed611211565b6040516105fa9190614367565b60405180910390f35b34801561060e575f80fd5b50610617611236565b604051610624919061448a565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906142de565b61123e565b6040516106609190614197565b60405180910390f35b348015610674575f80fd5b5061067d6112ec565b60405161068a91906144b2565b60405180910390f35b34801561069e575f80fd5b506106a7611310565b6040516106b49190614197565b60405180910390f35b3480156106c8575f80fd5b506106e360048036038101906106de919061431c565b611322565b6040516106f09190614197565b60405180910390f35b348015610704575f80fd5b5061070d611374565b005b34801561071a575f80fd5b506107356004803603810190610730919061431c565b611447565b005b348015610742575f80fd5b5061074b611520565b604051610758919061410b565b60405180910390f35b34801561076c575f80fd5b506107876004803603810190610782919061431c565b611526565b005b348015610794575f80fd5b5061079d6115ff565b6040516107aa9190614197565b60405180910390f35b3480156107be575f80fd5b506107d960048036038101906107d4919061431c565b611612565b6040516107e6919061410b565b60405180910390f35b3480156107fa575f80fd5b50610803611657565b005b348015610810575f80fd5b5061082b600480360381019061082691906144cb565b6117aa565b005b348015610838575f80fd5b50610841611898565b60405161084e919061410b565b60405180910390f35b348015610862575f80fd5b5061087d60048036038101906108789190614509565b61189e565b005b34801561088a575f80fd5b506108936119b7565b005b3480156108a0575f80fd5b506108a9611a71565b6040516108b691906144b2565b60405180910390f35b3480156108ca575f80fd5b506108d3611a99565b6040516108e0919061410b565b60405180910390f35b3480156108f4575f80fd5b5061090f600480360381019061090a919061415d565b611a9f565b005b34801561091c575f80fd5b50610925611b52565b604051610932919061423a565b60405180910390f35b348015610946575f80fd5b50610961600480360381019061095c919061431c565b611be2565b60405161096e9190614197565b60405180910390f35b348015610982575f80fd5b5061099d600480360381019061099891906144cb565b611bff565b005b3480156109aa575f80fd5b506109c560048036038101906109c0919061431c565b611d31565b6040516109d29190614197565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc91906142de565b611d4e565b604051610a0e9190614197565b60405180910390f35b348015610a22575f80fd5b50610a3d6004803603810190610a3891906142de565b611e16565b604051610a4a9190614197565b60405180910390f35b348015610a5e575f80fd5b50610a796004803603810190610a74919061431c565b611e33565b005b348015610a86575f80fd5b50610a8f611f0c565b604051610a9c919061410b565b60405180910390f35b348015610ab0575f80fd5b50610ab9611f12565b005b348015610ac6575f80fd5b50610ae16004803603810190610adc919061431c565b611ff5565b604051610aee9190614197565b60405180910390f35b348015610b02575f80fd5b50610b0b612011565b604051610b189190614197565b60405180910390f35b348015610b2c575f80fd5b50610b35612024565b604051610b42919061410b565b60405180910390f35b348015610b56575f80fd5b50610b716004803603810190610b6c91906144cb565b61202a565b005b348015610b7e575f80fd5b50610b996004803603810190610b949190614509565b612166565b005b348015610ba6575f80fd5b50610bc16004803603810190610bbc91906143f4565b61227f565b005b348015610bce575f80fd5b50610bd76123a8565b604051610be49190614197565b60405180910390f35b348015610bf8575f80fd5b50610c016123ba565b604051610c0e919061410b565b60405180910390f35b348015610c22575f80fd5b50610c3d6004803603810190610c38919061415d565b6123c0565b005b348015610c4a575f80fd5b50610c656004803603810190610c6091906143f4565b612473565b604051610c729190614197565b60405180910390f35b348015610c86575f80fd5b50610ca16004803603810190610c9c91906144cb565b61251a565b005b348015610cae575f80fd5b50610cb7612608565b604051610cc49190614367565b60405180910390f35b348015610cd8575f80fd5b50610ce161262d565b604051610cee919061410b565b60405180910390f35b348015610d02575f80fd5b50610d0b612633565b604051610d189190614197565b60405180910390f35b348015610d2c575f80fd5b50610d476004803603810190610d429190614559565b612646565b604051610d54919061410b565b60405180910390f35b348015610d68575f80fd5b50610d836004803603810190610d7e919061431c565b6126c8565b604051610d909190614197565b60405180910390f35b348015610da4575f80fd5b50610dad6126e5565b604051610dba919061410b565b60405180910390f35b348015610dce575f80fd5b50610dd76126eb565b604051610de4919061410b565b60405180910390f35b348015610df8575f80fd5b50610e016126f1565b604051610e0e9190614197565b60405180910390f35b348015610e22575f80fd5b50610e3d6004803603810190610e38919061431c565b6127a8565b005b348015610e4a575f80fd5b50610e5361296a565b604051610e6091906144b2565b60405180910390f35b348015610e74575f80fd5b50610e7d61298f565b604051610e8a919061410b565b60405180910390f35b348015610e9e575f80fd5b50610ea7612995565b604051610eb4919061410b565b60405180910390f35b60145481565b5f610ecc61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906145e1565b60405180910390fd5b81600d5f6101000a81548160ff021916908315150217905550819050919050565b606060038054610f8a9061462c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb69061462c565b80156110015780601f10610fd857610100808354040283529160200191611001565b820191905f5260205f20905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b5f61101e61101761299b565b84846129a2565b6001905092915050565b601e602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b601a5481565b6110a561299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a906145e1565b60405180910390fd5b80600a8190555050565b5f611149848484612b65565b6112068461115561299b565b6112018560405180606001604052806028815260200161510d6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111b861299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b6129a2565b600190509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112e261124a61299b565b846112dd8560015f61125a61299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613a1c90919063ffffffff16565b6129a2565b6001905092915050565b7f0000000000000000000000007bb201b71e46d21c4bcf1aa0f693f7c15bf6030481565b600d5f9054906101000a900460ff1681565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61137c61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906145e1565b60405180910390fd5b61144530611416611a71565b61144060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611612565b613a31565b565b61144f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d4906145e1565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b61152e61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906145e1565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61165f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e4906145e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117b261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611837906145e1565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135481565b6118a661299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b906145e1565b60405180910390fd5b82601381905550816014819055508060158190555060155460145460135461195c9190614689565b6119669190614689565b601281905550603260125411156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614706565b60405180910390fd5b505050565b6119bf61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906145e1565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555043601c81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b611aa761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c906145e1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611b619061462c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8d9061462c565b8015611bd85780601f10611baf57610100808354040283529160200191611bd8565b820191905f5260205f20905b815481529060010190602001808311611bbb57829003601f168201915b5050505050905090565b601f602052805f5260405f205f915054906101000a900460ff1681565b611c0761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906145e1565b60405180910390fd5b7f0000000000000000000000007bb201b71e46d21c4bcf1aa0f693f7c15bf6030473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90614794565b60405180910390fd5b611d2d8282613cba565b5050565b6010602052805f5260405f205f915054906101000a900460ff1681565b5f611e0c611d5a61299b565b84611e07856040518060600160405280602581526020016151356025913960015f611d8361299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b6129a2565b6001905092915050565b5f611e29611e2261299b565b8484612b65565b6001905092915050565b611e3b61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec0906145e1565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b611f1a61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f906145e1565b60405180910390fd5b611fb0611a71565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611ff2573d5f803e3d5ffd5b50565b60208052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b60185481565b61203261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906145e1565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161215a9190614197565b60405180910390a25050565b61216e61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f3906145e1565b60405180910390fd5b8260178190555081601881905550806019819055506019546018546017546122249190614689565b61222e9190614689565b6016819055506032601654111561227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614706565b60405180910390fd5b505050565b61228761299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c906145e1565b60405180910390fd5b670de0b6b3a76400006103e8600561232b61108e565b61233591906147b2565b61233f9190614820565b6123499190614820565b81101561238b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612382906148c0565b60405180910390fd5b670de0b6b3a76400008161239f91906147b2565b600c8190555050565b60115f9054906101000a900460ff1681565b600a5481565b6123c861299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906145e1565b60405180910390fd5b80600d60036101000a81548160ff02191690831515021790555050565b5f61247c61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612501906145e1565b60405180910390fd5b81600b8190555060019050919050565b61252261299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a7906145e1565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d60039054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b60155481565b5f6126fa61299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f906145e1565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6127b061299b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906145e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a39061494e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a07906149dc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614a6a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b58919061410b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90614af8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3890614b86565b60405180910390fd5b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612cdf575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1590614c14565b60405180910390fd5b5f8103612d3557612d3083835f613a31565b6139c3565b600d5f9054906101000a900460ff161561347f57612d51611a71565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dbf5750612d8f611a71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612df757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e31575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e4a5750600560149054906101000a900460ff16155b1561347e57600d60019054906101000a900460ff16612f3e57601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612efe5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3490614c7c565b60405180910390fd5b5b60115f9054906101000a900460ff161561310157612f5a611a71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fe157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303957507f0000000000000000000000007bb201b71e46d21c4bcf1aa0f693f7c15bf6030473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131005743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b490614d30565b60405180910390fd5b43600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561319e5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131ed57600a548111156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614dbe565b60405180910390fd5b6132d6565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561328a5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132d557600a548111156132d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cb90614e4c565b60405180910390fd5b5b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133735750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133d557600c5461338483611612565b8261338f9190614689565b11156133d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c790614eb4565b60405180910390fd5b61347d565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661347c57600c5461342f83611612565b8261343a9190614689565b111561347b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347290614eb4565b60405180910390fd5b5b5b5b5b600d60039054906101000a900460ff1680156134e757507f0000000000000000000000007bb201b71e46d21c4bcf1aa0f693f7c15bf6030473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135335750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561358e57600160105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f61359830611612565b90505f600b5482101590508080156135bc5750600d60029054906101000a900460ff165b80156135d55750600560149054906101000a900460ff16155b8015613628575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561367b5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136ce5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613711576001600560146101000a81548160ff0219169083151502179055506136f6613d58565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806137c05750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156137c9575f90505b5f81156139b35760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561382757505f601654115b156138b15760646016548661383c91906147b2565b6138469190614820565b90506016546018548261385991906147b2565b6138639190614820565b601b5f8282546138739190614689565b925050819055506016546017548261388b91906147b2565b6138959190614820565b601a5f8282546138a59190614689565b9250508190555061398f565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561390857505f601254115b1561398e5760646012548661391d91906147b2565b6139279190614820565b90506012546014548261393a91906147b2565b6139449190614820565b601b5f8282546139549190614689565b925050819055506012546013548261396c91906147b2565b6139769190614820565b601a5f8282546139869190614689565b925050819055505b5b600a8111156139a4576139a3873083613a31565b5b80856139b09190614ed2565b94505b6139be878787613a31565b505050505b505050565b5f838311158290613a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a06919061423a565b60405180910390fd5b5082840390509392505050565b5f8183613a299190614689565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9690614af8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0490614b86565b60405180910390fd5b613b18838383613ebb565b613b81816040518060600160405280602681526020016150e7602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139c89092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613c10815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613a1c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cad919061410b565b60405180910390a3505050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613d6230611612565b90505f601b54601a54613d759190614689565b90505f821480613d855750606481145b15613d91575050613eb9565b5f829050613d9e81613ec0565b5f4790505f83601a5483613db291906147b2565b613dbc9190614820565b90505f84601b5484613dce91906147b2565b613dd89190614820565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613e3e573d5f803e3d5ffd5b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613ea3573d5f803e3d5ffd5b505f601a819055505f601b819055505050505050505b565b505050565b5f600267ffffffffffffffff811115613edc57613edb614f05565b5b604051908082528060200260200182016040528015613f0a5781602001602082028036833780820191505090505b50905030815f81518110613f2157613f20614f32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fe89190614f73565b81600181518110613ffc57613ffb614f32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614061307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129a2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016140c295949392919061508e565b5f604051808303815f87803b1580156140d9575f80fd5b505af11580156140eb573d5f803e3d5ffd5b505050505050565b5f819050919050565b614105816140f3565b82525050565b5f60208201905061411e5f8301846140fc565b92915050565b5f80fd5b5f8115159050919050565b61413c81614128565b8114614146575f80fd5b50565b5f8135905061415781614133565b92915050565b5f6020828403121561417257614171614124565b5b5f61417f84828501614149565b91505092915050565b61419181614128565b82525050565b5f6020820190506141aa5f830184614188565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156141e75780820151818401526020810190506141cc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61420c826141b0565b61421681856141ba565b93506142268185602086016141ca565b61422f816141f2565b840191505092915050565b5f6020820190508181035f8301526142528184614202565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6142838261425a565b9050919050565b61429381614279565b811461429d575f80fd5b50565b5f813590506142ae8161428a565b92915050565b6142bd816140f3565b81146142c7575f80fd5b50565b5f813590506142d8816142b4565b92915050565b5f80604083850312156142f4576142f3614124565b5b5f614301858286016142a0565b9250506020614312858286016142ca565b9150509250929050565b5f6020828403121561433157614330614124565b5b5f61433e848285016142a0565b91505092915050565b5f6143518261425a565b9050919050565b61436181614347565b82525050565b5f60208201905061437a5f830184614358565b92915050565b5f819050919050565b5f6143a361439e6143998461425a565b614380565b61425a565b9050919050565b5f6143b482614389565b9050919050565b5f6143c5826143aa565b9050919050565b6143d5816143bb565b82525050565b5f6020820190506143ee5f8301846143cc565b92915050565b5f6020828403121561440957614408614124565b5b5f614416848285016142ca565b91505092915050565b5f805f6060848603121561443657614435614124565b5b5f614443868287016142a0565b9350506020614454868287016142a0565b9250506040614465868287016142ca565b9150509250925092565b5f60ff82169050919050565b6144848161446f565b82525050565b5f60208201905061449d5f83018461447b565b92915050565b6144ac81614279565b82525050565b5f6020820190506144c55f8301846144a3565b92915050565b5f80604083850312156144e1576144e0614124565b5b5f6144ee858286016142a0565b92505060206144ff85828601614149565b9150509250929050565b5f805f606084860312156145205761451f614124565b5b5f61452d868287016142ca565b935050602061453e868287016142ca565b925050604061454f868287016142ca565b9150509250925092565b5f806040838503121561456f5761456e614124565b5b5f61457c858286016142a0565b925050602061458d858286016142a0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6145cb6020836141ba565b91506145d682614597565b602082019050919050565b5f6020820190508181035f8301526145f8816145bf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061464357607f821691505b602082108103614656576146556145ff565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614693826140f3565b915061469e836140f3565b92508282019050808211156146b6576146b561465c565b5b92915050565b7f4d757374206b6565702066656573206174203625206f72206c657373000000005f82015250565b5f6146f0601c836141ba565b91506146fb826146bc565b602082019050919050565b5f6020820190508181035f83015261471d816146e4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61477e6039836141ba565b915061478982614724565b604082019050919050565b5f6020820190508181035f8301526147ab81614772565b9050919050565b5f6147bc826140f3565b91506147c7836140f3565b92508282026147d5816140f3565b915082820484148315176147ec576147eb61465c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61482a826140f3565b9150614835836140f3565b925082614845576148446147f3565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6148aa6024836141ba565b91506148b582614850565b604082019050919050565b5f6020820190508181035f8301526148d78161489e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6149386026836141ba565b9150614943826148de565b604082019050919050565b5f6020820190508181035f8301526149658161492c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149c66024836141ba565b91506149d18261496c565b604082019050919050565b5f6020820190508181035f8301526149f3816149ba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a546022836141ba565b9150614a5f826149fa565b604082019050919050565b5f6020820190508181035f830152614a8181614a48565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ae26025836141ba565b9150614aed82614a88565b604082019050919050565b5f6020820190508181035f830152614b0f81614ad6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b706023836141ba565b9150614b7b82614b16565b604082019050919050565b5f6020820190508181035f830152614b9d81614b64565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614bfe6031836141ba565b9150614c0982614ba4565b604082019050919050565b5f6020820190508181035f830152614c2b81614bf2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c666016836141ba565b9150614c7182614c32565b602082019050919050565b5f6020820190508181035f830152614c9381614c5a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614d1a6049836141ba565b9150614d2582614c9a565b606082019050919050565b5f6020820190508181035f830152614d4781614d0e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614da86035836141ba565b9150614db382614d4e565b604082019050919050565b5f6020820190508181035f830152614dd581614d9c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e366036836141ba565b9150614e4182614ddc565b604082019050919050565b5f6020820190508181035f830152614e6381614e2a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e9e6013836141ba565b9150614ea982614e6a565b602082019050919050565b5f6020820190508181035f830152614ecb81614e92565b9050919050565b5f614edc826140f3565b9150614ee7836140f3565b9250828203905081811115614eff57614efe61465c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614f6d8161428a565b92915050565b5f60208284031215614f8857614f87614124565b5b5f614f9584828501614f5f565b91505092915050565b5f819050919050565b5f614fc1614fbc614fb784614f9e565b614380565b6140f3565b9050919050565b614fd181614fa7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61500981614279565b82525050565b5f61501a8383615000565b60208301905092915050565b5f602082019050919050565b5f61503c82614fd7565b6150468185614fe1565b935061505183614ff1565b805f5b83811015615081578151615068888261500f565b975061507383615026565b925050600181019050615054565b5085935050505092915050565b5f60a0820190506150a15f8301886140fc565b6150ae6020830187614fc8565b81810360408301526150c08186615032565b90506150cf60608301856144a3565b6150dc60808301846140fc565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122073cffa0f140acebea4f439831dd47daccee7e3319a4b118b4c23895526a9e5a164736f6c63430008150033

Deployed Bytecode Sourcemap

18330:13724:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19501:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22957:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8658:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9572:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19874:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18705:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18376:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8979:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19710:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23634:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9749:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18606:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8878:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10112:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18434:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19029:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26055:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31799:134;;;;;;;;;;;;;:::i;:::-;;25806:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19568:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25931:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19109:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9095:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13062:148;;;;;;;;;;;;;:::i;:::-;;23771:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19464:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24174:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22830:119;;;;;;;;;;;;;:::i;:::-;;12848:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19603:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24065:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8766:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19945:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25208:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19331:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10338:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9230:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25656:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19675:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31941:110;;;;;;;;;;;;;:::i;:::-;;20011:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19069:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19641:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24911:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24538:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23411:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19381:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18878:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25101:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23246:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23923:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18511:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19430:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19147:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9413:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19815:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18941:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19534:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23104:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13218:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18823:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18990:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19750:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19501:26;;;;:::o;22957:139::-;23025:4;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23058:6:::1;23041:14;;:23;;;;;;;;;;;;;;;;;;23082:6;23075:13;;22957:139:::0;;;:::o;8658:100::-;8712:13;8745:5;8738:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8658:100;:::o;9572:169::-;9655:4;9672:39;9681:12;:10;:12::i;:::-;9695:7;9704:6;9672:8;:39::i;:::-;9729:4;9722:11;;9572:169;;;;:::o;19874:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;18705:88::-;;;;;;;;;;;;;:::o;18376:51::-;;;:::o;8979:108::-;9040:7;9067:12;;9060:19;;8979:108;:::o;19710:33::-;;;;:::o;23634:127::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23739:14:::1;23716:20;:37;;;;23634:127:::0;:::o;9749:355::-;9889:4;9906:36;9916:6;9924:9;9935:6;9906:9;:36::i;:::-;9953:121;9962:6;9970:12;:10;:12::i;:::-;9984:89;10022:6;9984:89;;;;;;;;;;;;;;;;;:11;:19;9996:6;9984:19;;;;;;;;;;;;;;;:33;10004:12;:10;:12::i;:::-;9984:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9953:8;:121::i;:::-;10092:4;10085:11;;9749:355;;;;;:::o;18606:92::-;;;;;;;;;;;;;:::o;8878:93::-;8936:5;8961:2;8954:9;;8878:93;:::o;10112:218::-;10200:4;10217:83;10226:12;:10;:12::i;:::-;10240:7;10249:50;10288:10;10249:11;:25;10261:12;:10;:12::i;:::-;10249:25;;;;;;;;;;;;;;;:34;10275:7;10249:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10217:8;:83::i;:::-;10318:4;10311:11;;10112:218;;;;:::o;18434:38::-;;;:::o;19029:33::-;;;;;;;;;;;;;:::o;26055:125::-;26120:4;26144:19;:28;26164:7;26144:28;;;;;;;;;;;;;;;;;;;;;;;;;26137:35;;26055:125;;;:::o;31799:134::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31858::::1;31882:4;31889:7;:5;:7::i;:::-;31898:26;31908:15;;;;;;;;;;;31898:9;:26::i;:::-;31858:15;:67::i;:::-;31799:134::o:0;25806:116::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25904:9:::1;25882:11;;:32;;;;;;;;;;;;;;;;;;25806:116:::0;:::o;19568:28::-;;;;:::o;25931:115::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26028:9:::1;26007:10;;:31;;;;;;;;;;;;;;;;;;25931:115:::0;:::o;19109:31::-;;;;;;;;;;;;;:::o;9095:127::-;9169:7;9196:9;:18;9206:7;9196:18;;;;;;;;;;;;;;;;9189:25;;9095:127;;;:::o;13062:148::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13169:1:::1;13132:40;;13153:6;;;;;;;;;;;13132:40;;;;;;;;;;;;13200:1;13183:6;;:19;;;;;;;;;;;;;;;;;;13062:148::o:0;23771:144::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23903:4:::1;23861:31;:39;23893:6;23861:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23771:144:::0;;:::o;19464:30::-;;;;:::o;24174:356::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24305:13:::1;24287:15;:31;;;;24343:9;24329:11;:23;;;;24376:8;24363:10;:21;;;;24442:10;;24428:11;;24410:15;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;24395:12;:57;;;;24487:2;24471:12;;:18;;24463:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24174:356:::0;;;:::o;22830:119::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22901:4:::1;22885:13;;:20;;;;;;;;;;;;;;;;;;22929:12;22916:10;:25;;;;22830:119::o:0;12848:79::-;12886:7;12913:6;;;;;;;;;;;12906:13;;12848:79;:::o;19603:31::-;;;;:::o;24065:101::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24151:7:::1;24137:11;;:21;;;;;;;;;;;;;;;;;;24065:101:::0;:::o;8766:104::-;8822:13;8855:7;8848:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8766:104;:::o;19945:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;25208:244::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25315:13:::1;25307:21;;:4;:21;;::::0;25299:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25403:41;25432:4;25438:5;25403:28;:41::i;:::-;25208:244:::0;;:::o;19331:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;10338:269::-;10431:4;10448:129;10457:12;:10;:12::i;:::-;10471:7;10480:96;10519:15;10480:96;;;;;;;;;;;;;;;;;:11;:25;10492:12;:10;:12::i;:::-;10480:25;;;;;;;;;;;;;;;:34;10506:7;10480:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10448:8;:129::i;:::-;10595:4;10588:11;;10338:269;;;;:::o;9230:175::-;9316:4;9333:42;9343:12;:10;:12::i;:::-;9357:9;9368:6;9333:9;:42::i;:::-;9393:4;9386:11;;9230:175;;;;:::o;25656:142::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25771:18:::1;25745:15;;:45;;;;;;;;;;;;;;;;;;25656:142:::0;:::o;19675:26::-;;;;:::o;31941:110::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32003:7:::1;:5;:7::i;:::-;31995:25;;:48;32021:21;31995:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31941:110::o:0;20011:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;19069:33::-;;;;;;;;;;;;;:::o;19641:27::-;;;;:::o;24911:182::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25027:8:::1;24996:19;:28;25016:7;24996:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25067:7;25051:34;;;25076:8;25051:34;;;;;;:::i;:::-;;;;;;;;24911:182:::0;;:::o;24538:365::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24671:13:::1;24652:16;:32;;;;24710:9;24695:12;:24;;;;24744:8;24730:11;:22;;;;24813:11;;24798:12;;24779:16;;:31;;;;:::i;:::-;:45;;;;:::i;:::-;24763:13;:61;;;;24860:2;24843:13;;:19;;24835:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24538:365:::0;;;:::o;23411:215::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23533:4:::1;23527;23523:1;23507:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23506:31;;;;:::i;:::-;23496:6;:41;;23488:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23611:6;23601;:17;;;;:::i;:::-;23589:9;:29;;;;23411:215:::0;:::o;19381:40::-;;;;;;;;;;;;;:::o;18878:55::-;;;;:::o;25101:99::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25185:7:::1;25168:14;;:24;;;;;;;;;;;;;;;;;;25101:99:::0;:::o;23246:157::-;23327:4;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23364:9:::1;23343:18;:30;;;;23391:4;23384:11;;23246:157:::0;;;:::o;23923:134::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24045:4:::1;24008:26;:34;24035:6;24008:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;23923:134:::0;;:::o;18511:88::-;;;;;;;;;;;;;:::o;19430:27::-;;;;:::o;19147:34::-;;;;;;;;;;;;;:::o;9413:151::-;9502:7;9529:11;:18;9541:5;9529:18;;;;;;;;;;;;;;;:27;9548:7;9529:27;;;;;;;;;;;;;;;;9522:34;;9413:151;;;;:::o;19815:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;18941:42::-;;;;:::o;19534:25::-;;;;:::o;23104:134::-;23164:4;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23203:5:::1;23180:20;;:28;;;;;;;;;;;;;;;;;;23226:4;23219:11;;23104:134:::0;:::o;13218:244::-;12985:12;:10;:12::i;:::-;12975:22;;:6;;;;;;;;;;;:22;;;12967:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13327:1:::1;13307:22;;:8;:22;;::::0;13299:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13417:8;13388:38;;13409:6;;;;;;;;;;;13388:38;;;;;;;;;;;;13446:8;13437:6;;:17;;;;;;;;;;;;;;;;;;13218:244:::0;:::o;18823:46::-;;;;;;;;;;;;;:::o;18990:24::-;;;;:::o;19750:29::-;;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;12008:380::-;12161:1;12144:19;;:5;:19;;;12136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12242:1;12223:21;;:7;:21;;;12215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12326:6;12296:11;:18;12308:5;12296:18;;;;;;;;;;;;;;;:27;12315:7;12296:27;;;;;;;;;;;;;;;:36;;;;12364:7;12348:32;;12357:5;12348:32;;;12373:6;12348:32;;;;;;:::i;:::-;;;;;;;;12008:380;;;:::o;26238:3874::-;26386:1;26370:18;;:4;:18;;;26362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26463:1;26449:16;;:2;:16;;;26441:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26525:10;:14;26536:2;26525:14;;;;;;;;;;;;;;;;;;;;;;;;;26524:15;:36;;;;;26544:10;:16;26555:4;26544:16;;;;;;;;;;;;;;;;;;;;;;;;;26543:17;26524:36;26516:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;26639:1;26629:6;:11;26626:92;;26657:28;26673:4;26679:2;26683:1;26657:15;:28::i;:::-;26700:7;;26626:92;26731:14;;;;;;;;;;;26728:1739;;;26791:7;:5;:7::i;:::-;26783:15;;:4;:15;;;;:49;;;;;26825:7;:5;:7::i;:::-;26819:13;;:2;:13;;;;26783:49;:86;;;;;26867:1;26853:16;;:2;:16;;;;26783:86;:128;;;;;26904:6;26890:21;;:2;:21;;;;26783:128;:158;;;;;26933:8;;;;;;;;;;;26932:9;26783:158;26761:1695;;;26980:13;;;;;;;;;;;26976:148;;27025:19;:25;27045:4;27025:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27054:19;:23;27074:2;27054:23;;;;;;;;;;;;;;;;;;;;;;;;;27025:52;27017:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26976:148;27146:20;;;;;;;;;;;27142:423;;;27200:7;:5;:7::i;:::-;27194:13;;:2;:13;;;;:47;;;;;27225:15;27211:30;;:2;:30;;;;27194:47;:79;;;;;27259:13;27245:28;;:2;:28;;;;27194:79;27190:356;;;27351:12;27309:28;:39;27338:9;27309:39;;;;;;;;;;;;;;;;:54;27301:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:12;27468:28;:39;27497:9;27468:39;;;;;;;;;;;;;;;:54;;;;27190:356;27142:423;27587:25;:31;27613:4;27587:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27623:31;:35;27655:2;27623:35;;;;;;;;;;;;;;;;;;;;;;;;;27622:36;27587:71;27583:474;;;27701:20;;27691:6;:30;;27683:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27583:474;;;27826:25;:29;27852:2;27826:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27860:31;:37;27892:4;27860:37;;;;;;;;;;;;;;;;;;;;;;;;;27859:38;27826:71;27822:235;;;27940:20;;27930:6;:30;;27922:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27822:235;27583:474;28079:25;:31;28105:4;28079:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28115:31;:35;28147:2;28115:35;;;;;;;;;;;;;;;;;;;;;;;;;28114:36;28079:71;28075:366;;;28213:9;;28196:13;28206:2;28196:9;:13::i;:::-;28187:6;:22;;;;:::i;:::-;:35;;28179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28075:366;;;28295:31;:35;28327:2;28295:35;;;;;;;;;;;;;;;;;;;;;;;;;28291:150;;28388:9;;28371:13;28381:2;28371:9;:13::i;:::-;28362:6;:22;;;;:::i;:::-;:35;;28354:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28291:150;28075:366;26761:1695;26728:1739;28495:14;;;;;;;;;;;:51;;;;;28533:13;28527:19;;:2;:19;;;;28495:51;:126;;;;;28578:42;28564:57;;:2;:57;;;;28495:126;28477:205;;;28666:4;28649:10;:14;28660:2;28649:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28477:205;28692:28;28723:24;28741:4;28723:9;:24::i;:::-;28692:55;;28758:12;28797:18;;28773:20;:42;;28758:57;;28843:7;:35;;;;;28867:11;;;;;;;;;;;28843:35;:61;;;;;28896:8;;;;;;;;;;;28895:9;28843:61;:110;;;;;28922:25;:31;28948:4;28922:31;;;;;;;;;;;;;;;;;;;;;;;;;28921:32;28843:110;:153;;;;;28971:19;:25;28991:4;28971:25;;;;;;;;;;;;;;;;;;;;;;;;;28970:26;28843:153;:194;;;;;29014:19;:23;29034:2;29014:23;;;;;;;;;;;;;;;;;;;;;;;;;29013:24;28843:194;28826:321;;;29075:4;29064:8;;:15;;;;;;;;;;;;;;;;;;29094:10;:8;:10::i;:::-;29130:5;29119:8;;:16;;;;;;;;;;;;;;;;;;28826:321;29157:12;29173:8;;;;;;;;;;;29172:9;29157:24;;29195:19;:25;29215:4;29195:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29224:19;:23;29244:2;29224:23;;;;;;;;;;;;;;;;;;;;;;;;;29195:52;29192:99;;;29274:5;29264:15;;29192:99;29303:12;29333:7;29330:731;;;29360:25;:29;29386:2;29360:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29409:1;29393:13;;:17;29360:50;29356:561;;;29458:3;29444:13;;29437:6;:20;;;;:::i;:::-;:24;;;;:::i;:::-;29430:31;;29520:13;;29505:12;;29498:4;:19;;;;:::i;:::-;:35;;;;:::i;:::-;29480:14;;:53;;;;;;;:::i;:::-;;;;;;;;29600:13;;29581:16;;29574:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29552:18;;:61;;;;;;;:::i;:::-;;;;;;;;29356:561;;;29651:25;:31;29677:4;29651:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29701:1;29686:12;;:16;29651:51;29648:269;;;29750:3;29737:12;;29730:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;29723:30;;29811:12;;29797:11;;29790:4;:18;;;;:::i;:::-;:33;;;;:::i;:::-;29772:14;;:51;;;;;;;:::i;:::-;;;;;;;;29889:12;;29871:15;;29864:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29842:18;;:59;;;;;;;:::i;:::-;;;;;;;;29648:269;29356:561;29941:2;29934:4;:9;29931:90;;;29963:42;29979:4;29993;30000;29963:15;:42::i;:::-;29931:90;30045:4;30035:14;;;;;:::i;:::-;;;29330:731;30071:33;30087:4;30093:2;30097:6;30071:15;:33::i;:::-;26351:3761;;;;26238:3874;;;;:::o;5928:240::-;6048:7;6106:1;6101;:6;;6109:12;6093:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6148:1;6144;:5;6137:12;;5928:240;;;;;:::o;5409:98::-;5467:7;5498:1;5494;:5;;;;:::i;:::-;5487:12;;5409:98;;;;:::o;10615:573::-;10773:1;10755:20;;:6;:20;;;10747:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10857:1;10836:23;;:9;:23;;;10828:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10912:47;10933:6;10941:9;10952:6;10912:20;:47::i;:::-;10992:71;11014:6;10992:71;;;;;;;;;;;;;;;;;:9;:17;11002:6;10992:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10972:9;:17;10982:6;10972:17;;;;;;;;;;;;;;;:91;;;;11097:32;11122:6;11097:9;:20;11107:9;11097:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11074:9;:20;11084:9;11074:20;;;;;;;;;;;;;;;:55;;;;11162:9;11145:35;;11154:6;11145:35;;;11173:6;11145:35;;;;;;:::i;:::-;;;;;;;;10615:573;;;:::o;25460:188::-;25577:5;25543:25;:31;25569:4;25543:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25634:5;25600:40;;25628:4;25600:40;;;;;;;;;;;;25460:188;;:::o;31042:749::-;31081:23;31107:24;31125:4;31107:9;:24::i;:::-;31081:50;;31142:25;31191:14;;31170:18;;:35;;;;:::i;:::-;31142:63;;31240:1;31221:15;:20;:48;;;;31266:3;31245:17;:24;31221:48;31218:62;;;31272:7;;;;31218:62;31292:26;31321:15;31292:44;;31349:36;31366:18;31349:16;:36::i;:::-;31399:18;31420:21;31399:42;;31454:23;31510:17;31491:18;;31480:10;:29;;;;:::i;:::-;:47;;;;:::i;:::-;31454:73;;31538:19;31586:17;31571:14;;31560:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;31538:65;;31624:15;;;;;;;;;;;31616:33;;:50;31650:15;31616:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31685:11;;;;;;;;;;;31677:29;;:42;31707:11;31677:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31753:1;31732:18;:22;;;;31782:1;31765:14;:18;;;;31070:721;;;;;;31042:749;:::o;12396:125::-;;;;:::o;30120:476::-;30186:21;30224:1;30210:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30186:40;;30255:4;30237;30242:1;30237:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30281:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30271:4;30276:1;30271:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30316:62;30333:4;30348:15;30366:11;30316:8;:62::i;:::-;30389:15;:66;;;30470:11;30496:1;30513:4;30540;30560:15;30389:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30175:421;30120:476;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:90;803:7;846:5;839:13;832:21;821:32;;769:90;;;:::o;865:116::-;935:21;950:5;935:21;:::i;:::-;928:5;925:32;915:60;;971:1;968;961:12;915:60;865:116;:::o;987:133::-;1030:5;1068:6;1055:20;1046:29;;1084:30;1108:5;1084:30;:::i;:::-;987:133;;;;:::o;1126:323::-;1182:6;1231:2;1219:9;1210:7;1206:23;1202:32;1199:119;;;1237:79;;:::i;:::-;1199:119;1357:1;1382:50;1424:7;1415:6;1404:9;1400:22;1382:50;:::i;:::-;1372:60;;1328:114;1126:323;;;;:::o;1455:109::-;1536:21;1551:5;1536:21;:::i;:::-;1531:3;1524:34;1455:109;;:::o;1570:210::-;1657:4;1695:2;1684:9;1680:18;1672:26;;1708:65;1770:1;1759:9;1755:17;1746:6;1708:65;:::i;:::-;1570:210;;;;:::o;1786:99::-;1838:6;1872:5;1866:12;1856:22;;1786:99;;;:::o;1891:169::-;1975:11;2009:6;2004:3;1997:19;2049:4;2044:3;2040:14;2025:29;;1891:169;;;;:::o;2066:246::-;2147:1;2157:113;2171:6;2168:1;2165:13;2157:113;;;2256:1;2251:3;2247:11;2241:18;2237:1;2232:3;2228:11;2221:39;2193:2;2190:1;2186:10;2181:15;;2157:113;;;2304:1;2295:6;2290:3;2286:16;2279:27;2128:184;2066:246;;;:::o;2318:102::-;2359:6;2410:2;2406:7;2401:2;2394:5;2390:14;2386:28;2376:38;;2318:102;;;:::o;2426:377::-;2514:3;2542:39;2575:5;2542:39;:::i;:::-;2597:71;2661:6;2656:3;2597:71;:::i;:::-;2590:78;;2677:65;2735:6;2730:3;2723:4;2716:5;2712:16;2677:65;:::i;:::-;2767:29;2789:6;2767:29;:::i;:::-;2762:3;2758:39;2751:46;;2518:285;2426:377;;;;:::o;2809:313::-;2922:4;2960:2;2949:9;2945:18;2937:26;;3009:9;3003:4;2999:20;2995:1;2984:9;2980:17;2973:47;3037:78;3110:4;3101:6;3037:78;:::i;:::-;3029:86;;2809:313;;;;:::o;3128:126::-;3165:7;3205:42;3198:5;3194:54;3183:65;;3128:126;;;:::o;3260:96::-;3297:7;3326:24;3344:5;3326:24;:::i;:::-;3315:35;;3260:96;;;:::o;3362:122::-;3435:24;3453:5;3435:24;:::i;:::-;3428:5;3425:35;3415:63;;3474:1;3471;3464:12;3415:63;3362:122;:::o;3490:139::-;3536:5;3574:6;3561:20;3552:29;;3590:33;3617:5;3590:33;:::i;:::-;3490:139;;;;:::o;3635:122::-;3708:24;3726:5;3708:24;:::i;:::-;3701:5;3698:35;3688:63;;3747:1;3744;3737:12;3688:63;3635:122;:::o;3763:139::-;3809:5;3847:6;3834:20;3825:29;;3863:33;3890:5;3863:33;:::i;:::-;3763:139;;;;:::o;3908:474::-;3976:6;3984;4033:2;4021:9;4012:7;4008:23;4004:32;4001:119;;;4039:79;;:::i;:::-;4001:119;4159:1;4184:53;4229:7;4220:6;4209:9;4205:22;4184:53;:::i;:::-;4174:63;;4130:117;4286:2;4312:53;4357:7;4348:6;4337:9;4333:22;4312:53;:::i;:::-;4302:63;;4257:118;3908:474;;;;;:::o;4388:329::-;4447:6;4496:2;4484:9;4475:7;4471:23;4467:32;4464:119;;;4502:79;;:::i;:::-;4464:119;4622:1;4647:53;4692:7;4683:6;4672:9;4668:22;4647:53;:::i;:::-;4637:63;;4593:117;4388:329;;;;:::o;4723:104::-;4768:7;4797:24;4815:5;4797:24;:::i;:::-;4786:35;;4723:104;;;:::o;4833:142::-;4936:32;4962:5;4936:32;:::i;:::-;4931:3;4924:45;4833:142;;:::o;4981:254::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:87;5225:1;5214:9;5210:17;5201:6;5141:87;:::i;:::-;4981:254;;;;:::o;5241:60::-;5269:3;5290:5;5283:12;;5241:60;;;:::o;5307:142::-;5357:9;5390:53;5408:34;5417:24;5435:5;5417:24;:::i;:::-;5408:34;:::i;:::-;5390:53;:::i;:::-;5377:66;;5307:142;;;:::o;5455:126::-;5505:9;5538:37;5569:5;5538:37;:::i;:::-;5525:50;;5455:126;;;:::o;5587:153::-;5664:9;5697:37;5728:5;5697:37;:::i;:::-;5684:50;;5587:153;;;:::o;5746:185::-;5860:64;5918:5;5860:64;:::i;:::-;5855:3;5848:77;5746:185;;:::o;5937:276::-;6057:4;6095:2;6084:9;6080:18;6072:26;;6108:98;6203:1;6192:9;6188:17;6179:6;6108:98;:::i;:::-;5937:276;;;;:::o;6219:329::-;6278:6;6327:2;6315:9;6306:7;6302:23;6298:32;6295:119;;;6333:79;;:::i;:::-;6295:119;6453:1;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6424:117;6219:329;;;;:::o;6554:619::-;6631:6;6639;6647;6696:2;6684:9;6675:7;6671:23;6667:32;6664:119;;;6702:79;;:::i;:::-;6664:119;6822:1;6847:53;6892:7;6883:6;6872:9;6868:22;6847:53;:::i;:::-;6837:63;;6793:117;6949:2;6975:53;7020:7;7011:6;7000:9;6996:22;6975:53;:::i;:::-;6965:63;;6920:118;7077:2;7103:53;7148:7;7139:6;7128:9;7124:22;7103:53;:::i;:::-;7093:63;;7048:118;6554:619;;;;;:::o;7179:86::-;7214:7;7254:4;7247:5;7243:16;7232:27;;7179:86;;;:::o;7271:112::-;7354:22;7370:5;7354:22;:::i;:::-;7349:3;7342:35;7271:112;;:::o;7389:214::-;7478:4;7516:2;7505:9;7501:18;7493:26;;7529:67;7593:1;7582:9;7578:17;7569:6;7529:67;:::i;:::-;7389:214;;;;:::o;7609:118::-;7696:24;7714:5;7696:24;:::i;:::-;7691:3;7684:37;7609:118;;:::o;7733:222::-;7826:4;7864:2;7853:9;7849:18;7841:26;;7877:71;7945:1;7934:9;7930:17;7921:6;7877:71;:::i;:::-;7733:222;;;;:::o;7961:468::-;8026:6;8034;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:53;8279:7;8270:6;8259:9;8255:22;8234:53;:::i;:::-;8224:63;;8180:117;8336:2;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8307:115;7961:468;;;;;:::o;8435:619::-;8512:6;8520;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8958:2;8984:53;9029:7;9020:6;9009:9;9005:22;8984:53;:::i;:::-;8974:63;;8929:118;8435:619;;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:182::-;9680:34;9676:1;9668:6;9664:14;9657:58;9540:182;:::o;9728:366::-;9870:3;9891:67;9955:2;9950:3;9891:67;:::i;:::-;9884:74;;9967:93;10056:3;9967:93;:::i;:::-;10085:2;10080:3;10076:12;10069:19;;9728:366;;;:::o;10100:419::-;10266:4;10304:2;10293:9;10289:18;10281:26;;10353:9;10347:4;10343:20;10339:1;10328:9;10324:17;10317:47;10381:131;10507:4;10381:131;:::i;:::-;10373:139;;10100:419;;;:::o;10525:180::-;10573:77;10570:1;10563:88;10670:4;10667:1;10660:15;10694:4;10691:1;10684:15;10711:320;10755:6;10792:1;10786:4;10782:12;10772:22;;10839:1;10833:4;10829:12;10860:18;10850:81;;10916:4;10908:6;10904:17;10894:27;;10850:81;10978:2;10970:6;10967:14;10947:18;10944:38;10941:84;;10997:18;;:::i;:::-;10941:84;10762:269;10711:320;;;:::o;11037:180::-;11085:77;11082:1;11075:88;11182:4;11179:1;11172:15;11206:4;11203:1;11196:15;11223:191;11263:3;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11316:20;11334:1;11316:20;:::i;:::-;11311:25;;11359:1;11356;11352:9;11345:16;;11380:3;11377:1;11374:10;11371:36;;;11387:18;;:::i;:::-;11371:36;11223:191;;;;:::o;11420:178::-;11560:30;11556:1;11548:6;11544:14;11537:54;11420:178;:::o;11604:366::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11604:366;;;:::o;11976:419::-;12142:4;12180:2;12169:9;12165:18;12157:26;;12229:9;12223:4;12219:20;12215:1;12204:9;12200:17;12193:47;12257:131;12383:4;12257:131;:::i;:::-;12249:139;;11976:419;;;:::o;12401:244::-;12541:34;12537:1;12529:6;12525:14;12518:58;12610:27;12605:2;12597:6;12593:15;12586:52;12401:244;:::o;12651:366::-;12793:3;12814:67;12878:2;12873:3;12814:67;:::i;:::-;12807:74;;12890:93;12979:3;12890:93;:::i;:::-;13008:2;13003:3;12999:12;12992:19;;12651:366;;;:::o;13023:419::-;13189:4;13227:2;13216:9;13212:18;13204:26;;13276:9;13270:4;13266:20;13262:1;13251:9;13247:17;13240:47;13304:131;13430:4;13304:131;:::i;:::-;13296:139;;13023:419;;;:::o;13448:410::-;13488:7;13511:20;13529:1;13511:20;:::i;:::-;13506:25;;13545:20;13563:1;13545:20;:::i;:::-;13540:25;;13600:1;13597;13593:9;13622:30;13640:11;13622:30;:::i;:::-;13611:41;;13801:1;13792:7;13788:15;13785:1;13782:22;13762:1;13755:9;13735:83;13712:139;;13831:18;;:::i;:::-;13712:139;13496:362;13448:410;;;;:::o;13864:180::-;13912:77;13909:1;13902:88;14009:4;14006:1;13999:15;14033:4;14030:1;14023:15;14050:185;14090:1;14107:20;14125:1;14107:20;:::i;:::-;14102:25;;14141:20;14159:1;14141:20;:::i;:::-;14136:25;;14180:1;14170:35;;14185:18;;:::i;:::-;14170:35;14227:1;14224;14220:9;14215:14;;14050:185;;;;:::o;14241:223::-;14381:34;14377:1;14369:6;14365:14;14358:58;14450:6;14445:2;14437:6;14433:15;14426:31;14241:223;:::o;14470:366::-;14612:3;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14709:93;14798:3;14709:93;:::i;:::-;14827:2;14822:3;14818:12;14811:19;;14470:366;;;:::o;14842:419::-;15008:4;15046:2;15035:9;15031:18;15023:26;;15095:9;15089:4;15085:20;15081:1;15070:9;15066:17;15059:47;15123:131;15249:4;15123:131;:::i;:::-;15115:139;;14842:419;;;:::o;15267:225::-;15407:34;15403:1;15395:6;15391:14;15384:58;15476:8;15471:2;15463:6;15459:15;15452:33;15267:225;:::o;15498:366::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:419::-;16036:4;16074:2;16063:9;16059:18;16051:26;;16123:9;16117:4;16113:20;16109:1;16098:9;16094:17;16087:47;16151:131;16277:4;16151:131;:::i;:::-;16143:139;;15870:419;;;:::o;16295:223::-;16435:34;16431:1;16423:6;16419:14;16412:58;16504:6;16499:2;16491:6;16487:15;16480:31;16295:223;:::o;16524:366::-;16666:3;16687:67;16751:2;16746:3;16687:67;:::i;:::-;16680:74;;16763:93;16852:3;16763:93;:::i;:::-;16881:2;16876:3;16872:12;16865:19;;16524:366;;;:::o;16896:419::-;17062:4;17100:2;17089:9;17085:18;17077:26;;17149:9;17143:4;17139:20;17135:1;17124:9;17120:17;17113:47;17177:131;17303:4;17177:131;:::i;:::-;17169:139;;16896:419;;;:::o;17321:221::-;17461:34;17457:1;17449:6;17445:14;17438:58;17530:4;17525:2;17517:6;17513:15;17506:29;17321:221;:::o;17548:366::-;17690:3;17711:67;17775:2;17770:3;17711:67;:::i;:::-;17704:74;;17787:93;17876:3;17787:93;:::i;:::-;17905:2;17900:3;17896:12;17889:19;;17548:366;;;:::o;17920:419::-;18086:4;18124:2;18113:9;18109:18;18101:26;;18173:9;18167:4;18163:20;18159:1;18148:9;18144:17;18137:47;18201:131;18327:4;18201:131;:::i;:::-;18193:139;;17920:419;;;:::o;18345:224::-;18485:34;18481:1;18473:6;18469:14;18462:58;18554:7;18549:2;18541:6;18537:15;18530:32;18345:224;:::o;18575:366::-;18717:3;18738:67;18802:2;18797:3;18738:67;:::i;:::-;18731:74;;18814:93;18903:3;18814:93;:::i;:::-;18932:2;18927:3;18923:12;18916:19;;18575:366;;;:::o;18947:419::-;19113:4;19151:2;19140:9;19136:18;19128:26;;19200:9;19194:4;19190:20;19186:1;19175:9;19171:17;19164:47;19228:131;19354:4;19228:131;:::i;:::-;19220:139;;18947:419;;;:::o;19372:222::-;19512:34;19508:1;19500:6;19496:14;19489:58;19581:5;19576:2;19568:6;19564:15;19557:30;19372:222;:::o;19600:366::-;19742:3;19763:67;19827:2;19822:3;19763:67;:::i;:::-;19756:74;;19839:93;19928:3;19839:93;:::i;:::-;19957:2;19952:3;19948:12;19941:19;;19600:366;;;:::o;19972:419::-;20138:4;20176:2;20165:9;20161:18;20153:26;;20225:9;20219:4;20215:20;20211:1;20200:9;20196:17;20189:47;20253:131;20379:4;20253:131;:::i;:::-;20245:139;;19972:419;;;:::o;20397:236::-;20537:34;20533:1;20525:6;20521:14;20514:58;20606:19;20601:2;20593:6;20589:15;20582:44;20397:236;:::o;20639:366::-;20781:3;20802:67;20866:2;20861:3;20802:67;:::i;:::-;20795:74;;20878:93;20967:3;20878:93;:::i;:::-;20996:2;20991:3;20987:12;20980:19;;20639:366;;;:::o;21011:419::-;21177:4;21215:2;21204:9;21200:18;21192:26;;21264:9;21258:4;21254:20;21250:1;21239:9;21235:17;21228:47;21292:131;21418:4;21292:131;:::i;:::-;21284:139;;21011:419;;;:::o;21436:172::-;21576:24;21572:1;21564:6;21560:14;21553:48;21436:172;:::o;21614:366::-;21756:3;21777:67;21841:2;21836:3;21777:67;:::i;:::-;21770:74;;21853:93;21942:3;21853:93;:::i;:::-;21971:2;21966:3;21962:12;21955:19;;21614:366;;;:::o;21986:419::-;22152:4;22190:2;22179:9;22175:18;22167:26;;22239:9;22233:4;22229:20;22225:1;22214:9;22210:17;22203:47;22267:131;22393:4;22267:131;:::i;:::-;22259:139;;21986:419;;;:::o;22411:297::-;22551:34;22547:1;22539:6;22535:14;22528:58;22620:34;22615:2;22607:6;22603:15;22596:59;22689:11;22684:2;22676:6;22672:15;22665:36;22411:297;:::o;22714:366::-;22856:3;22877:67;22941:2;22936:3;22877:67;:::i;:::-;22870:74;;22953:93;23042:3;22953:93;:::i;:::-;23071:2;23066:3;23062:12;23055:19;;22714:366;;;:::o;23086:419::-;23252:4;23290:2;23279:9;23275:18;23267:26;;23339:9;23333:4;23329:20;23325:1;23314:9;23310:17;23303:47;23367:131;23493:4;23367:131;:::i;:::-;23359:139;;23086:419;;;:::o;23511:240::-;23651:34;23647:1;23639:6;23635:14;23628:58;23720:23;23715:2;23707:6;23703:15;23696:48;23511:240;:::o;23757:366::-;23899:3;23920:67;23984:2;23979:3;23920:67;:::i;:::-;23913:74;;23996:93;24085:3;23996:93;:::i;:::-;24114:2;24109:3;24105:12;24098:19;;23757:366;;;:::o;24129:419::-;24295:4;24333:2;24322:9;24318:18;24310:26;;24382:9;24376:4;24372:20;24368:1;24357:9;24353:17;24346:47;24410:131;24536:4;24410:131;:::i;:::-;24402:139;;24129:419;;;:::o;24554:241::-;24694:34;24690:1;24682:6;24678:14;24671:58;24763:24;24758:2;24750:6;24746:15;24739:49;24554:241;:::o;24801:366::-;24943:3;24964:67;25028:2;25023:3;24964:67;:::i;:::-;24957:74;;25040:93;25129:3;25040:93;:::i;:::-;25158:2;25153:3;25149:12;25142:19;;24801:366;;;:::o;25173:419::-;25339:4;25377:2;25366:9;25362:18;25354:26;;25426:9;25420:4;25416:20;25412:1;25401:9;25397:17;25390:47;25454:131;25580:4;25454:131;:::i;:::-;25446:139;;25173:419;;;:::o;25598:169::-;25738:21;25734:1;25726:6;25722:14;25715:45;25598:169;:::o;25773:366::-;25915:3;25936:67;26000:2;25995:3;25936:67;:::i;:::-;25929:74;;26012:93;26101:3;26012:93;:::i;:::-;26130:2;26125:3;26121:12;26114:19;;25773:366;;;:::o;26145:419::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:194::-;26610:4;26630:20;26648:1;26630:20;:::i;:::-;26625:25;;26664:20;26682:1;26664:20;:::i;:::-;26659:25;;26708:1;26705;26701:9;26693:17;;26732:1;26726:4;26723:11;26720:37;;;26737:18;;:::i;:::-;26720:37;26570:194;;;;:::o;26770:180::-;26818:77;26815:1;26808:88;26915:4;26912:1;26905:15;26939:4;26936:1;26929:15;26956:180;27004:77;27001:1;26994:88;27101:4;27098:1;27091:15;27125:4;27122:1;27115:15;27142:143;27199:5;27230:6;27224:13;27215:22;;27246:33;27273:5;27246:33;:::i;:::-;27142:143;;;;:::o;27291:351::-;27361:6;27410:2;27398:9;27389:7;27385:23;27381:32;27378:119;;;27416:79;;:::i;:::-;27378:119;27536:1;27561:64;27617:7;27608:6;27597:9;27593:22;27561:64;:::i;:::-;27551:74;;27507:128;27291:351;;;;:::o;27648:85::-;27693:7;27722:5;27711:16;;27648:85;;;:::o;27739:158::-;27797:9;27830:61;27848:42;27857:32;27883:5;27857:32;:::i;:::-;27848:42;:::i;:::-;27830:61;:::i;:::-;27817:74;;27739:158;;;:::o;27903:147::-;27998:45;28037:5;27998:45;:::i;:::-;27993:3;27986:58;27903:147;;:::o;28056:114::-;28123:6;28157:5;28151:12;28141:22;;28056:114;;;:::o;28176:184::-;28275:11;28309:6;28304:3;28297:19;28349:4;28344:3;28340:14;28325:29;;28176:184;;;;:::o;28366:132::-;28433:4;28456:3;28448:11;;28486:4;28481:3;28477:14;28469:22;;28366:132;;;:::o;28504:108::-;28581:24;28599:5;28581:24;:::i;:::-;28576:3;28569:37;28504:108;;:::o;28618:179::-;28687:10;28708:46;28750:3;28742:6;28708:46;:::i;:::-;28786:4;28781:3;28777:14;28763:28;;28618:179;;;;:::o;28803:113::-;28873:4;28905;28900:3;28896:14;28888:22;;28803:113;;;:::o;28952:732::-;29071:3;29100:54;29148:5;29100:54;:::i;:::-;29170:86;29249:6;29244:3;29170:86;:::i;:::-;29163:93;;29280:56;29330:5;29280:56;:::i;:::-;29359:7;29390:1;29375:284;29400:6;29397:1;29394:13;29375:284;;;29476:6;29470:13;29503:63;29562:3;29547:13;29503:63;:::i;:::-;29496:70;;29589:60;29642:6;29589:60;:::i;:::-;29579:70;;29435:224;29422:1;29419;29415:9;29410:14;;29375:284;;;29379:14;29675:3;29668:10;;29076:608;;;28952:732;;;;:::o;29690:831::-;29953:4;29991:3;29980:9;29976:19;29968:27;;30005:71;30073:1;30062:9;30058:17;30049:6;30005:71;:::i;:::-;30086:80;30162:2;30151:9;30147:18;30138:6;30086:80;:::i;:::-;30213:9;30207:4;30203:20;30198:2;30187:9;30183:18;30176:48;30241:108;30344:4;30335:6;30241:108;:::i;:::-;30233:116;;30359:72;30427:2;30416:9;30412:18;30403:6;30359:72;:::i;:::-;30441:73;30509:3;30498:9;30494:19;30485:6;30441:73;:::i;:::-;29690:831;;;;;;;;:::o

Swarm Source

ipfs://73cffa0f140acebea4f439831dd47daccee7e3319a4b118b4c23895526a9e5a1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.