ETH Price: $2,893.42 (-5.09%)
Gas: 4 Gwei

Token

Pumptober (PUMPTOBER)
 

Overview

Max Total Supply

10,000,000 PUMPTOBER

Holders

202

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,246.872906459541252215 PUMPTOBER

Value
$0.00
0x0664dd4883e5031b29d3b125a30771f49af6c8f8
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:
Pumptober

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-30
*/

/**

#PUMPTOBER the month where all your degen wishes come true.

Just imagine....market getting green, memecoins are pumping, and #PUMPTOBER is leading the way!

It is that time of the year again, when all hope in the simple degen life gets restored!

Are you ready for the pump?


Telegram: https://t.me/pumptobertoken
Twitter: https://twitter.com/PumptoberEth

*/

pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

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

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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


    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    uint256 public PUMPTOBER_START = 1664582400;

    bool private swapping;

    address public devWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public pumptoberBuyDevFee;
    uint256 public pumptoberBuyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public pumptoberSellDevFee;
    uint256 public pumptoberSellLiquidityFee;

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

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("Pumptober", "PUMPTOBER") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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


        uint256 _buyDevFee = 5;
        uint256 _buyLiquidityFee = 5;
        uint256 _pumptoberBuyDevFee = 1;
        uint256 _pumptoberBuyLiquidityFee = 0;

        uint256 _sellDevFee = 20;
        uint256 _sellLiquidityFee = 20;
        uint256 _pumptoberSellDevFee = 3;
        uint256 _pumptoberSellLiquidityFee = 0;

        uint256 totalSupply = 10_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        pumptoberBuyDevFee = _pumptoberBuyDevFee;
        pumptoberBuyLiquidityFee = _pumptoberBuyLiquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;

        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        pumptoberSellDevFee = _pumptoberSellDevFee;
        pumptoberSellLiquidityFee = _pumptoberSellLiquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = address(0x6a064c6A0968279f8f8Cbb075fc577181f94Ff93); // set as dev wallet

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

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

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

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

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

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

    function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }


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

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

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

        if (
            buyDevFee != pumptoberBuyDevFee &&
            sellDevFee != pumptoberSellDevFee &&
            block.timestamp > PUMPTOBER_START
        ) {
            buyDevFee = pumptoberBuyDevFee;
            buyLiquidityFee = pumptoberBuyLiquidityFee;
            buyTotalFees = buyDevFee + buyLiquidityFee;

            sellDevFee = pumptoberSellDevFee;
            sellLiquidityFee = pumptoberSellLiquidityFee;
            sellTotalFees = sellDevFee + sellLiquidityFee;
        }

        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.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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 &&
            to == uniswapV2Pair &&
            !_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;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

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

            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] = WETH;

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForETH(contractBalance);
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 100, "Wallets list length must be <= 100");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**decimals());
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"PUMPTOBER_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pumptoberBuyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pumptoberBuyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pumptoberSellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pumptoberSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","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":"_devFee","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"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556363378300600755600c805462ffffff191660011790553480156200004e57600080fd5b5060405180604001604052806009815260200168283ab6b83a37b132b960b91b81525060405180604001604052806009815260200168282aa6a82a27a122a960b91b8152508160039081620000a49190620006ae565b506004620000b38282620006ae565b505050620000d0620000ca620003a660201b60201c565b620003aa565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000f2816001620003fc565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200013d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016391906200077a565b6006546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db91906200077a565b6001600160a01b031660a0819052620001f6906001620003fc565b600580600160006014806003836a084595161401484a00000060646200021e826002620007c2565b6200022a9190620007e2565b60095560646200023c826002620007c2565b620002489190620007e2565b600b556127106200025b826005620007c2565b620002679190620007e2565b600a55600e899055600f889055601087905560118690556200028a888a62000805565b600d556013859055601484905560158390556016829055620002ad848662000805565b60125560088054610100600160a81b031916746a064c6a0968279f8f8cbb075fc577181f94ff9300179055620002f7620002ef6005546001600160a01b031690565b600162000476565b600854620003159061010090046001600160a01b0316600162000476565b6200032230600162000476565b6200033161dead600162000476565b62000350620003486005546001600160a01b031690565b6001620003fc565b6008546200036e9061010090046001600160a01b03166001620003fc565b6200037b306001620003fc565b6200038a61dead6001620003fc565b62000396338262000520565b505050505050505050506200081b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200044b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002c8983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620004c15760405162461bcd60e51b8152602060048201819052602482015260008051602062002c89833981519152604482015260640162000442565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005785760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000442565b80600260008282546200058c919062000805565b90915550506001600160a01b03821660009081526020819052604081208054839290620005bb90849062000805565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063557607f821691505b6020821081036200065657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200060557600081815260208120601f850160051c81016020861015620006855750805b601f850160051c820191505b81811015620006a65782815560010162000691565b505050505050565b81516001600160401b03811115620006ca57620006ca6200060a565b620006e281620006db845462000620565b846200065c565b602080601f8311600181146200071a5760008415620007015750858301515b600019600386901b1c1916600185901b178555620006a6565b600085815260208120601f198616915b828110156200074b578886015182559484019460019091019084016200072a565b50858210156200076a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200078d57600080fd5b81516001600160a01b0381168114620007a557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007dc57620007dc620007ac565b92915050565b6000826200080057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007dc57620007dc620007ac565b60805160a05161241762000872600039600081816104ab015281816116eb015281816118f5015281816119f501528181611a9e0152611b5801526000818161036201528181611ce70152611d2601526124176000f3fe6080604052600436106102975760003560e01c80637571336a1161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146107dc578063e2f4560514610822578063f11a24d314610838578063f2fde38b1461084e578063f63743421461086e578063f8b45b051461088457600080fd5b8063c02466681461073a578063c18bc1951461075a578063c8c8ebe41461077a578063cb0955d214610790578063d257b34f146107a6578063d85ba063146107c657600080fd5b80639c3b4fdc116101135780639c3b4fdc14610699578063a0d82dc5146106af578063a83acb54146106c5578063a9059cbb146106db578063ad5c4648146106fb578063bbc0c7421461071b57600080fd5b80637571336a146105ec5780638a8c523c1461060c5780638da5cb5b146106215780638ea5220f1461063f578063924de9b71461066457806395d89b411461068457600080fd5b8063313ce567116101fe57806366ca9b83116101b757806366ca9b83146105365780636a486a8e146105565780636ddd17131461056c57806370a082311461058c578063715018a6146105c2578063751039fc146105d757600080fd5b8063313ce5671461046757806347d20db01461048357806349bd5a5e146104995780634a62bb65146104cd5780634fbee193146104e7578063506a81791461052057600080fd5b80631816467f116102505780631816467f146103bb578063203e727e146103db57806322d1faf3146103fb5780632307b4411461041157806323b872dd1461043157806327c8f8351461045157600080fd5b806302dbd8f8146102a357806306fdde03146102c5578063095ea7b3146102f057806310d5de53146103205780631694505e1461035057806318160ddd1461039c57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004611da3565b61089a565b005b3480156102d157600080fd5b506102da61093a565b6040516102e79190611dc5565b60405180910390f35b3480156102fc57600080fd5b5061031061030b366004611e2a565b6109cc565b60405190151581526020016102e7565b34801561032c57600080fd5b5061031061033b366004611e54565b60186020526000908152604090205460ff1681565b34801561035c57600080fd5b506103847f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e7565b3480156103a857600080fd5b506002545b6040519081526020016102e7565b3480156103c757600080fd5b506102c36103d6366004611e54565b6109e3565b3480156103e757600080fd5b506102c36103f6366004611e6f565b610a75565b34801561040757600080fd5b506103ad60105481565b34801561041d57600080fd5b506102c361042c366004611f5e565b610b52565b34801561043d57600080fd5b5061031061044c36600461201e565b610cb4565b34801561045d57600080fd5b5061038461dead81565b34801561047357600080fd5b50604051601281526020016102e7565b34801561048f57600080fd5b506103ad60165481565b3480156104a557600080fd5b506103847f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d957600080fd5b50600c546103109060ff1681565b3480156104f357600080fd5b50610310610502366004611e54565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561052c57600080fd5b506103ad60115481565b34801561054257600080fd5b506102c3610551366004611da3565b610d5e565b34801561056257600080fd5b506103ad60125481565b34801561057857600080fd5b50600c546103109062010000900460ff1681565b34801561059857600080fd5b506103ad6105a7366004611e54565b6001600160a01b031660009081526020819052604090205490565b3480156105ce57600080fd5b506102c3610df1565b3480156105e357600080fd5b50610310610e27565b3480156105f857600080fd5b506102c361060736600461206a565b610e64565b34801561061857600080fd5b506102c3610eb9565b34801561062d57600080fd5b506005546001600160a01b0316610384565b34801561064b57600080fd5b506008546103849061010090046001600160a01b031681565b34801561067057600080fd5b506102c361067f36600461209d565b610ef6565b34801561069057600080fd5b506102da610f3c565b3480156106a557600080fd5b506103ad600e5481565b3480156106bb57600080fd5b506103ad60135481565b3480156106d157600080fd5b506103ad60155481565b3480156106e757600080fd5b506103106106f6366004611e2a565b610f4b565b34801561070757600080fd5b50600654610384906001600160a01b031681565b34801561072757600080fd5b50600c5461031090610100900460ff1681565b34801561074657600080fd5b506102c361075536600461206a565b610f58565b34801561076657600080fd5b506102c3610775366004611e6f565b610fe1565b34801561078657600080fd5b506103ad60095481565b34801561079c57600080fd5b506103ad60075481565b3480156107b257600080fd5b506103106107c1366004611e6f565b6110b2565b3480156107d257600080fd5b506103ad600d5481565b3480156107e857600080fd5b506103ad6107f73660046120b8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082e57600080fd5b506103ad600a5481565b34801561084457600080fd5b506103ad600f5481565b34801561085a57600080fd5b506102c3610869366004611e54565b611209565b34801561087a57600080fd5b506103ad60145481565b34801561089057600080fd5b506103ad600b5481565b6005546001600160a01b031633146108cd5760405162461bcd60e51b81526004016108c4906120e2565b60405180910390fd5b601382905560148190556108e1818361212d565b6012819055600a10156109365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108c4565b5050565b60606003805461094990612140565b80601f016020809104026020016040519081016040528092919081815260200182805461097590612140565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b5050505050905090565b60006109d93384846112a4565b5060015b92915050565b6005546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016108c4906120e2565b6008546040516001600160a01b036101009092048216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610a9f5760405162461bcd60e51b81526004016108c4906120e2565b670de0b6b3a76400006103e8610ab460025490565b610abf90600161217a565b610ac99190612191565b610ad39190612191565b811015610b3a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016108c4565b610b4c81670de0b6b3a764000061217a565b60095550565b6005546001600160a01b03163314610b7c5760405162461bcd60e51b81526004016108c4906120e2565b8051825114610bcd5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016108c4565b606482511115610c2a5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2031604482015261030360f41b60648201526084016108c4565b60005b8251811015610caf576000838281518110610c4a57610c4a6121b3565b602002602001015190506000610c5e601290565b610c6990600a6122ad565b848481518110610c7b57610c7b6121b3565b6020026020010151610c8d919061217a565b9050610c9a3383836113c8565b50508080610ca7906122bc565b915050610c2d565b505050565b6000610cc184848461151d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d465760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108c4565b610d5385338584036112a4565b506001949350505050565b6005546001600160a01b03163314610d885760405162461bcd60e51b81526004016108c4906120e2565b600e829055600f819055610d9c818361212d565b600d819055600a10156109365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108c4565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b81526004016108c4906120e2565b610e256000611ba0565b565b6005546000906001600160a01b03163314610e545760405162461bcd60e51b81526004016108c4906120e2565b50600c805460ff19169055600190565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ee35760405162461bcd60e51b81526004016108c4906120e2565b600c805462ffff00191662010100179055565b6005546001600160a01b03163314610f205760405162461bcd60e51b81526004016108c4906120e2565b600c8054911515620100000262ff000019909216919091179055565b60606004805461094990612140565b60006109d933848461151d565b6005546001600160a01b03163314610f825760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461100b5760405162461bcd60e51b81526004016108c4906120e2565b670de0b6b3a76400006103e861102060025490565b61102b90600561217a565b6110359190612191565b61103f9190612191565b81101561109a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016108c4565b6110ac81670de0b6b3a764000061217a565b600b5550565b6005546000906001600160a01b031633146110df5760405162461bcd60e51b81526004016108c4906120e2565b620186a06110ec60025490565b6110f790600161217a565b6111019190612191565b82101561116e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108c4565b6103e861117a60025490565b61118590600561217a565b61118f9190612191565b8211156111fb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108c4565b50600a81905560015b919050565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b0381166112985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c4565b6112a181611ba0565b50565b6001600160a01b0383166113065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c4565b6001600160a01b0382166113675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113ee5760405162461bcd60e51b81526004016108c4906122d5565b6001600160a01b0382166114145760405162461bcd60e51b81526004016108c49061231a565b6001600160a01b0383166000908152602081905260409020548181101561148c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108c4565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114c390849061212d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150f91815260200190565b60405180910390a350505050565b6001600160a01b0383166115435760405162461bcd60e51b81526004016108c4906122d5565b6001600160a01b0382166115695760405162461bcd60e51b81526004016108c49061231a565b8060000361157d57610caf838360006113c8565b601054600e5414158015611595575060155460135414155b80156115a2575060075442115b156115e057601054600e819055601154600f8190556115c09161212d565b600d55601554601381905560165460148190556115dc9161212d565b6012555b600c5460ff16156118b1576005546001600160a01b0384811691161480159061161757506005546001600160a01b03838116911614155b801561162b57506001600160a01b03821615155b801561164257506001600160a01b03821661dead14155b8015611651575060085460ff16155b156118b157600c54610100900460ff166116e9576001600160a01b03831660009081526017602052604090205460ff16806116a457506001600160a01b03821660009081526017602052604090205460ff165b6116e95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108c4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561174357506001600160a01b03821660009081526018602052604090205460ff16155b15611827576009548111156117b85760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108c4565b600b546001600160a01b0383166000908152602081905260409020546117de908361212d565b11156118225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108c4565b6118b1565b6001600160a01b03821660009081526018602052604090205460ff166118b157600b546001600160a01b03831660009081526020819052604090205461186d908361212d565b11156118b15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108c4565b30600090815260208190526040902054600a54811080159081906118dd5750600c5462010000900460ff165b80156118ec575060085460ff16155b801561192957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b801561194e57506001600160a01b03851660009081526017602052604090205460ff16155b801561197357506001600160a01b03841660009081526017602052604090205460ff16155b15611998576008805460ff1916600117905561198d611bf2565b6008805460ff191690555b6008546001600160a01b03861660009081526017602052604090205460ff918216159116806119df57506001600160a01b03851660009081526017602052604090205460ff165b156119e8575060005b60008060008315611b8a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316148015611a3657506000601254115b15611a9c57611a5b6064611a556012548a611c3c90919063ffffffff16565b90611c4f565b925060125460145484611a6e919061217a565b611a789190612191565b915060125460135484611a8b919061217a565b611a959190612191565b9050611b3b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316148015611adf57506000600d54115b15611b3b57611afe6064611a55600d548a611c3c90919063ffffffff16565b9250600d54600f5484611b11919061217a565b611b1b9190612191565b9150600d54600e5484611b2e919061217a565b611b389190612191565b90505b8215611b4c57611b4c8930856113c8565b8115611b7d57611b7d307f0000000000000000000000000000000000000000000000000000000000000000846113c8565b611b87838861235d565b96505b611b958989896113c8565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b3060009081526020819052604081205490819003611c0d5750565b600a54611c1b90601461217a565b811115611c3357600a54611c3090601461217a565b90505b6112a181611c5b565b6000611c48828461217a565b9392505050565b6000611c488284612191565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9057611c906121b3565b6001600160a01b039283166020918202929092010152600654825191169082906001908110611cc157611cc16121b3565b60200260200101906001600160a01b031690816001600160a01b031681525050611d0c307f0000000000000000000000000000000000000000000000000000000000000000846112a4565b600854604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692635c11d79592611d6d9287926000928892610100909204909116904290600401612370565b600060405180830381600087803b158015611d8757600080fd5b505af1158015611d9b573d6000803e3d6000fd5b505050505050565b60008060408385031215611db657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611df257858101830151858201604001528201611dd6565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461120457600080fd5b60008060408385031215611e3d57600080fd5b611e4683611e13565b946020939093013593505050565b600060208284031215611e6657600080fd5b611c4882611e13565b600060208284031215611e8157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec757611ec7611e88565b604052919050565b600067ffffffffffffffff821115611ee957611ee9611e88565b5060051b60200190565b600082601f830112611f0457600080fd5b81356020611f19611f1483611ecf565b611e9e565b82815260059290921b84018101918181019086841115611f3857600080fd5b8286015b84811015611f535780358352918301918301611f3c565b509695505050505050565b60008060408385031215611f7157600080fd5b823567ffffffffffffffff80821115611f8957600080fd5b818501915085601f830112611f9d57600080fd5b81356020611fad611f1483611ecf565b82815260059290921b84018101918181019089841115611fcc57600080fd5b948201945b83861015611ff157611fe286611e13565b82529482019490820190611fd1565b9650508601359250508082111561200757600080fd5b5061201485828601611ef3565b9150509250929050565b60008060006060848603121561203357600080fd5b61203c84611e13565b925061204a60208501611e13565b9150604084013590509250925092565b8035801515811461120457600080fd5b6000806040838503121561207d57600080fd5b61208683611e13565b91506120946020840161205a565b90509250929050565b6000602082840312156120af57600080fd5b611c488261205a565b600080604083850312156120cb57600080fd5b6120d483611e13565b915061209460208401611e13565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109dd576109dd612117565b600181811c9082168061215457607f821691505b60208210810361217457634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176109dd576109dd612117565b6000826121ae57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156122045781600019048211156121ea576121ea612117565b808516156121f757918102915b93841c93908002906121ce565b509250929050565b60008261221b575060016109dd565b81612228575060006109dd565b816001811461223e576002811461224857612264565b60019150506109dd565b60ff84111561225957612259612117565b50506001821b6109dd565b5060208310610133831016604e8410600b8410161715612287575081810a6109dd565b61229183836121c9565b80600019048211156122a5576122a5612117565b029392505050565b6000611c4860ff84168361220c565b6000600182016122ce576122ce612117565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109dd576109dd612117565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c05784516001600160a01b03168352938301939183019160010161239b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122063c0019e0200f02f6bea92db6137d9c4d2504e9b96d82c1d0232d700bc3b7e7764736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637571336a1161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146107dc578063e2f4560514610822578063f11a24d314610838578063f2fde38b1461084e578063f63743421461086e578063f8b45b051461088457600080fd5b8063c02466681461073a578063c18bc1951461075a578063c8c8ebe41461077a578063cb0955d214610790578063d257b34f146107a6578063d85ba063146107c657600080fd5b80639c3b4fdc116101135780639c3b4fdc14610699578063a0d82dc5146106af578063a83acb54146106c5578063a9059cbb146106db578063ad5c4648146106fb578063bbc0c7421461071b57600080fd5b80637571336a146105ec5780638a8c523c1461060c5780638da5cb5b146106215780638ea5220f1461063f578063924de9b71461066457806395d89b411461068457600080fd5b8063313ce567116101fe57806366ca9b83116101b757806366ca9b83146105365780636a486a8e146105565780636ddd17131461056c57806370a082311461058c578063715018a6146105c2578063751039fc146105d757600080fd5b8063313ce5671461046757806347d20db01461048357806349bd5a5e146104995780634a62bb65146104cd5780634fbee193146104e7578063506a81791461052057600080fd5b80631816467f116102505780631816467f146103bb578063203e727e146103db57806322d1faf3146103fb5780632307b4411461041157806323b872dd1461043157806327c8f8351461045157600080fd5b806302dbd8f8146102a357806306fdde03146102c5578063095ea7b3146102f057806310d5de53146103205780631694505e1461035057806318160ddd1461039c57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004611da3565b61089a565b005b3480156102d157600080fd5b506102da61093a565b6040516102e79190611dc5565b60405180910390f35b3480156102fc57600080fd5b5061031061030b366004611e2a565b6109cc565b60405190151581526020016102e7565b34801561032c57600080fd5b5061031061033b366004611e54565b60186020526000908152604090205460ff1681565b34801561035c57600080fd5b506103847f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102e7565b3480156103a857600080fd5b506002545b6040519081526020016102e7565b3480156103c757600080fd5b506102c36103d6366004611e54565b6109e3565b3480156103e757600080fd5b506102c36103f6366004611e6f565b610a75565b34801561040757600080fd5b506103ad60105481565b34801561041d57600080fd5b506102c361042c366004611f5e565b610b52565b34801561043d57600080fd5b5061031061044c36600461201e565b610cb4565b34801561045d57600080fd5b5061038461dead81565b34801561047357600080fd5b50604051601281526020016102e7565b34801561048f57600080fd5b506103ad60165481565b3480156104a557600080fd5b506103847f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec81565b3480156104d957600080fd5b50600c546103109060ff1681565b3480156104f357600080fd5b50610310610502366004611e54565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561052c57600080fd5b506103ad60115481565b34801561054257600080fd5b506102c3610551366004611da3565b610d5e565b34801561056257600080fd5b506103ad60125481565b34801561057857600080fd5b50600c546103109062010000900460ff1681565b34801561059857600080fd5b506103ad6105a7366004611e54565b6001600160a01b031660009081526020819052604090205490565b3480156105ce57600080fd5b506102c3610df1565b3480156105e357600080fd5b50610310610e27565b3480156105f857600080fd5b506102c361060736600461206a565b610e64565b34801561061857600080fd5b506102c3610eb9565b34801561062d57600080fd5b506005546001600160a01b0316610384565b34801561064b57600080fd5b506008546103849061010090046001600160a01b031681565b34801561067057600080fd5b506102c361067f36600461209d565b610ef6565b34801561069057600080fd5b506102da610f3c565b3480156106a557600080fd5b506103ad600e5481565b3480156106bb57600080fd5b506103ad60135481565b3480156106d157600080fd5b506103ad60155481565b3480156106e757600080fd5b506103106106f6366004611e2a565b610f4b565b34801561070757600080fd5b50600654610384906001600160a01b031681565b34801561072757600080fd5b50600c5461031090610100900460ff1681565b34801561074657600080fd5b506102c361075536600461206a565b610f58565b34801561076657600080fd5b506102c3610775366004611e6f565b610fe1565b34801561078657600080fd5b506103ad60095481565b34801561079c57600080fd5b506103ad60075481565b3480156107b257600080fd5b506103106107c1366004611e6f565b6110b2565b3480156107d257600080fd5b506103ad600d5481565b3480156107e857600080fd5b506103ad6107f73660046120b8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082e57600080fd5b506103ad600a5481565b34801561084457600080fd5b506103ad600f5481565b34801561085a57600080fd5b506102c3610869366004611e54565b611209565b34801561087a57600080fd5b506103ad60145481565b34801561089057600080fd5b506103ad600b5481565b6005546001600160a01b031633146108cd5760405162461bcd60e51b81526004016108c4906120e2565b60405180910390fd5b601382905560148190556108e1818361212d565b6012819055600a10156109365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108c4565b5050565b60606003805461094990612140565b80601f016020809104026020016040519081016040528092919081815260200182805461097590612140565b80156109c25780601f10610997576101008083540402835291602001916109c2565b820191906000526020600020905b8154815290600101906020018083116109a557829003601f168201915b5050505050905090565b60006109d93384846112a4565b5060015b92915050565b6005546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016108c4906120e2565b6008546040516001600160a01b036101009092048216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610a9f5760405162461bcd60e51b81526004016108c4906120e2565b670de0b6b3a76400006103e8610ab460025490565b610abf90600161217a565b610ac99190612191565b610ad39190612191565b811015610b3a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016108c4565b610b4c81670de0b6b3a764000061217a565b60095550565b6005546001600160a01b03163314610b7c5760405162461bcd60e51b81526004016108c4906120e2565b8051825114610bcd5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016108c4565b606482511115610c2a5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2031604482015261030360f41b60648201526084016108c4565b60005b8251811015610caf576000838281518110610c4a57610c4a6121b3565b602002602001015190506000610c5e601290565b610c6990600a6122ad565b848481518110610c7b57610c7b6121b3565b6020026020010151610c8d919061217a565b9050610c9a3383836113c8565b50508080610ca7906122bc565b915050610c2d565b505050565b6000610cc184848461151d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d465760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108c4565b610d5385338584036112a4565b506001949350505050565b6005546001600160a01b03163314610d885760405162461bcd60e51b81526004016108c4906120e2565b600e829055600f819055610d9c818361212d565b600d819055600a10156109365760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016108c4565b6005546001600160a01b03163314610e1b5760405162461bcd60e51b81526004016108c4906120e2565b610e256000611ba0565b565b6005546000906001600160a01b03163314610e545760405162461bcd60e51b81526004016108c4906120e2565b50600c805460ff19169055600190565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ee35760405162461bcd60e51b81526004016108c4906120e2565b600c805462ffff00191662010100179055565b6005546001600160a01b03163314610f205760405162461bcd60e51b81526004016108c4906120e2565b600c8054911515620100000262ff000019909216919091179055565b60606004805461094990612140565b60006109d933848461151d565b6005546001600160a01b03163314610f825760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461100b5760405162461bcd60e51b81526004016108c4906120e2565b670de0b6b3a76400006103e861102060025490565b61102b90600561217a565b6110359190612191565b61103f9190612191565b81101561109a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016108c4565b6110ac81670de0b6b3a764000061217a565b600b5550565b6005546000906001600160a01b031633146110df5760405162461bcd60e51b81526004016108c4906120e2565b620186a06110ec60025490565b6110f790600161217a565b6111019190612191565b82101561116e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108c4565b6103e861117a60025490565b61118590600561217a565b61118f9190612191565b8211156111fb5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108c4565b50600a81905560015b919050565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108c4906120e2565b6001600160a01b0381166112985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c4565b6112a181611ba0565b50565b6001600160a01b0383166113065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c4565b6001600160a01b0382166113675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113ee5760405162461bcd60e51b81526004016108c4906122d5565b6001600160a01b0382166114145760405162461bcd60e51b81526004016108c49061231a565b6001600160a01b0383166000908152602081905260409020548181101561148c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108c4565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114c390849061212d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150f91815260200190565b60405180910390a350505050565b6001600160a01b0383166115435760405162461bcd60e51b81526004016108c4906122d5565b6001600160a01b0382166115695760405162461bcd60e51b81526004016108c49061231a565b8060000361157d57610caf838360006113c8565b601054600e5414158015611595575060155460135414155b80156115a2575060075442115b156115e057601054600e819055601154600f8190556115c09161212d565b600d55601554601381905560165460148190556115dc9161212d565b6012555b600c5460ff16156118b1576005546001600160a01b0384811691161480159061161757506005546001600160a01b03838116911614155b801561162b57506001600160a01b03821615155b801561164257506001600160a01b03821661dead14155b8015611651575060085460ff16155b156118b157600c54610100900460ff166116e9576001600160a01b03831660009081526017602052604090205460ff16806116a457506001600160a01b03821660009081526017602052604090205460ff165b6116e95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108c4565b7f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec6001600160a01b0316836001600160a01b031614801561174357506001600160a01b03821660009081526018602052604090205460ff16155b15611827576009548111156117b85760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108c4565b600b546001600160a01b0383166000908152602081905260409020546117de908361212d565b11156118225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108c4565b6118b1565b6001600160a01b03821660009081526018602052604090205460ff166118b157600b546001600160a01b03831660009081526020819052604090205461186d908361212d565b11156118b15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108c4565b30600090815260208190526040902054600a54811080159081906118dd5750600c5462010000900460ff165b80156118ec575060085460ff16155b801561192957507f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec6001600160a01b0316846001600160a01b0316145b801561194e57506001600160a01b03851660009081526017602052604090205460ff16155b801561197357506001600160a01b03841660009081526017602052604090205460ff16155b15611998576008805460ff1916600117905561198d611bf2565b6008805460ff191690555b6008546001600160a01b03861660009081526017602052604090205460ff918216159116806119df57506001600160a01b03851660009081526017602052604090205460ff165b156119e8575060005b60008060008315611b8a577f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec6001600160a01b0316886001600160a01b0316148015611a3657506000601254115b15611a9c57611a5b6064611a556012548a611c3c90919063ffffffff16565b90611c4f565b925060125460145484611a6e919061217a565b611a789190612191565b915060125460135484611a8b919061217a565b611a959190612191565b9050611b3b565b7f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec6001600160a01b0316896001600160a01b0316148015611adf57506000600d54115b15611b3b57611afe6064611a55600d548a611c3c90919063ffffffff16565b9250600d54600f5484611b11919061217a565b611b1b9190612191565b9150600d54600e5484611b2e919061217a565b611b389190612191565b90505b8215611b4c57611b4c8930856113c8565b8115611b7d57611b7d307f0000000000000000000000003d868e6f5abff786d82138388db62fce16f39bec846113c8565b611b87838861235d565b96505b611b958989896113c8565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b3060009081526020819052604081205490819003611c0d5750565b600a54611c1b90601461217a565b811115611c3357600a54611c3090601461217a565b90505b6112a181611c5b565b6000611c48828461217a565b9392505050565b6000611c488284612191565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9057611c906121b3565b6001600160a01b039283166020918202929092010152600654825191169082906001908110611cc157611cc16121b3565b60200260200101906001600160a01b031690816001600160a01b031681525050611d0c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112a4565b600854604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811692635c11d79592611d6d9287926000928892610100909204909116904290600401612370565b600060405180830381600087803b158015611d8757600080fd5b505af1158015611d9b573d6000803e3d6000fd5b505050505050565b60008060408385031215611db657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611df257858101830151858201604001528201611dd6565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461120457600080fd5b60008060408385031215611e3d57600080fd5b611e4683611e13565b946020939093013593505050565b600060208284031215611e6657600080fd5b611c4882611e13565b600060208284031215611e8157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec757611ec7611e88565b604052919050565b600067ffffffffffffffff821115611ee957611ee9611e88565b5060051b60200190565b600082601f830112611f0457600080fd5b81356020611f19611f1483611ecf565b611e9e565b82815260059290921b84018101918181019086841115611f3857600080fd5b8286015b84811015611f535780358352918301918301611f3c565b509695505050505050565b60008060408385031215611f7157600080fd5b823567ffffffffffffffff80821115611f8957600080fd5b818501915085601f830112611f9d57600080fd5b81356020611fad611f1483611ecf565b82815260059290921b84018101918181019089841115611fcc57600080fd5b948201945b83861015611ff157611fe286611e13565b82529482019490820190611fd1565b9650508601359250508082111561200757600080fd5b5061201485828601611ef3565b9150509250929050565b60008060006060848603121561203357600080fd5b61203c84611e13565b925061204a60208501611e13565b9150604084013590509250925092565b8035801515811461120457600080fd5b6000806040838503121561207d57600080fd5b61208683611e13565b91506120946020840161205a565b90509250929050565b6000602082840312156120af57600080fd5b611c488261205a565b600080604083850312156120cb57600080fd5b6120d483611e13565b915061209460208401611e13565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109dd576109dd612117565b600181811c9082168061215457607f821691505b60208210810361217457634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176109dd576109dd612117565b6000826121ae57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156122045781600019048211156121ea576121ea612117565b808516156121f757918102915b93841c93908002906121ce565b509250929050565b60008261221b575060016109dd565b81612228575060006109dd565b816001811461223e576002811461224857612264565b60019150506109dd565b60ff84111561225957612259612117565b50506001821b6109dd565b5060208310610133831016604e8410600b8410161715612287575081810a6109dd565b61229183836121c9565b80600019048211156122a5576122a5612117565b029392505050565b6000611c4860ff84168361220c565b6000600182016122ce576122ce612117565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109dd576109dd612117565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c05784516001600160a01b03168352938301939183019160010161239b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122063c0019e0200f02f6bea92db6137d9c4d2504e9b96d82c1d0232d700bc3b7e7764736f6c63430008110033

