ETH Price: $3,342.36 (+0.52%)

Token

Proof of Sasquatch (POS)
 

Overview

Max Total Supply

120,000,000 POS

Holders

146

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,860,866.136181829531437227 POS

Value
$0.00
0xef25a3874e3b25341363256c4dd9d28f1702fb87
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:
ProofofSasquatch

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
    Eth will never be the same
    
    Website:  https://proofofsasquatch.com
    Twitter:  https://twitter.com/proofofsas
    Telegram: https://t.me/proofofsasquatch

    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⡟⠻⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣿⣿⡿⠁⠀⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣽⣿⣿⣿⣿⣿⣿⣿⣶⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢠⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣧⣀⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣾⣿⣿⠟⠁⣾⣿⣿⣿⣿⣿⣿⠈⠙⠿⡿⢿⣿⣿⣷⣤⡀⠀⠀
⠀⠀⠠⣤⣴⣾⡿⠋⠁⠀⢸⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠈⠉⠀⠈⠃⠀⠀
⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣿⣿⡟⢿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣹⣿⣿⡿⠀⠀⠙⢿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢤⣶⣾⣿⣿⣿⣿⠃⠀⠀⠀⠈⣿⣿⣟⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣰⣿⣿⠟⠉⠀⠋⠁⠀⠀⠀⠀⠀⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠙⠛⠻⠿⣷⡆⠀⠀⠀⠀⠀⠀⢀⣿⣿⣷⣶⣶⣶⣦⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠀⠀⠀⠀
**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

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

