ETH Price: $2,647.61 (+0.30%)

Token

Kumamon (Kuma)
 

Overview

Max Total Supply

100,000,000 Kuma

Holders

421

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,427.129099547055773988 Kuma

Value
$0.00
0x917b89b67a4f755922f34d9ada52f1e2ea3f21e0
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:
Kumamon

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-08
*/

//Tg- https://t.me/KumamonEth

//X- https://x.com/kumaethmon?s=21&t=Q_LzxPXmnIm8J7Cr5Dgsjw

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.15;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.15; */

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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.15; */

/* import "../utils/Context.sol"; */

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.15; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.15; */

/* import "../IERC20.sol"; */

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.15; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.15; */

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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

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

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

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

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

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

/* pragma solidity >=0.8.15; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

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

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

    uint256 public buyTotalFees;
	uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("Kumamon", "Kuma") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 3;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 3;

        uint256 totalSupply = 100000000 * 1e18;

        maxTransactionAmount = 150000 * 1e18; // .15% from total supply maxTransactionAmountTxn
        maxWallet = 1500000 * 1e18; // 1.5% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

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

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x9dbD01f72520A72eadF1Eb7Ed329b0102e1446B7); // set as marketing wallet
        devWallet = address(0x9dbD01f72520A72eadF1Eb7Ed329b0102e1446B7); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
		excludeFromFees(address(marketingWallet), true);
		
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
		excludeFromMaxTransaction(address(marketingWallet), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
    function  updateSellFees(uint256 marketing, uint256 liquidity, uint256 dev) external onlyOwner {
        sellMarketingFee = marketing;
		sellLiquidityFee = liquidity;
        sellDevFee = dev;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function  updateBuyFees(uint256 marketing, uint256 liquidity, uint256 dev) external onlyOwner {
        buyMarketingFee = marketing;
		buyLiquidityFee = liquidity;
        buyDevFee = dev;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }
	
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

		tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                liquidityTokens
            );
        }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600781526020017f4b756d616d6f6e000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b756d61000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dbc565b5080600490816200010d919062000dbc565b50505062000130620001246200060360201b60201c565b6200060b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006d160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f0d565b6040518363ffffffff1660e01b8152600401620002af92919062000f50565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006d160201b60201c565b6200035260a0516001620007bb60201b60201c565b600060039050600080600390506000600390506000806003905060006a52b7d2dcc80cd2e40000009050691fc3842bd1f071c000006008819055506a013da329b6336471800000600a81905550612710600a82620003b1919062000fac565b620003bd91906200103c565b60098190555086600f819055508560108190555084601181905550601154601054600f54620003ed919062001074565b620003f9919062001074565b600e8190555083601381905550826014819055508160158190555060155460145460135462000429919062001074565b62000435919062001074565b601281905550739dbd01f72520a72eadf1eb7ed329b0102e1446b7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739dbd01f72520a72eadf1eb7ed329b0102e1446b7600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000507620004f96200085c60201b60201c565b60016200088660201b60201c565b6200051a3060016200088660201b60201c565b6200052f61dead60016200088660201b60201c565b62000564600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088660201b60201c565b62000586620005786200085c60201b60201c565b6001620006d160201b60201c565b62000599306001620006d160201b60201c565b620005ae61dead6001620006d160201b60201c565b620005e3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d160201b60201c565b620005f53382620009c060201b60201c565b50505050505050506200122e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e16200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007076200085c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007579062001132565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008966200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008bc6200085c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090c9062001132565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b4919062001171565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2990620011de565b60405180910390fd5b62000a466000838362000b3860201b60201c565b806002600082825462000a5a919062001074565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab1919062001074565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b18919062001211565b60405180910390a362000b346000838362000b3d60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc457607f821691505b60208210810362000bda5762000bd962000b7c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c05565b62000c50868362000c05565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c9d62000c9762000c918462000c68565b62000c72565b62000c68565b9050919050565b6000819050919050565b62000cb98362000c7c565b62000cd162000cc88262000ca4565b84845462000c12565b825550505050565b600090565b62000ce862000cd9565b62000cf581848462000cae565b505050565b5b8181101562000d1d5762000d1160008262000cde565b60018101905062000cfb565b5050565b601f82111562000d6c5762000d368162000be0565b62000d418462000bf5565b8101602085101562000d51578190505b62000d6962000d608562000bf5565b83018262000cfa565b50505b505050565b600082821c905092915050565b600062000d916000198460080262000d71565b1980831691505092915050565b600062000dac838362000d7e565b9150826002028217905092915050565b62000dc78262000b42565b67ffffffffffffffff81111562000de35762000de262000b4d565b5b62000def825462000bab565b62000dfc82828562000d21565b600060209050601f83116001811462000e34576000841562000e1f578287015190505b62000e2b858262000d9e565b86555062000e9b565b601f19841662000e448662000be0565b60005b8281101562000e6e5784890151825560018201915060208501945060208101905062000e47565b8683101562000e8e578489015162000e8a601f89168262000d7e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed58262000ea8565b9050919050565b62000ee78162000ec8565b811462000ef357600080fd5b50565b60008151905062000f078162000edc565b92915050565b60006020828403121562000f265762000f2562000ea3565b5b600062000f368482850162000ef6565b91505092915050565b62000f4a8162000ec8565b82525050565b600060408201905062000f67600083018562000f3f565b62000f76602083018462000f3f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fb98262000c68565b915062000fc68362000c68565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001002576200100162000f7d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010498262000c68565b9150620010568362000c68565b9250826200106957620010686200100d565b5b828204905092915050565b6000620010818262000c68565b91506200108e8362000c68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010c657620010c562000f7d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200111a602083620010d1565b91506200112782620010e2565b602082019050919050565b600060208201905081810360008301526200114d816200110b565b9050919050565b60008115159050919050565b6200116b8162001154565b82525050565b600060208201905062001188600083018462001160565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011c6601f83620010d1565b9150620011d3826200118e565b602082019050919050565b60006020820190508181036000830152620011f981620011b7565b9050919050565b6200120b8162000c68565b82525050565b600060208201905062001228600083018462001200565b92915050565b60805160a051614c536200128c60003960008181611025015281816116a801526124ad015260008181610d290152818161245501528181613545015281816136260152818161364d015281816136e901526137100152614c536000f3fe6080604052600436106103035760003560e01c80638ea5220f11610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bad578063f2fde38b14610bd8578063f637434214610c01578063f8b45b0514610c2c5761030a565b8063dd62ed3e14610b1a578063e2f4560514610b57578063e884f26014610b825761030a565b8063c17b5b8c14610a0a578063c18bc19514610a33578063c876d0b914610a5c578063c8c8ebe414610a87578063d257b34f14610ab2578063d85ba06314610aef5761030a565b80639fccce3211610149578063a9059cbb11610123578063a9059cbb1461093c578063b62496f514610979578063bbc0c742146109b6578063c0246668146109e15761030a565b80639fccce32146108a9578063a0d82dc5146108d4578063a457c2d7146108ff5761030a565b80638ea5220f146107ab57806392136913146107d6578063924de9b71461080157806395d89b411461082a5780639a7a23d6146108555780639c3b4fdc1461087e5761030a565b80634a62bb651161024f578063751039fc116102085780637bce5a04116101e25780637bce5a04146107155780638095d564146107405780638a8c523c146107695780638da5cb5b146107805761030a565b8063751039fc146106965780637571336a146106c157806375f0a874146106ea5761030a565b80634a62bb65146105845780634fbee193146105af5780636a486a8e146105ec5780636ddd17131461061757806370a0823114610642578063715018a61461067f5761030a565b80631f3fed8f116102bc57806327c8f8351161029657806327c8f835146104c6578063313ce567146104f1578063395093511461051c57806349bd5a5e146105595761030a565b80631f3fed8f14610435578063203e727e1461046057806323b872dd146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631a8145bb1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c57565b6040516103319190613878565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613933565b610ce9565b60405161036e919061398e565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906139a9565b610d07565b6040516103ab919061398e565b60405180910390f35b3480156103c057600080fd5b506103c9610d27565b6040516103d69190613a35565b60405180910390f35b3480156103eb57600080fd5b506103f4610d4b565b6040516104019190613a5f565b60405180910390f35b34801561041657600080fd5b5061041f610d55565b60405161042c9190613a5f565b60405180910390f35b34801561044157600080fd5b5061044a610d5b565b6040516104579190613a5f565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613a7a565b610d61565b005b34801561049557600080fd5b506104b060048036038101906104ab9190613aa7565b610e70565b6040516104bd919061398e565b60405180910390f35b3480156104d257600080fd5b506104db610f68565b6040516104e89190613b09565b60405180910390f35b3480156104fd57600080fd5b50610506610f6e565b6040516105139190613b40565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613933565b610f77565b604051610550919061398e565b60405180910390f35b34801561056557600080fd5b5061056e611023565b60405161057b9190613b09565b60405180910390f35b34801561059057600080fd5b50610599611047565b6040516105a6919061398e565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d191906139a9565b61105a565b6040516105e3919061398e565b60405180910390f35b3480156105f857600080fd5b506106016110b0565b60405161060e9190613a5f565b60405180910390f35b34801561062357600080fd5b5061062c6110b6565b604051610639919061398e565b60405180910390f35b34801561064e57600080fd5b50610669600480360381019061066491906139a9565b6110c9565b6040516106769190613a5f565b60405180910390f35b34801561068b57600080fd5b50610694611111565b005b3480156106a257600080fd5b506106ab611199565b6040516106b8919061398e565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613b87565b611239565b005b3480156106f657600080fd5b506106ff611310565b60405161070c9190613b09565b60405180910390f35b34801561072157600080fd5b5061072a611336565b6040516107379190613a5f565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613bc7565b61133c565b005b34801561077557600080fd5b5061077e6113f5565b005b34801561078c57600080fd5b506107956114a9565b6040516107a29190613b09565b60405180910390f35b3480156107b757600080fd5b506107c06114d3565b6040516107cd9190613b09565b60405180910390f35b3480156107e257600080fd5b506107eb6114f9565b6040516107f89190613a5f565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613c1a565b6114ff565b005b34801561083657600080fd5b5061083f611598565b60405161084c9190613878565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613b87565b61162a565b005b34801561088a57600080fd5b50610893611742565b6040516108a09190613a5f565b60405180910390f35b3480156108b557600080fd5b506108be611748565b6040516108cb9190613a5f565b60405180910390f35b3480156108e057600080fd5b506108e961174e565b6040516108f69190613a5f565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613933565b611754565b604051610933919061398e565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190613933565b61183f565b604051610970919061398e565b60405180910390f35b34801561098557600080fd5b506109a0600480360381019061099b91906139a9565b61185d565b6040516109ad919061398e565b60405180910390f35b3480156109c257600080fd5b506109cb61187d565b6040516109d8919061398e565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613b87565b611890565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613bc7565b6119b5565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613a7a565b611a6e565b005b348015610a6857600080fd5b50610a71611b7d565b604051610a7e919061398e565b60405180910390f35b348015610a9357600080fd5b50610a9c611b90565b604051610aa99190613a5f565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad49190613a7a565b611b96565b604051610ae6919061398e565b60405180910390f35b348015610afb57600080fd5b50610b04611ceb565b604051610b119190613a5f565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c9190613c47565b611cf1565b604051610b4e9190613a5f565b60405180910390f35b348015610b6357600080fd5b50610b6c611d78565b604051610b799190613a5f565b60405180910390f35b348015610b8e57600080fd5b50610b97611d7e565b604051610ba4919061398e565b60405180910390f35b348015610bb957600080fd5b50610bc2611e1e565b604051610bcf9190613a5f565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa91906139a9565b611e24565b005b348015610c0d57600080fd5b50610c16611f1b565b604051610c239190613a5f565b60405180910390f35b348015610c3857600080fd5b50610c41611f21565b604051610c4e9190613a5f565b60405180910390f35b606060038054610c6690613cb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9290613cb6565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b5050505050905090565b6000610cfd610cf6611f27565b8484611f2f565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60175481565b60165481565b610d69611f27565b73ffffffffffffffffffffffffffffffffffffffff16610d876114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613d33565b60405180910390fd5b670de0b6b3a76400006103e86001610df3610d4b565b610dfd9190613d82565b610e079190613e0b565b610e119190613e0b565b811015610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90613eae565b60405180910390fd5b670de0b6b3a764000081610e679190613d82565b60088190555050565b6000610e7d8484846120f8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613f40565b60405180910390fd5b610f5c85610f54611f27565b858403611f2f565b60019150509392505050565b61dead81565b60006012905090565b6000611019610f84611f27565b848460016000610f92611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110149190613f60565b611f2f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611119611f27565b73ffffffffffffffffffffffffffffffffffffffff166111376114a9565b73ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490613d33565b60405180910390fd5b6111976000612d8f565b565b60006111a3611f27565b73ffffffffffffffffffffffffffffffffffffffff166111c16114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613d33565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611241611f27565b73ffffffffffffffffffffffffffffffffffffffff1661125f6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613d33565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611344611f27565b73ffffffffffffffffffffffffffffffffffffffff166113626114a9565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90613d33565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546113e09190613f60565b6113ea9190613f60565b600e81905550505050565b6113fd611f27565b73ffffffffffffffffffffffffffffffffffffffff1661141b6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890613d33565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611507611f27565b73ffffffffffffffffffffffffffffffffffffffff166115256114a9565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613d33565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546115a790613cb6565b80601f01602080910402602001604051908101604052809291908181526020018280546115d390613cb6565b80156116205780601f106115f557610100808354040283529160200191611620565b820191906000526020600020905b81548152906001019060200180831161160357829003601f168201915b5050505050905090565b611632611f27565b73ffffffffffffffffffffffffffffffffffffffff166116506114a9565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613d33565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614028565b60405180910390fd5b61173e8282612e55565b5050565b60115481565b60185481565b60155481565b60008060016000611763611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906140ba565b60405180910390fd5b61183461182b611f27565b85858403611f2f565b600191505092915050565b600061185361184c611f27565b84846120f8565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611898611f27565b73ffffffffffffffffffffffffffffffffffffffff166118b66114a9565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613d33565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119a9919061398e565b60405180910390a25050565b6119bd611f27565b73ffffffffffffffffffffffffffffffffffffffff166119db6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890613d33565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611a599190613f60565b611a639190613f60565b601281905550505050565b611a76611f27565b73ffffffffffffffffffffffffffffffffffffffff16611a946114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190613d33565b60405180910390fd5b670de0b6b3a76400006103e86005611b00610d4b565b611b0a9190613d82565b611b149190613e0b565b611b1e9190613e0b565b811015611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b579061414c565b60405180910390fd5b670de0b6b3a764000081611b749190613d82565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b6000611ba0611f27565b73ffffffffffffffffffffffffffffffffffffffff16611bbe6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b90613d33565b60405180910390fd5b620186a06001611c22610d4b565b611c2c9190613d82565b611c369190613e0b565b821015611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906141de565b60405180910390fd5b6103e86005611c85610d4b565b611c8f9190613d82565b611c999190613e0b565b821115611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290614270565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611d88611f27565b73ffffffffffffffffffffffffffffffffffffffff16611da66114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613d33565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b611e2c611f27565b73ffffffffffffffffffffffffffffffffffffffff16611e4a6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614302565b60405180910390fd5b611f1881612d8f565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614426565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120eb9190613a5f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e906144b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd9061454a565b60405180910390fd5b600081036121ef576121ea83836000612ef6565b612d8a565b600b60009054906101000a900460ff16156128b25761220c6114a9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561227a575061224a6114a9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122ed575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123065750600560149054906101000a900460ff16155b156128b157600b60019054906101000a900460ff1661240057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123c05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f6906145b6565b60405180910390fd5b5b600d60009054906101000a900460ff16156125c85761241d6114a9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124a457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125c75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061466e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561266b5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612712576008548111156126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614700565b60405180910390fd5b600a546126c1836110c9565b826126cc9190613f60565b111561270d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127049061476c565b60405180910390fd5b6128b0565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127b55750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612804576008548111156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f6906147fe565b60405180910390fd5b6128af565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128ae57600a54612861836110c9565b8261286c9190613f60565b11156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a49061476c565b60405180910390fd5b5b5b5b5b5b60006128bd306110c9565b9050600060095482101590508080156128e25750600b60029054906101000a900460ff165b80156128fb5750600560149054906101000a900460ff16155b80156129515750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a75750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129fd5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576001600560146101000a81548160ff021916908315150217905550612a25613175565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612af75750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b0157600090505b60008115612d7a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b6457506000601254115b15612c3157612b916064612b836012548861345a90919063ffffffff16565b61347090919063ffffffff16565b905060125460145482612ba49190613d82565b612bae9190613e0b565b60176000828254612bbf9190613f60565b9250508190555060125460155482612bd79190613d82565b612be19190613e0b565b60186000828254612bf29190613f60565b9250508190555060125460135482612c0a9190613d82565b612c149190613e0b565b60166000828254612c259190613f60565b92505081905550612d56565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8c57506000600e54115b15612d5557612cb96064612cab600e548861345a90919063ffffffff16565b61347090919063ffffffff16565b9050600e5460105482612ccc9190613d82565b612cd69190613e0b565b60176000828254612ce79190613f60565b92505081905550600e5460115482612cff9190613d82565b612d099190613e0b565b60186000828254612d1a9190613f60565b92505081905550600e54600f5482612d329190613d82565b612d3c9190613e0b565b60166000828254612d4d9190613f60565b925050819055505b5b6000811115612d6b57612d6a873083612ef6565b5b8085612d77919061481e565b94505b612d85878787612ef6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c906144b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb9061454a565b60405180910390fd5b612fdf838383613486565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c906148c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f89190613f60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315c9190613a5f565b60405180910390a361316f84848461348b565b50505050565b6000613180306110c9565b905060006018546016546017546131979190613f60565b6131a19190613f60565b90506000808314806131b35750600082145b156131c057505050613458565b60146009546131cf9190613d82565b8311156131e85760146009546131e59190613d82565b92505b6000600283601754866131fb9190613d82565b6132059190613e0b565b61320f9190613e0b565b90506000613226828661349090919063ffffffff16565b90506000479050613236826134a6565b600061324b824761349090919063ffffffff16565b90506000613276876132686016548561345a90919063ffffffff16565b61347090919063ffffffff16565b905060006132a1886132936018548661345a90919063ffffffff16565b61347090919063ffffffff16565b905060008183856132b2919061481e565b6132bc919061481e565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161331c90614915565b60006040518083038185875af1925050503d8060008114613359576040519150601f19603f3d011682016040523d82523d6000602084013e61335e565b606091505b5050809850506000871180156133745750600081115b156133bf5761338387826136e3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682896040516133b69392919061492a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161340590614915565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505080985050505050505050505050505b565b600081836134689190613d82565b905092915050565b6000818361347e9190613e0b565b905092915050565b505050565b505050565b6000818361349e919061481e565b905092915050565b6000600267ffffffffffffffff8111156134c3576134c2614961565b5b6040519080825280602002602001820160405280156134f15781602001602082028036833780820191505090505b509050308160008151811061350957613508614990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d291906149d4565b816001815181106135e6576135e5614990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061364b307f000000000000000000000000000000000000000000000000000000000000000084611f2f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136ad959493929190614afa565b600060405180830381600087803b1580156136c757600080fd5b505af11580156136db573d6000803e3d6000fd5b505050505050565b61370e307f000000000000000000000000000000000000000000000000000000000000000084611f2f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161379596959493929190614b54565b60606040518083038185885af11580156137b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137d89190614bca565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138195780820151818401526020810190506137fe565b83811115613828576000848401525b50505050565b6000601f19601f8301169050919050565b600061384a826137df565b61385481856137ea565b93506138648185602086016137fb565b61386d8161382e565b840191505092915050565b60006020820190508181036000830152613892818461383f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138ca8261389f565b9050919050565b6138da816138bf565b81146138e557600080fd5b50565b6000813590506138f7816138d1565b92915050565b6000819050919050565b613910816138fd565b811461391b57600080fd5b50565b60008135905061392d81613907565b92915050565b6000806040838503121561394a5761394961389a565b5b6000613958858286016138e8565b92505060206139698582860161391e565b9150509250929050565b60008115159050919050565b61398881613973565b82525050565b60006020820190506139a3600083018461397f565b92915050565b6000602082840312156139bf576139be61389a565b5b60006139cd848285016138e8565b91505092915050565b6000819050919050565b60006139fb6139f66139f18461389f565b6139d6565b61389f565b9050919050565b6000613a0d826139e0565b9050919050565b6000613a1f82613a02565b9050919050565b613a2f81613a14565b82525050565b6000602082019050613a4a6000830184613a26565b92915050565b613a59816138fd565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f61389a565b5b6000613a9e8482850161391e565b91505092915050565b600080600060608486031215613ac057613abf61389a565b5b6000613ace868287016138e8565b9350506020613adf868287016138e8565b9250506040613af08682870161391e565b9150509250925092565b613b03816138bf565b82525050565b6000602082019050613b1e6000830184613afa565b92915050565b600060ff82169050919050565b613b3a81613b24565b82525050565b6000602082019050613b556000830184613b31565b92915050565b613b6481613973565b8114613b6f57600080fd5b50565b600081359050613b8181613b5b565b92915050565b60008060408385031215613b9e57613b9d61389a565b5b6000613bac858286016138e8565b9250506020613bbd85828601613b72565b9150509250929050565b600080600060608486031215613be057613bdf61389a565b5b6000613bee8682870161391e565b9350506020613bff8682870161391e565b9250506040613c108682870161391e565b9150509250925092565b600060208284031215613c3057613c2f61389a565b5b6000613c3e84828501613b72565b91505092915050565b60008060408385031215613c5e57613c5d61389a565b5b6000613c6c858286016138e8565b9250506020613c7d858286016138e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cce57607f821691505b602082108103613ce157613ce0613c87565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d1d6020836137ea565b9150613d2882613ce7565b602082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8d826138fd565b9150613d98836138fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dd157613dd0613d53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e16826138fd565b9150613e21836138fd565b925082613e3157613e30613ddc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613e98602f836137ea565b9150613ea382613e3c565b604082019050919050565b60006020820190508181036000830152613ec781613e8b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f2a6028836137ea565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b6000613f6b826138fd565b9150613f76836138fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fab57613faa613d53565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140126039836137ea565b915061401d82613fb6565b604082019050919050565b6000602082019050818103600083015261404181614005565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140a46025836137ea565b91506140af82614048565b604082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141366024836137ea565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006141c86035836137ea565b91506141d38261416c565b604082019050919050565b600060208201905081810360008301526141f7816141bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061425a6034836137ea565b9150614265826141fe565b604082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142ec6026836137ea565b91506142f782614290565b604082019050919050565b6000602082019050818103600083015261431b816142df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061437e6024836137ea565b915061438982614322565b604082019050919050565b600060208201905081810360008301526143ad81614371565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144106022836137ea565b915061441b826143b4565b604082019050919050565b6000602082019050818103600083015261443f81614403565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144a26025836137ea565b91506144ad82614446565b604082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145346023836137ea565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145a06016836137ea565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006146586049836137ea565b9150614663826145d6565b606082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146ea6035836137ea565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147566013836137ea565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147e86036836137ea565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b6000614829826138fd565b9150614834836138fd565b92508282101561484757614846613d53565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148ae6026836137ea565b91506148b982614852565b604082019050919050565b600060208201905081810360008301526148dd816148a1565b9050919050565b600081905092915050565b50565b60006148ff6000836148e4565b915061490a826148ef565b600082019050919050565b6000614920826148f2565b9150819050919050565b600060608201905061493f6000830186613a50565b61494c6020830185613a50565b6149596040830184613a50565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149ce816138d1565b92915050565b6000602082840312156149ea576149e961389a565b5b60006149f8848285016149bf565b91505092915050565b6000819050919050565b6000614a26614a21614a1c84614a01565b6139d6565b6138fd565b9050919050565b614a3681614a0b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a71816138bf565b82525050565b6000614a838383614a68565b60208301905092915050565b6000602082019050919050565b6000614aa782614a3c565b614ab18185614a47565b9350614abc83614a58565b8060005b83811015614aed578151614ad48882614a77565b9750614adf83614a8f565b925050600181019050614ac0565b5085935050505092915050565b600060a082019050614b0f6000830188613a50565b614b1c6020830187614a2d565b8181036040830152614b2e8186614a9c565b9050614b3d6060830185613afa565b614b4a6080830184613a50565b9695505050505050565b600060c082019050614b696000830189613afa565b614b766020830188613a50565b614b836040830187614a2d565b614b906060830186614a2d565b614b9d6080830185613afa565b614baa60a0830184613a50565b979650505050505050565b600081519050614bc481613907565b92915050565b600080600060608486031215614be357614be261389a565b5b6000614bf186828701614bb5565b9350506020614c0286828701614bb5565b9250506040614c1386828701614bb5565b915050925092509256fea2646970667358221220daaaa043c02ee915bd449e0d42b4d2e91e7f8c48349ed5d734af02b745bb58bc64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638ea5220f11610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bad578063f2fde38b14610bd8578063f637434214610c01578063f8b45b0514610c2c5761030a565b8063dd62ed3e14610b1a578063e2f4560514610b57578063e884f26014610b825761030a565b8063c17b5b8c14610a0a578063c18bc19514610a33578063c876d0b914610a5c578063c8c8ebe414610a87578063d257b34f14610ab2578063d85ba06314610aef5761030a565b80639fccce3211610149578063a9059cbb11610123578063a9059cbb1461093c578063b62496f514610979578063bbc0c742146109b6578063c0246668146109e15761030a565b80639fccce32146108a9578063a0d82dc5146108d4578063a457c2d7146108ff5761030a565b80638ea5220f146107ab57806392136913146107d6578063924de9b71461080157806395d89b411461082a5780639a7a23d6146108555780639c3b4fdc1461087e5761030a565b80634a62bb651161024f578063751039fc116102085780637bce5a04116101e25780637bce5a04146107155780638095d564146107405780638a8c523c146107695780638da5cb5b146107805761030a565b8063751039fc146106965780637571336a146106c157806375f0a874146106ea5761030a565b80634a62bb65146105845780634fbee193146105af5780636a486a8e146105ec5780636ddd17131461061757806370a0823114610642578063715018a61461067f5761030a565b80631f3fed8f116102bc57806327c8f8351161029657806327c8f835146104c6578063313ce567146104f1578063395093511461051c57806349bd5a5e146105595761030a565b80631f3fed8f14610435578063203e727e1461046057806323b872dd146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631a8145bb1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c57565b6040516103319190613878565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613933565b610ce9565b60405161036e919061398e565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906139a9565b610d07565b6040516103ab919061398e565b60405180910390f35b3480156103c057600080fd5b506103c9610d27565b6040516103d69190613a35565b60405180910390f35b3480156103eb57600080fd5b506103f4610d4b565b6040516104019190613a5f565b60405180910390f35b34801561041657600080fd5b5061041f610d55565b60405161042c9190613a5f565b60405180910390f35b34801561044157600080fd5b5061044a610d5b565b6040516104579190613a5f565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613a7a565b610d61565b005b34801561049557600080fd5b506104b060048036038101906104ab9190613aa7565b610e70565b6040516104bd919061398e565b60405180910390f35b3480156104d257600080fd5b506104db610f68565b6040516104e89190613b09565b60405180910390f35b3480156104fd57600080fd5b50610506610f6e565b6040516105139190613b40565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613933565b610f77565b604051610550919061398e565b60405180910390f35b34801561056557600080fd5b5061056e611023565b60405161057b9190613b09565b60405180910390f35b34801561059057600080fd5b50610599611047565b6040516105a6919061398e565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d191906139a9565b61105a565b6040516105e3919061398e565b60405180910390f35b3480156105f857600080fd5b506106016110b0565b60405161060e9190613a5f565b60405180910390f35b34801561062357600080fd5b5061062c6110b6565b604051610639919061398e565b60405180910390f35b34801561064e57600080fd5b50610669600480360381019061066491906139a9565b6110c9565b6040516106769190613a5f565b60405180910390f35b34801561068b57600080fd5b50610694611111565b005b3480156106a257600080fd5b506106ab611199565b6040516106b8919061398e565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613b87565b611239565b005b3480156106f657600080fd5b506106ff611310565b60405161070c9190613b09565b60405180910390f35b34801561072157600080fd5b5061072a611336565b6040516107379190613a5f565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613bc7565b61133c565b005b34801561077557600080fd5b5061077e6113f5565b005b34801561078c57600080fd5b506107956114a9565b6040516107a29190613b09565b60405180910390f35b3480156107b757600080fd5b506107c06114d3565b6040516107cd9190613b09565b60405180910390f35b3480156107e257600080fd5b506107eb6114f9565b6040516107f89190613a5f565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613c1a565b6114ff565b005b34801561083657600080fd5b5061083f611598565b60405161084c9190613878565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613b87565b61162a565b005b34801561088a57600080fd5b50610893611742565b6040516108a09190613a5f565b60405180910390f35b3480156108b557600080fd5b506108be611748565b6040516108cb9190613a5f565b60405180910390f35b3480156108e057600080fd5b506108e961174e565b6040516108f69190613a5f565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613933565b611754565b604051610933919061398e565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190613933565b61183f565b604051610970919061398e565b60405180910390f35b34801561098557600080fd5b506109a0600480360381019061099b91906139a9565b61185d565b6040516109ad919061398e565b60405180910390f35b3480156109c257600080fd5b506109cb61187d565b6040516109d8919061398e565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613b87565b611890565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613bc7565b6119b5565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613a7a565b611a6e565b005b348015610a6857600080fd5b50610a71611b7d565b604051610a7e919061398e565b60405180910390f35b348015610a9357600080fd5b50610a9c611b90565b604051610aa99190613a5f565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad49190613a7a565b611b96565b604051610ae6919061398e565b60405180910390f35b348015610afb57600080fd5b50610b04611ceb565b604051610b119190613a5f565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c9190613c47565b611cf1565b604051610b4e9190613a5f565b60405180910390f35b348015610b6357600080fd5b50610b6c611d78565b604051610b799190613a5f565b60405180910390f35b348015610b8e57600080fd5b50610b97611d7e565b604051610ba4919061398e565b60405180910390f35b348015610bb957600080fd5b50610bc2611e1e565b604051610bcf9190613a5f565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa91906139a9565b611e24565b005b348015610c0d57600080fd5b50610c16611f1b565b604051610c239190613a5f565b60405180910390f35b348015610c3857600080fd5b50610c41611f21565b604051610c4e9190613a5f565b60405180910390f35b606060038054610c6690613cb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9290613cb6565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b5050505050905090565b6000610cfd610cf6611f27565b8484611f2f565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60175481565b60165481565b610d69611f27565b73ffffffffffffffffffffffffffffffffffffffff16610d876114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613d33565b60405180910390fd5b670de0b6b3a76400006103e86001610df3610d4b565b610dfd9190613d82565b610e079190613e0b565b610e119190613e0b565b811015610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90613eae565b60405180910390fd5b670de0b6b3a764000081610e679190613d82565b60088190555050565b6000610e7d8484846120f8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613f40565b60405180910390fd5b610f5c85610f54611f27565b858403611f2f565b60019150509392505050565b61dead81565b60006012905090565b6000611019610f84611f27565b848460016000610f92611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110149190613f60565b611f2f565b6001905092915050565b7f0000000000000000000000003a46db9ba45623d381c54ac09e71c0252b5ddfec81565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611119611f27565b73ffffffffffffffffffffffffffffffffffffffff166111376114a9565b73ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490613d33565b60405180910390fd5b6111976000612d8f565b565b60006111a3611f27565b73ffffffffffffffffffffffffffffffffffffffff166111c16114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613d33565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611241611f27565b73ffffffffffffffffffffffffffffffffffffffff1661125f6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613d33565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611344611f27565b73ffffffffffffffffffffffffffffffffffffffff166113626114a9565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90613d33565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546113e09190613f60565b6113ea9190613f60565b600e81905550505050565b6113fd611f27565b73ffffffffffffffffffffffffffffffffffffffff1661141b6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890613d33565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611507611f27565b73ffffffffffffffffffffffffffffffffffffffff166115256114a9565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613d33565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546115a790613cb6565b80601f01602080910402602001604051908101604052809291908181526020018280546115d390613cb6565b80156116205780601f106115f557610100808354040283529160200191611620565b820191906000526020600020905b81548152906001019060200180831161160357829003601f168201915b5050505050905090565b611632611f27565b73ffffffffffffffffffffffffffffffffffffffff166116506114a9565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613d33565b60405180910390fd5b7f0000000000000000000000003a46db9ba45623d381c54ac09e71c0252b5ddfec73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614028565b60405180910390fd5b61173e8282612e55565b5050565b60115481565b60185481565b60155481565b60008060016000611763611f27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906140ba565b60405180910390fd5b61183461182b611f27565b85858403611f2f565b600191505092915050565b600061185361184c611f27565b84846120f8565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611898611f27565b73ffffffffffffffffffffffffffffffffffffffff166118b66114a9565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613d33565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119a9919061398e565b60405180910390a25050565b6119bd611f27565b73ffffffffffffffffffffffffffffffffffffffff166119db6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890613d33565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611a599190613f60565b611a639190613f60565b601281905550505050565b611a76611f27565b73ffffffffffffffffffffffffffffffffffffffff16611a946114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190613d33565b60405180910390fd5b670de0b6b3a76400006103e86005611b00610d4b565b611b0a9190613d82565b611b149190613e0b565b611b1e9190613e0b565b811015611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b579061414c565b60405180910390fd5b670de0b6b3a764000081611b749190613d82565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b6000611ba0611f27565b73ffffffffffffffffffffffffffffffffffffffff16611bbe6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b90613d33565b60405180910390fd5b620186a06001611c22610d4b565b611c2c9190613d82565b611c369190613e0b565b821015611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906141de565b60405180910390fd5b6103e86005611c85610d4b565b611c8f9190613d82565b611c999190613e0b565b821115611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290614270565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611d88611f27565b73ffffffffffffffffffffffffffffffffffffffff16611da66114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613d33565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b611e2c611f27565b73ffffffffffffffffffffffffffffffffffffffff16611e4a6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614302565b60405180910390fd5b611f1881612d8f565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614426565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120eb9190613a5f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e906144b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd9061454a565b60405180910390fd5b600081036121ef576121ea83836000612ef6565b612d8a565b600b60009054906101000a900460ff16156128b25761220c6114a9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561227a575061224a6114a9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122ed575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123065750600560149054906101000a900460ff16155b156128b157600b60019054906101000a900460ff1661240057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123c05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f6906145b6565b60405180910390fd5b5b600d60009054906101000a900460ff16156125c85761241d6114a9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124a457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fc57507f0000000000000000000000003a46db9ba45623d381c54ac09e71c0252b5ddfec73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125c75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061466e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561266b5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612712576008548111156126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614700565b60405180910390fd5b600a546126c1836110c9565b826126cc9190613f60565b111561270d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127049061476c565b60405180910390fd5b6128b0565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127b55750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612804576008548111156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f6906147fe565b60405180910390fd5b6128af565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128ae57600a54612861836110c9565b8261286c9190613f60565b11156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a49061476c565b60405180910390fd5b5b5b5b5b5b60006128bd306110c9565b9050600060095482101590508080156128e25750600b60029054906101000a900460ff165b80156128fb5750600560149054906101000a900460ff16155b80156129515750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a75750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129fd5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576001600560146101000a81548160ff021916908315150217905550612a25613175565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612af75750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b0157600090505b60008115612d7a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b6457506000601254115b15612c3157612b916064612b836012548861345a90919063ffffffff16565b61347090919063ffffffff16565b905060125460145482612ba49190613d82565b612bae9190613e0b565b60176000828254612bbf9190613f60565b9250508190555060125460155482612bd79190613d82565b612be19190613e0b565b60186000828254612bf29190613f60565b9250508190555060125460135482612c0a9190613d82565b612c149190613e0b565b60166000828254612c259190613f60565b92505081905550612d56565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8c57506000600e54115b15612d5557612cb96064612cab600e548861345a90919063ffffffff16565b61347090919063ffffffff16565b9050600e5460105482612ccc9190613d82565b612cd69190613e0b565b60176000828254612ce79190613f60565b92505081905550600e5460115482612cff9190613d82565b612d099190613e0b565b60186000828254612d1a9190613f60565b92505081905550600e54600f5482612d329190613d82565b612d3c9190613e0b565b60166000828254612d4d9190613f60565b925050819055505b5b6000811115612d6b57612d6a873083612ef6565b5b8085612d77919061481e565b94505b612d85878787612ef6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c906144b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb9061454a565b60405180910390fd5b612fdf838383613486565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c906148c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f89190613f60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315c9190613a5f565b60405180910390a361316f84848461348b565b50505050565b6000613180306110c9565b905060006018546016546017546131979190613f60565b6131a19190613f60565b90506000808314806131b35750600082145b156131c057505050613458565b60146009546131cf9190613d82565b8311156131e85760146009546131e59190613d82565b92505b6000600283601754866131fb9190613d82565b6132059190613e0b565b61320f9190613e0b565b90506000613226828661349090919063ffffffff16565b90506000479050613236826134a6565b600061324b824761349090919063ffffffff16565b90506000613276876132686016548561345a90919063ffffffff16565b61347090919063ffffffff16565b905060006132a1886132936018548661345a90919063ffffffff16565b61347090919063ffffffff16565b905060008183856132b2919061481e565b6132bc919061481e565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161331c90614915565b60006040518083038185875af1925050503d8060008114613359576040519150601f19603f3d011682016040523d82523d6000602084013e61335e565b606091505b5050809850506000871180156133745750600081115b156133bf5761338387826136e3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682896040516133b69392919061492a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161340590614915565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505080985050505050505050505050505b565b600081836134689190613d82565b905092915050565b6000818361347e9190613e0b565b905092915050565b505050565b505050565b6000818361349e919061481e565b905092915050565b6000600267ffffffffffffffff8111156134c3576134c2614961565b5b6040519080825280602002602001820160405280156134f15781602001602082028036833780820191505090505b509050308160008151811061350957613508614990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d291906149d4565b816001815181106135e6576135e5614990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061364b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f2f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136ad959493929190614afa565b600060405180830381600087803b1580156136c757600080fd5b505af11580156136db573d6000803e3d6000fd5b505050505050565b61370e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f2f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161379596959493929190614b54565b60606040518083038185885af11580156137b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137d89190614bca565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138195780820151818401526020810190506137fe565b83811115613828576000848401525b50505050565b6000601f19601f8301169050919050565b600061384a826137df565b61385481856137ea565b93506138648185602086016137fb565b61386d8161382e565b840191505092915050565b60006020820190508181036000830152613892818461383f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138ca8261389f565b9050919050565b6138da816138bf565b81146138e557600080fd5b50565b6000813590506138f7816138d1565b92915050565b6000819050919050565b613910816138fd565b811461391b57600080fd5b50565b60008135905061392d81613907565b92915050565b6000806040838503121561394a5761394961389a565b5b6000613958858286016138e8565b92505060206139698582860161391e565b9150509250929050565b60008115159050919050565b61398881613973565b82525050565b60006020820190506139a3600083018461397f565b92915050565b6000602082840312156139bf576139be61389a565b5b60006139cd848285016138e8565b91505092915050565b6000819050919050565b60006139fb6139f66139f18461389f565b6139d6565b61389f565b9050919050565b6000613a0d826139e0565b9050919050565b6000613a1f82613a02565b9050919050565b613a2f81613a14565b82525050565b6000602082019050613a4a6000830184613a26565b92915050565b613a59816138fd565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f61389a565b5b6000613a9e8482850161391e565b91505092915050565b600080600060608486031215613ac057613abf61389a565b5b6000613ace868287016138e8565b9350506020613adf868287016138e8565b9250506040613af08682870161391e565b9150509250925092565b613b03816138bf565b82525050565b6000602082019050613b1e6000830184613afa565b92915050565b600060ff82169050919050565b613b3a81613b24565b82525050565b6000602082019050613b556000830184613b31565b92915050565b613b6481613973565b8114613b6f57600080fd5b50565b600081359050613b8181613b5b565b92915050565b60008060408385031215613b9e57613b9d61389a565b5b6000613bac858286016138e8565b9250506020613bbd85828601613b72565b9150509250929050565b600080600060608486031215613be057613bdf61389a565b5b6000613bee8682870161391e565b9350506020613bff8682870161391e565b9250506040613c108682870161391e565b9150509250925092565b600060208284031215613c3057613c2f61389a565b5b6000613c3e84828501613b72565b91505092915050565b60008060408385031215613c5e57613c5d61389a565b5b6000613c6c858286016138e8565b9250506020613c7d858286016138e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cce57607f821691505b602082108103613ce157613ce0613c87565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d1d6020836137ea565b9150613d2882613ce7565b602082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8d826138fd565b9150613d98836138fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dd157613dd0613d53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e16826138fd565b9150613e21836138fd565b925082613e3157613e30613ddc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613e98602f836137ea565b9150613ea382613e3c565b604082019050919050565b60006020820190508181036000830152613ec781613e8b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f2a6028836137ea565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b6000613f6b826138fd565b9150613f76836138fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fab57613faa613d53565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140126039836137ea565b915061401d82613fb6565b604082019050919050565b6000602082019050818103600083015261404181614005565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140a46025836137ea565b91506140af82614048565b604082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141366024836137ea565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006141c86035836137ea565b91506141d38261416c565b604082019050919050565b600060208201905081810360008301526141f7816141bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061425a6034836137ea565b9150614265826141fe565b604082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142ec6026836137ea565b91506142f782614290565b604082019050919050565b6000602082019050818103600083015261431b816142df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061437e6024836137ea565b915061438982614322565b604082019050919050565b600060208201905081810360008301526143ad81614371565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144106022836137ea565b915061441b826143b4565b604082019050919050565b6000602082019050818103600083015261443f81614403565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144a26025836137ea565b91506144ad82614446565b604082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145346023836137ea565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145a06016836137ea565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006146586049836137ea565b9150614663826145d6565b606082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146ea6035836137ea565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147566013836137ea565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147e86036836137ea565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b6000614829826138fd565b9150614834836138fd565b92508282101561484757614846613d53565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148ae6026836137ea565b91506148b982614852565b604082019050919050565b600060208201905081810360008301526148dd816148a1565b9050919050565b600081905092915050565b50565b60006148ff6000836148e4565b915061490a826148ef565b600082019050919050565b6000614920826148f2565b9150819050919050565b600060608201905061493f6000830186613a50565b61494c6020830185613a50565b6149596040830184613a50565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149ce816138d1565b92915050565b6000602082840312156149ea576149e961389a565b5b60006149f8848285016149bf565b91505092915050565b6000819050919050565b6000614a26614a21614a1c84614a01565b6139d6565b6138fd565b9050919050565b614a3681614a0b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a71816138bf565b82525050565b6000614a838383614a68565b60208301905092915050565b6000602082019050919050565b6000614aa782614a3c565b614ab18185614a47565b9350614abc83614a58565b8060005b83811015614aed578151614ad48882614a77565b9750614adf83614a8f565b925050600181019050614ac0565b5085935050505092915050565b600060a082019050614b0f6000830188613a50565b614b1c6020830187614a2d565b8181036040830152614b2e8186614a9c565b9050614b3d6060830185613afa565b614b4a6080830184613a50565b9695505050505050565b600060c082019050614b696000830189613afa565b614b766020830188613a50565b614b836040830187614a2d565b614b906060830186614a2d565b614b9d6080830185613afa565b614baa60a0830184613a50565b979650505050505050565b600081519050614bc481613907565b92915050565b600080600060608486031215614be357614be261389a565b5b6000614bf186828701614bb5565b9350506020614c0286828701614bb5565b9250506040614c1386828701614bb5565b915050925092509256fea2646970667358221220daaaa043c02ee915bd449e0d42b4d2e91e7f8c48349ed5d734af02b745bb58bc64736f6c634300080f0033

Deployed Bytecode Sourcemap

17340:15384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4735:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18683:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17417:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4142:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18467:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18427;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23476:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4912:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17520:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5412:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17475:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17797:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25093:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18282:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17877:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4258:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1256:103;;;;;;;;;;;;;:::i;:::-;;22584:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17612:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22060:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22420:112;;;;;;;;;;;;;:::i;:::-;;1033:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17649:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18317:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24585:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18249:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18507:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18393:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5635:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4393:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18904:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17837:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24395:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21775:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23759:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18095:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17682:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22971:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18144:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4576:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17724:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22766:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18212:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1367:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18355:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17764:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3821:100;3875:13;3908:5;3901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:100;:::o;4735:169::-;4818:4;4835:39;4844:12;:10;:12::i;:::-;4858:7;4867:6;4835:8;:39::i;:::-;4892:4;4885:11;;4735:169;;;;:::o;18683:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;17417:51::-;;;:::o;4142:108::-;4203:7;4230:12;;4223:19;;4142:108;:::o;18467:33::-;;;;:::o;18427:::-;;;;:::o;23476:275::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23613:4:::1;23605;23600:1;23584:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23583:26;;;;:::i;:::-;23582:35;;;;:::i;:::-;23572:6;:45;;23550:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;23736:6;23726;:17;;;;:::i;:::-;23703:20;:40;;;;23476:275:::0;:::o;4912:492::-;5052:4;5069:36;5079:6;5087:9;5098:6;5069:9;:36::i;:::-;5118:24;5145:11;:19;5157:6;5145:19;;;;;;;;;;;;;;;:33;5165:12;:10;:12::i;:::-;5145:33;;;;;;;;;;;;;;;;5118:60;;5217:6;5197:16;:26;;5189:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5304:57;5313:6;5321:12;:10;:12::i;:::-;5354:6;5335:16;:25;5304:8;:57::i;:::-;5392:4;5385:11;;;4912:492;;;;;:::o;17520:53::-;17566:6;17520:53;:::o;4041:93::-;4099:5;4124:2;4117:9;;4041:93;:::o;5412:215::-;5500:4;5517:80;5526:12;:10;:12::i;:::-;5540:7;5586:10;5549:11;:25;5561:12;:10;:12::i;:::-;5549:25;;;;;;;;;;;;;;;:34;5575:7;5549:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5517:8;:80::i;:::-;5615:4;5608:11;;5412:215;;;;:::o;17475:38::-;;;:::o;17797:33::-;;;;;;;;;;;;;:::o;25093:126::-;25159:4;25183:19;:28;25203:7;25183:28;;;;;;;;;;;;;;;;;;;;;;;;;25176:35;;25093:126;;;:::o;18282:28::-;;;;:::o;17877:31::-;;;;;;;;;;;;;:::o;4258:127::-;4332:7;4359:9;:18;4369:7;4359:18;;;;;;;;;;;;;;;;4352:25;;4258:127;;;:::o;1256:103::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1321:30:::1;1348:1;1321:18;:30::i;:::-;1256:103::o:0;22584:121::-;22636:4;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22670:5:::1;22653:14;;:22;;;;;;;;;;;;;;;;;;22693:4;22686:11;;22584:121:::0;:::o;24024:167::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24179:4:::1;24137:31;:39;24169:6;24137:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24024:167:::0;;:::o;17612:30::-;;;;;;;;;;;;;:::o;18175:::-;;;;:::o;22060:269::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22183:9:::1;22165:15;:27;;;;22215:9;22197:15;:27;;;;22247:3;22235:9;:15;;;;22312:9;;22294:15;;22276;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;22261:12;:60;;;;22060:269:::0;;;:::o;22420:112::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22491:4:::1;22475:13;;:20;;;;;;;;;;;;;;;;;;22520:4;22506:11;;:18;;;;;;;;;;;;;;;;;;22420:112::o:0;1033:87::-;1079:7;1106:6;;;;;;;;;;;1099:13;;1033:87;:::o;17649:24::-;;;;;;;;;;;;;:::o;18317:31::-;;;;:::o;24287:100::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24372:7:::1;24358:11;;:21;;;;;;;;;;;;;;;;;;24287:100:::0;:::o;3929:104::-;3985:13;4018:7;4011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3929:104;:::o;24585:304::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24729:13:::1;24721:21;;:4;:21;;::::0;24699:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24840:41;24869:4;24875:5;24840:28;:41::i;:::-;24585:304:::0;;:::o;18249:24::-;;;;:::o;18507:27::-;;;;:::o;18393:25::-;;;;:::o;5635:413::-;5728:4;5745:24;5772:11;:25;5784:12;:10;:12::i;:::-;5772:25;;;;;;;;;;;;;;;:34;5798:7;5772:34;;;;;;;;;;;;;;;;5745:61;;5845:15;5825:16;:35;;5817:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5938:67;5947:12;:10;:12::i;:::-;5961:7;5989:15;5970:16;:34;5938:8;:67::i;:::-;6036:4;6029:11;;;5635:413;;;;:::o;4393:175::-;4479:4;4496:42;4506:12;:10;:12::i;:::-;4520:9;4531:6;4496:9;:42::i;:::-;4556:4;4549:11;;4393:175;;;;:::o;18904:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;17837:33::-;;;;;;;;;;;;;:::o;24395:182::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24511:8:::1;24480:19;:28;24500:7;24480:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24551:7;24535:34;;;24560:8;24535:34;;;;;;:::i;:::-;;;;;;;;24395:182:::0;;:::o;21775:277::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21900:9:::1;21881:16;:28;;;;21933:9;21914:16;:28;;;;21966:3;21953:10;:16;;;;22034:10;;22015:16;;21996;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;21980:13;:64;;;;21775:277:::0;;;:::o;23759:256::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23899:4:::1;23891;23886:1;23870:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23869:26;;;;:::i;:::-;23868:35;;;;:::i;:::-;23858:6;:45;;23836:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;24000:6;23990;:17;;;;:::i;:::-;23978:9;:29;;;;23759:256:::0;:::o;18095:40::-;;;;;;;;;;;;;:::o;17682:35::-;;;;:::o;22971:497::-;23079:4;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23158:6:::1;23153:1;23137:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23136:28;;;;:::i;:::-;23123:9;:41;;23101:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;23313:4;23308:1;23292:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23291:26;;;;:::i;:::-;23278:9;:39;;23256:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;23429:9;23408:18;:30;;;;23456:4;23449:11;;22971:497:::0;;;:::o;18144:27::-;;;;:::o;4576:151::-;4665:7;4692:11;:18;4704:5;4692:18;;;;;;;;;;;;;;;:27;4711:7;4692:27;;;;;;;;;;;;;;;;4685:34;;4576:151;;;;:::o;17724:33::-;;;;:::o;22766:135::-;22826:4;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22866:5:::1;22843:20;;:28;;;;;;;;;;;;;;;;;;22889:4;22882:11;;22766:135:::0;:::o;18212:30::-;;;;:::o;1367:201::-;1179:12;:10;:12::i;:::-;1168:23;;:7;:5;:7::i;:::-;:23;;;1160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1476:1:::1;1456:22;;:8;:22;;::::0;1448:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1532:28;1551:8;1532:18;:28::i;:::-;1367:201:::0;:::o;18355:31::-;;;;:::o;17764:24::-;;;;:::o;384:98::-;437:7;464:10;457:17;;384:98;:::o;7803:380::-;7956:1;7939:19;;:5;:19;;;7931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8037:1;8018:21;;:7;:21;;;8010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8121:6;8091:11;:18;8103:5;8091:18;;;;;;;;;;;;;;;:27;8110:7;8091:27;;;;;;;;;;;;;;;:36;;;;8159:7;8143:32;;8152:5;8143:32;;;8168:6;8143:32;;;;;;:::i;:::-;;;;;;;;7803:380;;;:::o;25227:4717::-;25375:1;25359:18;;:4;:18;;;25351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25452:1;25438:16;;:2;:16;;;25430:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25521:1;25511:6;:11;25507:93;;25539:28;25555:4;25561:2;25565:1;25539:15;:28::i;:::-;25582:7;;25507:93;25616:14;;;;;;;;;;;25612:2487;;;25677:7;:5;:7::i;:::-;25669:15;;:4;:15;;;;:49;;;;;25711:7;:5;:7::i;:::-;25705:13;;:2;:13;;;;25669:49;:86;;;;;25753:1;25739:16;;:2;:16;;;;25669:86;:128;;;;;25790:6;25776:21;;:2;:21;;;;25669:128;:158;;;;;25819:8;;;;;;;;;;;25818:9;25669:158;25647:2441;;;25867:13;;;;;;;;;;;25862:223;;25939:19;:25;25959:4;25939:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25968:19;:23;25988:2;25968:23;;;;;;;;;;;;;;;;;;;;;;;;;25939:52;25905:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:223;26241:20;;;;;;;;;;;26237:641;;;26322:7;:5;:7::i;:::-;26316:13;;:2;:13;;;;:72;;;;;26372:15;26358:30;;:2;:30;;;;26316:72;:129;;;;;26431:13;26417:28;;:2;:28;;;;26316:129;26286:573;;;26609:12;26534:28;:39;26563:9;26534:39;;;;;;;;;;;;;;;;:87;26496:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26823:12;26781:28;:39;26810:9;26781:39;;;;;;;;;;;;;;;:54;;;;26286:573;26237:641;26952:25;:31;26978:4;26952:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27009:31;:35;27041:2;27009:35;;;;;;;;;;;;;;;;;;;;;;;;;27008:36;26952:92;26926:1147;;;27131:20;;27121:6;:30;;27087:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27339:9;;27322:13;27332:2;27322:9;:13::i;:::-;27313:6;:22;;;;:::i;:::-;:35;;27279:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26926:1147;;;27517:25;:29;27543:2;27517:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27572:31;:37;27604:4;27572:37;;;;;;;;;;;;;;;;;;;;;;;;;27571:38;27517:92;27491:582;;;27696:20;;27686:6;:30;;27652:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;27491:582;;;27853:31;:35;27885:2;27853:35;;;;;;;;;;;;;;;;;;;;;;;;;27848:225;;27973:9;;27956:13;27966:2;27956:9;:13::i;:::-;27947:6;:22;;;;:::i;:::-;:35;;27913:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27848:225;27491:582;26926:1147;25647:2441;25612:2487;28111:28;28142:24;28160:4;28142:9;:24::i;:::-;28111:55;;28179:12;28218:18;;28194:20;:42;;28179:57;;28267:7;:35;;;;;28291:11;;;;;;;;;;;28267:35;:61;;;;;28320:8;;;;;;;;;;;28319:9;28267:61;:110;;;;;28346:25;:31;28372:4;28346:31;;;;;;;;;;;;;;;;;;;;;;;;;28345:32;28267:110;:153;;;;;28395:19;:25;28415:4;28395:25;;;;;;;;;;;;;;;;;;;;;;;;;28394:26;28267:153;:194;;;;;28438:19;:23;28458:2;28438:23;;;;;;;;;;;;;;;;;;;;;;;;;28437:24;28267:194;28249:326;;;28499:4;28488:8;;:15;;;;;;;;;;;;;;;;;;28520:10;:8;:10::i;:::-;28558:5;28547:8;;:16;;;;;;;;;;;;;;;;;;28249:326;28587:12;28603:8;;;;;;;;;;;28602:9;28587:24;;28713:19;:25;28733:4;28713:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28742:19;:23;28762:2;28742:23;;;;;;;;;;;;;;;;;;;;;;;;;28713:52;28709:100;;;28792:5;28782:15;;28709:100;28821:12;28926:7;28922:969;;;28978:25;:29;29004:2;28978:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29027:1;29011:13;;:17;28978:50;28974:768;;;29056:34;29086:3;29056:25;29067:13;;29056:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29049:41;;29159:13;;29139:16;;29132:4;:23;;;;:::i;:::-;29131:41;;;;:::i;:::-;29109:18;;:63;;;;;;;:::i;:::-;;;;;;;;29229:13;;29215:10;;29208:4;:17;;;;:::i;:::-;29207:35;;;;:::i;:::-;29191:12;;:51;;;;;;;:::i;:::-;;;;;;;;29311:13;;29291:16;;29284:4;:23;;;;:::i;:::-;29283:41;;;;:::i;:::-;29261:18;;:63;;;;;;;:::i;:::-;;;;;;;;28974:768;;;29386:25;:31;29412:4;29386:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29436:1;29421:12;;:16;29386:51;29382:360;;;29465:33;29494:3;29465:24;29476:12;;29465:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29458:40;;29566:12;;29547:15;;29540:4;:22;;;;:::i;:::-;29539:39;;;;:::i;:::-;29517:18;;:61;;;;;;;:::i;:::-;;;;;;;;29634:12;;29621:9;;29614:4;:16;;;;:::i;:::-;29613:33;;;;:::i;:::-;29597:12;;:49;;;;;;;:::i;:::-;;;;;;;;29714:12;;29695:15;;29688:4;:22;;;;:::i;:::-;29687:39;;;;:::i;:::-;29665:18;;:61;;;;;;;:::i;:::-;;;;;;;;29382:360;28974:768;29769:1;29762:4;:8;29758:91;;;29791:42;29807:4;29821;29828;29791:15;:42::i;:::-;29758:91;29875:4;29865:14;;;;;:::i;:::-;;;28922:969;29903:33;29919:4;29925:2;29929:6;29903:15;:33::i;:::-;25340:4604;;;;25227:4717;;;;:::o;1576:191::-;1650:16;1669:6;;;;;;;;;;;1650:25;;1695:8;1686:6;;:17;;;;;;;;;;;;;;;;;;1750:8;1719:40;;1740:8;1719:40;;;;;;;;;;;;1639:128;1576:191;:::o;24897:188::-;25014:5;24980:25;:31;25006:4;24980:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25071:5;25037:40;;25065:4;25037:40;;;;;;;;;;;;24897:188;;:::o;6056:733::-;6214:1;6196:20;;:6;:20;;;6188:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6298:1;6277:23;;:9;:23;;;6269:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6353:47;6374:6;6382:9;6393:6;6353:20;:47::i;:::-;6413:21;6437:9;:17;6447:6;6437:17;;;;;;;;;;;;;;;;6413:41;;6490:6;6473:13;:23;;6465:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6611:6;6595:13;:22;6575:9;:17;6585:6;6575:17;;;;;;;;;;;;;;;:42;;;;6663:6;6639:9;:20;6649:9;6639:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6704:9;6687:35;;6696:6;6687:35;;;6715:6;6687:35;;;;;;:::i;:::-;;;;;;;;6735:46;6755:6;6763:9;6774:6;6735:19;:46::i;:::-;6177:612;6056:733;;;:::o;31072:1647::-;31111:23;31137:24;31155:4;31137:9;:24::i;:::-;31111:50;;31172:25;31242:12;;31221:18;;31200;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;31172:82;;31265:12;31313:1;31294:15;:20;:46;;;;31339:1;31318:17;:22;31294:46;31290:85;;;31357:7;;;;;31290:85;31430:2;31409:18;;:23;;;;:::i;:::-;31391:15;:41;31387:115;;;31488:2;31467:18;;:23;;;;:::i;:::-;31449:41;;31387:115;31563:23;31650:1;31630:17;31608:18;;31590:15;:36;;;;:::i;:::-;31589:58;;;;:::i;:::-;:62;;;;:::i;:::-;31563:88;;31662:26;31691:36;31711:15;31691;:19;;:36;;;;:::i;:::-;31662:65;;31740:25;31768:21;31740:49;;31802:36;31819:18;31802:16;:36::i;:::-;31851:18;31872:44;31898:17;31872:21;:25;;:44;;;;:::i;:::-;31851:65;;31929:23;31955:57;31994:17;31955:34;31970:18;;31955:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;31929:83;;32023:17;32043:51;32076:17;32043:28;32058:12;;32043:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;32023:71;;32107:23;32164:9;32146:15;32133:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;32107:66;;32201:1;32180:18;:22;;;;32234:1;32213:18;:22;;;;32261:1;32246:12;:16;;;;32297:9;;;;;;;;;;;32289:23;;32320:9;32289:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32275:59;;;;;32369:1;32351:15;:19;:42;;;;;32392:1;32374:15;:19;32351:42;32347:275;;;32410:46;32423:15;32440;32410:12;:46::i;:::-;32476:134;32509:18;32546:15;32580;32476:134;;;;;;;;:::i;:::-;;;;;;;;32347:275;32656:15;;;;;;;;;;;32648:29;;32685:21;32648:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32634:77;;;;;31100:1619;;;;;;;;;;31072:1647;:::o;10210:98::-;10268:7;10299:1;10295;:5;;;;:::i;:::-;10288:12;;10210:98;;;;:::o;10316:::-;10374:7;10405:1;10401;:5;;;;:::i;:::-;10394:12;;10316:98;;;;:::o;8191:125::-;;;;:::o;8324:124::-;;;;:::o;10104:98::-;10162:7;10193:1;10189;:5;;;;:::i;:::-;10182:12;;10104:98;;;;:::o;29952:589::-;30078:21;30116:1;30102:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30078:40;;30147:4;30129;30134:1;30129:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30173:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30163:4;30168:1;30163:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30208:62;30225:4;30240:15;30258:11;30208:8;:62::i;:::-;30309:15;:66;;;30390:11;30416:1;30460:4;30487;30507:15;30309:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30007:534;29952:589;:::o;30549:515::-;30697:62;30714:4;30729:15;30747:11;30697:8;:62::i;:::-;30802:15;:31;;;30841:9;30874:4;30894:11;30920:1;30963;31006:9;;;;;;;;;;;31030:15;30802:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30549:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:305::-;13591:3;13610:20;13628:1;13610:20;:::i;:::-;13605:25;;13644:20;13662:1;13644:20;:::i;:::-;13639:25;;13798:1;13730:66;13726:74;13723:1;13720:81;13717:107;;;13804:18;;:::i;:::-;13717:107;13848:1;13845;13841:9;13834:16;;13551:305;;;;:::o;13862:244::-;14002:34;13998:1;13990:6;13986:14;13979:58;14071:27;14066:2;14058:6;14054:15;14047:52;13862:244;:::o;14112:366::-;14254:3;14275:67;14339:2;14334:3;14275:67;:::i;:::-;14268:74;;14351:93;14440:3;14351:93;:::i;:::-;14469:2;14464:3;14460:12;14453:19;;14112:366;;;:::o;14484:419::-;14650:4;14688:2;14677:9;14673:18;14665:26;;14737:9;14731:4;14727:20;14723:1;14712:9;14708:17;14701:47;14765:131;14891:4;14765:131;:::i;:::-;14757:139;;14484:419;;;:::o;14909:224::-;15049:34;15045:1;15037:6;15033:14;15026:58;15118:7;15113:2;15105:6;15101:15;15094:32;14909:224;:::o;15139:366::-;15281:3;15302:67;15366:2;15361:3;15302:67;:::i;:::-;15295:74;;15378:93;15467:3;15378:93;:::i;:::-;15496:2;15491:3;15487:12;15480:19;;15139:366;;;:::o;15511:419::-;15677:4;15715:2;15704:9;15700:18;15692:26;;15764:9;15758:4;15754:20;15750:1;15739:9;15735:17;15728:47;15792:131;15918:4;15792:131;:::i;:::-;15784:139;;15511:419;;;:::o;15936:223::-;16076:34;16072:1;16064:6;16060:14;16053:58;16145:6;16140:2;16132:6;16128:15;16121:31;15936:223;:::o;16165:366::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16165:366;;;:::o;16537:419::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16790:9;16784:4;16780:20;16776:1;16765:9;16761:17;16754:47;16818:131;16944:4;16818:131;:::i;:::-;16810:139;;16537:419;;;:::o;16962:240::-;17102:34;17098:1;17090:6;17086:14;17079:58;17171:23;17166:2;17158:6;17154:15;17147:48;16962:240;:::o;17208:366::-;17350:3;17371:67;17435:2;17430:3;17371:67;:::i;:::-;17364:74;;17447:93;17536:3;17447:93;:::i;:::-;17565:2;17560:3;17556:12;17549:19;;17208:366;;;:::o;17580:419::-;17746:4;17784:2;17773:9;17769:18;17761:26;;17833:9;17827:4;17823:20;17819:1;17808:9;17804:17;17797:47;17861:131;17987:4;17861:131;:::i;:::-;17853:139;;17580:419;;;:::o;18005:239::-;18145:34;18141:1;18133:6;18129:14;18122:58;18214:22;18209:2;18201:6;18197:15;18190:47;18005:239;:::o;18250:366::-;18392:3;18413:67;18477:2;18472:3;18413:67;:::i;:::-;18406:74;;18489:93;18578:3;18489:93;:::i;:::-;18607:2;18602:3;18598:12;18591:19;;18250:366;;;:::o;18622:419::-;18788:4;18826:2;18815:9;18811:18;18803:26;;18875:9;18869:4;18865:20;18861:1;18850:9;18846:17;18839:47;18903:131;19029:4;18903:131;:::i;:::-;18895:139;;18622:419;;;:::o;19047:225::-;19187:34;19183:1;19175:6;19171:14;19164:58;19256:8;19251:2;19243:6;19239:15;19232:33;19047:225;:::o;19278:366::-;19420:3;19441:67;19505:2;19500:3;19441:67;:::i;:::-;19434:74;;19517:93;19606:3;19517:93;:::i;:::-;19635:2;19630:3;19626:12;19619:19;;19278:366;;;:::o;19650:419::-;19816:4;19854:2;19843:9;19839:18;19831:26;;19903:9;19897:4;19893:20;19889:1;19878:9;19874:17;19867:47;19931:131;20057:4;19931:131;:::i;:::-;19923:139;;19650:419;;;:::o;20075:223::-;20215:34;20211:1;20203:6;20199:14;20192:58;20284:6;20279:2;20271:6;20267:15;20260:31;20075:223;:::o;20304:366::-;20446:3;20467:67;20531:2;20526:3;20467:67;:::i;:::-;20460:74;;20543:93;20632:3;20543:93;:::i;:::-;20661:2;20656:3;20652:12;20645:19;;20304:366;;;:::o;20676:419::-;20842:4;20880:2;20869:9;20865:18;20857:26;;20929:9;20923:4;20919:20;20915:1;20904:9;20900:17;20893:47;20957:131;21083:4;20957:131;:::i;:::-;20949:139;;20676:419;;;:::o;21101:221::-;21241:34;21237:1;21229:6;21225:14;21218:58;21310:4;21305:2;21297:6;21293:15;21286:29;21101:221;:::o;21328:366::-;21470:3;21491:67;21555:2;21550:3;21491:67;:::i;:::-;21484:74;;21567:93;21656:3;21567:93;:::i;:::-;21685:2;21680:3;21676:12;21669:19;;21328:366;;;:::o;21700:419::-;21866:4;21904:2;21893:9;21889:18;21881:26;;21953:9;21947:4;21943:20;21939:1;21928:9;21924:17;21917:47;21981:131;22107:4;21981:131;:::i;:::-;21973:139;;21700:419;;;:::o;22125:224::-;22265:34;22261:1;22253:6;22249:14;22242:58;22334:7;22329:2;22321:6;22317:15;22310:32;22125:224;:::o;22355:366::-;22497:3;22518:67;22582:2;22577:3;22518:67;:::i;:::-;22511:74;;22594:93;22683:3;22594:93;:::i;:::-;22712:2;22707:3;22703:12;22696:19;;22355:366;;;:::o;22727:419::-;22893:4;22931:2;22920:9;22916:18;22908:26;;22980:9;22974:4;22970:20;22966:1;22955:9;22951:17;22944:47;23008:131;23134:4;23008:131;:::i;:::-;23000:139;;22727:419;;;:::o;23152:222::-;23292:34;23288:1;23280:6;23276:14;23269:58;23361:5;23356:2;23348:6;23344:15;23337:30;23152:222;:::o;23380:366::-;23522:3;23543:67;23607:2;23602:3;23543:67;:::i;:::-;23536:74;;23619:93;23708:3;23619:93;:::i;:::-;23737:2;23732:3;23728:12;23721:19;;23380:366;;;:::o;23752:419::-;23918:4;23956:2;23945:9;23941:18;23933:26;;24005:9;23999:4;23995:20;23991:1;23980:9;23976:17;23969:47;24033:131;24159:4;24033:131;:::i;:::-;24025:139;;23752:419;;;:::o;24177:172::-;24317:24;24313:1;24305:6;24301:14;24294:48;24177:172;:::o;24355:366::-;24497:3;24518:67;24582:2;24577:3;24518:67;:::i;:::-;24511:74;;24594:93;24683:3;24594:93;:::i;:::-;24712:2;24707:3;24703:12;24696:19;;24355:366;;;:::o;24727:419::-;24893:4;24931:2;24920:9;24916:18;24908:26;;24980:9;24974:4;24970:20;24966:1;24955:9;24951:17;24944:47;25008:131;25134:4;25008:131;:::i;:::-;25000:139;;24727:419;;;:::o;25152:297::-;25292:34;25288:1;25280:6;25276:14;25269:58;25361:34;25356:2;25348:6;25344:15;25337:59;25430:11;25425:2;25417:6;25413:15;25406:36;25152:297;:::o;25455:366::-;25597:3;25618:67;25682:2;25677:3;25618:67;:::i;:::-;25611:74;;25694:93;25783:3;25694:93;:::i;:::-;25812:2;25807:3;25803:12;25796:19;;25455:366;;;:::o;25827:419::-;25993:4;26031:2;26020:9;26016:18;26008:26;;26080:9;26074:4;26070:20;26066:1;26055:9;26051:17;26044:47;26108:131;26234:4;26108:131;:::i;:::-;26100:139;;25827:419;;;:::o;26252:240::-;26392:34;26388:1;26380:6;26376:14;26369:58;26461:23;26456:2;26448:6;26444:15;26437:48;26252:240;:::o;26498:366::-;26640:3;26661:67;26725:2;26720:3;26661:67;:::i;:::-;26654:74;;26737:93;26826:3;26737:93;:::i;:::-;26855:2;26850:3;26846:12;26839:19;;26498:366;;;:::o;26870:419::-;27036:4;27074:2;27063:9;27059:18;27051:26;;27123:9;27117:4;27113:20;27109:1;27098:9;27094:17;27087:47;27151:131;27277:4;27151:131;:::i;:::-;27143:139;;26870:419;;;:::o;27295:169::-;27435:21;27431:1;27423:6;27419:14;27412:45;27295:169;:::o;27470:366::-;27612:3;27633:67;27697:2;27692:3;27633:67;:::i;:::-;27626:74;;27709:93;27798:3;27709:93;:::i;:::-;27827:2;27822:3;27818:12;27811:19;;27470:366;;;:::o;27842:419::-;28008:4;28046:2;28035:9;28031:18;28023:26;;28095:9;28089:4;28085:20;28081:1;28070:9;28066:17;28059:47;28123:131;28249:4;28123:131;:::i;:::-;28115:139;;27842:419;;;:::o;28267:241::-;28407:34;28403:1;28395:6;28391:14;28384:58;28476:24;28471:2;28463:6;28459:15;28452:49;28267:241;:::o;28514:366::-;28656:3;28677:67;28741:2;28736:3;28677:67;:::i;:::-;28670:74;;28753:93;28842:3;28753:93;:::i;:::-;28871:2;28866:3;28862:12;28855:19;;28514:366;;;:::o;28886:419::-;29052:4;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;28886:419;;;:::o;29311:191::-;29351:4;29371:20;29389:1;29371:20;:::i;:::-;29366:25;;29405:20;29423:1;29405:20;:::i;:::-;29400:25;;29444:1;29441;29438:8;29435:34;;;29449:18;;:::i;:::-;29435:34;29494:1;29491;29487:9;29479:17;;29311:191;;;;:::o;29508:225::-;29648:34;29644:1;29636:6;29632:14;29625:58;29717:8;29712:2;29704:6;29700:15;29693:33;29508:225;:::o;29739:366::-;29881:3;29902:67;29966:2;29961:3;29902:67;:::i;:::-;29895:74;;29978:93;30067:3;29978:93;:::i;:::-;30096:2;30091:3;30087:12;30080:19;;29739:366;;;:::o;30111:419::-;30277:4;30315:2;30304:9;30300:18;30292:26;;30364:9;30358:4;30354:20;30350:1;30339:9;30335:17;30328:47;30392:131;30518:4;30392:131;:::i;:::-;30384:139;;30111:419;;;:::o;30536:147::-;30637:11;30674:3;30659:18;;30536:147;;;;:::o;30689:114::-;;:::o;30809:398::-;30968:3;30989:83;31070:1;31065:3;30989:83;:::i;:::-;30982:90;;31081:93;31170:3;31081:93;:::i;:::-;31199:1;31194:3;31190:11;31183:18;;30809:398;;;:::o;31213:379::-;31397:3;31419:147;31562:3;31419:147;:::i;:::-;31412:154;;31583:3;31576:10;;31213:379;;;:::o;31598:442::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31798:71;31866:1;31855:9;31851:17;31842:6;31798:71;:::i;:::-;31879:72;31947:2;31936:9;31932:18;31923:6;31879:72;:::i;:::-;31961;32029:2;32018:9;32014:18;32005:6;31961:72;:::i;:::-;31598:442;;;;;;:::o;32046:180::-;32094:77;32091:1;32084:88;32191:4;32188:1;32181:15;32215:4;32212:1;32205:15;32232:180;32280:77;32277:1;32270:88;32377:4;32374:1;32367:15;32401:4;32398:1;32391:15;32418:143;32475:5;32506:6;32500:13;32491:22;;32522:33;32549:5;32522:33;:::i;:::-;32418:143;;;;:::o;32567:351::-;32637:6;32686:2;32674:9;32665:7;32661:23;32657:32;32654:119;;;32692:79;;:::i;:::-;32654:119;32812:1;32837:64;32893:7;32884:6;32873:9;32869:22;32837:64;:::i;:::-;32827:74;;32783:128;32567:351;;;;:::o;32924:85::-;32969:7;32998:5;32987:16;;32924:85;;;:::o;33015:158::-;33073:9;33106:61;33124:42;33133:32;33159:5;33133:32;:::i;:::-;33124:42;:::i;:::-;33106:61;:::i;:::-;33093:74;;33015:158;;;:::o;33179:147::-;33274:45;33313:5;33274:45;:::i;:::-;33269:3;33262:58;33179:147;;:::o;33332:114::-;33399:6;33433:5;33427:12;33417:22;;33332:114;;;:::o;33452:184::-;33551:11;33585:6;33580:3;33573:19;33625:4;33620:3;33616:14;33601:29;;33452:184;;;;:::o;33642:132::-;33709:4;33732:3;33724:11;;33762:4;33757:3;33753:14;33745:22;;33642:132;;;:::o;33780:108::-;33857:24;33875:5;33857:24;:::i;:::-;33852:3;33845:37;33780:108;;:::o;33894:179::-;33963:10;33984:46;34026:3;34018:6;33984:46;:::i;:::-;34062:4;34057:3;34053:14;34039:28;;33894:179;;;;:::o;34079:113::-;34149:4;34181;34176:3;34172:14;34164:22;;34079:113;;;:::o;34228:732::-;34347:3;34376:54;34424:5;34376:54;:::i;:::-;34446:86;34525:6;34520:3;34446:86;:::i;:::-;34439:93;;34556:56;34606:5;34556:56;:::i;:::-;34635:7;34666:1;34651:284;34676:6;34673:1;34670:13;34651:284;;;34752:6;34746:13;34779:63;34838:3;34823:13;34779:63;:::i;:::-;34772:70;;34865:60;34918:6;34865:60;:::i;:::-;34855:70;;34711:224;34698:1;34695;34691:9;34686:14;;34651:284;;;34655:14;34951:3;34944:10;;34352:608;;;34228:732;;;;:::o;34966:831::-;35229:4;35267:3;35256:9;35252:19;35244:27;;35281:71;35349:1;35338:9;35334:17;35325:6;35281:71;:::i;:::-;35362:80;35438:2;35427:9;35423:18;35414:6;35362:80;:::i;:::-;35489:9;35483:4;35479:20;35474:2;35463:9;35459:18;35452:48;35517:108;35620:4;35611:6;35517:108;:::i;:::-;35509:116;;35635:72;35703:2;35692:9;35688:18;35679:6;35635:72;:::i;:::-;35717:73;35785:3;35774:9;35770:19;35761:6;35717:73;:::i;:::-;34966:831;;;;;;;;:::o;35803:807::-;36052:4;36090:3;36079:9;36075:19;36067:27;;36104:71;36172:1;36161:9;36157:17;36148:6;36104:71;:::i;:::-;36185:72;36253:2;36242:9;36238:18;36229:6;36185:72;:::i;:::-;36267:80;36343:2;36332:9;36328:18;36319:6;36267:80;:::i;:::-;36357;36433:2;36422:9;36418:18;36409:6;36357:80;:::i;:::-;36447:73;36515:3;36504:9;36500:19;36491:6;36447:73;:::i;:::-;36530;36598:3;36587:9;36583:19;36574:6;36530:73;:::i;:::-;35803:807;;;;;;;;;:::o;36616:143::-;36673:5;36704:6;36698:13;36689:22;;36720:33;36747:5;36720:33;:::i;:::-;36616:143;;;;:::o;36765:663::-;36853:6;36861;36869;36918:2;36906:9;36897:7;36893:23;36889:32;36886:119;;;36924:79;;:::i;:::-;36886:119;37044:1;37069:64;37125:7;37116:6;37105:9;37101:22;37069:64;:::i;:::-;37059:74;;37015:128;37182:2;37208:64;37264:7;37255:6;37244:9;37240:22;37208:64;:::i;:::-;37198:74;;37153:129;37321:2;37347:64;37403:7;37394:6;37383:9;37379:22;37347:64;:::i;:::-;37337:74;;37292:129;36765:663;;;;;:::o

Swarm Source

ipfs://daaaa043c02ee915bd449e0d42b4d2e91e7f8c48349ed5d734af02b745bb58bc
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.