ETH Price: $3,355.58 (+0.61%)
 

Overview

Max Total Supply

1,000,000,000 Snek

Holders

186

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
stupidass.eth
Balance
2,199,939.128873873941397885 Snek

Value
$0.00
0x10c0be5f67833e7d98bf438fc165d2d97e93f45c
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:
Snek

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-10
*/

/**
Sssslither into our $SNEK coin chat, the $PEPE killor, where we ssssscheme and sssssnicker our way to crypto ssssupremacy!

Web - https://snekcoin.vip
Twitter - https://twitter.com/snekcoinerc
TG - https://t.me/snekcoinofficial

*/
 
/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity >=0.8.19;
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }
 
    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }
 
    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
 
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
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;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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;
    }
 
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
 
    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
 
    function feeTo() external view returns (address);
 
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
 
    function allPairs(uint256) external view returns (address pair);
 
    function allPairsLength() external view returns (uint256);
 
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
 
    function setFeeTo(address) external;
 
    function setFeeToSetter(address) external;
}
 
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
 
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
 
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
 
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
 
contract Snek is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
 
    // Swapback
    bool private inSwapback;
    bool public swapbackEnabled = false;
    uint256 public minBalanceForSwapback;
    uint256 public maxBalanceForSwapback;
 
    //Anti-whale
    bool public walletLimits = true;
    bool public sameBlockDelay = true;
    uint256 public mxWallet;
    uint256 public mxTx;
    mapping(address => uint256) private addressLastTransfer;
 
    // Fee receivers
    address public lpWallet;
    address public marketingWallet;
    address public devWallet;
 
    bool public tradingEnabled = false;
 
    uint256 public totalFeesBuy;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public totalFeesSell;
    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 _isFeeExempt;
    mapping(address => bool) public _isTxLimitExempt;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
 
    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("Snek", "Snek") {
        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 = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
 
        uint256 totalSupply = 1000000000 * 1e18;
 
        mxTx = (totalSupply * 2) / 100;
        mxWallet = (totalSupply * 2) / 100;
 
        minBalanceForSwapback = (totalSupply * 5) / 10000;
        maxBalanceForSwapback = (totalSupply * 100) / 1000;
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWallet = 0xdA2c1f1D5AD38Ecde8D28Fb0Ea3fe4A654C648C8; 
        devWallet = msg.sender;
        lpWallet = msg.sender;
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(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);
    }
 
    receive() external payable {}
 
    /// @notice Launches the token and enables trading. Irriversable.
    function enableTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
    }
 
    /// @notice Launches the token and enables trading. Irriversable.
    function hiss() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
    }
 
    /// @notice Removes the max wallet and max transaction limits
    function removeLimits() external onlyOwner returns (bool) {
        walletLimits = false;
        return true;
    }
 
    /// @notice Disables the Same wallet block transfer delay
    function disableTransferDelay() external onlyOwner returns (bool) {
        sameBlockDelay = false;
        return true;
    }
 
    /// @notice Changes the minimum balance of tokens the contract must have before inSwapback tokens for ETH. Base 100000, so 0.5% = 500.
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= totalSupply()/ 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= 500 * totalSupply()/ 100000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxBalanceForSwapback,
            "Swap amount cannot be higher than maxBalanceForSwapback"
        );
        minBalanceForSwapback = newAmount;
        return true;
    }
 
    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxTokensForSwapback(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= minBalanceForSwapback,
            "Swap amount cannot be lower than minBalanceForSwapback"
        );
        maxBalanceForSwapback = newAmount;
        return true;
    }
 
    /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 2,
            "Cannot set mxTx lower than 0.2%"
        );
        mxTx = newNum * (10**18);
    }
 
    /// @notice Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 5,
            "Cannot set mxWallet lower than 0.5%"
        );
        mxWallet = newNum * totalSupply()/1000;
    }
 
 
    /// @notice Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isTxLimitExempt[updAds] = isEx;
    }
 
    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapbackEnabled = enabled;
    }
 
    /// @notice Sets the fees for buys
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(totalFeesBuy <= 5, "Must keep fees at 5% or less");
    }
 
    /// @notice Sets the fees for sells
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(totalFeesSell <= 5, "Must keep fees at 5% or less");
    }
 
    /// @notice Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    /// @notice Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    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 setMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function setLpWallet(address newLpWallet)
        external
        onlyOwner
    {
        lpWallet = newLpWallet;
    }
 
    function setDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
    function isFeeExempt(address account) public view returns (bool) {
        return _isFeeExempt[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 (walletLimits) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapback
            ) {
                if (!tradingEnabled) {
                    require(
                        _isFeeExempt[from] || _isFeeExempt[to],
                        "Trading is not active."
                    );
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (sameBlockDelay) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            addressLastTransfer[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        addressLastTransfer[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isTxLimitExempt[to]
                ) {
                    require(
                        amount <= mxTx,
                        "Buy transfer amount exceeds the mxTx."
                    );
                    require(
                        amount + balanceOf(to) <= mxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isTxLimitExempt[from]
                ) {
                    require(
                        amount <= mxTx,
                        "Sell transfer amount exceeds the mxTx."
                    );
                } else if (!_isTxLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= mxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= minBalanceForSwapback;
 
        if (
            canSwap &&
            swapbackEnabled &&
            !inSwapback &&
            !automatedMarketMakerPairs[from] &&
            !_isFeeExempt[from] &&
            !_isFeeExempt[to]
        ) {
            inSwapback = true;
 
            swapBack();
 
            inSwapback = false;
        }
 
        bool takeFee = !inSwapback;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isFeeExempt[from] || _isFeeExempt[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] && totalFeesSell > 0) {
                fees = amount.mul(totalFeesSell).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / totalFeesSell;
                tokensForDev += (fees * sellDevFee) / totalFeesSell;
                tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) {
                fees = amount.mul(totalFeesBuy).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / totalFeesBuy;
                tokensForDev += (fees * buyDevFee) / totalFeesBuy;
                tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy;
            }
 
            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
            lpWallet,
            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 > maxBalanceForSwapback) {
            contractBalance = maxBalanceForSwapback;
        }
 
        // 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,
                tokensForLiquidity
            );
        }
 
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","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":"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":[],"name":"hiss","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":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalanceForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBalanceForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxWallet","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":"sameBlockDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLpWallet","type":"address"}],"name":"setLpWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600481526020017f536e656b000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f536e656b000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e29565b5080600490816200010d919062000e29565b50505062000130620001246200067060201b60201c565b6200067860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200073e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f7a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f7a565b6040518363ffffffff1660e01b8152600401620002af92919062000fbd565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f7a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200073e60201b60201c565b6200035260a05160016200082860201b60201c565b6000600a905060008060006028905060008060006b033b2e3c9fd0803ce80000009050606460028262000386919062001019565b62000392919062001093565b600a819055506064600282620003a9919062001019565b620003b5919062001093565b600981905550612710600582620003cd919062001019565b620003d9919062001093565b6006819055506103e8606482620003f1919062001019565b620003fd919062001093565b6007819055508660108190555085601181905550846012819055506012546011546010546200042d9190620010cb565b620004399190620010cb565b600f81905550836014819055508260158190555081601681905550601654601554601454620004699190620010cb565b620004759190620010cb565b60138190555073da2c1f1d5ad38ecde8d28fb0ea3fe4a654c648c8600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057462000566620008c960201b60201c565b6001620008f360201b60201c565b62000587306001620008f360201b60201c565b6200059c61dead6001620008f360201b60201c565b620005d1600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008f360201b60201c565b620005f3620005e5620008c960201b60201c565b60016200073e60201b60201c565b620006063060016200073e60201b60201c565b6200061b61dead60016200073e60201b60201c565b62000650600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073e60201b60201c565b62000662338262000a2d60201b60201c565b505050505050505062001263565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200074e6200067060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000774620008c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c49062001167565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009036200067060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000929620008c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009799062001167565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a219190620011a6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a969062001213565b60405180910390fd5b62000ab36000838362000ba560201b60201c565b806002600082825462000ac79190620010cb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b1e9190620010cb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b85919062001246565b60405180910390a362000ba16000838362000baa60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3157607f821691505b60208210810362000c475762000c4662000be9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c72565b62000cbd868362000c72565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0a62000d0462000cfe8462000cd5565b62000cdf565b62000cd5565b9050919050565b6000819050919050565b62000d268362000ce9565b62000d3e62000d358262000d11565b84845462000c7f565b825550505050565b600090565b62000d5562000d46565b62000d6281848462000d1b565b505050565b5b8181101562000d8a5762000d7e60008262000d4b565b60018101905062000d68565b5050565b601f82111562000dd95762000da38162000c4d565b62000dae8462000c62565b8101602085101562000dbe578190505b62000dd662000dcd8562000c62565b83018262000d67565b50505b505050565b600082821c905092915050565b600062000dfe6000198460080262000dde565b1980831691505092915050565b600062000e19838362000deb565b9150826002028217905092915050565b62000e348262000baf565b67ffffffffffffffff81111562000e505762000e4f62000bba565b5b62000e5c825462000c18565b62000e6982828562000d8e565b600060209050601f83116001811462000ea1576000841562000e8c578287015190505b62000e98858262000e0b565b86555062000f08565b601f19841662000eb18662000c4d565b60005b8281101562000edb5784890151825560018201915060208501945060208101905062000eb4565b8683101562000efb578489015162000ef7601f89168262000deb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f428262000f15565b9050919050565b62000f548162000f35565b811462000f6057600080fd5b50565b60008151905062000f748162000f49565b92915050565b60006020828403121562000f935762000f9262000f10565b5b600062000fa38482850162000f63565b91505092915050565b62000fb78162000f35565b82525050565b600060408201905062000fd4600083018562000fac565b62000fe3602083018462000fac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010268262000cd5565b9150620010338362000cd5565b9250828202620010438162000cd5565b915082820484148315176200105d576200105c62000fea565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010a08262000cd5565b9150620010ad8362000cd5565b925082620010c057620010bf62001064565b5b828204905092915050565b6000620010d88262000cd5565b9150620010e58362000cd5565b92508282019050808211156200110057620010ff62000fea565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200114f60208362001106565b91506200115c8262001117565b602082019050919050565b60006020820190508181036000830152620011828162001140565b9050919050565b60008115159050919050565b620011a08162001189565b82525050565b6000602082019050620011bd600083018462001195565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011fb601f8362001106565b91506200120882620011c3565b602082019050919050565b600060208201905081810360008301526200122e81620011ec565b9050919050565b620012408162000cd5565b82525050565b60006020820190506200125d600083018462001235565b92915050565b60805160a051615470620012c1600039600081816113fc01528181611cb10152612bb9015260008181610ec101528181612b6101528181613c3b01528181613d1c01528181613d4301528181613ddf0152613e0601526154706000f3fe6080604052600436106103905760003560e01c80638095d564116101dc578063a9059cbb11610102578063d257b34f116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f1d1db7914610d8a578063f2fde38b14610db5578063f637434214610dde57610397565b8063d257b34f14610ca3578063dd62ed3e14610ce0578063e884f26014610d1d578063ee800e0814610d4857610397565b8063c0246668116100dc578063c024666814610bfd578063c17b5b8c14610c26578063c18bc19514610c4f578063cbb310de14610c7857610397565b8063a9059cbb14610b58578063b62496f514610b95578063b6d854a614610bd257610397565b8063924de9b71161017a5780639fccce32116101495780639fccce3214610a88578063a0c973f114610ab3578063a0d82dc514610af0578063a457c2d714610b1b57610397565b8063924de9b7146109e057806395d89b4114610a095780639a7a23d614610a345780639c3b4fdc14610a5d57610397565b80638a8c523c116101b65780638a8c523c146109485780638da5cb5b1461095f5780638ea5220f1461098a57806392136913146109b557610397565b80638095d564146108c957806382784218146108f257806389add02c1461091d57610397565b806339509351116102c15780636303516c1161025f5780637571336a1161022e5780637571336a1461080d57806375f0a874146108365780637af8ed9c146108615780637bce5a041461089e57610397565b80636303516c1461076357806370a082311461078e578063715018a6146107cb578063751039fc146107e257610397565b8063468c7ee21161029b578063468c7ee2146106bb57806349bd5a5e146106e45780634ada218b1461070f5780635d098b381461073a57610397565b806339509351146106165780633d2a2754146106535780633f4218e01461067e57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd1461055857806327c8f83514610595578063313ce567146105c057806336257971146105eb57610397565b80631f3fed8f146104db5780631f53ac0214610506578063203e727e1461052f57610397565b80631694505e1161036a5780631694505e1461042f57806318160ddd1461045a57806319c59e2c146104855780631a8145bb146104b057610397565b806306fdde031461039c578063095ea7b3146103c75780630e47e8221461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be9190613f65565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614020565b610e9b565b6040516103fb919061407b565b60405180910390f35b34801561041057600080fd5b50610419610eb9565b60405161042691906140a5565b60405180910390f35b34801561043b57600080fd5b50610444610ebf565b604051610451919061411f565b60405180910390f35b34801561046657600080fd5b5061046f610ee3565b60405161047c91906140a5565b60405180910390f35b34801561049157600080fd5b5061049a610eed565b6040516104a791906140a5565b60405180910390f35b3480156104bc57600080fd5b506104c5610ef3565b6040516104d291906140a5565b60405180910390f35b3480156104e757600080fd5b506104f0610ef9565b6040516104fd91906140a5565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061413a565b610eff565b005b34801561053b57600080fd5b5061055660048036038101906105519190614167565b61103b565b005b34801561056457600080fd5b5061057f600480360381019061057a9190614194565b611118565b60405161058c919061407b565b60405180910390f35b3480156105a157600080fd5b506105aa611210565b6040516105b791906141f6565b60405180910390f35b3480156105cc57600080fd5b506105d5611216565b6040516105e2919061422d565b60405180910390f35b3480156105f757600080fd5b5061060061121f565b60405161060d919061407b565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614020565b611232565b60405161064a919061407b565b60405180910390f35b34801561065f57600080fd5b506106686112de565b60405161067591906140a5565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061413a565b6112e4565b6040516106b2919061407b565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd919061413a565b61133a565b005b3480156106f057600080fd5b506106f96113fa565b60405161070691906141f6565b60405180910390f35b34801561071b57600080fd5b5061072461141e565b604051610731919061407b565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c919061413a565b611431565b005b34801561076f57600080fd5b5061077861156d565b60405161078591906141f6565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b0919061413a565b611593565b6040516107c291906140a5565b60405180910390f35b3480156107d757600080fd5b506107e06115db565b005b3480156107ee57600080fd5b506107f7611663565b604051610804919061407b565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614274565b611703565b005b34801561084257600080fd5b5061084b6117da565b60405161085891906141f6565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190614167565b611800565b604051610895919061407b565b60405180910390f35b3480156108aa57600080fd5b506108b36118d3565b6040516108c091906140a5565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb91906142b4565b6118d9565b005b3480156108fe57600080fd5b506109076119d8565b604051610914919061407b565b60405180910390f35b34801561092957600080fd5b506109326119eb565b60405161093f919061407b565b60405180910390f35b34801561095457600080fd5b5061095d6119fe565b005b34801561096b57600080fd5b50610974611ab2565b60405161098191906141f6565b60405180910390f35b34801561099657600080fd5b5061099f611adc565b6040516109ac91906141f6565b60405180910390f35b3480156109c157600080fd5b506109ca611b02565b6040516109d791906140a5565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a029190614307565b611b08565b005b348015610a1557600080fd5b50610a1e611ba1565b604051610a2b9190613f65565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a569190614274565b611c33565b005b348015610a6957600080fd5b50610a72611d4b565b604051610a7f91906140a5565b60405180910390f35b348015610a9457600080fd5b50610a9d611d51565b604051610aaa91906140a5565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad5919061413a565b611d57565b604051610ae7919061407b565b60405180910390f35b348015610afc57600080fd5b50610b05611d77565b604051610b1291906140a5565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190614020565b611d7d565b604051610b4f919061407b565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614020565b611e68565b604051610b8c919061407b565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061413a565b611e86565b604051610bc9919061407b565b60405180910390f35b348015610bde57600080fd5b50610be7611ea6565b604051610bf491906140a5565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f9190614274565b611eac565b005b348015610c3257600080fd5b50610c4d6004803603810190610c4891906142b4565b611fd1565b005b348015610c5b57600080fd5b50610c766004803603810190610c719190614167565b6120d0565b005b348015610c8457600080fd5b50610c8d6121b9565b604051610c9a91906140a5565b60405180910390f35b348015610caf57600080fd5b50610cca6004803603810190610cc59190614167565b6121bf565b604051610cd7919061407b565b60405180910390f35b348015610cec57600080fd5b50610d076004803603810190610d029190614334565b61234f565b604051610d1491906140a5565b60405180910390f35b348015610d2957600080fd5b50610d326123d6565b604051610d3f919061407b565b60405180910390f35b348015610d5457600080fd5b50610d5d612476565b005b348015610d6b57600080fd5b50610d7461252a565b604051610d8191906140a5565b60405180910390f35b348015610d9657600080fd5b50610d9f612530565b604051610dac91906140a5565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd7919061413a565b612536565b005b348015610dea57600080fd5b50610df361262d565b604051610e0091906140a5565b60405180910390f35b606060038054610e18906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e44906143a3565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612633565b848461263b565b6001905092915050565b60135481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b60185481565b60175481565b610f07612633565b73ffffffffffffffffffffffffffffffffffffffff16610f25611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614420565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611043612633565b73ffffffffffffffffffffffffffffffffffffffff16611061611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614420565b60405180910390fd5b60028110156110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f29061448c565b60405180910390fd5b670de0b6b3a76400008161110f91906144db565b600a8190555050565b6000611125848484612804565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611170612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061458f565b60405180910390fd5b611204856111fc612633565b85840361263b565b60019150509392505050565b61dead81565b60006012905090565b600860009054906101000a900460ff1681565b60006112d461123f612633565b84846001600061124d612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112cf91906145af565b61263b565b6001905092915050565b60065481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611342612633565b73ffffffffffffffffffffffffffffffffffffffff16611360611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90614420565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60149054906101000a900460ff1681565b611439612633565b73ffffffffffffffffffffffffffffffffffffffff16611457611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490614420565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e3612633565b73ffffffffffffffffffffffffffffffffffffffff16611601611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90614420565b60405180910390fd5b611661600061349b565b565b600061166d612633565b73ffffffffffffffffffffffffffffffffffffffff1661168b611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614420565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b61170b612633565b73ffffffffffffffffffffffffffffffffffffffff16611729611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690614420565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061180a612633565b73ffffffffffffffffffffffffffffffffffffffff16611828611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590614420565b60405180910390fd5b6006548210156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614655565b60405180910390fd5b8160078190555060019050919050565b60105481565b6118e1612633565b73ffffffffffffffffffffffffffffffffffffffff166118ff611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614420565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461197d91906145af565b61198791906145af565b600f819055506005600f5411156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906146c1565b60405180910390fd5b505050565b600860019054906101000a900460ff1681565b600560159054906101000a900460ff1681565b611a06612633565b73ffffffffffffffffffffffffffffffffffffffff16611a24611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614420565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b10612633565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90614420565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b606060048054611bb0906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906143a3565b8015611c295780601f10611bfe57610100808354040283529160200191611c29565b820191906000526020600020905b815481529060010190602001808311611c0c57829003601f168201915b5050505050905090565b611c3b612633565b73ffffffffffffffffffffffffffffffffffffffff16611c59611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690614420565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614753565b60405180910390fd5b611d478282613561565b5050565b60125481565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60165481565b60008060016000611d8c612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e40906147e5565b60405180910390fd5b611e5d611e54612633565b8585840361263b565b600191505092915050565b6000611e7c611e75612633565b8484612804565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60075481565b611eb4612633565b73ffffffffffffffffffffffffffffffffffffffff16611ed2611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614420565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fc5919061407b565b60405180910390a25050565b611fd9612633565b73ffffffffffffffffffffffffffffffffffffffff16611ff7611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490614420565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461207591906145af565b61207f91906145af565b601381905550600560135411156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906146c1565b60405180910390fd5b505050565b6120d8612633565b73ffffffffffffffffffffffffffffffffffffffff166120f6611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614420565b60405180910390fd5b6005811015612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614877565b60405180910390fd5b6103e861219b610ee3565b826121a691906144db565b6121b091906148c6565b60098190555050565b600a5481565b60006121c9612633565b73ffffffffffffffffffffffffffffffffffffffff166121e7611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614420565b60405180910390fd5b620186a0612249610ee3565b61225391906148c6565b821015612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c90614969565b60405180910390fd5b620186a06122a1610ee3565b6101f46122ae91906144db565b6122b891906148c6565b8211156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906149fb565b60405180910390fd5b60075482111561233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614a8d565b60405180910390fd5b8160068190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006123e0612633565b73ffffffffffffffffffffffffffffffffffffffff166123fe611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614420565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b61247e612633565b73ffffffffffffffffffffffffffffffffffffffff1661249c611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614420565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b60115481565b60095481565b61253e612633565b73ffffffffffffffffffffffffffffffffffffffff1661255c611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614420565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890614b1f565b60405180910390fd5b61262a8161349b565b50565b60155481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614bb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614c43565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127f791906140a5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286a90614cd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d990614d67565b60405180910390fd5b600081036128fb576128f683836000613602565b613496565b600860009054906101000a900460ff1615612fbe57612918611ab2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129865750612956611ab2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129bf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a125750600560149054906101000a900460ff16155b15612fbd57600e60149054906101000a900460ff16612b0c57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612acc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614dd3565b60405180910390fd5b5b600860019054906101000a900460ff1615612cd457612b29611ab2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bb057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c0857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cd35743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8590614e8b565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db890614f1d565b60405180910390fd5b600954612dcd83611593565b82612dd891906145af565b1115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090614f89565b60405180910390fd5b612fbc565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ec15750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1057600a54811115612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f029061501b565b60405180910390fd5b612fbb565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fba57600954612f6d83611593565b82612f7891906145af565b1115612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb090614f89565b60405180910390fd5b5b5b5b5b5b6000612fc930611593565b905060006006548210159050808015612fee5750600560159054906101000a900460ff165b80156130075750600560149054906101000a900460ff16155b801561305d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130b35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131095750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314d576001600560146101000a81548160ff021916908315150217905550613131613881565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132035750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561320d57600090505b6000811561348657601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327057506000601354115b1561333d5761329d606461328f60135488613b5090919063ffffffff16565b613b6690919063ffffffff16565b9050601354601554826132b091906144db565b6132ba91906148c6565b601860008282546132cb91906145af565b92505081905550601354601654826132e391906144db565b6132ed91906148c6565b601960008282546132fe91906145af565b925050819055506013546014548261331691906144db565b61332091906148c6565b6017600082825461333191906145af565b92505081905550613462565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339857506000600f54115b15613461576133c560646133b7600f5488613b5090919063ffffffff16565b613b6690919063ffffffff16565b9050600f54601154826133d891906144db565b6133e291906148c6565b601860008282546133f391906145af565b92505081905550600f546012548261340b91906144db565b61341591906148c6565b6019600082825461342691906145af565b92505081905550600f546010548261343e91906144db565b61344891906148c6565b6017600082825461345991906145af565b925050819055505b5b600081111561347757613476873083613602565b5b8085613483919061503b565b94505b613491878787613602565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366890614cd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d790614d67565b60405180910390fd5b6136eb838383613b7c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613768906150e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380491906145af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161386891906140a5565b60405180910390a361387b848484613b81565b50505050565b600061388c30611593565b905060006019546017546018546138a391906145af565b6138ad91906145af565b90506000808314806138bf5750600082145b156138cc57505050613b4e565b6007548311156138dc5760075492505b6000600283601854866138ef91906144db565b6138f991906148c6565b61390391906148c6565b9050600061391a8286613b8690919063ffffffff16565b9050600047905061392a82613b9c565b600061393f8247613b8690919063ffffffff16565b9050600061396a8761395c60175485613b5090919063ffffffff16565b613b6690919063ffffffff16565b905060006139958861398760195486613b5090919063ffffffff16565b613b6690919063ffffffff16565b905060008183856139a6919061503b565b6139b0919061503b565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a1090615132565b60006040518083038185875af1925050503d8060008114613a4d576040519150601f19603f3d011682016040523d82523d6000602084013e613a52565b606091505b505080985050600087118015613a685750600081115b15613ab557613a778782613dd9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613aac93929190615147565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613afb90615132565b60006040518083038185875af1925050503d8060008114613b38576040519150601f19603f3d011682016040523d82523d6000602084013e613b3d565b606091505b505080985050505050505050505050505b565b60008183613b5e91906144db565b905092915050565b60008183613b7491906148c6565b905092915050565b505050565b505050565b60008183613b94919061503b565b905092915050565b6000600267ffffffffffffffff811115613bb957613bb861517e565b5b604051908082528060200260200182016040528015613be75781602001602082028036833780820191505090505b5090503081600081518110613bff57613bfe6151ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc891906151f1565b81600181518110613cdc57613cdb6151ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d41307f00000000000000000000000000000000000000000000000000000000000000008461263b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da3959493929190615317565b600060405180830381600087803b158015613dbd57600080fd5b505af1158015613dd1573d6000803e3d6000fd5b505050505050565b613e04307f00000000000000000000000000000000000000000000000000000000000000008461263b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e8b96959493929190615371565b60606040518083038185885af1158015613ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ece91906153e7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f0f578082015181840152602081019050613ef4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f3782613ed5565b613f418185613ee0565b9350613f51818560208601613ef1565b613f5a81613f1b565b840191505092915050565b60006020820190508181036000830152613f7f8184613f2c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fb782613f8c565b9050919050565b613fc781613fac565b8114613fd257600080fd5b50565b600081359050613fe481613fbe565b92915050565b6000819050919050565b613ffd81613fea565b811461400857600080fd5b50565b60008135905061401a81613ff4565b92915050565b6000806040838503121561403757614036613f87565b5b600061404585828601613fd5565b92505060206140568582860161400b565b9150509250929050565b60008115159050919050565b61407581614060565b82525050565b6000602082019050614090600083018461406c565b92915050565b61409f81613fea565b82525050565b60006020820190506140ba6000830184614096565b92915050565b6000819050919050565b60006140e56140e06140db84613f8c565b6140c0565b613f8c565b9050919050565b60006140f7826140ca565b9050919050565b6000614109826140ec565b9050919050565b614119816140fe565b82525050565b60006020820190506141346000830184614110565b92915050565b6000602082840312156141505761414f613f87565b5b600061415e84828501613fd5565b91505092915050565b60006020828403121561417d5761417c613f87565b5b600061418b8482850161400b565b91505092915050565b6000806000606084860312156141ad576141ac613f87565b5b60006141bb86828701613fd5565b93505060206141cc86828701613fd5565b92505060406141dd8682870161400b565b9150509250925092565b6141f081613fac565b82525050565b600060208201905061420b60008301846141e7565b92915050565b600060ff82169050919050565b61422781614211565b82525050565b6000602082019050614242600083018461421e565b92915050565b61425181614060565b811461425c57600080fd5b50565b60008135905061426e81614248565b92915050565b6000806040838503121561428b5761428a613f87565b5b600061429985828601613fd5565b92505060206142aa8582860161425f565b9150509250929050565b6000806000606084860312156142cd576142cc613f87565b5b60006142db8682870161400b565b93505060206142ec8682870161400b565b92505060406142fd8682870161400b565b9150509250925092565b60006020828403121561431d5761431c613f87565b5b600061432b8482850161425f565b91505092915050565b6000806040838503121561434b5761434a613f87565b5b600061435985828601613fd5565b925050602061436a85828601613fd5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143bb57607f821691505b6020821081036143ce576143cd614374565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061440a602083613ee0565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f43616e6e6f7420736574206d785478206c6f776572207468616e20302e322500600082015250565b6000614476601f83613ee0565b915061448182614440565b602082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e682613fea565b91506144f183613fea565b92508282026144ff81613fea565b91508282048414831517614516576145156144ac565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614579602883613ee0565b91506145848261451d565b604082019050919050565b600060208201905081810360008301526145a88161456c565b9050919050565b60006145ba82613fea565b91506145c583613fea565b92508282019050808211156145dd576145dc6144ac565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f206d696e42616c616e6365466f72537761706261636b00000000000000000000602082015250565b600061463f603683613ee0565b915061464a826145e3565b604082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b60006146ab601c83613ee0565b91506146b682614675565b602082019050919050565b600060208201905081810360008301526146da8161469e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061473d603983613ee0565b9150614748826146e1565b604082019050919050565b6000602082019050818103600083015261476c81614730565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147cf602583613ee0565b91506147da82614773565b604082019050919050565b600060208201905081810360008301526147fe816147c2565b9050919050565b7f43616e6e6f7420736574206d7857616c6c6574206c6f776572207468616e203060008201527f2e35250000000000000000000000000000000000000000000000000000000000602082015250565b6000614861602383613ee0565b915061486c82614805565b604082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d182613fea565b91506148dc83613fea565b9250826148ec576148eb614897565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614953603583613ee0565b915061495e826148f7565b604082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149e5603483613ee0565b91506149f082614989565b604082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d617842616c616e6365466f72537761706261636b000000000000000000602082015250565b6000614a77603783613ee0565b9150614a8282614a1b565b604082019050919050565b60006020820190508181036000830152614aa681614a6a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b09602683613ee0565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b9b602483613ee0565b9150614ba682614b3f565b604082019050919050565b60006020820190508181036000830152614bca81614b8e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c2d602283613ee0565b9150614c3882614bd1565b604082019050919050565b60006020820190508181036000830152614c5c81614c20565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602583613ee0565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d51602383613ee0565b9150614d5c82614cf5565b604082019050919050565b60006020820190508181036000830152614d8081614d44565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dbd601683613ee0565b9150614dc882614d87565b602082019050919050565b60006020820190508181036000830152614dec81614db0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e75604983613ee0565b9150614e8082614df3565b606082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d7854782e000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602583613ee0565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f73601383613ee0565b9150614f7e82614f3d565b602082019050919050565b60006020820190508181036000830152614fa281614f66565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d7854782e0000000000000000000000000000000000000000000000000000602082015250565b6000615005602683613ee0565b915061501082614fa9565b604082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b600061504682613fea565b915061505183613fea565b9250828203905081811115615069576150686144ac565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150cb602683613ee0565b91506150d68261506f565b604082019050919050565b600060208201905081810360008301526150fa816150be565b9050919050565b600081905092915050565b50565b600061511c600083615101565b91506151278261510c565b600082019050919050565b600061513d8261510f565b9150819050919050565b600060608201905061515c6000830186614096565b6151696020830185614096565b6151766040830184614096565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506151eb81613fbe565b92915050565b60006020828403121561520757615206613f87565b5b6000615215848285016151dc565b91505092915050565b6000819050919050565b600061524361523e6152398461521e565b6140c0565b613fea565b9050919050565b61525381615228565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61528e81613fac565b82525050565b60006152a08383615285565b60208301905092915050565b6000602082019050919050565b60006152c482615259565b6152ce8185615264565b93506152d983615275565b8060005b8381101561530a5781516152f18882615294565b97506152fc836152ac565b9250506001810190506152dd565b5085935050505092915050565b600060a08201905061532c6000830188614096565b615339602083018761524a565b818103604083015261534b81866152b9565b905061535a60608301856141e7565b6153676080830184614096565b9695505050505050565b600060c08201905061538660008301896141e7565b6153936020830188614096565b6153a0604083018761524a565b6153ad606083018661524a565b6153ba60808301856141e7565b6153c760a0830184614096565b979650505050505050565b6000815190506153e181613ff4565b92915050565b600080600060608486031215615400576153ff613f87565b5b600061540e868287016153d2565b935050602061541f868287016153d2565b9250506040615430868287016153d2565b915050925092509256fea2646970667358221220f575baf2e7d508fbfe9099d463e02624a047ad735688d1c746124e84d22ecd8c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638095d564116101dc578063a9059cbb11610102578063d257b34f116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f1d1db7914610d8a578063f2fde38b14610db5578063f637434214610dde57610397565b8063d257b34f14610ca3578063dd62ed3e14610ce0578063e884f26014610d1d578063ee800e0814610d4857610397565b8063c0246668116100dc578063c024666814610bfd578063c17b5b8c14610c26578063c18bc19514610c4f578063cbb310de14610c7857610397565b8063a9059cbb14610b58578063b62496f514610b95578063b6d854a614610bd257610397565b8063924de9b71161017a5780639fccce32116101495780639fccce3214610a88578063a0c973f114610ab3578063a0d82dc514610af0578063a457c2d714610b1b57610397565b8063924de9b7146109e057806395d89b4114610a095780639a7a23d614610a345780639c3b4fdc14610a5d57610397565b80638a8c523c116101b65780638a8c523c146109485780638da5cb5b1461095f5780638ea5220f1461098a57806392136913146109b557610397565b80638095d564146108c957806382784218146108f257806389add02c1461091d57610397565b806339509351116102c15780636303516c1161025f5780637571336a1161022e5780637571336a1461080d57806375f0a874146108365780637af8ed9c146108615780637bce5a041461089e57610397565b80636303516c1461076357806370a082311461078e578063715018a6146107cb578063751039fc146107e257610397565b8063468c7ee21161029b578063468c7ee2146106bb57806349bd5a5e146106e45780634ada218b1461070f5780635d098b381461073a57610397565b806339509351146106165780633d2a2754146106535780633f4218e01461067e57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd1461055857806327c8f83514610595578063313ce567146105c057806336257971146105eb57610397565b80631f3fed8f146104db5780631f53ac0214610506578063203e727e1461052f57610397565b80631694505e1161036a5780631694505e1461042f57806318160ddd1461045a57806319c59e2c146104855780631a8145bb146104b057610397565b806306fdde031461039c578063095ea7b3146103c75780630e47e8221461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be9190613f65565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614020565b610e9b565b6040516103fb919061407b565b60405180910390f35b34801561041057600080fd5b50610419610eb9565b60405161042691906140a5565b60405180910390f35b34801561043b57600080fd5b50610444610ebf565b604051610451919061411f565b60405180910390f35b34801561046657600080fd5b5061046f610ee3565b60405161047c91906140a5565b60405180910390f35b34801561049157600080fd5b5061049a610eed565b6040516104a791906140a5565b60405180910390f35b3480156104bc57600080fd5b506104c5610ef3565b6040516104d291906140a5565b60405180910390f35b3480156104e757600080fd5b506104f0610ef9565b6040516104fd91906140a5565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061413a565b610eff565b005b34801561053b57600080fd5b5061055660048036038101906105519190614167565b61103b565b005b34801561056457600080fd5b5061057f600480360381019061057a9190614194565b611118565b60405161058c919061407b565b60405180910390f35b3480156105a157600080fd5b506105aa611210565b6040516105b791906141f6565b60405180910390f35b3480156105cc57600080fd5b506105d5611216565b6040516105e2919061422d565b60405180910390f35b3480156105f757600080fd5b5061060061121f565b60405161060d919061407b565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614020565b611232565b60405161064a919061407b565b60405180910390f35b34801561065f57600080fd5b506106686112de565b60405161067591906140a5565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061413a565b6112e4565b6040516106b2919061407b565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd919061413a565b61133a565b005b3480156106f057600080fd5b506106f96113fa565b60405161070691906141f6565b60405180910390f35b34801561071b57600080fd5b5061072461141e565b604051610731919061407b565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c919061413a565b611431565b005b34801561076f57600080fd5b5061077861156d565b60405161078591906141f6565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b0919061413a565b611593565b6040516107c291906140a5565b60405180910390f35b3480156107d757600080fd5b506107e06115db565b005b3480156107ee57600080fd5b506107f7611663565b604051610804919061407b565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614274565b611703565b005b34801561084257600080fd5b5061084b6117da565b60405161085891906141f6565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190614167565b611800565b604051610895919061407b565b60405180910390f35b3480156108aa57600080fd5b506108b36118d3565b6040516108c091906140a5565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb91906142b4565b6118d9565b005b3480156108fe57600080fd5b506109076119d8565b604051610914919061407b565b60405180910390f35b34801561092957600080fd5b506109326119eb565b60405161093f919061407b565b60405180910390f35b34801561095457600080fd5b5061095d6119fe565b005b34801561096b57600080fd5b50610974611ab2565b60405161098191906141f6565b60405180910390f35b34801561099657600080fd5b5061099f611adc565b6040516109ac91906141f6565b60405180910390f35b3480156109c157600080fd5b506109ca611b02565b6040516109d791906140a5565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a029190614307565b611b08565b005b348015610a1557600080fd5b50610a1e611ba1565b604051610a2b9190613f65565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a569190614274565b611c33565b005b348015610a6957600080fd5b50610a72611d4b565b604051610a7f91906140a5565b60405180910390f35b348015610a9457600080fd5b50610a9d611d51565b604051610aaa91906140a5565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad5919061413a565b611d57565b604051610ae7919061407b565b60405180910390f35b348015610afc57600080fd5b50610b05611d77565b604051610b1291906140a5565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190614020565b611d7d565b604051610b4f919061407b565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614020565b611e68565b604051610b8c919061407b565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061413a565b611e86565b604051610bc9919061407b565b60405180910390f35b348015610bde57600080fd5b50610be7611ea6565b604051610bf491906140a5565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f9190614274565b611eac565b005b348015610c3257600080fd5b50610c4d6004803603810190610c4891906142b4565b611fd1565b005b348015610c5b57600080fd5b50610c766004803603810190610c719190614167565b6120d0565b005b348015610c8457600080fd5b50610c8d6121b9565b604051610c9a91906140a5565b60405180910390f35b348015610caf57600080fd5b50610cca6004803603810190610cc59190614167565b6121bf565b604051610cd7919061407b565b60405180910390f35b348015610cec57600080fd5b50610d076004803603810190610d029190614334565b61234f565b604051610d1491906140a5565b60405180910390f35b348015610d2957600080fd5b50610d326123d6565b604051610d3f919061407b565b60405180910390f35b348015610d5457600080fd5b50610d5d612476565b005b348015610d6b57600080fd5b50610d7461252a565b604051610d8191906140a5565b60405180910390f35b348015610d9657600080fd5b50610d9f612530565b604051610dac91906140a5565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd7919061413a565b612536565b005b348015610dea57600080fd5b50610df361262d565b604051610e0091906140a5565b60405180910390f35b606060038054610e18906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e44906143a3565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612633565b848461263b565b6001905092915050565b60135481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b60185481565b60175481565b610f07612633565b73ffffffffffffffffffffffffffffffffffffffff16610f25611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614420565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611043612633565b73ffffffffffffffffffffffffffffffffffffffff16611061611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614420565b60405180910390fd5b60028110156110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f29061448c565b60405180910390fd5b670de0b6b3a76400008161110f91906144db565b600a8190555050565b6000611125848484612804565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611170612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061458f565b60405180910390fd5b611204856111fc612633565b85840361263b565b60019150509392505050565b61dead81565b60006012905090565b600860009054906101000a900460ff1681565b60006112d461123f612633565b84846001600061124d612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112cf91906145af565b61263b565b6001905092915050565b60065481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611342612633565b73ffffffffffffffffffffffffffffffffffffffff16611360611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90614420565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000ae19f9b639d65248aa9cb9ded07e9de9be79e99081565b600e60149054906101000a900460ff1681565b611439612633565b73ffffffffffffffffffffffffffffffffffffffff16611457611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490614420565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e3612633565b73ffffffffffffffffffffffffffffffffffffffff16611601611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90614420565b60405180910390fd5b611661600061349b565b565b600061166d612633565b73ffffffffffffffffffffffffffffffffffffffff1661168b611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614420565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b61170b612633565b73ffffffffffffffffffffffffffffffffffffffff16611729611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690614420565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061180a612633565b73ffffffffffffffffffffffffffffffffffffffff16611828611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590614420565b60405180910390fd5b6006548210156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614655565b60405180910390fd5b8160078190555060019050919050565b60105481565b6118e1612633565b73ffffffffffffffffffffffffffffffffffffffff166118ff611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614420565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461197d91906145af565b61198791906145af565b600f819055506005600f5411156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906146c1565b60405180910390fd5b505050565b600860019054906101000a900460ff1681565b600560159054906101000a900460ff1681565b611a06612633565b73ffffffffffffffffffffffffffffffffffffffff16611a24611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614420565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b10612633565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90614420565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b606060048054611bb0906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906143a3565b8015611c295780601f10611bfe57610100808354040283529160200191611c29565b820191906000526020600020905b815481529060010190602001808311611c0c57829003601f168201915b5050505050905090565b611c3b612633565b73ffffffffffffffffffffffffffffffffffffffff16611c59611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690614420565b60405180910390fd5b7f000000000000000000000000ae19f9b639d65248aa9cb9ded07e9de9be79e99073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614753565b60405180910390fd5b611d478282613561565b5050565b60125481565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60165481565b60008060016000611d8c612633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e40906147e5565b60405180910390fd5b611e5d611e54612633565b8585840361263b565b600191505092915050565b6000611e7c611e75612633565b8484612804565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60075481565b611eb4612633565b73ffffffffffffffffffffffffffffffffffffffff16611ed2611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614420565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fc5919061407b565b60405180910390a25050565b611fd9612633565b73ffffffffffffffffffffffffffffffffffffffff16611ff7611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490614420565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461207591906145af565b61207f91906145af565b601381905550600560135411156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906146c1565b60405180910390fd5b505050565b6120d8612633565b73ffffffffffffffffffffffffffffffffffffffff166120f6611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614420565b60405180910390fd5b6005811015612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614877565b60405180910390fd5b6103e861219b610ee3565b826121a691906144db565b6121b091906148c6565b60098190555050565b600a5481565b60006121c9612633565b73ffffffffffffffffffffffffffffffffffffffff166121e7611ab2565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614420565b60405180910390fd5b620186a0612249610ee3565b61225391906148c6565b821015612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c90614969565b60405180910390fd5b620186a06122a1610ee3565b6101f46122ae91906144db565b6122b891906148c6565b8211156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906149fb565b60405180910390fd5b60075482111561233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614a8d565b60405180910390fd5b8160068190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006123e0612633565b73ffffffffffffffffffffffffffffffffffffffff166123fe611ab2565b73ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614420565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b61247e612633565b73ffffffffffffffffffffffffffffffffffffffff1661249c611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614420565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b60115481565b60095481565b61253e612633565b73ffffffffffffffffffffffffffffffffffffffff1661255c611ab2565b73ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614420565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890614b1f565b60405180910390fd5b61262a8161349b565b50565b60155481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614bb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614c43565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127f791906140a5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286a90614cd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d990614d67565b60405180910390fd5b600081036128fb576128f683836000613602565b613496565b600860009054906101000a900460ff1615612fbe57612918611ab2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129865750612956611ab2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129bf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a125750600560149054906101000a900460ff16155b15612fbd57600e60149054906101000a900460ff16612b0c57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612acc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614dd3565b60405180910390fd5b5b600860019054906101000a900460ff1615612cd457612b29611ab2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bb057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c0857507f000000000000000000000000ae19f9b639d65248aa9cb9ded07e9de9be79e99073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cd35743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8590614e8b565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db890614f1d565b60405180910390fd5b600954612dcd83611593565b82612dd891906145af565b1115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090614f89565b60405180910390fd5b612fbc565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ec15750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1057600a54811115612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f029061501b565b60405180910390fd5b612fbb565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fba57600954612f6d83611593565b82612f7891906145af565b1115612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb090614f89565b60405180910390fd5b5b5b5b5b5b6000612fc930611593565b905060006006548210159050808015612fee5750600560159054906101000a900460ff165b80156130075750600560149054906101000a900460ff16155b801561305d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130b35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131095750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314d576001600560146101000a81548160ff021916908315150217905550613131613881565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132035750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561320d57600090505b6000811561348657601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327057506000601354115b1561333d5761329d606461328f60135488613b5090919063ffffffff16565b613b6690919063ffffffff16565b9050601354601554826132b091906144db565b6132ba91906148c6565b601860008282546132cb91906145af565b92505081905550601354601654826132e391906144db565b6132ed91906148c6565b601960008282546132fe91906145af565b925050819055506013546014548261331691906144db565b61332091906148c6565b6017600082825461333191906145af565b92505081905550613462565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339857506000600f54115b15613461576133c560646133b7600f5488613b5090919063ffffffff16565b613b6690919063ffffffff16565b9050600f54601154826133d891906144db565b6133e291906148c6565b601860008282546133f391906145af565b92505081905550600f546012548261340b91906144db565b61341591906148c6565b6019600082825461342691906145af565b92505081905550600f546010548261343e91906144db565b61344891906148c6565b6017600082825461345991906145af565b925050819055505b5b600081111561347757613476873083613602565b5b8085613483919061503b565b94505b613491878787613602565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366890614cd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d790614d67565b60405180910390fd5b6136eb838383613b7c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613768906150e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380491906145af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161386891906140a5565b60405180910390a361387b848484613b81565b50505050565b600061388c30611593565b905060006019546017546018546138a391906145af565b6138ad91906145af565b90506000808314806138bf5750600082145b156138cc57505050613b4e565b6007548311156138dc5760075492505b6000600283601854866138ef91906144db565b6138f991906148c6565b61390391906148c6565b9050600061391a8286613b8690919063ffffffff16565b9050600047905061392a82613b9c565b600061393f8247613b8690919063ffffffff16565b9050600061396a8761395c60175485613b5090919063ffffffff16565b613b6690919063ffffffff16565b905060006139958861398760195486613b5090919063ffffffff16565b613b6690919063ffffffff16565b905060008183856139a6919061503b565b6139b0919061503b565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a1090615132565b60006040518083038185875af1925050503d8060008114613a4d576040519150601f19603f3d011682016040523d82523d6000602084013e613a52565b606091505b505080985050600087118015613a685750600081115b15613ab557613a778782613dd9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613aac93929190615147565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613afb90615132565b60006040518083038185875af1925050503d8060008114613b38576040519150601f19603f3d011682016040523d82523d6000602084013e613b3d565b606091505b505080985050505050505050505050505b565b60008183613b5e91906144db565b905092915050565b60008183613b7491906148c6565b905092915050565b505050565b505050565b60008183613b94919061503b565b905092915050565b6000600267ffffffffffffffff811115613bb957613bb861517e565b5b604051908082528060200260200182016040528015613be75781602001602082028036833780820191505090505b5090503081600081518110613bff57613bfe6151ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc891906151f1565b81600181518110613cdc57613cdb6151ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d41307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461263b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da3959493929190615317565b600060405180830381600087803b158015613dbd57600080fd5b505af1158015613dd1573d6000803e3d6000fd5b505050505050565b613e04307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461263b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e8b96959493929190615371565b60606040518083038185885af1158015613ea9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ece91906153e7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f0f578082015181840152602081019050613ef4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f3782613ed5565b613f418185613ee0565b9350613f51818560208601613ef1565b613f5a81613f1b565b840191505092915050565b60006020820190508181036000830152613f7f8184613f2c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fb782613f8c565b9050919050565b613fc781613fac565b8114613fd257600080fd5b50565b600081359050613fe481613fbe565b92915050565b6000819050919050565b613ffd81613fea565b811461400857600080fd5b50565b60008135905061401a81613ff4565b92915050565b6000806040838503121561403757614036613f87565b5b600061404585828601613fd5565b92505060206140568582860161400b565b9150509250929050565b60008115159050919050565b61407581614060565b82525050565b6000602082019050614090600083018461406c565b92915050565b61409f81613fea565b82525050565b60006020820190506140ba6000830184614096565b92915050565b6000819050919050565b60006140e56140e06140db84613f8c565b6140c0565b613f8c565b9050919050565b60006140f7826140ca565b9050919050565b6000614109826140ec565b9050919050565b614119816140fe565b82525050565b60006020820190506141346000830184614110565b92915050565b6000602082840312156141505761414f613f87565b5b600061415e84828501613fd5565b91505092915050565b60006020828403121561417d5761417c613f87565b5b600061418b8482850161400b565b91505092915050565b6000806000606084860312156141ad576141ac613f87565b5b60006141bb86828701613fd5565b93505060206141cc86828701613fd5565b92505060406141dd8682870161400b565b9150509250925092565b6141f081613fac565b82525050565b600060208201905061420b60008301846141e7565b92915050565b600060ff82169050919050565b61422781614211565b82525050565b6000602082019050614242600083018461421e565b92915050565b61425181614060565b811461425c57600080fd5b50565b60008135905061426e81614248565b92915050565b6000806040838503121561428b5761428a613f87565b5b600061429985828601613fd5565b92505060206142aa8582860161425f565b9150509250929050565b6000806000606084860312156142cd576142cc613f87565b5b60006142db8682870161400b565b93505060206142ec8682870161400b565b92505060406142fd8682870161400b565b9150509250925092565b60006020828403121561431d5761431c613f87565b5b600061432b8482850161425f565b91505092915050565b6000806040838503121561434b5761434a613f87565b5b600061435985828601613fd5565b925050602061436a85828601613fd5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143bb57607f821691505b6020821081036143ce576143cd614374565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061440a602083613ee0565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f43616e6e6f7420736574206d785478206c6f776572207468616e20302e322500600082015250565b6000614476601f83613ee0565b915061448182614440565b602082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e682613fea565b91506144f183613fea565b92508282026144ff81613fea565b91508282048414831517614516576145156144ac565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614579602883613ee0565b91506145848261451d565b604082019050919050565b600060208201905081810360008301526145a88161456c565b9050919050565b60006145ba82613fea565b91506145c583613fea565b92508282019050808211156145dd576145dc6144ac565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f206d696e42616c616e6365466f72537761706261636b00000000000000000000602082015250565b600061463f603683613ee0565b915061464a826145e3565b604082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b60006146ab601c83613ee0565b91506146b682614675565b602082019050919050565b600060208201905081810360008301526146da8161469e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061473d603983613ee0565b9150614748826146e1565b604082019050919050565b6000602082019050818103600083015261476c81614730565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147cf602583613ee0565b91506147da82614773565b604082019050919050565b600060208201905081810360008301526147fe816147c2565b9050919050565b7f43616e6e6f7420736574206d7857616c6c6574206c6f776572207468616e203060008201527f2e35250000000000000000000000000000000000000000000000000000000000602082015250565b6000614861602383613ee0565b915061486c82614805565b604082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d182613fea565b91506148dc83613fea565b9250826148ec576148eb614897565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614953603583613ee0565b915061495e826148f7565b604082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149e5603483613ee0565b91506149f082614989565b604082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d617842616c616e6365466f72537761706261636b000000000000000000602082015250565b6000614a77603783613ee0565b9150614a8282614a1b565b604082019050919050565b60006020820190508181036000830152614aa681614a6a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b09602683613ee0565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b9b602483613ee0565b9150614ba682614b3f565b604082019050919050565b60006020820190508181036000830152614bca81614b8e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c2d602283613ee0565b9150614c3882614bd1565b604082019050919050565b60006020820190508181036000830152614c5c81614c20565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602583613ee0565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d51602383613ee0565b9150614d5c82614cf5565b604082019050919050565b60006020820190508181036000830152614d8081614d44565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dbd601683613ee0565b9150614dc882614d87565b602082019050919050565b60006020820190508181036000830152614dec81614db0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e75604983613ee0565b9150614e8082614df3565b606082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d7854782e000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602583613ee0565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f73601383613ee0565b9150614f7e82614f3d565b602082019050919050565b60006020820190508181036000830152614fa281614f66565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d7854782e0000000000000000000000000000000000000000000000000000602082015250565b6000615005602683613ee0565b915061501082614fa9565b604082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b600061504682613fea565b915061505183613fea565b9250828203905081811115615069576150686144ac565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150cb602683613ee0565b91506150d68261506f565b604082019050919050565b600060208201905081810360008301526150fa816150be565b9050919050565b600081905092915050565b50565b600061511c600083615101565b91506151278261510c565b600082019050919050565b600061513d8261510f565b9150819050919050565b600060608201905061515c6000830186614096565b6151696020830185614096565b6151766040830184614096565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506151eb81613fbe565b92915050565b60006020828403121561520757615206613f87565b5b6000615215848285016151dc565b91505092915050565b6000819050919050565b600061524361523e6152398461521e565b6140c0565b613fea565b9050919050565b61525381615228565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61528e81613fac565b82525050565b60006152a08383615285565b60208301905092915050565b6000602082019050919050565b60006152c482615259565b6152ce8185615264565b93506152d983615275565b8060005b8381101561530a5781516152f18882615294565b97506152fc836152ac565b9250506001810190506152dd565b5085935050505092915050565b600060a08201905061532c6000830188614096565b615339602083018761524a565b818103604083015261534b81866152b9565b905061535a60608301856141e7565b6153676080830184614096565b9695505050505050565b600060c08201905061538660008301896141e7565b6153936020830188614096565b6153a0604083018761524a565b6153ad606083018661524a565b6153ba60808301856141e7565b6153c760a0830184614096565b979650505050505050565b6000815190506153e181613ff4565b92915050565b600080600060608486031215615400576153ff613f87565b5b600061540e868287016153d2565b935050602061541f868287016153d2565b9250506040615430868287016153d2565b915050925092509256fea2646970667358221220f575baf2e7d508fbfe9099d463e02624a047ad735688d1c746124e84d22ecd8c64736f6c63430008130033