interface IERC20 {
    /**
     * @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
     * transacgtion 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);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



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

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

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

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

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

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


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

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


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

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

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

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

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

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

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

    bool private swapping;

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

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

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

    constructor() ERC20("Proof of Sasquatch", "POS") {
        
        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 = 20;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 50;
        uint256 _sellLiquidityFee = 0;
        
        uint256 totalSupply = 120_000_000 * 1e18;
        
        //maxTransactionAmount 
        maxTransactionAmount =  2400000000000000000000000;
        maxWallet =             2400000000000000000000000; 
        swapTokensAtAmount = 6000 * 1e18; 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
        marketingWallet = address(0x65ED92C48C408CBE1a9239cC016c1F8c986Cb66b); // set as marketing wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

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

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

    function enableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = true;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

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

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

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
            
            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function withdraw() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280601281526020017f50726f6f66206f662053617371756174636800000000000000000000000000008152506040518060400160405280600381526020017f504f5300000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000d36565b5080600490816200010d919062000d36565b5050506000620001226200058960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200059160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000e87565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000e87565b6040518363ffffffff1660e01b81526004016200034092919062000eca565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000e87565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200059160201b60201c565b620003e360a05160016200068e60201b60201c565b600060149050600080603290506000806a6342fd08f00f637800000090506a01fc3842bd1f071c0000006007819055506a01fc3842bd1f071c00000060098190555069014542ba12a337c0000060088190555084600e8190555083600f81905550600f54600e5462000456919062000f26565b600d8190555082601181905550816012819055506012546011546200047c919062000f26565b6010819055507365ed92c48c408cbe1a9239cc016c1f8c986cb66b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004f9620004eb6200072f60201b60201c565b60016200075960201b60201c565b6200050c3060016200075960201b60201c565b6200052161dead60016200075960201b60201c565b62000543620005356200072f60201b60201c565b60016200059160201b60201c565b620005563060016200059160201b60201c565b6200056b61dead60016200059160201b60201c565b6200057d3382620008a660201b60201c565b50505050505062001130565b600033905090565b620005a16200058960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062a9062000fc2565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007696200058960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f29062000fc2565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089a919062001001565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090f906200106e565b60405180910390fd5b6200092c6000838362000a5460201b60201c565b620009488160025462000a5960201b6200272c1790919060201c565b600281905550620009a6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a5960201b6200272c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a489190620010a1565b60405180910390a35050565b505050565b600080828462000a6a919062000f26565b90508381101562000ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa9906200110e565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b3e57607f821691505b60208210810362000b545762000b5362000af6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b7f565b62000bca868362000b7f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c1762000c1162000c0b8462000be2565b62000bec565b62000be2565b9050919050565b6000819050919050565b62000c338362000bf6565b62000c4b62000c428262000c1e565b84845462000b8c565b825550505050565b600090565b62000c6262000c53565b62000c6f81848462000c28565b505050565b5b8181101562000c975762000c8b60008262000c58565b60018101905062000c75565b5050565b601f82111562000ce65762000cb08162000b5a565b62000cbb8462000b6f565b8101602085101562000ccb578190505b62000ce362000cda8562000b6f565b83018262000c74565b50505b505050565b600082821c905092915050565b600062000d0b6000198460080262000ceb565b1980831691505092915050565b600062000d26838362000cf8565b9150826002028217905092915050565b62000d418262000abc565b67ffffffffffffffff81111562000d5d5762000d5c62000ac7565b5b62000d69825462000b25565b62000d7682828562000c9b565b600060209050601f83116001811462000dae576000841562000d99578287015190505b62000da5858262000d18565b86555062000e15565b601f19841662000dbe8662000b5a565b60005b8281101562000de85784890151825560018201915060208501945060208101905062000dc1565b8683101562000e08578489015162000e04601f89168262000cf8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e4f8262000e22565b9050919050565b62000e618162000e42565b811462000e6d57600080fd5b50565b60008151905062000e818162000e56565b92915050565b60006020828403121562000ea05762000e9f62000e1d565b5b600062000eb08482850162000e70565b91505092915050565b62000ec48162000e42565b82525050565b600060408201905062000ee1600083018562000eb9565b62000ef0602083018462000eb9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f338262000be2565b915062000f408362000be2565b925082820190508082111562000f5b5762000f5a62000ef7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000faa60208362000f61565b915062000fb78262000f72565b602082019050919050565b6000602082019050818103600083015262000fdd8162000f9b565b9050919050565b60008115159050919050565b62000ffb8162000fe4565b82525050565b600060208201905062001018600083018462000ff0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001056601f8362000f61565b915062001063826200101e565b602082019050919050565b60006020820190508181036000830152620010898162001047565b9050919050565b6200109b8162000be2565b82525050565b6000602082019050620010b8600083018462001090565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620010f6601b8362000f61565b91506200110382620010be565b602082019050919050565b600060208201905081810360008301526200112981620010e7565b9050919050565b60805160a05161532d6200118e600039600081816114cb01528181611d860152612d10015260008181610e5c01528181612cb801528181613ce301528181613dc401528181613deb01528181613e870152613eae015261532d6000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063c0246668116100f7578063e2f4560511610095578063f22857a81161006f578063f22857a814610bdb578063f2fde38b14610c06578063f637434214610c2f578063f8b45b0514610c5a57610325565b8063e2f4560514610b5a578063e884f26014610b85578063f11a24d314610bb057610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a8a578063d257b34f14610ab5578063d85ba06314610af2578063dd62ed3e14610b1d57610325565b8063c024666814610a0d578063c18bc19514610a36578063c876d0b914610a5f57610325565b806395d89b4111610164578063a9059cbb1161013e578063a9059cbb1461093f578063aacebbe31461097c578063b62496f5146109a5578063bbc0c742146109e257610325565b806395d89b41146108ae5780639a7a23d6146108d9578063a457c2d71461090257610325565b806375f0a874146107c25780637bce5a04146107ed5780638a8c523c146108185780638da5cb5b1461082f578063921369131461085a578063924de9b71461088557610325565b80633aeac4e11161026a5780636902ca611161022357806370a08231116101fd57806370a082311461071a578063715018a614610757578063751039fc1461076e5780637571336a1461079957610325565b80636902ca61146106995780636a486a8e146106c45780636ddd1713146106ef57610325565b80633aeac4e11461059d5780633ccfd60b146105c657806349bd5a5e146105dd5780634a62bb65146106085780634fbee1931461063357806366ca9b831461067057610325565b80631a8145bb116102d757806323b872dd116102b157806323b872dd146104cd57806327c8f8351461050a578063313ce56714610535578063395093511461056057610325565b80631a8145bb1461044e5780631f3fed8f14610479578063203e727e146104a457610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e57806310d5de53146103bb5780631694505e146103f857806318160ddd1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613ffb565b610c85565b005b34801561035f57600080fd5b50610368610d8a565b60405161037591906140cb565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061414b565b610e1c565b6040516103b291906141a6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906141c1565b610e3a565b6040516103ef91906141a6565b60405180910390f35b34801561040457600080fd5b5061040d610e5a565b60405161041a919061424d565b60405180910390f35b34801561042f57600080fd5b50610438610e7e565b6040516104459190614277565b60405180910390f35b34801561045a57600080fd5b50610463610e88565b6040516104709190614277565b60405180910390f35b34801561048557600080fd5b5061048e610e8e565b60405161049b9190614277565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614292565b610e94565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906142bf565b610f48565b60405161050191906141a6565b60405180910390f35b34801561051657600080fd5b5061051f611021565b60405161052c9190614321565b60405180910390f35b34801561054157600080fd5b5061054a611027565b6040516105579190614358565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061414b565b611030565b60405161059491906141a6565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190614373565b6110e3565b005b3480156105d257600080fd5b506105db6112eb565b005b3480156105e957600080fd5b506105f26114c9565b6040516105ff9190614321565b60405180910390f35b34801561061457600080fd5b5061061d6114ed565b60405161062a91906141a6565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906141c1565b611500565b60405161066791906141a6565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613ffb565b611556565b005b3480156106a557600080fd5b506106ae61165b565b6040516106bb91906141a6565b60405180910390f35b3480156106d057600080fd5b506106d9611716565b6040516106e69190614277565b60405180910390f35b3480156106fb57600080fd5b5061070461171c565b60405161071191906141a6565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906141c1565b61172f565b60405161074e9190614277565b60405180910390f35b34801561076357600080fd5b5061076c611777565b005b34801561077a57600080fd5b506107836118cf565b60405161079091906141a6565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906143df565b61198a565b005b3480156107ce57600080fd5b506107d7611a7c565b6040516107e49190614321565b60405180910390f35b3480156107f957600080fd5b50610802611aa2565b60405161080f9190614277565b60405180910390f35b34801561082457600080fd5b5061082d611aa8565b005b34801561083b57600080fd5b50610844611b77565b6040516108519190614321565b60405180910390f35b34801561086657600080fd5b5061086f611ba1565b60405161087c9190614277565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061441f565b611ba7565b005b3480156108ba57600080fd5b506108c3611c5b565b6040516108d091906140cb565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb91906143df565b611ced565b005b34801561090e57600080fd5b506109296004803603810190610924919061414b565b611e20565b60405161093691906141a6565b60405180910390f35b34801561094b57600080fd5b506109666004803603810190610961919061414b565b611eed565b60405161097391906141a6565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e91906141c1565b611f0b565b005b3480156109b157600080fd5b506109cc60048036038101906109c791906141c1565b612062565b6040516109d991906141a6565b60405180910390f35b3480156109ee57600080fd5b506109f7612082565b604051610a0491906141a6565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f91906143df565b612095565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190614292565b6121d5565b005b348015610a6b57600080fd5b50610a74612289565b604051610a8191906141a6565b60405180910390f35b348015610a9657600080fd5b50610a9f61229c565b604051610aac9190614277565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190614292565b6122a2565b604051610ae991906141a6565b60405180910390f35b348015610afe57600080fd5b50610b0761234b565b604051610b149190614277565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190614373565b612351565b604051610b519190614277565b60405180910390f35b348015610b6657600080fd5b50610b6f6123d8565b604051610b7c9190614277565b60405180910390f35b348015610b9157600080fd5b50610b9a6123de565b604051610ba791906141a6565b60405180910390f35b348015610bbc57600080fd5b50610bc5612499565b604051610bd29190614277565b60405180910390f35b348015610be757600080fd5b50610bf061249f565b604051610bfd91906141a6565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c2891906141c1565b61255a565b005b348015610c3b57600080fd5b50610c44612720565b604051610c519190614277565b60405180910390f35b348015610c6657600080fd5b50610c6f612726565b604051610c7c9190614277565b60405180910390f35b610c8d61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614498565b60405180910390fd5b8160118190555080601281905550601254601154610d3a91906144e7565b60108190555060196010541115610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90614567565b60405180910390fd5b5050565b606060038054610d99906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc5906145b6565b8015610e125780601f10610de757610100808354040283529160200191610e12565b820191906000526020600020905b815481529060010190602001808311610df557829003601f168201915b5050505050905090565b6000610e30610e2961278a565b8484612792565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b60135481565b610e9c61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290614498565b60405180910390fd5b670de0b6b3a764000081610f3f91906145e7565b60078190555050565b6000610f5584848461295b565b61101684610f6161278a565b611011856040518060600160405280602881526020016152ab60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc761278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b612792565b600190509392505050565b61dead81565b60006012905090565b60006110d961103d61278a565b846110d4856001600061104e61278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272c90919063ffffffff16565b612792565b6001905092915050565b6110eb61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117190614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090614675565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112249190614321565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126591906146aa565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112a29291906146d7565b6020604051808303816000875af11580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190614715565b50505050565b6112f361278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614498565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113bd9190614321565b602060405180830381865afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe91906146aa565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161143b9291906146d7565b6020604051808303816000875af115801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e9190614715565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114c5573d6000803e3d6000fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61155e61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614498565b60405180910390fd5b81600e8190555080600f81905550600f54600e5461160b91906144e7565b600d819055506014600d541115611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e9061478e565b60405180910390fd5b5050565b600061166561278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90614498565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001905090565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61177f61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118d961278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614498565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61199261278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890614498565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611ab061278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614498565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b611baf61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590614498565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611c6a906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c96906145b6565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b5050505050905090565b611cf561278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614498565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990614820565b60405180910390fd5b611e1c82826135f0565b5050565b6000611ee3611e2d61278a565b84611ede856040518060600160405280602581526020016152d36025913960016000611e5761278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b612792565b6001905092915050565b6000611f01611efa61278a565b848461295b565b6001905092915050565b611f1361278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614498565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b61209d61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390614498565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121c991906141a6565b60405180910390a25050565b6121dd61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614498565b60405180910390fd5b670de0b6b3a76400008161228091906145e7565b60098190555050565b600c60009054906101000a900460ff1681565b60075481565b60006122ac61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233290614498565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60006123e861278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e90614498565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b60006124a961278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90614498565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001905090565b61256261278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612657906148b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461273b91906144e7565b905083811015612780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127779061491e565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f8906149b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614a42565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161294e9190614277565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614ad4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614b66565b60405180910390fd5b60008103612a5257612a4d83836000613691565b613587565b600a60009054906101000a900460ff161561311557612a6f611b77565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612add5750612aad611b77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b50575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b695750600560149054906101000a900460ff16155b1561311457600a60019054906101000a900460ff16612c6357601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c235750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614bd2565b60405180910390fd5b5b600c60009054906101000a900460ff1615612e2b57612c80611b77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d0757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d5f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e2a5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddc90614c8a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7557600754811115612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614d1c565b60405180910390fd5b600954612f248361172f565b82612f2f91906144e7565b1115612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614d88565b60405180910390fd5b613113565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306757600754811115613062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305990614e1a565b60405180910390fd5b613112565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613111576009546130c48361172f565b826130cf91906144e7565b1115613110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310790614d88565b60405180910390fd5b5b5b5b5b5b60006131203061172f565b9050600060085482101590508080156131455750600a60029054906101000a900460ff165b801561315e5750600560149054906101000a900460ff16155b80156131b45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a4576001600560146101000a81548160ff021916908315150217905550613288613924565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061335a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336457600090505b6000811561357757601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133c757506000601054115b15613461576133f460646133e660105488613b3190919063ffffffff16565b613bab90919063ffffffff16565b90506010546012548261340791906145e7565b6134119190614e69565b6014600082825461342291906144e7565b925050819055506010546011548261343a91906145e7565b6134449190614e69565b6013600082825461345591906144e7565b92505081905550613553565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134bc57506000600d54115b15613552576134e960646134db600d5488613b3190919063ffffffff16565b613bab90919063ffffffff16565b9050600d54600f54826134fc91906145e7565b6135069190614e69565b6014600082825461351791906144e7565b92505081905550600d54600e548261352f91906145e7565b6135399190614e69565b6013600082825461354a91906144e7565b925050819055505b5b600081111561356857613567873083613691565b5b80856135749190614e9a565b94505b613582878787613691565b505050505b505050565b60008383111582906135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb91906140cb565b60405180910390fd5b50600083856135e39190614e9a565b9050809150509392505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f790614ad4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376690614b66565b60405180910390fd5b61377a838383613bf5565b6137e581604051806060016040528060268152602001615285602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613878816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139179190614277565b60405180910390a3505050565b600061392f3061172f565b9050600060135460145461394391906144e7565b90506000808314806139555750600082145b1561396257505050613b2f565b601460085461397191906145e7565b83111561398a57601460085461398791906145e7565b92505b60006002836014548661399d91906145e7565b6139a79190614e69565b6139b19190614e69565b905060006139c88286613bfa90919063ffffffff16565b905060004790506139d882613c44565b60006139ed8247613bfa90919063ffffffff16565b90506000613a1887613a0a60135485613b3190919063ffffffff16565b613bab90919063ffffffff16565b905060008183613a289190614e9a565b905060006014819055506000601381905550600086118015613a4a5750600081115b15613a9757613a598682613e81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613a8e93929190614ece565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add90614f36565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b5050809750505050505050505050505b565b6000808303613b435760009050613ba5565b60008284613b5191906145e7565b9050828482613b609190614e69565b14613ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9790614fbd565b60405180910390fd5b809150505b92915050565b6000613bed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f5d565b905092915050565b505050565b6000613c3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061358c565b905092915050565b6000600267ffffffffffffffff811115613c6157613c60614fdd565b5b604051908082528060200260200182016040528015613c8f5781602001602082028036833780820191505090505b5090503081600081518110613ca757613ca661500c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d709190615050565b81600181518110613d8457613d8361500c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613de9307f000000000000000000000000000000000000000000000000000000000000000084612792565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e4b959493929190615176565b600060405180830381600087803b158015613e6557600080fd5b505af1158015613e79573d6000803e3d6000fd5b505050505050565b613eac307f000000000000000000000000000000000000000000000000000000000000000084612792565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f13969594939291906151d0565b60606040518083038185885af1158015613f31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f569190615231565b5050505050565b60008083118290613fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9b91906140cb565b60405180910390fd5b5060008385613fb39190614e69565b9050809150509392505050565b600080fd5b6000819050919050565b613fd881613fc5565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b6000806040838503121561401257614011613fc0565b5b600061402085828601613fe6565b925050602061403185828601613fe6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561407557808201518184015260208101905061405a565b60008484015250505050565b6000601f19601f8301169050919050565b600061409d8261403b565b6140a78185614046565b93506140b7818560208601614057565b6140c081614081565b840191505092915050565b600060208201905081810360008301526140e58184614092565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614118826140ed565b9050919050565b6141288161410d565b811461413357600080fd5b50565b6000813590506141458161411f565b92915050565b6000806040838503121561416257614161613fc0565b5b600061417085828601614136565b925050602061418185828601613fe6565b9150509250929050565b60008115159050919050565b6141a08161418b565b82525050565b60006020820190506141bb6000830184614197565b92915050565b6000602082840312156141d7576141d6613fc0565b5b60006141e584828501614136565b91505092915050565b6000819050919050565b600061421361420e614209846140ed565b6141ee565b6140ed565b9050919050565b6000614225826141f8565b9050919050565b60006142378261421a565b9050919050565b6142478161422c565b82525050565b6000602082019050614262600083018461423e565b92915050565b61427181613fc5565b82525050565b600060208201905061428c6000830184614268565b92915050565b6000602082840312156142a8576142a7613fc0565b5b60006142b684828501613fe6565b91505092915050565b6000806000606084860312156142d8576142d7613fc0565b5b60006142e686828701614136565b93505060206142f786828701614136565b925050604061430886828701613fe6565b9150509250925092565b61431b8161410d565b82525050565b60006020820190506143366000830184614312565b92915050565b600060ff82169050919050565b6143528161433c565b82525050565b600060208201905061436d6000830184614349565b92915050565b6000806040838503121561438a57614389613fc0565b5b600061439885828601614136565b92505060206143a985828601614136565b9150509250929050565b6143bc8161418b565b81146143c757600080fd5b50565b6000813590506143d9816143b3565b92915050565b600080604083850312156143f6576143f5613fc0565b5b600061440485828601614136565b9250506020614415858286016143ca565b9150509250929050565b60006020828403121561443557614434613fc0565b5b6000614443848285016143ca565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614482602083614046565b915061448d8261444c565b602082019050919050565b600060208201905081810360008301526144b181614475565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144f282613fc5565b91506144fd83613fc5565b9250828201905080821115614515576145146144b8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614551601d83614046565b915061455c8261451b565b602082019050919050565b6000602082019050818103600083015261458081614544565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ce57607f821691505b6020821081036145e1576145e0614587565b5b50919050565b60006145f282613fc5565b91506145fd83613fc5565b925082820261460b81613fc5565b91508282048414831517614622576146216144b8565b5b5092915050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061465f601a83614046565b915061466a82614629565b602082019050919050565b6000602082019050818103600083015261468e81614652565b9050919050565b6000815190506146a481613fcf565b92915050565b6000602082840312156146c0576146bf613fc0565b5b60006146ce84828501614695565b91505092915050565b60006040820190506146ec6000830185614312565b6146f96020830184614268565b9392505050565b60008151905061470f816143b3565b92915050565b60006020828403121561472b5761472a613fc0565b5b600061473984828501614700565b91505092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614778601d83614046565b915061478382614742565b602082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061480a603983614046565b9150614815826147ae565b604082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061489c602683614046565b91506148a782614840565b604082019050919050565b600060208201905081810360008301526148cb8161488f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614908601b83614046565b9150614913826148d2565b602082019050919050565b60006020820190508181036000830152614937816148fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061499a602483614046565b91506149a58261493e565b604082019050919050565b600060208201905081810360008301526149c98161498d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a2c602283614046565b9150614a37826149d0565b604082019050919050565b60006020820190508181036000830152614a5b81614a1f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614abe602583614046565b9150614ac982614a62565b604082019050919050565b60006020820190508181036000830152614aed81614ab1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b50602383614046565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614bbc601683614046565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c74604983614046565b9150614c7f82614bf2565b606082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d06603583614046565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d72601383614046565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e04603683614046565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e7482613fc5565b9150614e7f83613fc5565b925082614e8f57614e8e614e3a565b5b828204905092915050565b6000614ea582613fc5565b9150614eb083613fc5565b9250828203905081811115614ec857614ec76144b8565b5b92915050565b6000606082019050614ee36000830186614268565b614ef06020830185614268565b614efd6040830184614268565b949350505050565b600081905092915050565b50565b6000614f20600083614f05565b9150614f2b82614f10565b600082019050919050565b6000614f4182614f13565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa7602183614046565b9150614fb282614f4b565b604082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061504a8161411f565b92915050565b60006020828403121561506657615065613fc0565b5b60006150748482850161503b565b91505092915050565b6000819050919050565b60006150a261509d6150988461507d565b6141ee565b613fc5565b9050919050565b6150b281615087565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150ed8161410d565b82525050565b60006150ff83836150e4565b60208301905092915050565b6000602082019050919050565b6000615123826150b8565b61512d81856150c3565b9350615138836150d4565b8060005b8381101561516957815161515088826150f3565b975061515b8361510b565b92505060018101905061513c565b5085935050505092915050565b600060a08201905061518b6000830188614268565b61519860208301876150a9565b81810360408301526151aa8186615118565b90506151b96060830185614312565b6151c66080830184614268565b9695505050505050565b600060c0820190506151e56000830189614312565b6151f26020830188614268565b6151ff60408301876150a9565b61520c60608301866150a9565b6152196080830185614312565b61522660a0830184614268565b979650505050505050565b60008060006060848603121561524a57615249613fc0565b5b600061525886828701614695565b935050602061526986828701614695565b925050604061527a86828701614695565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026988ca85460e44168ac9a1772b831e3cbe01121ec93661aa71998fd7cd965ea64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063c0246668116100f7578063e2f4560511610095578063f22857a81161006f578063f22857a814610bdb578063f2fde38b14610c06578063f637434214610c2f578063f8b45b0514610c5a57610325565b8063e2f4560514610b5a578063e884f26014610b85578063f11a24d314610bb057610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a8a578063d257b34f14610ab5578063d85ba06314610af2578063dd62ed3e14610b1d57610325565b8063c024666814610a0d578063c18bc19514610a36578063c876d0b914610a5f57610325565b806395d89b4111610164578063a9059cbb1161013e578063a9059cbb1461093f578063aacebbe31461097c578063b62496f5146109a5578063bbc0c742146109e257610325565b806395d89b41146108ae5780639a7a23d6146108d9578063a457c2d71461090257610325565b806375f0a874146107c25780637bce5a04146107ed5780638a8c523c146108185780638da5cb5b1461082f578063921369131461085a578063924de9b71461088557610325565b80633aeac4e11161026a5780636902ca611161022357806370a08231116101fd57806370a082311461071a578063715018a614610757578063751039fc1461076e5780637571336a1461079957610325565b80636902ca61146106995780636a486a8e146106c45780636ddd1713146106ef57610325565b80633aeac4e11461059d5780633ccfd60b146105c657806349bd5a5e146105dd5780634a62bb65146106085780634fbee1931461063357806366ca9b831461067057610325565b80631a8145bb116102d757806323b872dd116102b157806323b872dd146104cd57806327c8f8351461050a578063313ce56714610535578063395093511461056057610325565b80631a8145bb1461044e5780631f3fed8f14610479578063203e727e146104a457610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e57806310d5de53146103bb5780631694505e146103f857806318160ddd1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613ffb565b610c85565b005b34801561035f57600080fd5b50610368610d8a565b60405161037591906140cb565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061414b565b610e1c565b6040516103b291906141a6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906141c1565b610e3a565b6040516103ef91906141a6565b60405180910390f35b34801561040457600080fd5b5061040d610e5a565b60405161041a919061424d565b60405180910390f35b34801561042f57600080fd5b50610438610e7e565b6040516104459190614277565b60405180910390f35b34801561045a57600080fd5b50610463610e88565b6040516104709190614277565b60405180910390f35b34801561048557600080fd5b5061048e610e8e565b60405161049b9190614277565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614292565b610e94565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906142bf565b610f48565b60405161050191906141a6565b60405180910390f35b34801561051657600080fd5b5061051f611021565b60405161052c9190614321565b60405180910390f35b34801561054157600080fd5b5061054a611027565b6040516105579190614358565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061414b565b611030565b60405161059491906141a6565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190614373565b6110e3565b005b3480156105d257600080fd5b506105db6112eb565b005b3480156105e957600080fd5b506105f26114c9565b6040516105ff9190614321565b60405180910390f35b34801561061457600080fd5b5061061d6114ed565b60405161062a91906141a6565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906141c1565b611500565b60405161066791906141a6565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613ffb565b611556565b005b3480156106a557600080fd5b506106ae61165b565b6040516106bb91906141a6565b60405180910390f35b3480156106d057600080fd5b506106d9611716565b6040516106e69190614277565b60405180910390f35b3480156106fb57600080fd5b5061070461171c565b60405161071191906141a6565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906141c1565b61172f565b60405161074e9190614277565b60405180910390f35b34801561076357600080fd5b5061076c611777565b005b34801561077a57600080fd5b506107836118cf565b60405161079091906141a6565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906143df565b61198a565b005b3480156107ce57600080fd5b506107d7611a7c565b6040516107e49190614321565b60405180910390f35b3480156107f957600080fd5b50610802611aa2565b60405161080f9190614277565b60405180910390f35b34801561082457600080fd5b5061082d611aa8565b005b34801561083b57600080fd5b50610844611b77565b6040516108519190614321565b60405180910390f35b34801561086657600080fd5b5061086f611ba1565b60405161087c9190614277565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061441f565b611ba7565b005b3480156108ba57600080fd5b506108c3611c5b565b6040516108d091906140cb565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb91906143df565b611ced565b005b34801561090e57600080fd5b506109296004803603810190610924919061414b565b611e20565b60405161093691906141a6565b60405180910390f35b34801561094b57600080fd5b506109666004803603810190610961919061414b565b611eed565b60405161097391906141a6565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e91906141c1565b611f0b565b005b3480156109b157600080fd5b506109cc60048036038101906109c791906141c1565b612062565b6040516109d991906141a6565b60405180910390f35b3480156109ee57600080fd5b506109f7612082565b604051610a0491906141a6565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f91906143df565b612095565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190614292565b6121d5565b005b348015610a6b57600080fd5b50610a74612289565b604051610a8191906141a6565b60405180910390f35b348015610a9657600080fd5b50610a9f61229c565b604051610aac9190614277565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190614292565b6122a2565b604051610ae991906141a6565b60405180910390f35b348015610afe57600080fd5b50610b0761234b565b604051610b149190614277565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190614373565b612351565b604051610b519190614277565b60405180910390f35b348015610b6657600080fd5b50610b6f6123d8565b604051610b7c9190614277565b60405180910390f35b348015610b9157600080fd5b50610b9a6123de565b604051610ba791906141a6565b60405180910390f35b348015610bbc57600080fd5b50610bc5612499565b604051610bd29190614277565b60405180910390f35b348015610be757600080fd5b50610bf061249f565b604051610bfd91906141a6565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c2891906141c1565b61255a565b005b348015610c3b57600080fd5b50610c44612720565b604051610c519190614277565b60405180910390f35b348015610c6657600080fd5b50610c6f612726565b604051610c7c9190614277565b60405180910390f35b610c8d61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614498565b60405180910390fd5b8160118190555080601281905550601254601154610d3a91906144e7565b60108190555060196010541115610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90614567565b60405180910390fd5b5050565b606060038054610d99906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc5906145b6565b8015610e125780601f10610de757610100808354040283529160200191610e12565b820191906000526020600020905b815481529060010190602001808311610df557829003601f168201915b5050505050905090565b6000610e30610e2961278a565b8484612792565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b60135481565b610e9c61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290614498565b60405180910390fd5b670de0b6b3a764000081610f3f91906145e7565b60078190555050565b6000610f5584848461295b565b61101684610f6161278a565b611011856040518060600160405280602881526020016152ab60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc761278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b612792565b600190509392505050565b61dead81565b60006012905090565b60006110d961103d61278a565b846110d4856001600061104e61278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272c90919063ffffffff16565b612792565b6001905092915050565b6110eb61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117190614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090614675565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112249190614321565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126591906146aa565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112a29291906146d7565b6020604051808303816000875af11580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190614715565b50505050565b6112f361278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614498565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113bd9190614321565b602060405180830381865afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe91906146aa565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161143b9291906146d7565b6020604051808303816000875af115801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e9190614715565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114c5573d6000803e3d6000fd5b5050565b7f000000000000000000000000c4c567b03037d36d7746c4731c2c3b8567a408fd81565b600a60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61155e61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614498565b60405180910390fd5b81600e8190555080600f81905550600f54600e5461160b91906144e7565b600d819055506014600d541115611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e9061478e565b60405180910390fd5b5050565b600061166561278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90614498565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001905090565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61177f61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118d961278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614498565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61199261278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890614498565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611ab061278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614498565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b611baf61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590614498565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611c6a906145b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c96906145b6565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b5050505050905090565b611cf561278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614498565b60405180910390fd5b7f000000000000000000000000c4c567b03037d36d7746c4731c2c3b8567a408fd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0990614820565b60405180910390fd5b611e1c82826135f0565b5050565b6000611ee3611e2d61278a565b84611ede856040518060600160405280602581526020016152d36025913960016000611e5761278a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b612792565b6001905092915050565b6000611f01611efa61278a565b848461295b565b6001905092915050565b611f1361278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614498565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b61209d61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390614498565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121c991906141a6565b60405180910390a25050565b6121dd61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614498565b60405180910390fd5b670de0b6b3a76400008161228091906145e7565b60098190555050565b600c60009054906101000a900460ff1681565b60075481565b60006122ac61278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233290614498565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60006123e861278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e90614498565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b60006124a961278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90614498565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001905090565b61256261278a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612657906148b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461273b91906144e7565b905083811015612780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127779061491e565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f8906149b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614a42565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161294e9190614277565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614ad4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614b66565b60405180910390fd5b60008103612a5257612a4d83836000613691565b613587565b600a60009054906101000a900460ff161561311557612a6f611b77565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612add5750612aad611b77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b50575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b695750600560149054906101000a900460ff16155b1561311457600a60019054906101000a900460ff16612c6357601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c235750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614bd2565b60405180910390fd5b5b600c60009054906101000a900460ff1615612e2b57612c80611b77565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d0757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d5f57507f000000000000000000000000c4c567b03037d36d7746c4731c2c3b8567a408fd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e2a5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddc90614c8a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7557600754811115612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614d1c565b60405180910390fd5b600954612f248361172f565b82612f2f91906144e7565b1115612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614d88565b60405180910390fd5b613113565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130185750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306757600754811115613062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305990614e1a565b60405180910390fd5b613112565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613111576009546130c48361172f565b826130cf91906144e7565b1115613110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310790614d88565b60405180910390fd5b5b5b5b5b5b60006131203061172f565b9050600060085482101590508080156131455750600a60029054906101000a900460ff165b801561315e5750600560149054906101000a900460ff16155b80156131b45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a4576001600560146101000a81548160ff021916908315150217905550613288613924565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061335a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336457600090505b6000811561357757601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133c757506000601054115b15613461576133f460646133e660105488613b3190919063ffffffff16565b613bab90919063ffffffff16565b90506010546012548261340791906145e7565b6134119190614e69565b6014600082825461342291906144e7565b925050819055506010546011548261343a91906145e7565b6134449190614e69565b6013600082825461345591906144e7565b92505081905550613553565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134bc57506000600d54115b15613552576134e960646134db600d5488613b3190919063ffffffff16565b613bab90919063ffffffff16565b9050600d54600f54826134fc91906145e7565b6135069190614e69565b6014600082825461351791906144e7565b92505081905550600d54600e548261352f91906145e7565b6135399190614e69565b6013600082825461354a91906144e7565b925050819055505b5b600081111561356857613567873083613691565b5b80856135749190614e9a565b94505b613582878787613691565b505050505b505050565b60008383111582906135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb91906140cb565b60405180910390fd5b50600083856135e39190614e9a565b9050809150509392505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f790614ad4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376690614b66565b60405180910390fd5b61377a838383613bf5565b6137e581604051806060016040528060268152602001615285602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613878816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139179190614277565b60405180910390a3505050565b600061392f3061172f565b9050600060135460145461394391906144e7565b90506000808314806139555750600082145b1561396257505050613b2f565b601460085461397191906145e7565b83111561398a57601460085461398791906145e7565b92505b60006002836014548661399d91906145e7565b6139a79190614e69565b6139b19190614e69565b905060006139c88286613bfa90919063ffffffff16565b905060004790506139d882613c44565b60006139ed8247613bfa90919063ffffffff16565b90506000613a1887613a0a60135485613b3190919063ffffffff16565b613bab90919063ffffffff16565b905060008183613a289190614e9a565b905060006014819055506000601381905550600086118015613a4a5750600081115b15613a9757613a598682613e81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613a8e93929190614ece565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add90614f36565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b5050809750505050505050505050505b565b6000808303613b435760009050613ba5565b60008284613b5191906145e7565b9050828482613b609190614e69565b14613ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9790614fbd565b60405180910390fd5b809150505b92915050565b6000613bed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f5d565b905092915050565b505050565b6000613c3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061358c565b905092915050565b6000600267ffffffffffffffff811115613c6157613c60614fdd565b5b604051908082528060200260200182016040528015613c8f5781602001602082028036833780820191505090505b5090503081600081518110613ca757613ca661500c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d709190615050565b81600181518110613d8457613d8361500c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613de9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612792565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e4b959493929190615176565b600060405180830381600087803b158015613e6557600080fd5b505af1158015613e79573d6000803e3d6000fd5b505050505050565b613eac307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612792565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f13969594939291906151d0565b60606040518083038185885af1158015613f31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f569190615231565b5050505050565b60008083118290613fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9b91906140cb565b60405180910390fd5b5060008385613fb39190614e69565b9050809150509392505050565b600080fd5b6000819050919050565b613fd881613fc5565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b6000806040838503121561401257614011613fc0565b5b600061402085828601613fe6565b925050602061403185828601613fe6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561407557808201518184015260208101905061405a565b60008484015250505050565b6000601f19601f8301169050919050565b600061409d8261403b565b6140a78185614046565b93506140b7818560208601614057565b6140c081614081565b840191505092915050565b600060208201905081810360008301526140e58184614092565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614118826140ed565b9050919050565b6141288161410d565b811461413357600080fd5b50565b6000813590506141458161411f565b92915050565b6000806040838503121561416257614161613fc0565b5b600061417085828601614136565b925050602061418185828601613fe6565b9150509250929050565b60008115159050919050565b6141a08161418b565b82525050565b60006020820190506141bb6000830184614197565b92915050565b6000602082840312156141d7576141d6613fc0565b5b60006141e584828501614136565b91505092915050565b6000819050919050565b600061421361420e614209846140ed565b6141ee565b6140ed565b9050919050565b6000614225826141f8565b9050919050565b60006142378261421a565b9050919050565b6142478161422c565b82525050565b6000602082019050614262600083018461423e565b92915050565b61427181613fc5565b82525050565b600060208201905061428c6000830184614268565b92915050565b6000602082840312156142a8576142a7613fc0565b5b60006142b684828501613fe6565b91505092915050565b6000806000606084860312156142d8576142d7613fc0565b5b60006142e686828701614136565b93505060206142f786828701614136565b925050604061430886828701613fe6565b9150509250925092565b61431b8161410d565b82525050565b60006020820190506143366000830184614312565b92915050565b600060ff82169050919050565b6143528161433c565b82525050565b600060208201905061436d6000830184614349565b92915050565b6000806040838503121561438a57614389613fc0565b5b600061439885828601614136565b92505060206143a985828601614136565b9150509250929050565b6143bc8161418b565b81146143c757600080fd5b50565b6000813590506143d9816143b3565b92915050565b600080604083850312156143f6576143f5613fc0565b5b600061440485828601614136565b9250506020614415858286016143ca565b9150509250929050565b60006020828403121561443557614434613fc0565b5b6000614443848285016143ca565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614482602083614046565b915061448d8261444c565b602082019050919050565b600060208201905081810360008301526144b181614475565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144f282613fc5565b91506144fd83613fc5565b9250828201905080821115614515576145146144b8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614551601d83614046565b915061455c8261451b565b602082019050919050565b6000602082019050818103600083015261458081614544565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ce57607f821691505b6020821081036145e1576145e0614587565b5b50919050565b60006145f282613fc5565b91506145fd83613fc5565b925082820261460b81613fc5565b91508282048414831517614622576146216144b8565b5b5092915050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061465f601a83614046565b915061466a82614629565b602082019050919050565b6000602082019050818103600083015261468e81614652565b9050919050565b6000815190506146a481613fcf565b92915050565b6000602082840312156146c0576146bf613fc0565b5b60006146ce84828501614695565b91505092915050565b60006040820190506146ec6000830185614312565b6146f96020830184614268565b9392505050565b60008151905061470f816143b3565b92915050565b60006020828403121561472b5761472a613fc0565b5b600061473984828501614700565b91505092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614778601d83614046565b915061478382614742565b602082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061480a603983614046565b9150614815826147ae565b604082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061489c602683614046565b91506148a782614840565b604082019050919050565b600060208201905081810360008301526148cb8161488f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614908601b83614046565b9150614913826148d2565b602082019050919050565b60006020820190508181036000830152614937816148fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061499a602483614046565b91506149a58261493e565b604082019050919050565b600060208201905081810360008301526149c98161498d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a2c602283614046565b9150614a37826149d0565b604082019050919050565b60006020820190508181036000830152614a5b81614a1f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614abe602583614046565b9150614ac982614a62565b604082019050919050565b60006020820190508181036000830152614aed81614ab1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b50602383614046565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614bbc601683614046565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c74604983614046565b9150614c7f82614bf2565b606082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d06603583614046565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d72601383614046565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e04603683614046565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e7482613fc5565b9150614e7f83613fc5565b925082614e8f57614e8e614e3a565b5b828204905092915050565b6000614ea582613fc5565b9150614eb083613fc5565b9250828203905081811115614ec857614ec76144b8565b5b92915050565b6000606082019050614ee36000830186614268565b614ef06020830185614268565b614efd6040830184614268565b949350505050565b600081905092915050565b50565b6000614f20600083614f05565b9150614f2b82614f10565b600082019050919050565b6000614f4182614f13565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa7602183614046565b9150614fb282614f4b565b604082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061504a8161411f565b92915050565b60006020828403121561506657615065613fc0565b5b60006150748482850161503b565b91505092915050565b6000819050919050565b60006150a261509d6150988461507d565b6141ee565b613fc5565b9050919050565b6150b281615087565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150ed8161410d565b82525050565b60006150ff83836150e4565b60208301905092915050565b6000602082019050919050565b6000615123826150b8565b61512d81856150c3565b9350615138836150d4565b8060005b8381101561516957815161515088826150f3565b975061515b8361510b565b92505060018101905061513c565b5085935050505092915050565b600060a08201905061518b6000830188614268565b61519860208301876150a9565b81810360408301526151aa8186615118565b90506151b96060830185614312565b6151c66080830184614268565b9695505050505050565b600060c0820190506151e56000830189614312565b6151f26020830188614268565b6151ff60408301876150a9565b61520c60608301866150a9565b6152196080830185614312565b61522660a0830184614268565b979650505050505050565b60008060006060848603121561524a57615249613fc0565b5b600061525886828701614695565b935050602061526986828701614695565b925050604061527a86828701614695565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026988ca85460e44168ac9a1772b831e3cbe01121ec93661aa71998fd7cd965ea64736f6c63430008110033

Deployed Bytecode Sourcemap

30867:14276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36740:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9023:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11190:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32116:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30954:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10143:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31929:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31889;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35805:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11841:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31057:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9985:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12605:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44857:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44603:246;;;;;;;;;;;;;:::i;:::-;;31012:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31307:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37919:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36418:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35157:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31772:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31387:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10314:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:148;;;;;;;;;;;;;:::i;:::-;;35029:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36061:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31149:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31692;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34861:112;;;;;;;;;;;;;:::i;:::-;;22846:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31807:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36305:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9242:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37255:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13326:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10654:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37703:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32338:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31347:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37065:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35935:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31610:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31192:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35636:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31658:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10892:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35285:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31729:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35428:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23791:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31845:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31274:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36740:317;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36859:13:::1;36840:16;:32;;;;36902:13;36883:16;:32;;;;36961:16;;36942;;:35;;;;:::i;:::-;36926:13;:51;;;;37013:2;36996:13;;:19;;36988:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36740:317:::0;;:::o;9023:100::-;9077:13;9110:5;9103:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9023:100;:::o;11190:169::-;11273:4;11290:39;11299:12;:10;:12::i;:::-;11313:7;11322:6;11290:8;:39::i;:::-;11347:4;11340:11;;11190:169;;;;:::o;32116:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30954:51::-;;;:::o;10143:108::-;10204:7;10231:12;;10224:19;;10143:108;:::o;31929:33::-;;;;:::o;31889:::-;;;;:::o;35805:122::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35912:6:::1;35902;:17;;;;:::i;:::-;35879:20;:40;;;;35805:122:::0;:::o;11841:355::-;11981:4;11998:36;12008:6;12016:9;12027:6;11998:9;:36::i;:::-;12045:121;12054:6;12062:12;:10;:12::i;:::-;12076:89;12114:6;12076:89;;;;;;;;;;;;;;;;;:11;:19;12088:6;12076:19;;;;;;;;;;;;;;;:33;12096:12;:10;:12::i;:::-;12076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12045:8;:121::i;:::-;12184:4;12177:11;;11841:355;;;;;:::o;31057:53::-;31103:6;31057:53;:::o;9985:93::-;10043:5;10068:2;10061:9;;9985:93;:::o;12605:218::-;12693:4;12710:83;12719:12;:10;:12::i;:::-;12733:7;12742:50;12781:10;12742:11;:25;12754:12;:10;:12::i;:::-;12742:25;;;;;;;;;;;;;;;:34;12768:7;12742:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12710:8;:83::i;:::-;12811:4;12804:11;;12605:218;;;;:::o;44857:283::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44965:1:::1;44947:20;;:6;:20;;::::0;44939:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45009:24;45043:6;45036:24;;;45069:4;45036:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45009:66;;45093:6;45086:23;;;45110:3;45115:16;45086:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44928:212;44857:283:::0;;:::o;44603:246::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44653:15:::1;44686:4;44671:31;;;44711:4;44671:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44653:64;;44743:4;44728:30;;;44759:10;44771:7;44728:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44798:10;44790:28;;:51;44819:21;44790:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44642:207;44603:246::o:0;31012:38::-;;;:::o;31307:33::-;;;;;;;;;;;;;:::o;37919:125::-;37984:4;38008:19;:28;38028:7;38008:28;;;;;;;;;;;;;;;;;;;;;;;;;38001:35;;37919:125;;;:::o;36418:310::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36535:13:::1;36517:15;:31;;;;36577:13;36559:15;:31;;;;36634:15;;36616;;:33;;;;:::i;:::-;36601:12;:48;;;;36684:2;36668:12;;:18;;36660:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36418:310:::0;;:::o;35157:120::-;35209:4;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35243:4:::1;35226:14;;:21;;;;;;;;;;;;;;;;;;35265:4;35258:11;;35157:120:::0;:::o;31772:28::-;;;;:::o;31387:31::-;;;;;;;;;;;;;:::o;10314:127::-;10388:7;10415:9;:18;10425:7;10415:18;;;;;;;;;;;;;;;;10408:25;;10314:127;;;:::o;23488:148::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23595:1:::1;23558:40;;23579:6;;;;;;;;;;;23558:40;;;;;;;;;;;;23626:1;23609:6;;:19;;;;;;;;;;;;;;;;;;23488:148::o:0;35029:120::-;35081:4;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35114:5:::1;35097:14;;:22;;;;;;;;;;;;;;;;;;35137:4;35130:11;;35029:120:::0;:::o;36061:144::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36193:4:::1;36151:31;:39;36183:6;36151:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36061:144:::0;;:::o;31149:30::-;;;;;;;;;;;;;:::o;31692:::-;;;;:::o;34861:112::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34932:4:::1;34916:13;;:20;;;;;;;;;;;;;;;;;;34961:4;34947:11;;:18;;;;;;;;;;;;;;;;;;34861:112::o:0;22846:79::-;22884:7;22911:6;;;;;;;;;;;22904:13;;22846:79;:::o;31807:31::-;;;;:::o;36305:101::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36391:7:::1;36377:11;;:21;;;;;;;;;;;;;;;;;;36305:101:::0;:::o;9242:104::-;9298:13;9331:7;9324:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9242:104;:::o;37255:244::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37362:13:::1;37354:21;;:4;:21;;::::0;37346:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37450:41;37479:4;37485:5;37450:28;:41::i;:::-;37255:244:::0;;:::o;13326:269::-;13419:4;13436:129;13445:12;:10;:12::i;:::-;13459:7;13468:96;13507:15;13468:96;;;;;;;;;;;;;;;;;:11;:25;13480:12;:10;:12::i;:::-;13468:25;;;;;;;;;;;;;;;:34;13494:7;13468:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13436:8;:129::i;:::-;13583:4;13576:11;;13326:269;;;;:::o;10654:175::-;10740:4;10757:42;10767:12;:10;:12::i;:::-;10781:9;10792:6;10757:9;:42::i;:::-;10817:4;10810:11;;10654:175;;;;:::o;37703:208::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37840:15:::1;;;;;;;;;;;37797:59;;37820:18;37797:59;;;;;;;;;;;;37885:18;37867:15;;:36;;;;;;;;;;;;;;;;;;37703:208:::0;:::o;32338:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;31347:33::-;;;;;;;;;;;;;:::o;37065:182::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37181:8:::1;37150:19;:28;37170:7;37150:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37221:7;37205:34;;;37230:8;37205:34;;;;;;:::i;:::-;;;;;;;;37065:182:::0;;:::o;35935:114::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36034:6:::1;36024;:17;;;;:::i;:::-;36012:9;:29;;;;35935:114:::0;:::o;31610:39::-;;;;;;;;;;;;;:::o;31192:35::-;;;;:::o;35636:157::-;35717:4;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35754:9:::1;35733:18;:30;;;;35781:4;35774:11;;35636:157:::0;;;:::o;31658:27::-;;;;:::o;10892:151::-;10981:7;11008:11;:18;11020:5;11008:18;;;;;;;;;;;;;;;:27;11027:7;11008:27;;;;;;;;;;;;;;;;11001:34;;10892:151;;;;:::o;31234:33::-;;;;:::o;35285:135::-;35345:4;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35385:5:::1;35362:20;;:28;;;;;;;;;;;;;;;;;;35408:4;35401:11;;35285:135:::0;:::o;31729:30::-;;;;:::o;35428:133::-;35487:4;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35527:4:::1;35504:20;;:27;;;;;;;;;;;;;;;;;;35549:4;35542:11;;35428:133:::0;:::o;23791:244::-;23068:12;:10;:12::i;:::-;23058:22;;:6;;;;;;;;;;;:22;;;23050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23900:1:::1;23880:22;;:8;:22;;::::0;23872:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23990:8;23961:38;;23982:6;;;;;;;;;;;23961:38;;;;;;;;;;;;24019:8;24010:6;;:17;;;;;;;;;;;;;;;;;;23791:244:::0;:::o;31845:31::-;;;;:::o;31274:24::-;;;;:::o;17890:181::-;17948:7;17968:9;17984:1;17980;:5;;;;:::i;:::-;17968:17;;18009:1;18004;:6;;17996:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18062:1;18055:8;;;17890:181;;;;:::o;1658:98::-;1711:7;1738:10;1731:17;;1658:98;:::o;16512:380::-;16665:1;16648:19;;:5;:19;;;16640:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16746:1;16727:21;;:7;:21;;;16719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16830:6;16800:11;:18;16812:5;16800:18;;;;;;;;;;;;;;;:27;16819:7;16800:27;;;;;;;;;;;;;;;:36;;;;16868:7;16852:32;;16861:5;16852:32;;;16877:6;16852:32;;;;;;:::i;:::-;;;;;;;;16512:380;;;:::o;38110:3926::-;38258:1;38242:18;;:4;:18;;;38234:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38335:1;38321:16;;:2;:16;;;38313:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38412:1;38402:6;:11;38399:92;;38430:28;38446:4;38452:2;38456:1;38430:15;:28::i;:::-;38473:7;;38399:92;38514:14;;;;;;;;;;;38511:1841;;;38574:7;:5;:7::i;:::-;38566:15;;:4;:15;;;;:49;;;;;38608:7;:5;:7::i;:::-;38602:13;;:2;:13;;;;38566:49;:86;;;;;38650:1;38636:16;;:2;:16;;;;38566:86;:128;;;;;38687:6;38673:21;;:2;:21;;;;38566:128;:158;;;;;38716:8;;;;;;;;;;;38715:9;38566:158;38544:1797;;;38762:13;;;;;;;;;;;38758:148;;38807:19;:25;38827:4;38807:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38836:19;:23;38856:2;38836:23;;;;;;;;;;;;;;;;;;;;;;;;;38807:52;38799:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38758:148;39064:20;;;;;;;;;;;39060:423;;;39118:7;:5;:7::i;:::-;39112:13;;:2;:13;;;;:47;;;;;39143:15;39129:30;;:2;:30;;;;39112:47;:79;;;;;39177:13;39163:28;;:2;:28;;;;39112:79;39108:356;;;39269:12;39227:28;:39;39256:9;39227:39;;;;;;;;;;;;;;;;:54;39219:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39428:12;39386:28;:39;39415:9;39386:39;;;;;;;;;;;;;;;:54;;;;39108:356;39060:423;39552:25;:31;39578:4;39552:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39588:31;:35;39620:2;39588:35;;;;;;;;;;;;;;;;;;;;;;;;;39587:36;39552:71;39548:778;;;39670:20;;39660:6;:30;;39652:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39809:9;;39792:13;39802:2;39792:9;:13::i;:::-;39783:6;:22;;;;:::i;:::-;:35;;39775:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39548:778;;;39936:25;:29;39962:2;39936:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39970:31;:37;40002:4;39970:37;;;;;;;;;;;;;;;;;;;;;;;;;39969:38;39936:71;39932:394;;;40054:20;;40044:6;:30;;40036:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39932:394;;;40180:31;:35;40212:2;40180:35;;;;;;;;;;;;;;;;;;;;;;;;;40176:150;;40273:9;;40256:13;40266:2;40256:9;:13::i;:::-;40247:6;:22;;;;:::i;:::-;:35;;40239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40176:150;39932:394;39548:778;38544:1797;38511:1841;40372:28;40403:24;40421:4;40403:9;:24::i;:::-;40372:55;;40448:12;40487:18;;40463:20;:42;;40448:57;;40536:7;:35;;;;;40560:11;;;;;;;;;;;40536:35;:61;;;;;40589:8;;;;;;;;;;;40588:9;40536:61;:110;;;;;40615:25;:31;40641:4;40615:31;;;;;;;;;;;;;;;;;;;;;;;;;40614:32;40536:110;:153;;;;;40664:19;:25;40684:4;40664:25;;;;;;;;;;;;;;;;;;;;;;;;;40663:26;40536:153;:194;;;;;40707:19;:23;40727:2;40707:23;;;;;;;;;;;;;;;;;;;;;;;;;40706:24;40536:194;40518:338;;;40768:4;40757:8;;:15;;;;;;;;;;;;;;;;;;40801:10;:8;:10::i;:::-;40839:5;40828:8;;:16;;;;;;;;;;;;;;;;;;40518:338;40868:12;40884:8;;;;;;;;;;;40883:9;40868:24;;40993:19;:25;41013:4;40993:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41022:19;:23;41042:2;41022:23;;;;;;;;;;;;;;;;;;;;;;;;;40993:52;40990:99;;;41072:5;41062:15;;40990:99;41109:12;41141:7;41138:845;;;41192:25;:29;41218:2;41192:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41241:1;41225:13;;:17;41192:50;41188:620;;;41269:34;41299:3;41269:25;41280:13;;41269:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41262:41;;41370:13;;41351:16;;41344:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41322:18;;:61;;;;;;;:::i;:::-;;;;;;;;41450:13;;41431:16;;41424:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41402:18;;:61;;;;;;;:::i;:::-;;;;;;;;41188:620;;;41524:25;:31;41550:4;41524:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41574:1;41559:12;;:16;41524:51;41521:287;;;41603:33;41632:3;41603:24;41614:12;;41603:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41596:40;;41702:12;;41684:15;;41677:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41655:18;;:59;;;;;;;:::i;:::-;;;;;;;;41780:12;;41762:15;;41755:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41733:18;;:59;;;;;;;:::i;:::-;;;;;;;;41521:287;41188:620;41846:1;41839:4;:8;41836:93;;;41871:42;41887:4;41901;41908;41871:15;:42::i;:::-;41836:93;41967:4;41957:14;;;;;:::i;:::-;;;41138:845;41995:33;42011:4;42017:2;42021:6;41995:15;:33::i;:::-;38223:3813;;;;38110:3926;;;;:::o;18793:192::-;18879:7;18912:1;18907;:6;;18915:12;18899:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18939:9;18955:1;18951;:5;;;;:::i;:::-;18939:17;;18976:1;18969:8;;;18793:192;;;;;:::o;37507:188::-;37624:5;37590:25;:31;37616:4;37590:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37681:5;37647:40;;37675:4;37647:40;;;;;;;;;;;;37507:188;;:::o;14085:573::-;14243:1;14225:20;;:6;:20;;;14217:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14327:1;14306:23;;:9;:23;;;14298:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14382:47;14403:6;14411:9;14422:6;14382:20;:47::i;:::-;14462:71;14484:6;14462:71;;;;;;;;;;;;;;;;;:9;:17;14472:6;14462:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14442:9;:17;14452:6;14442:17;;;;;;;;;;;;;;;:91;;;;14567:32;14592:6;14567:9;:20;14577:9;14567:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14544:9;:20;14554:9;14544:20;;;;;;;;;;;;;;;:55;;;;14632:9;14615:35;;14624:6;14615:35;;;14643:6;14615:35;;;;;;:::i;:::-;;;;;;;;14085:573;;;:::o;43182:1413::-;43221:23;43247:24;43265:4;43247:9;:24::i;:::-;43221:50;;43282:25;43331:18;;43310;;:39;;;;:::i;:::-;43282:67;;43360:12;43415:1;43396:15;:20;:46;;;;43441:1;43420:17;:22;43396:46;43393:60;;;43445:7;;;;;43393:60;43507:2;43486:18;;:23;;;;:::i;:::-;43468:15;:41;43465:111;;;43562:2;43541:18;;:23;;;;:::i;:::-;43523:41;;43465:111;43645:23;43730:1;43710:17;43689:18;;43671:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43645:86;;43742:26;43771:36;43791:15;43771;:19;;:36;;;;:::i;:::-;43742:65;;43828:25;43856:21;43828:49;;43890:36;43907:18;43890:16;:36::i;:::-;43948:18;43969:44;43995:17;43969:21;:25;;:44;;;;:::i;:::-;43948:65;;44034:23;44060:57;44099:17;44060:34;44075:18;;44060:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44034:83;;44130:23;44169:15;44156:10;:28;;;;:::i;:::-;44130:54;;44226:1;44205:18;:22;;;;44259:1;44238:18;:22;;;;44302:1;44284:15;:19;:42;;;;;44325:1;44307:15;:19;44284:42;44281:210;;;44342:46;44355:15;44372;44342:12;:46::i;:::-;44408:71;44423:18;44443:15;44460:18;;44408:71;;;;;;;;:::i;:::-;;;;;;;;44281:210;44532:15;;;;;;;;;;;44524:29;;44561:21;44524:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44511:76;;;;;43210:1385;;;;;;;;;43182:1413;:::o;19244:471::-;19302:7;19552:1;19547;:6;19543:47;;19577:1;19570:8;;;;19543:47;19602:9;19618:1;19614;:5;;;;:::i;:::-;19602:17;;19647:1;19642;19638;:5;;;;:::i;:::-;:10;19630:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19706:1;19699:8;;;19244:471;;;;;:::o;20191:132::-;20249:7;20276:39;20280:1;20283;20276:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20269:46;;20191:132;;;;:::o;17495:125::-;;;;:::o;18354:136::-;18412:7;18439:43;18443:1;18446;18439:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18432:50;;18354:136;;;;:::o;42044:601::-;42172:21;42210:1;42196:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:40;;42241:4;42223;42228:1;42223:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42267:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42257:4;42262:1;42257:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42302:62;42319:4;42334:15;42352:11;42302:8;:62::i;:::-;42403:15;:66;;;42484:11;42510:1;42554:4;42581;42601:15;42403:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42099:546;42044:601;:::o;42657:517::-;42805:62;42822:4;42837:15;42855:11;42805:8;:62::i;:::-;42910:15;:31;;;42949:9;42982:4;43002:11;43028:1;43071;31103:6;43140:15;42910:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42657:517;;:::o;20819:278::-;20905:7;20937:1;20933;:5;20940:12;20925:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20964:9;20980:1;20976;:5;;;;:::i;:::-;20964:17;;21088:1;21081:8;;;20819:278;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:474::-;7401:6;7409;7458:2;7446:9;7437:7;7433:23;7429:32;7426:119;;;7464:79;;:::i;:::-;7426:119;7584:1;7609:53;7654:7;7645:6;7634:9;7630:22;7609:53;:::i;:::-;7599:63;;7555:117;7711:2;7737:53;7782:7;7773:6;7762:9;7758:22;7737:53;:::i;:::-;7727:63;;7682:118;7333:474;;;;;:::o;7813:116::-;7883:21;7898:5;7883:21;:::i;:::-;7876:5;7873:32;7863:60;;7919:1;7916;7909:12;7863:60;7813:116;:::o;7935:133::-;7978:5;8016:6;8003:20;7994:29;;8032:30;8056:5;8032:30;:::i;:::-;7935:133;;;;:::o;8074:468::-;8139:6;8147;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8322:1;8347:53;8392:7;8383:6;8372:9;8368:22;8347:53;:::i;:::-;8337:63;;8293:117;8449:2;8475:50;8517:7;8508:6;8497:9;8493:22;8475:50;:::i;:::-;8465:60;;8420:115;8074:468;;;;;:::o;8548:323::-;8604:6;8653:2;8641:9;8632:7;8628:23;8624:32;8621:119;;;8659:79;;:::i;:::-;8621:119;8779:1;8804:50;8846:7;8837:6;8826:9;8822:22;8804:50;:::i;:::-;8794:60;;8750:114;8548:323;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:410::-;11779:7;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11891:1;11888;11884:9;11913:30;11931:11;11913:30;:::i;:::-;11902:41;;12092:1;12083:7;12079:15;12076:1;12073:22;12053:1;12046:9;12026:83;12003:139;;12122:18;;:::i;:::-;12003:139;11787:362;11739:410;;;;:::o;12155:176::-;12295:28;12291:1;12283:6;12279:14;12272:52;12155:176;:::o;12337:366::-;12479:3;12500:67;12564:2;12559:3;12500:67;:::i;:::-;12493:74;;12576:93;12665:3;12576:93;:::i;:::-;12694:2;12689:3;12685:12;12678:19;;12337:366;;;:::o;12709:419::-;12875:4;12913:2;12902:9;12898:18;12890:26;;12962:9;12956:4;12952:20;12948:1;12937:9;12933:17;12926:47;12990:131;13116:4;12990:131;:::i;:::-;12982:139;;12709:419;;;:::o;13134:143::-;13191:5;13222:6;13216:13;13207:22;;13238:33;13265:5;13238:33;:::i;:::-;13134:143;;;;:::o;13283:351::-;13353:6;13402:2;13390:9;13381:7;13377:23;13373:32;13370:119;;;13408:79;;:::i;:::-;13370:119;13528:1;13553:64;13609:7;13600:6;13589:9;13585:22;13553:64;:::i;:::-;13543:74;;13499:128;13283:351;;;;:::o;13640:332::-;13761:4;13799:2;13788:9;13784:18;13776:26;;13812:71;13880:1;13869:9;13865:17;13856:6;13812:71;:::i;:::-;13893:72;13961:2;13950:9;13946:18;13937:6;13893:72;:::i;:::-;13640:332;;;;;:::o;13978:137::-;14032:5;14063:6;14057:13;14048:22;;14079:30;14103:5;14079:30;:::i;:::-;13978:137;;;;:::o;14121:345::-;14188:6;14237:2;14225:9;14216:7;14212:23;14208:32;14205:119;;;14243:79;;:::i;:::-;14205:119;14363:1;14388:61;14441:7;14432:6;14421:9;14417:22;14388:61;:::i;:::-;14378:71;;14334:125;14121:345;;;;:::o;14472:179::-;14612:31;14608:1;14600:6;14596:14;14589:55;14472:179;:::o;14657:366::-;14799:3;14820:67;14884:2;14879:3;14820:67;:::i;:::-;14813:74;;14896:93;14985:3;14896:93;:::i;:::-;15014:2;15009:3;15005:12;14998:19;;14657:366;;;:::o;15029:419::-;15195:4;15233:2;15222:9;15218:18;15210:26;;15282:9;15276:4;15272:20;15268:1;15257:9;15253:17;15246:47;15310:131;15436:4;15310:131;:::i;:::-;15302:139;;15029:419;;;:::o;15454:244::-;15594:34;15590:1;15582:6;15578:14;15571:58;15663:27;15658:2;15650:6;15646:15;15639:52;15454:244;:::o;15704:366::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:419::-;16242:4;16280:2;16269:9;16265:18;16257:26;;16329:9;16323:4;16319:20;16315:1;16304:9;16300:17;16293:47;16357:131;16483:4;16357:131;:::i;:::-;16349:139;;16076:419;;;:::o;16501:225::-;16641:34;16637:1;16629:6;16625:14;16618:58;16710:8;16705:2;16697:6;16693:15;16686:33;16501:225;:::o;16732:366::-;16874:3;16895:67;16959:2;16954:3;16895:67;:::i;:::-;16888:74;;16971:93;17060:3;16971:93;:::i;:::-;17089:2;17084:3;17080:12;17073:19;;16732:366;;;:::o;17104:419::-;17270:4;17308:2;17297:9;17293:18;17285:26;;17357:9;17351:4;17347:20;17343:1;17332:9;17328:17;17321:47;17385:131;17511:4;17385:131;:::i;:::-;17377:139;;17104:419;;;:::o;17529:177::-;17669:29;17665:1;17657:6;17653:14;17646:53;17529:177;:::o;17712:366::-;17854:3;17875:67;17939:2;17934:3;17875:67;:::i;:::-;17868:74;;17951:93;18040:3;17951:93;:::i;:::-;18069:2;18064:3;18060:12;18053:19;;17712:366;;;:::o;18084:419::-;18250:4;18288:2;18277:9;18273:18;18265:26;;18337:9;18331:4;18327:20;18323:1;18312:9;18308:17;18301:47;18365:131;18491:4;18365:131;:::i;:::-;18357:139;;18084:419;;;:::o;18509:223::-;18649:34;18645:1;18637:6;18633:14;18626:58;18718:6;18713:2;18705:6;18701:15;18694:31;18509:223;:::o;18738:366::-;18880:3;18901:67;18965:2;18960:3;18901:67;:::i;:::-;18894:74;;18977:93;19066:3;18977:93;:::i;:::-;19095:2;19090:3;19086:12;19079:19;;18738:366;;;:::o;19110:419::-;19276:4;19314:2;19303:9;19299:18;19291:26;;19363:9;19357:4;19353:20;19349:1;19338:9;19334:17;19327:47;19391:131;19517:4;19391:131;:::i;:::-;19383:139;;19110:419;;;:::o;19535:221::-;19675:34;19671:1;19663:6;19659:14;19652:58;19744:4;19739:2;19731:6;19727:15;19720:29;19535:221;:::o;19762:366::-;19904:3;19925:67;19989:2;19984:3;19925:67;:::i;:::-;19918:74;;20001:93;20090:3;20001:93;:::i;:::-;20119:2;20114:3;20110:12;20103:19;;19762:366;;;:::o;20134:419::-;20300:4;20338:2;20327:9;20323:18;20315:26;;20387:9;20381:4;20377:20;20373:1;20362:9;20358:17;20351:47;20415:131;20541:4;20415:131;:::i;:::-;20407:139;;20134:419;;;:::o;20559:224::-;20699:34;20695:1;20687:6;20683:14;20676:58;20768:7;20763:2;20755:6;20751:15;20744:32;20559:224;:::o;20789:366::-;20931:3;20952:67;21016:2;21011:3;20952:67;:::i;:::-;20945:74;;21028:93;21117:3;21028:93;:::i;:::-;21146:2;21141:3;21137:12;21130:19;;20789:366;;;:::o;21161:419::-;21327:4;21365:2;21354:9;21350:18;21342:26;;21414:9;21408:4;21404:20;21400:1;21389:9;21385:17;21378:47;21442:131;21568:4;21442:131;:::i;:::-;21434:139;;21161:419;;;:::o;21586:222::-;21726:34;21722:1;21714:6;21710:14;21703:58;21795:5;21790:2;21782:6;21778:15;21771:30;21586:222;:::o;21814:366::-;21956:3;21977:67;22041:2;22036:3;21977:67;:::i;:::-;21970:74;;22053:93;22142:3;22053:93;:::i;:::-;22171:2;22166:3;22162:12;22155:19;;21814:366;;;:::o;22186:419::-;22352:4;22390:2;22379:9;22375:18;22367:26;;22439:9;22433:4;22429:20;22425:1;22414:9;22410:17;22403:47;22467:131;22593:4;22467:131;:::i;:::-;22459:139;;22186:419;;;:::o;22611:172::-;22751:24;22747:1;22739:6;22735:14;22728:48;22611:172;:::o;22789:366::-;22931:3;22952:67;23016:2;23011:3;22952:67;:::i;:::-;22945:74;;23028:93;23117:3;23028:93;:::i;:::-;23146:2;23141:3;23137:12;23130:19;;22789:366;;;:::o;23161:419::-;23327:4;23365:2;23354:9;23350:18;23342:26;;23414:9;23408:4;23404:20;23400:1;23389:9;23385:17;23378:47;23442:131;23568:4;23442:131;:::i;:::-;23434:139;;23161:419;;;:::o;23586:297::-;23726:34;23722:1;23714:6;23710:14;23703:58;23795:34;23790:2;23782:6;23778:15;23771:59;23864:11;23859:2;23851:6;23847:15;23840:36;23586:297;:::o;23889:366::-;24031:3;24052:67;24116:2;24111:3;24052:67;:::i;:::-;24045:74;;24128:93;24217:3;24128:93;:::i;:::-;24246:2;24241:3;24237:12;24230:19;;23889:366;;;:::o;24261:419::-;24427:4;24465:2;24454:9;24450:18;24442:26;;24514:9;24508:4;24504:20;24500:1;24489:9;24485:17;24478:47;24542:131;24668:4;24542:131;:::i;:::-;24534:139;;24261:419;;;:::o;24686:240::-;24826:34;24822:1;24814:6;24810:14;24803:58;24895:23;24890:2;24882:6;24878:15;24871:48;24686:240;:::o;24932:366::-;25074:3;25095:67;25159:2;25154:3;25095:67;:::i;:::-;25088:74;;25171:93;25260:3;25171:93;:::i;:::-;25289:2;25284:3;25280:12;25273:19;;24932:366;;;:::o;25304:419::-;25470:4;25508:2;25497:9;25493:18;25485:26;;25557:9;25551:4;25547:20;25543:1;25532:9;25528:17;25521:47;25585:131;25711:4;25585:131;:::i;:::-;25577:139;;25304:419;;;:::o;25729:169::-;25869:21;25865:1;25857:6;25853:14;25846:45;25729:169;:::o;25904:366::-;26046:3;26067:67;26131:2;26126:3;26067:67;:::i;:::-;26060:74;;26143:93;26232:3;26143:93;:::i;:::-;26261:2;26256:3;26252:12;26245:19;;25904:366;;;:::o;26276:419::-;26442:4;26480:2;26469:9;26465:18;26457:26;;26529:9;26523:4;26519:20;26515:1;26504:9;26500:17;26493:47;26557:131;26683:4;26557:131;:::i;:::-;26549:139;;26276:419;;;:::o;26701:241::-;26841:34;26837:1;26829:6;26825:14;26818:58;26910:24;26905:2;26897:6;26893:15;26886:49;26701:241;:::o;26948:366::-;27090:3;27111:67;27175:2;27170:3;27111:67;:::i;:::-;27104:74;;27187:93;27276:3;27187:93;:::i;:::-;27305:2;27300:3;27296:12;27289:19;;26948:366;;;:::o;27320:419::-;27486:4;27524:2;27513:9;27509:18;27501:26;;27573:9;27567:4;27563:20;27559:1;27548:9;27544:17;27537:47;27601:131;27727:4;27601:131;:::i;:::-;27593:139;;27320:419;;;:::o;27745:180::-;27793:77;27790:1;27783:88;27890:4;27887:1;27880:15;27914:4;27911:1;27904:15;27931:185;27971:1;27988:20;28006:1;27988:20;:::i;:::-;27983:25;;28022:20;28040:1;28022:20;:::i;:::-;28017:25;;28061:1;28051:35;;28066:18;;:::i;:::-;28051:35;28108:1;28105;28101:9;28096:14;;27931:185;;;;:::o;28122:194::-;28162:4;28182:20;28200:1;28182:20;:::i;:::-;28177:25;;28216:20;28234:1;28216:20;:::i;:::-;28211:25;;28260:1;28257;28253:9;28245:17;;28284:1;28278:4;28275:11;28272:37;;;28289:18;;:::i;:::-;28272:37;28122:194;;;;:::o;28322:442::-;28471:4;28509:2;28498:9;28494:18;28486:26;;28522:71;28590:1;28579:9;28575:17;28566:6;28522:71;:::i;:::-;28603:72;28671:2;28660:9;28656:18;28647:6;28603:72;:::i;:::-;28685;28753:2;28742:9;28738:18;28729:6;28685:72;:::i;:::-;28322:442;;;;;;:::o;28770:147::-;28871:11;28908:3;28893:18;;28770:147;;;;:::o;28923:114::-;;:::o;29043:398::-;29202:3;29223:83;29304:1;29299:3;29223:83;:::i;:::-;29216:90;;29315:93;29404:3;29315:93;:::i;:::-;29433:1;29428:3;29424:11;29417:18;;29043:398;;;:::o;29447:379::-;29631:3;29653:147;29796:3;29653:147;:::i;:::-;29646:154;;29817:3;29810:10;;29447:379;;;:::o;29832:220::-;29972:34;29968:1;29960:6;29956:14;29949:58;30041:3;30036:2;30028:6;30024:15;30017:28;29832:220;:::o;30058:366::-;30200:3;30221:67;30285:2;30280:3;30221:67;:::i;:::-;30214:74;;30297:93;30386:3;30297:93;:::i;:::-;30415:2;30410:3;30406:12;30399:19;;30058:366;;;:::o;30430:419::-;30596:4;30634:2;30623:9;30619:18;30611:26;;30683:9;30677:4;30673:20;30669:1;30658:9;30654:17;30647:47;30711:131;30837:4;30711:131;:::i;:::-;30703:139;;30430:419;;;:::o;30855:180::-;30903:77;30900:1;30893:88;31000:4;30997:1;30990:15;31024:4;31021:1;31014:15;31041:180;31089:77;31086:1;31079:88;31186:4;31183:1;31176:15;31210:4;31207:1;31200:15;31227:143;31284:5;31315:6;31309:13;31300:22;;31331:33;31358:5;31331:33;:::i;:::-;31227:143;;;;:::o;31376:351::-;31446:6;31495:2;31483:9;31474:7;31470:23;31466:32;31463:119;;;31501:79;;:::i;:::-;31463:119;31621:1;31646:64;31702:7;31693:6;31682:9;31678:22;31646:64;:::i;:::-;31636:74;;31592:128;31376:351;;;;:::o;31733:85::-;31778:7;31807:5;31796:16;;31733:85;;;:::o;31824:158::-;31882:9;31915:61;31933:42;31942:32;31968:5;31942:32;:::i;:::-;31933:42;:::i;:::-;31915:61;:::i;:::-;31902:74;;31824:158;;;:::o;31988:147::-;32083:45;32122:5;32083:45;:::i;:::-;32078:3;32071:58;31988:147;;:::o;32141:114::-;32208:6;32242:5;32236:12;32226:22;;32141:114;;;:::o;32261:184::-;32360:11;32394:6;32389:3;32382:19;32434:4;32429:3;32425:14;32410:29;;32261:184;;;;:::o;32451:132::-;32518:4;32541:3;32533:11;;32571:4;32566:3;32562:14;32554:22;;32451:132;;;:::o;32589:108::-;32666:24;32684:5;32666:24;:::i;:::-;32661:3;32654:37;32589:108;;:::o;32703:179::-;32772:10;32793:46;32835:3;32827:6;32793:46;:::i;:::-;32871:4;32866:3;32862:14;32848:28;;32703:179;;;;:::o;32888:113::-;32958:4;32990;32985:3;32981:14;32973:22;;32888:113;;;:::o;33037:732::-;33156:3;33185:54;33233:5;33185:54;:::i;:::-;33255:86;33334:6;33329:3;33255:86;:::i;:::-;33248:93;;33365:56;33415:5;33365:56;:::i;:::-;33444:7;33475:1;33460:284;33485:6;33482:1;33479:13;33460:284;;;33561:6;33555:13;33588:63;33647:3;33632:13;33588:63;:::i;:::-;33581:70;;33674:60;33727:6;33674:60;:::i;:::-;33664:70;;33520:224;33507:1;33504;33500:9;33495:14;;33460:284;;;33464:14;33760:3;33753:10;;33161:608;;;33037:732;;;;:::o;33775:831::-;34038:4;34076:3;34065:9;34061:19;34053:27;;34090:71;34158:1;34147:9;34143:17;34134:6;34090:71;:::i;:::-;34171:80;34247:2;34236:9;34232:18;34223:6;34171:80;:::i;:::-;34298:9;34292:4;34288:20;34283:2;34272:9;34268:18;34261:48;34326:108;34429:4;34420:6;34326:108;:::i;:::-;34318:116;;34444:72;34512:2;34501:9;34497:18;34488:6;34444:72;:::i;:::-;34526:73;34594:3;34583:9;34579:19;34570:6;34526:73;:::i;:::-;33775:831;;;;;;;;:::o;34612:807::-;34861:4;34899:3;34888:9;34884:19;34876:27;;34913:71;34981:1;34970:9;34966:17;34957:6;34913:71;:::i;:::-;34994:72;35062:2;35051:9;35047:18;35038:6;34994:72;:::i;:::-;35076:80;35152:2;35141:9;35137:18;35128:6;35076:80;:::i;:::-;35166;35242:2;35231:9;35227:18;35218:6;35166:80;:::i;:::-;35256:73;35324:3;35313:9;35309:19;35300:6;35256:73;:::i;:::-;35339;35407:3;35396:9;35392:19;35383:6;35339:73;:::i;:::-;34612:807;;;;;;;;;:::o;35425:663::-;35513:6;35521;35529;35578:2;35566:9;35557:7;35553:23;35549:32;35546:119;;;35584:79;;:::i;:::-;35546:119;35704:1;35729:64;35785:7;35776:6;35765:9;35761:22;35729:64;:::i;:::-;35719:74;;35675:128;35842:2;35868:64;35924:7;35915:6;35904:9;35900:22;35868:64;:::i;:::-;35858:74;;35813:129;35981:2;36007:64;36063:7;36054:6;36043:9;36039:22;36007:64;:::i;:::-;35997:74;;35952:129;35425:663;;;;;:::o

Swarm Source

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