Deployed Bytecode Sourcemap

23666:12566:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29685:318;;;;;;;;;;-1:-1:-1;29685:318:0;;;;;:::i;:::-;;:::i;:::-;;8522:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10689:169;;;;;;;;;;-1:-1:-1;10689:169:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;10689:169:0;1257:187:1;24854:63:0;;;;;;;;;;-1:-1:-1;24854:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23745:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1830:32:1;;;1812:51;;1800:2;1785:18;23745:51:0;1640:229:1;9642:108:0;;;;;;;;;;-1:-1:-1;9730:12:0;;9642:108;;;2020:25:1;;;2008:2;1993:18;9642:108:0;1874:177:1;30201:189:0;;;;;;;;;;-1:-1:-1;30201:189:0;;;;;:::i;:::-;;:::i;28448:275::-;;;;;;;;;;-1:-1:-1;28448:275:0;;;;;:::i;:::-;;:::i;24431:33::-;;;;;;;;;;;;;;;;35658:569;;;;;;;;;;-1:-1:-1;35658:569:0;;;;;:::i;:::-;;:::i;11340:492::-;;;;;;;;;;-1:-1:-1;11340:492:0;;;;;:::i;:::-;;:::i;23848:53::-;;;;;;;;;;;;23894:6;23848:53;;9484:93;;;;;;;;;;-1:-1:-1;9484:93:0;;9567:2;5342:36:1;;5330:2;5315:18;9484:93:0;5200:184:1;24665:40:0;;;;;;;;;;;;;;;;23803:38;;;;;;;;;;;;;;;24209:33;;;;;;;;;;-1:-1:-1;24209:33:0;;;;;;;;30400:126;;;;;;;;;;-1:-1:-1;30400:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;30490:28:0;30466:4;30490:28;;;:19;:28;;;;;;;;;30400:126;24471:39;;;;;;;;;;;;;;;;29366:311;;;;;;;;;;-1:-1:-1;29366:311:0;;;;;:::i;:::-;;:::i;24519:28::-;;;;;;;;;;;;;;;;24289:31;;;;;;;;;;-1:-1:-1;24289:31:0;;;;;;;;;;;9813:127;;;;;;;;;;-1:-1:-1;9813:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9914:18:0;9887:7;9914:18;;;;;;;;;;;;9813:127;1757:103;;;;;;;;;;;;;:::i;27752:121::-;;;;;;;;;;;;;:::i;28995:167::-;;;;;;;;;;-1:-1:-1;28995:167:0;;;;;:::i;:::-;;:::i;27588:112::-;;;;;;;;;;;;;:::i;1106:87::-;;;;;;;;;;-1:-1:-1;1179:6:0;;-1:-1:-1;;;;;1179:6:0;1106:87;;24061:24;;;;;;;;;;-1:-1:-1;24061:24:0;;;;;;;-1:-1:-1;;;;;24061:24:0;;;29258:100;;;;;;;;;;-1:-1:-1;29258:100:0;;;;;:::i;:::-;;:::i;8741:104::-;;;;;;;;;;;;;:::i;24363:24::-;;;;;;;;;;;;;;;;24554:25;;;;;;;;;;;;;;;;24624:34;;;;;;;;;;;;;;;;10153:175;;;;;;;;;;-1:-1:-1;10153:175:0;;;;;:::i;:::-;;:::i;23908:64::-;;;;;;;;;;-1:-1:-1;23908:64:0;;;;-1:-1:-1;;;;;23908:64:0;;;24249:33;;;;;;;;;;-1:-1:-1;24249:33:0;;;;;;;;;;;30011:182;;;;;;;;;;-1:-1:-1;30011:182:0;;;;;:::i;:::-;;:::i;28731:256::-;;;;;;;;;;-1:-1:-1;28731:256:0;;;;;:::i;:::-;;:::i;24094:35::-;;;;;;;;;;;;;;;;23979:43;;;;;;;;;;;;;;;;27943:497;;;;;;;;;;-1:-1:-1;27943:497:0;;;;;:::i;:::-;;:::i;24329:27::-;;;;;;;;;;;;;;;;10391:151;;;;;;;;;;-1:-1:-1;10391:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10507:18:0;;;10480:7;10507:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10391:151;24136:33;;;;;;;;;;;;;;;;24394:30;;;;;;;;;;;;;;;;2015:201;;;;;;;;;;-1:-1:-1;2015:201:0;;;;;:::i;:::-;;:::i;24586:31::-;;;;;;;;;;;;;;;;24176:24;;;;;;;;;;;;;;;;29685:318;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;;;;;;;;;29804:10:::1;:20:::0;;;29835:16:::1;:32:::0;;;29894:29:::1;29854:13:::0;29817:7;29894:29:::1;:::i;:::-;29878:13;:45:::0;;;29959:2:::1;-1:-1:-1::0;29942:19:0::1;29934:61;;;::::0;-1:-1:-1;;;29934:61:0;;7088:2:1;29934:61:0::1;::::0;::::1;7070:21:1::0;7127:2;7107:18;;;7100:30;7166:31;7146:18;;;7139:59;7215:18;;29934:61:0::1;6886:353:1::0;29934:61:0::1;29685:318:::0;;:::o;8522:100::-;8576:13;8609:5;8602:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8522:100;:::o;10689:169::-;10772:4;10789:39;560:10;10812:7;10821:6;10789:8;:39::i;:::-;-1:-1:-1;10846:4:0;10689:169;;;;;:::o;30201:189::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;30337:9:::1;::::0;30306:41:::1;::::0;-1:-1:-1;;;;;30337:9:0::1;::::0;;::::1;::::0;::::1;::::0;30306:41;::::1;::::0;::::1;::::0;;;::::1;30358:9;:24:::0;;-1:-1:-1;;;;;30358:24:0;;::::1;;;-1:-1:-1::0;;;;;;30358:24:0;;::::1;::::0;;;::::1;::::0;;30201:189::o;28448:275::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;28585:4:::1;28577;28556:13;9730:12:::0;;;9642:108;28556:13:::1;:17;::::0;28572:1:::1;28556:17;:::i;:::-;28555:26;;;;:::i;:::-;28554:35;;;;:::i;:::-;28544:6;:45;;28522:142;;;::::0;-1:-1:-1;;;28522:142:0;;8226:2:1;28522:142:0::1;::::0;::::1;8208:21:1::0;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;-1:-1:-1;;;8355:18:1;;;8348:45;8410:19;;28522:142:0::1;8024:411:1::0;28522:142:0::1;28698:17;:6:::0;28708::::1;28698:17;:::i;:::-;28675:20;:40:::0;-1:-1:-1;28448:275:0:o;35658:569::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;35830:6:::1;:13;35805:14;:21;:38;35797:81;;;::::0;-1:-1:-1;;;35797:81:0;;8642:2:1;35797:81:0::1;::::0;::::1;8624:21:1::0;8681:2;8661:18;;;8654:30;8720:32;8700:18;;;8693:60;8770:18;;35797:81:0::1;8440:354:1::0;35797:81:0::1;35922:3;35897:14;:21;:28;;35889:75;;;::::0;-1:-1:-1;;;35889:75:0;;9001:2:1;35889:75:0::1;::::0;::::1;8983:21:1::0;9040:2;9020:18;;;9013:30;9079:34;9059:18;;;9052:62;-1:-1:-1;;;9130:18:1;;;9123:32;9172:19;;35889:75:0::1;8799:398:1::0;35889:75:0::1;35980:9;35975:245;35999:14;:21;35995:1;:25;35975:245;;;36042:14;36059;36074:1;36059:17;;;;;;;;:::i;:::-;;;;;;;36042:34;;36091:21;36132:10;9567:2:::0;;9484:93;36132:10:::1;36128:14;::::0;:2:::1;:14;:::i;:::-;36115:6;36122:1;36115:9;;;;;;;;:::i;:::-;;;;;;;:28;;;;:::i;:::-;36091:52;;36158:50;36174:10;36186:6;36194:13;36158:15;:50::i;:::-;36027:193;;36022:3;;;;;:::i;:::-;;;;35975:245;;;;35658:569:::0;;:::o;11340:492::-;11480:4;11497:36;11507:6;11515:9;11526:6;11497:9;:36::i;:::-;-1:-1:-1;;;;;11573:19:0;;11546:24;11573:19;;;:11;:19;;;;;;;;560:10;11573:33;;;;;;;;11625:26;;;;11617:79;;;;-1:-1:-1;;;11617:79:0;;11059:2:1;11617:79:0;;;11041:21:1;11098:2;11078:18;;;11071:30;11137:34;11117:18;;;11110:62;-1:-1:-1;;;11188:18:1;;;11181:38;11236:19;;11617:79:0;10857:404:1;11617:79:0;11732:57;11741:6;560:10;11782:6;11763:16;:25;11732:8;:57::i;:::-;-1:-1:-1;11820:4:0;;11340:492;-1:-1:-1;;;;11340:492:0:o;29366:311::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;29484:9:::1;:19:::0;;;29514:15:::1;:31:::0;;;29571:27:::1;29532:13:::0;29496:7;29571:27:::1;:::i;:::-;29556:12;:42:::0;;;29633:2:::1;-1:-1:-1::0;29617:18:0::1;29609:60;;;::::0;-1:-1:-1;;;29609:60:0;;7088:2:1;29609:60:0::1;::::0;::::1;7070:21:1::0;7127:2;7107:18;;;7100:30;7166:31;7146:18;;;7139:59;7215:18;;29609:60:0::1;6886:353:1::0;1757:103:0;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;1822:30:::1;1849:1;1822:18;:30::i;:::-;1757:103::o:0;27752:121::-;1179:6;;27804:4;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;-1:-1:-1;27821:14:0::1;:22:::0;;-1:-1:-1;;27821:22:0::1;::::0;;;27752:121;:::o;28995:167::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29108:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;29108:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28995:167::o;27588:112::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;27643:13:::1;:20:::0;;-1:-1:-1;;27674:18:0;;;;;27588:112::o;29258:100::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;29329:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29329:21:0;;::::1;::::0;;;::::1;::::0;;29258:100::o;8741:104::-;8797:13;8830:7;8823:14;;;;;:::i;10153:175::-;10239:4;10256:42;560:10;10280:9;10291:6;10256:9;:42::i;30011:182::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30096:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;30096:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30151:34;;1397:41:1;;;30151:34:0::1;::::0;1370:18:1;30151:34:0::1;;;;;;;30011:182:::0;;:::o;28731:256::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;28871:4:::1;28863;28842:13;9730:12:::0;;;9642:108;28842:13:::1;:17;::::0;28858:1:::1;28842:17;:::i;:::-;28841:26;;;;:::i;:::-;28840:35;;;;:::i;:::-;28830:6;:45;;28808:131;;;::::0;-1:-1:-1;;;28808:131:0;;11468:2:1;28808:131:0::1;::::0;::::1;11450:21:1::0;11507:2;11487:18;;;11480:30;11546:34;11526:18;;;11519:62;-1:-1:-1;;;11597:18:1;;;11590:34;11641:19;;28808:131:0::1;11266:400:1::0;28808:131:0::1;28962:17;:6:::0;28972::::1;28962:17;:::i;:::-;28950:9;:29:::0;-1:-1:-1;28731:256:0:o;27943:497::-;1179:6;;28051:4;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;28130:6:::1;28109:13;9730:12:::0;;;9642:108;28109:13:::1;:17;::::0;28125:1:::1;28109:17;:::i;:::-;28108:28;;;;:::i;:::-;28095:9;:41;;28073:144;;;::::0;-1:-1:-1;;;28073:144:0;;11873:2:1;28073:144:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:51;12063:19;;28073:144:0::1;11671:417:1::0;28073:144:0::1;28285:4;28264:13;9730:12:::0;;;9642:108;28264:13:::1;:17;::::0;28280:1:::1;28264:17;:::i;:::-;28263:26;;;;:::i;:::-;28250:9;:39;;28228:141;;;::::0;-1:-1:-1;;;28228:141:0;;12295:2:1;28228:141:0::1;::::0;::::1;12277:21:1::0;12334:2;12314:18;;;12307:30;12373:34;12353:18;;;12346:62;-1:-1:-1;;;12424:18:1;;;12417:50;12484:19;;28228:141:0::1;12093:416:1::0;28228:141:0::1;-1:-1:-1::0;28380:18:0::1;:30:::0;;;28428:4:::1;1397:1;27943:497:::0;;;:::o;2015:201::-;1179:6;;-1:-1:-1;;;;;1179:6:0;560:10;1326:23;1318:68;;;;-1:-1:-1;;;1318:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2104:22:0;::::1;2096:73;;;::::0;-1:-1:-1;;;2096:73:0;;12716:2:1;2096:73:0::1;::::0;::::1;12698:21:1::0;12755:2;12735:18;;;12728:30;12794:34;12774:18;;;12767:62;-1:-1:-1;;;12845:18:1;;;12838:36;12891:19;;2096:73:0::1;12514:402:1::0;2096:73:0::1;2180:28;2199:8;2180:18;:28::i;:::-;2015:201:::0;:::o;14181:380::-;-1:-1:-1;;;;;14317:19:0;;14309:68;;;;-1:-1:-1;;;14309:68:0;;13123:2:1;14309:68:0;;;13105:21:1;13162:2;13142:18;;;13135:30;13201:34;13181:18;;;13174:62;-1:-1:-1;;;13252:18:1;;;13245:34;13296:19;;14309:68:0;12921:400:1;14309:68:0;-1:-1:-1;;;;;14396:21:0;;14388:68;;;;-1:-1:-1;;;14388:68:0;;13528:2:1;14388:68:0;;;13510:21:1;13567:2;13547:18;;;13540:30;13606:34;13586:18;;;13579:62;-1:-1:-1;;;13657:18:1;;;13650:32;13699:19;;14388:68:0;13326:398:1;14388:68:0;-1:-1:-1;;;;;14469:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14521:32;;2020:25:1;;;14521:32:0;;1993:18:1;14521:32:0;;;;;;;14181:380;;;:::o;12322:733::-;-1:-1:-1;;;;;12462:20:0;;12454:70;;;;-1:-1:-1;;;12454:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12543:23:0;;12535:71;;;;-1:-1:-1;;;12535:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12703:17:0;;12679:21;12703:17;;;;;;;;;;;12739:23;;;;12731:74;;;;-1:-1:-1;;;12731:74:0;;14741:2:1;12731:74:0;;;14723:21:1;14780:2;14760:18;;;14753:30;14819:34;14799:18;;;14792:62;-1:-1:-1;;;14870:18:1;;;14863:36;14916:19;;12731:74:0;14539:402:1;12731:74:0;-1:-1:-1;;;;;12841:17:0;;;:9;:17;;;;;;;;;;;12861:22;;;12841:42;;12905:20;;;;;;;;:30;;12877:6;;12841:9;12905:30;;12877:6;;12905:30;:::i;:::-;;;;;;;;12970:9;-1:-1:-1;;;;;12953:35:0;12962:6;-1:-1:-1;;;;;12953:35:0;;12981:6;12953:35;;;;2020:25:1;;2008:2;1993:18;;1874:177;12953:35:0;;;;;;;;12443:612;12322:733;;;:::o;30534:4191::-;-1:-1:-1;;;;;30666:18:0;;30658:68;;;;-1:-1:-1;;;30658:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30745:16:0;;30737:64;;;;-1:-1:-1;;;30737:64:0;;;;;;;:::i;:::-;30818:6;30828:1;30818:11;30814:93;;30846:28;30862:4;30868:2;30872:1;30846:15;:28::i;30814:93::-;30950:18;;30937:9;;:31;;:81;;;;;30999:19;;30985:10;;:33;;30937:81;:131;;;;;31053:15;;31035;:33;30937:131;30919:500;;;31107:18;;31095:9;:30;;;31158:24;;31140:15;:42;;;31212:27;;;:::i;:::-;31197:12;:42;31269:19;;31256:10;:32;;;31322:25;;31303:16;:44;;;31378:29;;;:::i;:::-;31362:13;:45;30919:500;31435:14;;;;31431:1430;;;1179:6;;-1:-1:-1;;;;;31488:15:0;;;1179:6;;31488:15;;;;:49;;-1:-1:-1;1179:6:0;;-1:-1:-1;;;;;31524:13:0;;;1179:6;;31524:13;;31488:49;:86;;;;-1:-1:-1;;;;;;31558:16:0;;;;31488:86;:128;;;;-1:-1:-1;;;;;;31595:21:0;;31609:6;31595:21;;31488:128;:158;;;;-1:-1:-1;31638:8:0;;;;31637:9;31488:158;31466:1384;;;31686:13;;;;;;;31681:223;;-1:-1:-1;;;;;31758:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;31787:23:0;;;;;;:19;:23;;;;;;;;31758:52;31724:160;;;;-1:-1:-1;;;31724:160:0;;15148:2:1;31724:160:0;;;15130:21:1;15187:2;15167:18;;;15160:30;-1:-1:-1;;;15206:18:1;;;15199:52;15268:18;;31724:160:0;14946:346:1;31724:160:0;32118:13;-1:-1:-1;;;;;32110:21:0;:4;-1:-1:-1;;;;;32110:21:0;;:82;;;;-1:-1:-1;;;;;;32157:35:0;;;;;;:31;:35;;;;;;;;32156:36;32110:82;32084:751;;;32279:20;;32269:6;:30;;32235:169;;;;-1:-1:-1;;;32235:169:0;;15499:2:1;32235:169:0;;;15481:21:1;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:51;15689:19;;32235:169:0;15297:417:1;32235:169:0;32487:9;;-1:-1:-1;;;;;9914:18:0;;9887:7;9914:18;;;;;;;;;;;32461:22;;:6;:22;:::i;:::-;:35;;32427:140;;;;-1:-1:-1;;;32427:140:0;;15921:2:1;32427:140:0;;;15903:21:1;15960:2;15940:18;;;15933:30;-1:-1:-1;;;15979:18:1;;;15972:49;16038:18;;32427:140:0;15719:343:1;32427:140:0;32084:751;;;-1:-1:-1;;;;;32615:35:0;;;;;;:31;:35;;;;;;;;32610:225;;32735:9;;-1:-1:-1;;;;;9914:18:0;;9887:7;9914:18;;;;;;;;;;;32709:22;;:6;:22;:::i;:::-;:35;;32675:140;;;;-1:-1:-1;;;32675:140:0;;15921:2:1;32675:140:0;;;15903:21:1;15960:2;15940:18;;;15933:30;-1:-1:-1;;;15979:18:1;;;15972:49;16038:18;;32675:140:0;15719:343:1;32675:140:0;32922:4;32873:28;9914:18;;;;;;;;;;;32980;;32956:42;;;;;;;33029:35;;-1:-1:-1;33053:11:0;;;;;;;33029:35;:61;;;;-1:-1:-1;33082:8:0;;;;33081:9;33029:61;:97;;;;;33113:13;-1:-1:-1;;;;;33107:19:0;:2;-1:-1:-1;;;;;33107:19:0;;33029:97;:140;;;;-1:-1:-1;;;;;;33144:25:0;;;;;;:19;:25;;;;;;;;33143:26;33029:140;:181;;;;-1:-1:-1;;;;;;33187:23:0;;;;;;:19;:23;;;;;;;;33186:24;33029:181;33011:313;;;33237:8;:15;;-1:-1:-1;;33237:15:0;33248:4;33237:15;;;33269:10;:8;:10::i;:::-;33296:8;:16;;-1:-1:-1;;33296:16:0;;;33011:313;33352:8;;-1:-1:-1;;;;;33462:25:0;;33336:12;33462:25;;;:19;:25;;;;;;33352:8;;;;33351:9;;33462:25;;:52;;-1:-1:-1;;;;;;33491:23:0;;;;;;:19;:23;;;;;;;;33462:52;33458:100;;;-1:-1:-1;33541:5:0;33458:100;33570:12;33597:26;33638:20;33751:7;33747:925;;;33809:13;-1:-1:-1;;;;;33803:19:0;:2;-1:-1:-1;;;;;33803:19:0;;:40;;;;;33842:1;33826:13;;:17;33803:40;33799:583;;;33871:34;33901:3;33871:25;33882:13;;33871:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;33864:41;;33973:13;;33953:16;;33946:4;:23;;;;:::i;:::-;33945:41;;;;:::i;:::-;33924:62;;34042:13;;34028:10;;34021:4;:17;;;;:::i;:::-;34020:35;;;;:::i;:::-;34005:50;;33799:583;;;34125:13;-1:-1:-1;;;;;34117:21:0;:4;-1:-1:-1;;;;;34117:21:0;;:41;;;;;34157:1;34142:12;;:16;34117:41;34113:269;;;34186:33;34215:3;34186:24;34197:12;;34186:6;:10;;:24;;;;:::i;:33::-;34179:40;;34286:12;;34267:15;;34260:4;:22;;;;:::i;:::-;34259:39;;;;:::i;:::-;34238:60;;34354:12;;34341:9;;34334:4;:16;;;;:::i;:::-;34333:33;;;;:::i;:::-;34318:48;;34113:269;34402:7;;34398:90;;34430:42;34446:4;34460;34467;34430:15;:42::i;:::-;34506:22;;34502:128;;34549:65;34573:4;34580:13;34595:18;34549:15;:65::i;:::-;34646:14;34656:4;34646:14;;:::i;:::-;;;33747:925;34684:33;34700:4;34706:2;34710:6;34684:15;:33::i;:::-;30647:4078;;;;;;30534:4191;;;:::o;2376:191::-;2469:6;;;-1:-1:-1;;;;;2486:17:0;;;-1:-1:-1;;;;;;2486:17:0;;;;;;;2519:40;;2469:6;;;2486:17;2469:6;;2519:40;;2450:16;;2519:40;2439:128;2376:191;:::o;35311:339::-;35394:4;35350:23;9914:18;;;;;;;;;;;;35415:20;;;35411:59;;35452:7;35311:339::o;35411:59::-;35504:18;;:23;;35525:2;35504:23;:::i;:::-;35486:15;:41;35482:115;;;35562:18;;:23;;35583:2;35562:23;:::i;:::-;35544:41;;35482:115;35609:33;35626:15;35609:16;:33::i;19634:98::-;19692:7;19719:5;19723:1;19719;:5;:::i;:::-;19712:12;19634:98;-1:-1:-1;;;19634:98:0:o;20033:::-;20091:7;20118:5;20122:1;20118;:5;:::i;34733:570::-;34883:16;;;34897:1;34883:16;;;;;;;;34859:21;;34883:16;;;;;;;;;;-1:-1:-1;34883:16:0;34859:40;;34928:4;34910;34915:1;34910:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34910:23:0;;;:7;;;;;;;;;:23;34954:4;;34944:7;;34954:4;;;34944;;34954;;34944:7;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;34944:14:0;;;-1:-1:-1;;;;;34944:14:0;;;;;34971:62;34988:4;35003:15;35021:11;34971:8;:62::i;:::-;35245:9;;35072:223;;-1:-1:-1;;;35072:223:0;;-1:-1:-1;;;;;35072:15:0;:69;;;;;:223;;35156:11;;35182:1;;35226:4;;35245:9;;;;;;;;35269:15;;35072:223;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34788:515;34733:570;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:173::-;888:20;;-1:-1:-1;;;;;937:31:1;;927:42;;917:70;;983:1;980;973:12;998:254;1066:6;1074;1127:2;1115:9;1106:7;1102:23;1098:32;1095:52;;;1143:1;1140;1133:12;1095:52;1166:29;1185:9;1166:29;:::i;:::-;1156:39;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;998:254:1:o;1449:186::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1600:29;1619:9;1600:29;:::i;2056:180::-;2115:6;2168:2;2156:9;2147:7;2143:23;2139:32;2136:52;;;2184:1;2181;2174:12;2136:52;-1:-1:-1;2207:23:1;;2056:180;-1:-1:-1;2056:180:1:o;2241:127::-;2302:10;2297:3;2293:20;2290:1;2283:31;2333:4;2330:1;2323:15;2357:4;2354:1;2347:15;2373:275;2444:2;2438:9;2509:2;2490:13;;-1:-1:-1;;2486:27:1;2474:40;;2544:18;2529:34;;2565:22;;;2526:62;2523:88;;;2591:18;;:::i;:::-;2627:2;2620:22;2373:275;;-1:-1:-1;2373:275:1:o;2653:183::-;2713:4;2746:18;2738:6;2735:30;2732:56;;;2768:18;;:::i;:::-;-1:-1:-1;2813:1:1;2809:14;2825:4;2805:25;;2653:183::o;2841:662::-;2895:5;2948:3;2941:4;2933:6;2929:17;2925:27;2915:55;;2966:1;2963;2956:12;2915:55;3002:6;2989:20;3028:4;3052:60;3068:43;3108:2;3068:43;:::i;:::-;3052:60;:::i;:::-;3146:15;;;3232:1;3228:10;;;;3216:23;;3212:32;;;3177:12;;;;3256:15;;;3253:35;;;3284:1;3281;3274:12;3253:35;3320:2;3312:6;3308:15;3332:142;3348:6;3343:3;3340:15;3332:142;;;3414:17;;3402:30;;3452:12;;;;3365;;3332:142;;;-1:-1:-1;3492:5:1;2841:662;-1:-1:-1;;;;;;2841:662:1:o;3508:1146::-;3626:6;3634;3687:2;3675:9;3666:7;3662:23;3658:32;3655:52;;;3703:1;3700;3693:12;3655:52;3743:9;3730:23;3772:18;3813:2;3805:6;3802:14;3799:34;;;3829:1;3826;3819:12;3799:34;3867:6;3856:9;3852:22;3842:32;;3912:7;3905:4;3901:2;3897:13;3893:27;3883:55;;3934:1;3931;3924:12;3883:55;3970:2;3957:16;3992:4;4016:60;4032:43;4072:2;4032:43;:::i;4016:60::-;4110:15;;;4192:1;4188:10;;;;4180:19;;4176:28;;;4141:12;;;;4216:19;;;4213:39;;;4248:1;4245;4238:12;4213:39;4272:11;;;;4292:148;4308:6;4303:3;4300:15;4292:148;;;4374:23;4393:3;4374:23;:::i;:::-;4362:36;;4325:12;;;;4418;;;;4292:148;;;4459:5;-1:-1:-1;;4502:18:1;;4489:32;;-1:-1:-1;;4533:16:1;;;4530:36;;;4562:1;4559;4552:12;4530:36;;4585:63;4640:7;4629:8;4618:9;4614:24;4585:63;:::i;:::-;4575:73;;;3508:1146;;;;;:::o;4659:328::-;4736:6;4744;4752;4805:2;4793:9;4784:7;4780:23;4776:32;4773:52;;;4821:1;4818;4811:12;4773:52;4844:29;4863:9;4844:29;:::i;:::-;4834:39;;4892:38;4926:2;4915:9;4911:18;4892:38;:::i;:::-;4882:48;;4977:2;4966:9;4962:18;4949:32;4939:42;;4659:328;;;;;:::o;5389:160::-;5454:20;;5510:13;;5503:21;5493:32;;5483:60;;5539:1;5536;5529:12;5554:254;5619:6;5627;5680:2;5668:9;5659:7;5655:23;5651:32;5648:52;;;5696:1;5693;5686:12;5648:52;5719:29;5738:9;5719:29;:::i;:::-;5709:39;;5767:35;5798:2;5787:9;5783:18;5767:35;:::i;:::-;5757:45;;5554:254;;;;;:::o;5813:180::-;5869:6;5922:2;5910:9;5901:7;5897:23;5893:32;5890:52;;;5938:1;5935;5928:12;5890:52;5961:26;5977:9;5961:26;:::i;5998:260::-;6066:6;6074;6127:2;6115:9;6106:7;6102:23;6098:32;6095:52;;;6143:1;6140;6133:12;6095:52;6166:29;6185:9;6166:29;:::i;:::-;6156:39;;6214:38;6248:2;6237:9;6233:18;6214:38;:::i;6263:356::-;6465:2;6447:21;;;6484:18;;;6477:30;6543:34;6538:2;6523:18;;6516:62;6610:2;6595:18;;6263:356::o;6624:127::-;6685:10;6680:3;6676:20;6673:1;6666:31;6716:4;6713:1;6706:15;6740:4;6737:1;6730:15;6756:125;6821:9;;;6842:10;;;6839:36;;;6855:18;;:::i;7244:380::-;7323:1;7319:12;;;;7366;;;7387:61;;7441:4;7433:6;7429:17;7419:27;;7387:61;7494:2;7486:6;7483:14;7463:18;7460:38;7457:161;;7540:10;7535:3;7531:20;7528:1;7521:31;7575:4;7572:1;7565:15;7603:4;7600:1;7593:15;7457:161;;7244:380;;;:::o;7629:168::-;7702:9;;;7733;;7750:15;;;7744:22;;7730:37;7720:71;;7771:18;;:::i;7802:217::-;7842:1;7868;7858:132;;7912:10;7907:3;7903:20;7900:1;7893:31;7947:4;7944:1;7937:15;7975:4;7972:1;7965:15;7858:132;-1:-1:-1;8004:9:1;;7802:217::o;9202:127::-;9263:10;9258:3;9254:20;9251:1;9244:31;9294:4;9291:1;9284:15;9318:4;9315:1;9308:15;9334:422;9423:1;9466:5;9423:1;9480:270;9501:7;9491:8;9488:21;9480:270;;;9560:4;9556:1;9552:6;9548:17;9542:4;9539:27;9536:53;;;9569:18;;:::i;:::-;9619:7;9609:8;9605:22;9602:55;;;9639:16;;;;9602:55;9718:22;;;;9678:15;;;;9480:270;;;9484:3;9334:422;;;;;:::o;9761:806::-;9810:5;9840:8;9830:80;;-1:-1:-1;9881:1:1;9895:5;;9830:80;9929:4;9919:76;;-1:-1:-1;9966:1:1;9980:5;;9919:76;10011:4;10029:1;10024:59;;;;10097:1;10092:130;;;;10004:218;;10024:59;10054:1;10045:10;;10068:5;;;10092:130;10129:3;10119:8;10116:17;10113:43;;;10136:18;;:::i;:::-;-1:-1:-1;;10192:1:1;10178:16;;10207:5;;10004:218;;10306:2;10296:8;10293:16;10287:3;10281:4;10278:13;10274:36;10268:2;10258:8;10255:16;10250:2;10244:4;10241:12;10237:35;10234:77;10231:159;;;-1:-1:-1;10343:19:1;;;10375:5;;10231:159;10422:34;10447:8;10441:4;10422:34;:::i;:::-;10492:6;10488:1;10484:6;10480:19;10471:7;10468:32;10465:58;;;10503:18;;:::i;:::-;10541:20;;9761:806;-1:-1:-1;;;9761:806:1:o;10572:140::-;10630:5;10659:47;10700:4;10690:8;10686:19;10680:4;10659:47;:::i;10717:135::-;10756:3;10777:17;;;10774:43;;10797:18;;:::i;:::-;-1:-1:-1;10844:1:1;10833:13;;10717:135::o;13729:401::-;13931:2;13913:21;;;13970:2;13950:18;;;13943:30;14009:34;14004:2;13989:18;;13982:62;-1:-1:-1;;;14075:2:1;14060:18;;14053:35;14120:3;14105:19;;13729:401::o;14135:399::-;14337:2;14319:21;;;14376:2;14356:18;;;14349:30;14415:34;14410:2;14395:18;;14388:62;-1:-1:-1;;;14481:2:1;14466:18;;14459:33;14524:3;14509:19;;14135:399::o;16067:128::-;16134:9;;;16155:11;;;16152:37;;;16169:18;;:::i;16200:980::-;16462:4;16510:3;16499:9;16495:19;16541:6;16530:9;16523:25;16567:2;16605:6;16600:2;16589:9;16585:18;16578:34;16648:3;16643:2;16632:9;16628:18;16621:31;16672:6;16707;16701:13;16738:6;16730;16723:22;16776:3;16765:9;16761:19;16754:26;;16815:2;16807:6;16803:15;16789:29;;16836:1;16846:195;16860:6;16857:1;16854:13;16846:195;;;16925:13;;-1:-1:-1;;;;;16921:39:1;16909:52;;17016:15;;;;16981:12;;;;16957:1;16875:9;16846:195;;;-1:-1:-1;;;;;;;17097:32:1;;;;17092:2;17077:18;;17070:60;-1:-1:-1;;;17161:3:1;17146:19;17139:35;17058:3;16200:980;-1:-1:-1;;;16200:980:1:o

Swarm Source

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