Deployed Bytecode Sourcemap

25224:18299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10991:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13165:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26169:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25299:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12114:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26027:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26355:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35765:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32013:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13817:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25402:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11955:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25661:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14721:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25554:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35928:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35631:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25357:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25983:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35394:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25882:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12286:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22052:103;;;;;;;;;;;;;:::i;:::-;;30277:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32768:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25912:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31510:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26061:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33367:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25699:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25512:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29896:117;;;;;;;;;;;;;:::i;:::-;;21399:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26204:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33039:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34882:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26135:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26395:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26566:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26280:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15440:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12627:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26773:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25597:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34571:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33993:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32348:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25769:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30746:644;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12866:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30468:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30093:108;;;;;;;;;;;;;:::i;:::-;;26098:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25739:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22311:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26242:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10991:100;11045:13;11078:5;11071:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10991:100;:::o;13165:169::-;13248:4;13265:39;13274:12;:10;:12::i;:::-;13288:7;13297:6;13265:8;:39::i;:::-;13322:4;13315:11;;13165:169;;;;:::o;26169:28::-;;;;:::o;25299:51::-;;;:::o;12114:108::-;12175:7;12202:12;;12195:19;;12114:108;:::o;26027:27::-;;;;:::o;26355:33::-;;;;:::o;26315:::-;;;;:::o;35765:154::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35869:9:::1;;;;;;;;;;;35841:38;;35858:9;35841:38;;;;;;;;;;;;35902:9;35890;;:21;;;;;;;;;;;;;;;;;;35765:154:::0;:::o;32013:209::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32119:1:::1;32109:6;:11;;32087:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;32207:6;32197;:17;;;;:::i;:::-;32190:4;:24;;;;32013:209:::0;:::o;13817:494::-;13957:4;13974:36;13984:6;13992:9;14003:6;13974:9;:36::i;:::-;14024:24;14051:11;:19;14063:6;14051:19;;;;;;;;;;;;;;;:33;14071:12;:10;:12::i;:::-;14051:33;;;;;;;;;;;;;;;;14024:60;;14123:6;14103:16;:26;;14095:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14210:57;14219:6;14227:12;:10;:12::i;:::-;14260:6;14241:16;:25;14210:8;:57::i;:::-;14299:4;14292:11;;;13817:494;;;;;:::o;25402:53::-;25448:6;25402:53;:::o;11955:93::-;12013:5;12038:2;12031:9;;11955:93;:::o;25661:31::-;;;;;;;;;;;;;:::o;14721:215::-;14809:4;14826:80;14835:12;:10;:12::i;:::-;14849:7;14895:10;14858:11;:25;14870:12;:10;:12::i;:::-;14858:25;;;;;;;;;;;;;;;:34;14884:7;14858:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14826:8;:80::i;:::-;14924:4;14917:11;;14721:215;;;;:::o;25554:36::-;;;;:::o;35928:112::-;35987:4;36011:12;:21;36024:7;36011:21;;;;;;;;;;;;;;;;;;;;;;;;;36004:28;;35928:112;;;:::o;35631:125::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35737:11:::1;35726:8;;:22;;;;;;;;;;;;;;;;;;35631:125:::0;:::o;25357:38::-;;;:::o;25983:34::-;;;;;;;;;;;;;:::o;35394:228::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35551:15:::1;;;;;;;;;;;35508:59;;35531:18;35508:59;;;;;;;;;;;;35596:18;35578:15;;:36;;;;;;;;;;;;;;;;;;35394:228:::0;:::o;25882:23::-;;;;;;;;;;;;;:::o;12286:127::-;12360:7;12387:9;:18;12397:7;12387:18;;;;;;;;;;;;;;;;12380:25;;12286:127;;;:::o;22052:103::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22117:30:::1;22144:1;22117:18;:30::i;:::-;22052:103::o:0;30277:119::-;30329:4;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30361:5:::1;30346:12;;:20;;;;;;;;;;;;;;;;;;30384:4;30377:11;;30277:119:::0;:::o;32768:152::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32908:4:::1;32881:16;:24;32898:6;32881:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32768:152:::0;;:::o;25912:30::-;;;;;;;;;;;;;:::o;31510:344::-;31620:4;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31677:21:::1;;31664:9;:34;;31642:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;31815:9;31791:21;:33;;;;31842:4;31835:11;;31510:344:::0;;;:::o;26061:30::-;;;;:::o;33367:401::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33535:13:::1;33517:15;:31;;;;33577:13;33559:15;:31;;;;33613:7;33601:9;:19;;;;33682:9;;33664:15;;33646;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;33631:12;:60;;;;33726:1;33710:12;;:17;;33702:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33367:401:::0;;;:::o;25699:33::-;;;;;;;;;;;;;:::o;25512:35::-;;;;;;;;;;;;;:::o;29896:117::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29968:4:::1;29951:14;;:21;;;;;;;;;;;;;;;;;;30001:4;29983:15;;:22;;;;;;;;;;;;;;;;;;29896:117::o:0;21399:87::-;21445:7;21472:6;;;;;;;;;;;21465:13;;21399:87;:::o;25949:24::-;;;;;;;;;;;;;:::o;26204:31::-;;;;:::o;33039:104::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33128:7:::1;33110:15;;:25;;;;;;;;;;;;;;;;;;33039:104:::0;:::o;11211:::-;11267:13;11300:7;11293:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:104;:::o;34882:305::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35026:13:::1;35018:21;;:4;:21;;::::0;34996:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35138:41;35167:4;35173:5;35138:28;:41::i;:::-;34882:305:::0;;:::o;26135:24::-;;;;:::o;26395:27::-;;;;:::o;26566:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26280:25::-;;;;:::o;15440:414::-;15533:4;15550:24;15577:11;:25;15589:12;:10;:12::i;:::-;15577:25;;;;;;;;;;;;;;;:34;15603:7;15577:34;;;;;;;;;;;;;;;;15550:61;;15650:15;15630:16;:35;;15622:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15743:67;15752:12;:10;:12::i;:::-;15766:7;15794:15;15775:16;:34;15743:8;:67::i;:::-;15842:4;15835:11;;;15440:414;;;;:::o;12627:175::-;12713:4;12730:42;12740:12;:10;:12::i;:::-;12754:9;12765:6;12730:9;:42::i;:::-;12790:4;12783:11;;12627:175;;;;:::o;26773:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25597:36::-;;;;:::o;34571:175::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34680:8:::1;34656:12;:21;34669:7;34656:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;34720:7;34704:34;;;34729:8;34704:34;;;;;;:::i;:::-;;;;;;;;34571:175:::0;;:::o;33993:410::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34163:13:::1;34144:16;:32;;;;34206:13;34187:16;:32;;;;34243:7;34230:10;:20;;;;34315:10;;34296:16;;34277;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34261:13;:64;;;;34361:1;34344:13;;:18;;34336:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33993:410:::0;;;:::o;32348:230::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32457:1:::1;32447:6;:11;;32425:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32566:4;32552:13;:11;:13::i;:::-;32543:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;32532:8;:38;;;;32348:230:::0;:::o;25769:19::-;;;;:::o;30746:644::-;30854:4;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30926:6:::1;30911:13;:11;:13::i;:::-;:21;;;;:::i;:::-;30898:9;:34;;30876:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;31080:6;31065:13;:11;:13::i;:::-;31059:3;:19;;;;:::i;:::-;:27;;;;:::i;:::-;31046:9;:40;;31024:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;31212:21;;31199:9;:34;;31177:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;31351:9;31327:21;:33;;;;31378:4;31371:11;;30746:644:::0;;;:::o;12866:151::-;12955:7;12982:11;:18;12994:5;12982:18;;;;;;;;;;;;;;;:27;13001:7;12982:27;;;;;;;;;;;;;;;;12975:34;;12866:151;;;;:::o;30468:129::-;30528:4;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30562:5:::1;30545:14;;:22;;;;;;;;;;;;;;;;;;30585:4;30578:11;;30468:129:::0;:::o;30093:108::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30156:4:::1;30139:14;;:21;;;;;;;;;;;;;;;;;;30189:4;30171:15;;:22;;;;;;;;;;;;;;;;;;30093:108::o:0;26098:30::-;;;;:::o;25739:23::-;;;;:::o;22311:201::-;21631:12;:10;:12::i;:::-;21620:23;;:7;:5;:7::i;:::-;:23;;;21612:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22420:1:::1;22400:22;;:8;:22;;::::0;22392:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22476:28;22495:8;22476:18;:28::i;:::-;22311:201:::0;:::o;26242:31::-;;;;:::o;9990:98::-;10043:7;10070:10;10063:17;;9990:98;:::o;19140:381::-;19293:1;19276:19;;:5;:19;;;19268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19374:1;19355:21;;:7;:21;;;19347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19459:6;19429:11;:18;19441:5;19429:18;;;;;;;;;;;;;;;:27;19448:7;19429:27;;;;;;;;;;;;;;;:36;;;;19497:7;19481:32;;19490:5;19481:32;;;19506:6;19481:32;;;;;;:::i;:::-;;;;;;;;19140:381;;;:::o;36049:4571::-;36197:1;36181:18;;:4;:18;;;36173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36274:1;36260:16;;:2;:16;;;36252:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36344:1;36334:6;:11;36330:93;;36362:28;36378:4;36384:2;36388:1;36362:15;:28::i;:::-;36405:7;;36330:93;36440:12;;;;;;;;;;;36436:2341;;;36499:7;:5;:7::i;:::-;36491:15;;:4;:15;;;;:49;;;;;36533:7;:5;:7::i;:::-;36527:13;;:2;:13;;;;36491:49;:86;;;;;36575:1;36561:16;;:2;:16;;;;36491:86;:128;;;;;36612:6;36598:21;;:2;:21;;;;36491:128;:160;;;;;36641:10;;;;;;;;;;;36640:11;36491:160;36469:2297;;;36691:14;;;;;;;;;;;36686:210;;36764:12;:18;36777:4;36764:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;36786:12;:16;36799:2;36786:16;;;;;;;;;;;;;;;;;;;;;;;;;36764:38;36730:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;36686:210;37053:14;;;;;;;;;;;37049:617;;;37128:7;:5;:7::i;:::-;37122:13;;:2;:13;;;;:72;;;;;37178:15;37164:30;;:2;:30;;;;37122:72;:129;;;;;37237:13;37223:28;;:2;:28;;;;37122:129;37092:555;;;37406:12;37340:19;:30;37360:9;37340:30;;;;;;;;;;;;;;;;:78;37302:249;;;;;;;;;;;;:::i;:::-;;;;;;;;;37611:12;37578:19;:30;37598:9;37578:30;;;;;;;;;;;;;;;:45;;;;37092:555;37049:617;37741:25;:31;37767:4;37741:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37798:16;:20;37815:2;37798:20;;;;;;;;;;;;;;;;;;;;;;;;;37797:21;37741:77;37715:1036;;;37905:4;;37895:6;:14;;37861:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;38081:8;;38064:13;38074:2;38064:9;:13::i;:::-;38055:6;:22;;;;:::i;:::-;:34;;38021:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;37715:1036;;;38258:25;:29;38284:2;38258:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;38313:16;:22;38330:4;38313:22;;;;;;;;;;;;;;;;;;;;;;;;;38312:23;38258:77;38232:519;;;38422:4;;38412:6;:14;;38378:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;38232:519;;;38547:16;:20;38564:2;38547:20;;;;;;;;;;;;;;;;;;;;;;;;;38542:209;;38652:8;;38635:13;38645:2;38635:9;:13::i;:::-;38626:6;:22;;;;:::i;:::-;:34;;38592:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;38542:209;38232:519;37715:1036;36469:2297;36436:2341;38790:28;38821:24;38839:4;38821:9;:24::i;:::-;38790:55;;38859:12;38898:21;;38874:20;:45;;38859:60;;38951:7;:39;;;;;38975:15;;;;;;;;;;;38951:39;:67;;;;;39008:10;;;;;;;;;;;39007:11;38951:67;:116;;;;;39036:25;:31;39062:4;39036:31;;;;;;;;;;;;;;;;;;;;;;;;;39035:32;38951:116;:152;;;;;39085:12;:18;39098:4;39085:18;;;;;;;;;;;;;;;;;;;;;;;;;39084:19;38951:152;:186;;;;;39121:12;:16;39134:2;39121:16;;;;;;;;;;;;;;;;;;;;;;;;;39120:17;38951:186;38933:324;;;39177:4;39164:10;;:17;;;;;;;;;;;;;;;;;;39199:10;:8;:10::i;:::-;39240:5;39227:10;;:18;;;;;;;;;;;;;;;;;;38933:324;39270:12;39286:10;;;;;;;;;;;39285:11;39270:26;;39399:12;:18;39412:4;39399:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;39421:12;:16;39434:2;39421:16;;;;;;;;;;;;;;;;;;;;;;;;;39399:38;39395:86;;;39464:5;39454:15;;39395:86;39494:12;39599:7;39595:971;;;39651:25;:29;39677:2;39651:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39700:1;39684:13;;:17;39651:50;39647:768;;;39729:34;39759:3;39729:25;39740:13;;39729:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39722:41;;39832:13;;39812:16;;39805:4;:23;;;;:::i;:::-;39804:41;;;;:::i;:::-;39782:18;;:63;;;;;;;:::i;:::-;;;;;;;;39902:13;;39888:10;;39881:4;:17;;;;:::i;:::-;39880:35;;;;:::i;:::-;39864:12;;:51;;;;;;;:::i;:::-;;;;;;;;39984:13;;39964:16;;39957:4;:23;;;;:::i;:::-;39956:41;;;;:::i;:::-;39934:18;;:63;;;;;;;:::i;:::-;;;;;;;;39647:768;;;40059:25;:31;40085:4;40059:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40109:1;40094:12;;:16;40059:51;40055:360;;;40138:33;40167:3;40138:24;40149:12;;40138:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40131:40;;40239:12;;40220:15;;40213:4;:22;;;;:::i;:::-;40212:39;;;;:::i;:::-;40190:18;;:61;;;;;;;:::i;:::-;;;;;;;;40307:12;;40294:9;;40287:4;:16;;;;:::i;:::-;40286:33;;;;:::i;:::-;40270:12;;:49;;;;;;;:::i;:::-;;;;;;;;40387:12;;40368:15;;40361:4;:22;;;;:::i;:::-;40360:39;;;;:::i;:::-;40338:18;;:61;;;;;;;:::i;:::-;;;;;;;;40055:360;39647:768;40443:1;40436:4;:8;40432:91;;;40465:42;40481:4;40495;40502;40465:15;:42::i;:::-;40432:91;40550:4;40540:14;;;;;:::i;:::-;;;39595:971;40579:33;40595:4;40601:2;40605:6;40579:15;:33::i;:::-;36162:4458;;;;36049:4571;;;;:::o;22673:191::-;22747:16;22766:6;;;;;;;;;;;22747:25;;22792:8;22783:6;;:17;;;;;;;;;;;;;;;;;;22847:8;22816:40;;22837:8;22816:40;;;;;;;;;;;;22736:128;22673:191;:::o;35196:189::-;35313:5;35279:25;:31;35305:4;35279:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35371:5;35337:40;;35365:4;35337:40;;;;;;;;;;;;35196:189;;:::o;16345:737::-;16503:1;16485:20;;:6;:20;;;16477:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16587:1;16566:23;;:9;:23;;;16558:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16643:47;16664:6;16672:9;16683:6;16643:20;:47::i;:::-;16704:21;16728:9;:17;16738:6;16728:17;;;;;;;;;;;;;;;;16704:41;;16781:6;16764:13;:23;;16756:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:6;16886:13;:22;16866:9;:17;16876:6;16866:17;;;;;;;;;;;;;;;:42;;;;16954:6;16930:9;:20;16940:9;16930:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16996:9;16979:35;;16988:6;16979:35;;;17007:6;16979:35;;;;;;:::i;:::-;;;;;;;;17028:46;17048:6;17056:9;17067:6;17028:19;:46::i;:::-;16466:616;16345:737;;;:::o;41753:1764::-;41792:23;41818:24;41836:4;41818:9;:24::i;:::-;41792:50;;41853:25;41949:12;;41915:18;;41881;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;41853:108;;41972:12;42021:1;42002:15;:20;:46;;;;42047:1;42026:17;:22;42002:46;41998:85;;;42065:7;;;;;41998:85;42118:21;;42100:15;:39;42096:111;;;42174:21;;42156:39;;42096:111;42269:23;42382:1;42349:17;42314:18;;42296:15;:36;;;;:::i;:::-;42295:71;;;;:::i;:::-;:88;;;;:::i;:::-;42269:114;;42394:26;42423:36;42443:15;42423;:19;;:36;;;;:::i;:::-;42394:65;;42473:25;42501:21;42473:49;;42536:36;42553:18;42536:16;:36::i;:::-;42586:18;42607:44;42633:17;42607:21;:25;;:44;;;;:::i;:::-;42586:65;;42665:23;42691:81;42744:17;42691:34;42706:18;;42691:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;42665:107;;42783:17;42803:51;42836:17;42803:28;42818:12;;42803:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42783:71;;42868:23;42925:9;42907:15;42894:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42868:66;;42969:1;42948:18;:22;;;;43002:1;42981:18;:22;;;;43029:1;43014:12;:16;;;;43066:9;;;;;;;;;;;43058:23;;43089:9;43058:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43044:59;;;;;43139:1;43121:15;:19;:42;;;;;43162:1;43144:15;:19;43121:42;43117:278;;;43180:46;43193:15;43210;43180:12;:46::i;:::-;43246:137;43279:18;43316:15;43350:18;;43246:137;;;;;;;;:::i;:::-;;;;;;;;43117:278;43430:15;;;;;;;;;;;43422:29;;43473:21;43422:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43408:101;;;;;41781:1736;;;;;;;;;;41753:1764;:::o;3416:98::-;3474:7;3505:1;3501;:5;;;;:::i;:::-;3494:12;;3416:98;;;;:::o;3816:::-;3874:7;3905:1;3901;:5;;;;:::i;:::-;3894:12;;3816:98;;;;:::o;20122:125::-;;;;:::o;20852:124::-;;;;:::o;3058:98::-;3116:7;3147:1;3143;:5;;;;:::i;:::-;3136:12;;3058:98;;;;:::o;40629:591::-;40755:21;40793:1;40779:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40755:40;;40824:4;40806;40811:1;40806:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40850:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40840:4;40845:1;40840:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40886:62;40903:4;40918:15;40936:11;40886:8;:62::i;:::-;40988:15;:66;;;41069:11;41095:1;41139:4;41166;41186:15;40988:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40684:536;40629:591;:::o;41229:515::-;41377:62;41394:4;41409:15;41427:11;41377:8;:62::i;:::-;41483:15;:31;;;41522:9;41555:4;41575:11;41601:1;41644;41687:8;;;;;;;;;;;41710:15;41483:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41229: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:181::-;10659:33;10655:1;10647:6;10643:14;10636:57;10519:181;:::o;10706:366::-;10848:3;10869:67;10933:2;10928:3;10869:67;:::i;:::-;10862:74;;10945:93;11034:3;10945:93;:::i;:::-;11063:2;11058:3;11054:12;11047:19;;10706:366;;;:::o;11078:419::-;11244:4;11282:2;11271:9;11267:18;11259:26;;11331:9;11325:4;11321:20;11317:1;11306:9;11302:17;11295:47;11359:131;11485:4;11359:131;:::i;:::-;11351:139;;11078:419;;;:::o;11503:180::-;11551:77;11548:1;11541:88;11648:4;11645:1;11638:15;11672:4;11669:1;11662:15;11689:410;11729:7;11752:20;11770:1;11752:20;:::i;:::-;11747:25;;11786:20;11804:1;11786:20;:::i;:::-;11781:25;;11841:1;11838;11834:9;11863:30;11881:11;11863:30;:::i;:::-;11852:41;;12042:1;12033:7;12029:15;12026:1;12023:22;12003:1;11996:9;11976:83;11953:139;;12072:18;;:::i;:::-;11953:139;11737:362;11689:410;;;;:::o;12105:227::-;12245:34;12241:1;12233:6;12229:14;12222:58;12314:10;12309:2;12301:6;12297:15;12290:35;12105:227;:::o;12338:366::-;12480:3;12501:67;12565:2;12560:3;12501:67;:::i;:::-;12494:74;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12338:366;;;:::o;12710:419::-;12876:4;12914:2;12903:9;12899:18;12891:26;;12963:9;12957:4;12953:20;12949:1;12938:9;12934:17;12927:47;12991:131;13117:4;12991:131;:::i;:::-;12983:139;;12710:419;;;:::o;13135:191::-;13175:3;13194:20;13212:1;13194:20;:::i;:::-;13189:25;;13228:20;13246:1;13228:20;:::i;:::-;13223:25;;13271:1;13268;13264:9;13257:16;;13292:3;13289:1;13286:10;13283:36;;;13299:18;;:::i;:::-;13283:36;13135:191;;;;:::o;13332:241::-;13472:34;13468:1;13460:6;13456:14;13449:58;13541:24;13536:2;13528:6;13524:15;13517:49;13332:241;:::o;13579:366::-;13721:3;13742:67;13806:2;13801:3;13742:67;:::i;:::-;13735:74;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13579:366;;;:::o;13951:419::-;14117:4;14155:2;14144:9;14140:18;14132:26;;14204:9;14198:4;14194:20;14190:1;14179:9;14175:17;14168:47;14232:131;14358:4;14232:131;:::i;:::-;14224:139;;13951:419;;;:::o;14376:178::-;14516:30;14512:1;14504:6;14500:14;14493:54;14376:178;:::o;14560:366::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:419::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15185:9;15179:4;15175:20;15171:1;15160:9;15156:17;15149:47;15213:131;15339:4;15213:131;:::i;:::-;15205:139;;14932:419;;;:::o;15357:244::-;15497:34;15493:1;15485:6;15481:14;15474:58;15566:27;15561:2;15553:6;15549:15;15542:52;15357:244;:::o;15607:366::-;15749:3;15770:67;15834:2;15829:3;15770:67;:::i;:::-;15763:74;;15846:93;15935:3;15846:93;:::i;:::-;15964:2;15959:3;15955:12;15948:19;;15607:366;;;:::o;15979:419::-;16145:4;16183:2;16172:9;16168:18;16160:26;;16232:9;16226:4;16222:20;16218:1;16207:9;16203:17;16196:47;16260:131;16386:4;16260:131;:::i;:::-;16252:139;;15979:419;;;:::o;16404:224::-;16544:34;16540:1;16532:6;16528:14;16521:58;16613:7;16608:2;16600:6;16596:15;16589:32;16404:224;:::o;16634:366::-;16776:3;16797:67;16861:2;16856:3;16797:67;:::i;:::-;16790:74;;16873:93;16962:3;16873:93;:::i;:::-;16991:2;16986:3;16982:12;16975:19;;16634:366;;;:::o;17006:419::-;17172:4;17210:2;17199:9;17195:18;17187:26;;17259:9;17253:4;17249:20;17245:1;17234:9;17230:17;17223:47;17287:131;17413:4;17287:131;:::i;:::-;17279:139;;17006:419;;;:::o;17431:222::-;17571:34;17567:1;17559:6;17555:14;17548:58;17640:5;17635:2;17627:6;17623:15;17616:30;17431:222;:::o;17659:366::-;17801:3;17822:67;17886:2;17881:3;17822:67;:::i;:::-;17815:74;;17898:93;17987:3;17898:93;:::i;:::-;18016:2;18011:3;18007:12;18000:19;;17659:366;;;:::o;18031:419::-;18197:4;18235:2;18224:9;18220:18;18212:26;;18284:9;18278:4;18274:20;18270:1;18259:9;18255:17;18248:47;18312:131;18438:4;18312:131;:::i;:::-;18304:139;;18031:419;;;:::o;18456:180::-;18504:77;18501:1;18494:88;18601:4;18598:1;18591:15;18625:4;18622:1;18615:15;18642:185;18682:1;18699:20;18717:1;18699:20;:::i;:::-;18694:25;;18733:20;18751:1;18733:20;:::i;:::-;18728:25;;18772:1;18762:35;;18777:18;;:::i;:::-;18762:35;18819:1;18816;18812:9;18807:14;;18642:185;;;;:::o;18833:240::-;18973:34;18969:1;18961:6;18957:14;18950:58;19042:23;19037:2;19029:6;19025:15;19018:48;18833:240;:::o;19079:366::-;19221:3;19242:67;19306:2;19301:3;19242:67;:::i;:::-;19235:74;;19318:93;19407:3;19318:93;:::i;:::-;19436:2;19431:3;19427:12;19420:19;;19079:366;;;:::o;19451:419::-;19617:4;19655:2;19644:9;19640:18;19632:26;;19704:9;19698:4;19694:20;19690:1;19679:9;19675:17;19668:47;19732:131;19858:4;19732:131;:::i;:::-;19724:139;;19451:419;;;:::o;19876:239::-;20016:34;20012:1;20004:6;20000:14;19993:58;20085:22;20080:2;20072:6;20068:15;20061:47;19876:239;:::o;20121:366::-;20263:3;20284:67;20348:2;20343:3;20284:67;:::i;:::-;20277:74;;20360:93;20449:3;20360:93;:::i;:::-;20478:2;20473:3;20469:12;20462:19;;20121:366;;;:::o;20493:419::-;20659:4;20697:2;20686:9;20682:18;20674:26;;20746:9;20740:4;20736:20;20732:1;20721:9;20717:17;20710:47;20774:131;20900:4;20774:131;:::i;:::-;20766:139;;20493:419;;;:::o;20918:242::-;21058:34;21054:1;21046:6;21042:14;21035:58;21127:25;21122:2;21114:6;21110:15;21103:50;20918:242;:::o;21166:366::-;21308:3;21329:67;21393:2;21388:3;21329:67;:::i;:::-;21322:74;;21405:93;21494:3;21405:93;:::i;:::-;21523:2;21518:3;21514:12;21507:19;;21166:366;;;:::o;21538:419::-;21704:4;21742:2;21731:9;21727:18;21719:26;;21791:9;21785:4;21781:20;21777:1;21766:9;21762:17;21755:47;21819:131;21945:4;21819:131;:::i;:::-;21811:139;;21538:419;;;:::o;21963:225::-;22103:34;22099:1;22091:6;22087:14;22080:58;22172:8;22167:2;22159:6;22155:15;22148:33;21963:225;:::o;22194:366::-;22336:3;22357:67;22421:2;22416:3;22357:67;:::i;:::-;22350:74;;22433:93;22522:3;22433:93;:::i;:::-;22551:2;22546:3;22542:12;22535:19;;22194:366;;;:::o;22566:419::-;22732:4;22770:2;22759:9;22755:18;22747:26;;22819:9;22813:4;22809:20;22805:1;22794:9;22790:17;22783:47;22847:131;22973:4;22847:131;:::i;:::-;22839:139;;22566:419;;;:::o;22991:223::-;23131:34;23127:1;23119:6;23115:14;23108:58;23200:6;23195:2;23187:6;23183:15;23176:31;22991:223;:::o;23220:366::-;23362:3;23383:67;23447:2;23442:3;23383:67;:::i;:::-;23376:74;;23459:93;23548:3;23459:93;:::i;:::-;23577:2;23572:3;23568:12;23561:19;;23220:366;;;:::o;23592:419::-;23758:4;23796:2;23785:9;23781:18;23773:26;;23845:9;23839:4;23835:20;23831:1;23820:9;23816:17;23809:47;23873:131;23999:4;23873:131;:::i;:::-;23865:139;;23592:419;;;:::o;24017:221::-;24157:34;24153:1;24145:6;24141:14;24134:58;24226:4;24221:2;24213:6;24209:15;24202:29;24017:221;:::o;24244:366::-;24386:3;24407:67;24471:2;24466:3;24407:67;:::i;:::-;24400:74;;24483:93;24572:3;24483:93;:::i;:::-;24601:2;24596:3;24592:12;24585:19;;24244:366;;;:::o;24616:419::-;24782:4;24820:2;24809:9;24805:18;24797:26;;24869:9;24863:4;24859:20;24855:1;24844:9;24840:17;24833:47;24897:131;25023:4;24897:131;:::i;:::-;24889:139;;24616:419;;;:::o;25041:224::-;25181:34;25177:1;25169:6;25165:14;25158:58;25250:7;25245:2;25237:6;25233:15;25226:32;25041:224;:::o;25271:366::-;25413:3;25434:67;25498:2;25493:3;25434:67;:::i;:::-;25427:74;;25510:93;25599:3;25510:93;:::i;:::-;25628:2;25623:3;25619:12;25612:19;;25271:366;;;:::o;25643:419::-;25809:4;25847:2;25836:9;25832:18;25824:26;;25896:9;25890:4;25886:20;25882:1;25871:9;25867:17;25860:47;25924:131;26050:4;25924:131;:::i;:::-;25916:139;;25643:419;;;:::o;26068:222::-;26208:34;26204:1;26196:6;26192:14;26185:58;26277:5;26272:2;26264:6;26260:15;26253:30;26068:222;:::o;26296:366::-;26438:3;26459:67;26523:2;26518:3;26459:67;:::i;:::-;26452:74;;26535:93;26624:3;26535:93;:::i;:::-;26653:2;26648:3;26644:12;26637:19;;26296:366;;;:::o;26668:419::-;26834:4;26872:2;26861:9;26857:18;26849:26;;26921:9;26915:4;26911:20;26907:1;26896:9;26892:17;26885:47;26949:131;27075:4;26949:131;:::i;:::-;26941:139;;26668:419;;;:::o;27093:172::-;27233:24;27229:1;27221:6;27217:14;27210:48;27093:172;:::o;27271:366::-;27413:3;27434:67;27498:2;27493:3;27434:67;:::i;:::-;27427:74;;27510:93;27599:3;27510:93;:::i;:::-;27628:2;27623:3;27619:12;27612:19;;27271:366;;;:::o;27643:419::-;27809:4;27847:2;27836:9;27832:18;27824:26;;27896:9;27890:4;27886:20;27882:1;27871:9;27867:17;27860:47;27924:131;28050:4;27924:131;:::i;:::-;27916:139;;27643:419;;;:::o;28068:297::-;28208:34;28204:1;28196:6;28192:14;28185:58;28277:34;28272:2;28264:6;28260:15;28253:59;28346:11;28341:2;28333:6;28329:15;28322:36;28068:297;:::o;28371:366::-;28513:3;28534:67;28598:2;28593:3;28534:67;:::i;:::-;28527:74;;28610:93;28699:3;28610:93;:::i;:::-;28728:2;28723:3;28719:12;28712:19;;28371:366;;;:::o;28743:419::-;28909:4;28947:2;28936:9;28932:18;28924:26;;28996:9;28990:4;28986:20;28982:1;28971:9;28967:17;28960:47;29024:131;29150:4;29024:131;:::i;:::-;29016:139;;28743:419;;;:::o;29168:224::-;29308:34;29304:1;29296:6;29292:14;29285:58;29377:7;29372:2;29364:6;29360:15;29353:32;29168:224;:::o;29398:366::-;29540:3;29561:67;29625:2;29620:3;29561:67;:::i;:::-;29554:74;;29637:93;29726:3;29637:93;:::i;:::-;29755:2;29750:3;29746:12;29739:19;;29398:366;;;:::o;29770:419::-;29936:4;29974:2;29963:9;29959:18;29951:26;;30023:9;30017:4;30013:20;30009:1;29998:9;29994:17;29987:47;30051:131;30177:4;30051:131;:::i;:::-;30043:139;;29770:419;;;:::o;30195:169::-;30335:21;30331:1;30323:6;30319:14;30312:45;30195:169;:::o;30370:366::-;30512:3;30533:67;30597:2;30592:3;30533:67;:::i;:::-;30526:74;;30609:93;30698:3;30609:93;:::i;:::-;30727:2;30722:3;30718:12;30711:19;;30370:366;;;:::o;30742:419::-;30908:4;30946:2;30935:9;30931:18;30923:26;;30995:9;30989:4;30985:20;30981:1;30970:9;30966:17;30959:47;31023:131;31149:4;31023:131;:::i;:::-;31015:139;;30742:419;;;:::o;31167:225::-;31307:34;31303:1;31295:6;31291:14;31284:58;31376:8;31371:2;31363:6;31359:15;31352:33;31167:225;:::o;31398:366::-;31540:3;31561:67;31625:2;31620:3;31561:67;:::i;:::-;31554:74;;31637:93;31726:3;31637:93;:::i;:::-;31755:2;31750:3;31746:12;31739:19;;31398:366;;;:::o;31770:419::-;31936:4;31974:2;31963:9;31959:18;31951:26;;32023:9;32017:4;32013:20;32009:1;31998:9;31994:17;31987:47;32051:131;32177:4;32051:131;:::i;:::-;32043:139;;31770:419;;;:::o;32195:194::-;32235:4;32255:20;32273:1;32255:20;:::i;:::-;32250:25;;32289:20;32307:1;32289:20;:::i;:::-;32284:25;;32333:1;32330;32326:9;32318:17;;32357:1;32351:4;32348:11;32345:37;;;32362:18;;:::i;:::-;32345:37;32195:194;;;;:::o;32395:225::-;32535:34;32531:1;32523:6;32519:14;32512:58;32604:8;32599:2;32591:6;32587:15;32580:33;32395:225;:::o;32626:366::-;32768:3;32789:67;32853:2;32848:3;32789:67;:::i;:::-;32782:74;;32865:93;32954:3;32865:93;:::i;:::-;32983:2;32978:3;32974:12;32967:19;;32626:366;;;:::o;32998:419::-;33164:4;33202:2;33191:9;33187:18;33179:26;;33251:9;33245:4;33241:20;33237:1;33226:9;33222:17;33215:47;33279:131;33405:4;33279:131;:::i;:::-;33271:139;;32998:419;;;:::o;33423:147::-;33524:11;33561:3;33546:18;;33423:147;;;;:::o;33576:114::-;;:::o;33696:398::-;33855:3;33876:83;33957:1;33952:3;33876:83;:::i;:::-;33869:90;;33968:93;34057:3;33968:93;:::i;:::-;34086:1;34081:3;34077:11;34070:18;;33696:398;;;:::o;34100:379::-;34284:3;34306:147;34449:3;34306:147;:::i;:::-;34299:154;;34470:3;34463:10;;34100:379;;;:::o;34485:442::-;34634:4;34672:2;34661:9;34657:18;34649:26;;34685:71;34753:1;34742:9;34738:17;34729:6;34685:71;:::i;:::-;34766:72;34834:2;34823:9;34819:18;34810:6;34766:72;:::i;:::-;34848;34916:2;34905:9;34901:18;34892:6;34848:72;:::i;:::-;34485:442;;;;;;:::o;34933:180::-;34981:77;34978:1;34971:88;35078:4;35075:1;35068:15;35102:4;35099:1;35092:15;35119:180;35167:77;35164:1;35157:88;35264:4;35261:1;35254:15;35288:4;35285:1;35278:15;35305:143;35362:5;35393:6;35387:13;35378:22;;35409:33;35436:5;35409:33;:::i;:::-;35305:143;;;;:::o;35454:351::-;35524:6;35573:2;35561:9;35552:7;35548:23;35544:32;35541:119;;;35579:79;;:::i;:::-;35541:119;35699:1;35724:64;35780:7;35771:6;35760:9;35756:22;35724:64;:::i;:::-;35714:74;;35670:128;35454:351;;;;:::o;35811:85::-;35856:7;35885:5;35874:16;;35811:85;;;:::o;35902:158::-;35960:9;35993:61;36011:42;36020:32;36046:5;36020:32;:::i;:::-;36011:42;:::i;:::-;35993:61;:::i;:::-;35980:74;;35902:158;;;:::o;36066:147::-;36161:45;36200:5;36161:45;:::i;:::-;36156:3;36149:58;36066:147;;:::o;36219:114::-;36286:6;36320:5;36314:12;36304:22;;36219:114;;;:::o;36339:184::-;36438:11;36472:6;36467:3;36460:19;36512:4;36507:3;36503:14;36488:29;;36339:184;;;;:::o;36529:132::-;36596:4;36619:3;36611:11;;36649:4;36644:3;36640:14;36632:22;;36529:132;;;:::o;36667:108::-;36744:24;36762:5;36744:24;:::i;:::-;36739:3;36732:37;36667:108;;:::o;36781:179::-;36850:10;36871:46;36913:3;36905:6;36871:46;:::i;:::-;36949:4;36944:3;36940:14;36926:28;;36781:179;;;;:::o;36966:113::-;37036:4;37068;37063:3;37059:14;37051:22;;36966:113;;;:::o;37115:732::-;37234:3;37263:54;37311:5;37263:54;:::i;:::-;37333:86;37412:6;37407:3;37333:86;:::i;:::-;37326:93;;37443:56;37493:5;37443:56;:::i;:::-;37522:7;37553:1;37538:284;37563:6;37560:1;37557:13;37538:284;;;37639:6;37633:13;37666:63;37725:3;37710:13;37666:63;:::i;:::-;37659:70;;37752:60;37805:6;37752:60;:::i;:::-;37742:70;;37598:224;37585:1;37582;37578:9;37573:14;;37538:284;;;37542:14;37838:3;37831:10;;37239:608;;;37115:732;;;;:::o;37853:831::-;38116:4;38154:3;38143:9;38139:19;38131:27;;38168:71;38236:1;38225:9;38221:17;38212:6;38168:71;:::i;:::-;38249:80;38325:2;38314:9;38310:18;38301:6;38249:80;:::i;:::-;38376:9;38370:4;38366:20;38361:2;38350:9;38346:18;38339:48;38404:108;38507:4;38498:6;38404:108;:::i;:::-;38396:116;;38522:72;38590:2;38579:9;38575:18;38566:6;38522:72;:::i;:::-;38604:73;38672:3;38661:9;38657:19;38648:6;38604:73;:::i;:::-;37853:831;;;;;;;;:::o;38690:807::-;38939:4;38977:3;38966:9;38962:19;38954:27;;38991:71;39059:1;39048:9;39044:17;39035:6;38991:71;:::i;:::-;39072:72;39140:2;39129:9;39125:18;39116:6;39072:72;:::i;:::-;39154:80;39230:2;39219:9;39215:18;39206:6;39154:80;:::i;:::-;39244;39320:2;39309:9;39305:18;39296:6;39244:80;:::i;:::-;39334:73;39402:3;39391:9;39387:19;39378:6;39334:73;:::i;:::-;39417;39485:3;39474:9;39470:19;39461:6;39417:73;:::i;:::-;38690:807;;;;;;;;;:::o;39503:143::-;39560:5;39591:6;39585:13;39576:22;;39607:33;39634:5;39607:33;:::i;:::-;39503:143;;;;:::o;39652:663::-;39740:6;39748;39756;39805:2;39793:9;39784:7;39780:23;39776:32;39773:119;;;39811:79;;:::i;:::-;39773:119;39931:1;39956:64;40012:7;40003:6;39992:9;39988:22;39956:64;:::i;:::-;39946:74;;39902:128;40069:2;40095:64;40151:7;40142:6;40131:9;40127:22;40095:64;:::i;:::-;40085:74;;40040:129;40208:2;40234:64;40290:7;40281:6;40270:9;40266:22;40234:64;:::i;:::-;40224:74;;40179:129;39652:663;;;;;:::o

Swarm Source

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