ETH Price: $2,687.84 (+10.44%)
Gas: 2 Gwei

Token

Monsters, INC Crypto (MNSTR)
 

Overview

Max Total Supply

100,000,000,000,000,000,000,000,000,000,000,001,000,001,100,000,000,000 MNSTR

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
190,000,000.000000002122646638 MNSTR

Value
$0.00
0xf0c60f4997063d886d1ce1821d75dd8d4ccc3a50
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:
MonstersINC

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

🟢Monsters, INC Crypto🔵

🟢🔵 Chat - https://t.me/MonstersINC_Crypto
🔵🟢 Twitter - https://twitter.com/monster_crypto_
🟢🔵 Website - https://monstersinccrypto.com

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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);
    }
}

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;
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 MonstersINC is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public devWallet;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 public swapTokensAtAmount;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTotalFees;
    uint256 public maxWallet;

    bool public swapBackEnabled = true;
    bool public limitsInEffect = true;
    bool public tradingActive;
    bool private swapping;

    constructor() ERC20("Monsters, INC Crypto", "MNSTR") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), WETH);

        uint256 totalSupply = 100000000000e18;

        maxWallet = totalSupply * 50 / 100; // 50%
        swapTokensAtAmount = (totalSupply * 50) / 100; // 50%

        buyDevFee = 0;
        buyLiquidityFee = 0;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        sellDevFee = 0;
        sellLiquidityFee = 0;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x0000), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(0x0000), true);

        _mint(msg.sender, totalSupply);
    }

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

        bool isBuy = from == uniswapV2Pair;
        bool isSell = to == uniswapV2Pair;

        if (!tradingActive && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) require(false, "Trading has not started yet");

        if (limitsInEffect && !_isExcludedFromMaxWallet[to] && !swapping) {
            if (isBuy) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (buy)");
            }
            if (!isBuy && !isSell) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (transfer)");
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap && swapBackEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
   
     uint256 tokensForLiquidity = 0;

        if (takeFee) {
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
            }
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / 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 swapTokensForUSDC(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            devWallet,
            block.timestamp
        );
    }

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

        swapTokensForUSDC(contractBalance);
    }

    receive() external payable {}

    function rescue(address token) public onlyOwner {
        ERC20 Token = ERC20(token);
        uint256 balance = Token.balanceOf(address(this));
        if (balance > 0) Token.transfer(_msgSender(), balance);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateSwapBackEnabled(bool enabled) external onlyOwner {
        swapBackEnabled = enabled;
    }

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

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

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "< 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5000) / 100, "> 5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function manual (address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function enableTrading() public onlyOwner {
        tradingActive = true;
    }

    function enableLimits(bool _limitsInEffect) public onlyOwner {
        limitsInEffect = _limitsInEffect;
    }

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

    function excludeFromMaxWallet(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

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

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":"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"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"}],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manual","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"removeBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","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":"swapBackEnabled","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":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapBackEnabled","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"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055503480156200009c57600080fd5b506040518060400160405280601481526020017f4d6f6e73746572732c20494e432043727970746f0000000000000000000000008152506040518060400160405280600581526020017f4d4e53545200000000000000000000000000000000000000000000000000000081525081600390816200011a919062000b7b565b5080600490816200012c919062000b7b565b5050506200014f62000143620004b360201b60201c565b620004bb60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000ccc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200026c92919062000d0f565b6020604051808303816000875af11580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000ccc565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006c01431e0fae6d7217caa00000009050606460328262000308919062000d6b565b62000314919062000de5565b60118190555060646032826200032b919062000d6b565b62000337919062000de5565b600a819055506000600b819055506000600c81905550600c54600b546200035f919062000e1d565b600d819055506000600e819055506000600f81905550600f54600e5462000387919062000e1d565b6010819055506200039d6200058160201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ff620003f16200058160201b60201c565b6001620005ab60201b60201c565b62000412306001620005ab60201b60201c565b6200042761dead6001620005ab60201b60201c565b6200043b60006001620005ab60201b60201c565b6200045d6200044f6200058160201b60201c565b60016200069560201b60201c565b620004703060016200069560201b60201c565b6200048561dead60016200069560201b60201c565b62000499600060016200069560201b60201c565b620004ab33826200077f60201b60201c565b505062000f7b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005bb620004b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e16200058160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200063a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006319062000eb9565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006a5620004b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006cb6200058160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000724576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071b9062000eb9565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e89062000f2b565b60405180910390fd5b6200080560008383620008f760201b60201c565b806002600082825462000819919062000e1d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000870919062000e1d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d7919062000f5e565b60405180910390a3620008f360008383620008fc60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098357607f821691505b6020821081036200099957620009986200093b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c4565b62000a0f8683620009c4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a5c62000a5662000a508462000a27565b62000a31565b62000a27565b9050919050565b6000819050919050565b62000a788362000a3b565b62000a9062000a878262000a63565b848454620009d1565b825550505050565b600090565b62000aa762000a98565b62000ab481848462000a6d565b505050565b5b8181101562000adc5762000ad060008262000a9d565b60018101905062000aba565b5050565b601f82111562000b2b5762000af5816200099f565b62000b0084620009b4565b8101602085101562000b10578190505b62000b2862000b1f85620009b4565b83018262000ab9565b50505b505050565b600082821c905092915050565b600062000b506000198460080262000b30565b1980831691505092915050565b600062000b6b838362000b3d565b9150826002028217905092915050565b62000b868262000901565b67ffffffffffffffff81111562000ba25762000ba16200090c565b5b62000bae82546200096a565b62000bbb82828562000ae0565b600060209050601f83116001811462000bf3576000841562000bde578287015190505b62000bea858262000b5d565b86555062000c5a565b601f19841662000c03866200099f565b60005b8281101562000c2d5784890151825560018201915060208501945060208101905062000c06565b8683101562000c4d578489015162000c49601f89168262000b3d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c948262000c67565b9050919050565b62000ca68162000c87565b811462000cb257600080fd5b50565b60008151905062000cc68162000c9b565b92915050565b60006020828403121562000ce55762000ce462000c62565b5b600062000cf58482850162000cb5565b91505092915050565b62000d098162000c87565b82525050565b600060408201905062000d26600083018562000cfe565b62000d35602083018462000cfe565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d788262000a27565b915062000d858362000a27565b925082820262000d958162000a27565b9150828204841483151762000daf5762000dae62000d3c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000df28262000a27565b915062000dff8362000a27565b92508262000e125762000e1162000db6565b5b828204905092915050565b600062000e2a8262000a27565b915062000e378362000a27565b925082820190508082111562000e525762000e5162000d3c565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ea160208362000e58565b915062000eae8262000e69565b602082019050919050565b6000602082019050818103600083015262000ed48162000e92565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f13601f8362000e58565b915062000f208262000edb565b602082019050919050565b6000602082019050818103600083015262000f468162000f04565b9050919050565b62000f588162000a27565b82525050565b600060208201905062000f75600083018462000f4d565b92915050565b60805160a051613ee062000fd960003960008181610f6101528181611f9901528181611fec015281816122df015281816124e8015281816125960152612663015260008181610bb701528181612cc60152612ced0152613ee06000f3fe6080604052600436106102605760003560e01c80638a8c523c11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063c024666814610826578063d257b34f1461084f578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a0d82dc511610108578063a0d82dc514610702578063a457c2d71461072d578063a5cdee051461076a578063a9059cbb14610793578063ad5c4648146107d0578063bbc0c742146107fb57610267565b80638a8c523c1461063f5780638da5cb5b146106565780638ea5220f1461068157806395d89b41146106ac5780639c3b4fdc146106d757610267565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e146105315780636d0b96541461055c5780636dd3d39f1461058557806370a08231146105c2578063715018a6146105ff578063839006f21461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a057806361746b49146104dd57806364c0a2f81461050657610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806306fdde031461026c578063095ea7b3146102975780631127ae3b146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e9190612e35565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ef0565b610aad565b6040516102cb9190612f4b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f66565b610acb565b005b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f4b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612ef0565b610eb3565b6040516104419190612f4b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f4b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f4b565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f66565b610fec565b005b34801561051257600080fd5b5061051b6110d6565b6040516105289190612f4b565b60405180910390f35b34801561053d57600080fd5b506105466110e9565b604051610553919061302f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612ef0565b6110ef565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061304a565b611179565b6040516105b99190612f4b565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e4919061304a565b6111cf565b6040516105f6919061302f565b60405180910390f35b34801561060b57600080fd5b50610614611217565b005b34801561062257600080fd5b5061063d6004803603810190610638919061304a565b61129f565b005b34801561064b57600080fd5b50610654611433565b005b34801561066257600080fd5b5061066b6114cc565b604051610678919061313d565b60405180910390f35b34801561068d57600080fd5b506106966114f6565b6040516106a3919061313d565b60405180910390f35b3480156106b857600080fd5b506106c161151c565b6040516106ce9190612e35565b60405180910390f35b3480156106e357600080fd5b506106ec6115ae565b6040516106f9919061302f565b60405180910390f35b34801561070e57600080fd5b506107176115b4565b604051610724919061302f565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612ef0565b6115ba565b6040516107619190612f4b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613184565b6116a5565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190612ef0565b61173e565b6040516107c79190612f4b565b60405180910390f35b3480156107dc57600080fd5b506107e561175c565b6040516107f2919061313d565b60405180910390f35b34801561080757600080fd5b50610810611782565b60405161081d9190612f4b565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906131b1565b611795565b005b34801561085b57600080fd5b5061087660048036038101906108719190613077565b61186c565b6040516108839190612f4b565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b606060038054610a2a90613260565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613260565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba611ccd565b8484611cd5565b6001905092915050565b610ad3611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610af16114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e906132dd565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610b65919061332c565b600d81905550600f600d541115610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906133ac565b60405180910390fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906132dd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906132dd565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f50919061332c565b611cd5565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff4611ccd565b73ffffffffffffffffffffffffffffffffffffffff166110126114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f906132dd565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611086919061332c565b601081905550606460105411156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906133ac565b60405180910390fd5b5050565b601260009054906101000a900460ff1681565b60105481565b6110f7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111156114cc565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906132dd565b60405180910390fd5b61117582826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661123d6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a906132dd565b60405180910390fd5b61129d600061280f565b565b6112a7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166112c56114cc565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906132dd565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161135b919061313d565b602060405180830381865afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c91906135a7565b9050600081111561142e578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113cb611ccd565b836040518363ffffffff1660e01b81526004016113e99291906135d4565b6020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613612565b505b505050565b61143b611ccd565b73ffffffffffffffffffffffffffffffffffffffff166114596114cc565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a6906132dd565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461152b90613260565b80601f016020809104026020016040519081016040528092919081815260200182805461155790613260565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006115c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906136b1565b60405180910390fd5b61169a611691611ccd565b85858403611cd5565b600191505092915050565b6116ad611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116cb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906132dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600061175261174b611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b61179d611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117bb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906132dd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611876611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118946114cc565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132dd565b60405180910390fd5b620186a060016118f8610bd9565b61190291906133cc565b61190c919061343d565b82101561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061371d565b60405180910390fd5b606461138861195b610bd9565b61196591906133cc565b61196f919061343d565b8211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613789565b60405180910390fd5b81600a8190555060019050919050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906132dd565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906132dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906132dd565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856111cf565b846121e0919061332c565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856111cf565b8461224a919061332c565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306111cf565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f0000000000000000000000000000000000000000000000000000000000000000836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d919061332c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612792919061332c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad7919061332c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306111cf565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f000000000000000000000000000000000000000000000000000000000000000084611cd5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ddf578082015181840152602081019050612dc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0782612da5565b612e118185612db0565b9350612e21818560208601612dc1565b612e2a81612deb565b840191505092915050565b60006020820190508181036000830152612e4f8184612dfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8782612e5c565b9050919050565b612e9781612e7c565b8114612ea257600080fd5b50565b600081359050612eb481612e8e565b92915050565b6000819050919050565b612ecd81612eba565b8114612ed857600080fd5b50565b600081359050612eea81612ec4565b92915050565b60008060408385031215612f0757612f06612e57565b5b6000612f1585828601612ea5565b9250506020612f2685828601612edb565b9150509250929050565b60008115159050919050565b612f4581612f30565b82525050565b6000602082019050612f606000830184612f3c565b92915050565b60008060408385031215612f7d57612f7c612e57565b5b6000612f8b85828601612edb565b9250506020612f9c85828601612edb565b9150509250929050565b6000819050919050565b6000612fcb612fc6612fc184612e5c565b612fa6565b612e5c565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612eba565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e57565b5b600061306e84828501612ea5565b91505092915050565b60006020828403121561308d5761308c612e57565b5b600061309b84828501612edb565b91505092915050565b6000806000606084860312156130bd576130bc612e57565b5b60006130cb86828701612ea5565b93505060206130dc86828701612ea5565b92505060406130ed86828701612edb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612e7c565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f30565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612e57565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612e57565b5b60006131d685828601612ea5565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612e57565b5b600061321685828601612ea5565b925050602061322785828601612ea5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327857607f821691505b60208210810361328b5761328a613231565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c7602083612db0565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333782612eba565b915061334283612eba565b925082820190508082111561335a576133596132fd565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613396601d83612db0565b91506133a182613360565b602082019050919050565b600060208201905081810360008301526133c581613389565b9050919050565b60006133d782612eba565b91506133e283612eba565b92508282026133f081612eba565b91508282048414831517613407576134066132fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612eba565b915061345383612eba565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612db0565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612db0565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612ec4565b92915050565b6000602082840312156135bd576135bc612e57565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612e57565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612db0565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612db0565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612db0565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612db0565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612db0565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612db0565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612db0565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612db0565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612db0565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612db0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612db0565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612eba565b9150613bdd83612eba565b9250828203905081811115613bf557613bf46132fd565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612db0565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612db0565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612eba565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612e7c565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea2646970667358221220270c2a1be82a998666093d2c6000273017617925985aa444dcac0377c7b2317764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638a8c523c11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063c024666814610826578063d257b34f1461084f578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a0d82dc511610108578063a0d82dc514610702578063a457c2d71461072d578063a5cdee051461076a578063a9059cbb14610793578063ad5c4648146107d0578063bbc0c742146107fb57610267565b80638a8c523c1461063f5780638da5cb5b146106565780638ea5220f1461068157806395d89b41146106ac5780639c3b4fdc146106d757610267565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e146105315780636d0b96541461055c5780636dd3d39f1461058557806370a08231146105c2578063715018a6146105ff578063839006f21461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a057806361746b49146104dd57806364c0a2f81461050657610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806306fdde031461026c578063095ea7b3146102975780631127ae3b146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e9190612e35565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ef0565b610aad565b6040516102cb9190612f4b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f66565b610acb565b005b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f4b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612ef0565b610eb3565b6040516104419190612f4b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f4b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f4b565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f66565b610fec565b005b34801561051257600080fd5b5061051b6110d6565b6040516105289190612f4b565b60405180910390f35b34801561053d57600080fd5b506105466110e9565b604051610553919061302f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612ef0565b6110ef565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061304a565b611179565b6040516105b99190612f4b565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e4919061304a565b6111cf565b6040516105f6919061302f565b60405180910390f35b34801561060b57600080fd5b50610614611217565b005b34801561062257600080fd5b5061063d6004803603810190610638919061304a565b61129f565b005b34801561064b57600080fd5b50610654611433565b005b34801561066257600080fd5b5061066b6114cc565b604051610678919061313d565b60405180910390f35b34801561068d57600080fd5b506106966114f6565b6040516106a3919061313d565b60405180910390f35b3480156106b857600080fd5b506106c161151c565b6040516106ce9190612e35565b60405180910390f35b3480156106e357600080fd5b506106ec6115ae565b6040516106f9919061302f565b60405180910390f35b34801561070e57600080fd5b506107176115b4565b604051610724919061302f565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612ef0565b6115ba565b6040516107619190612f4b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613184565b6116a5565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190612ef0565b61173e565b6040516107c79190612f4b565b60405180910390f35b3480156107dc57600080fd5b506107e561175c565b6040516107f2919061313d565b60405180910390f35b34801561080757600080fd5b50610810611782565b60405161081d9190612f4b565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906131b1565b611795565b005b34801561085b57600080fd5b5061087660048036038101906108719190613077565b61186c565b6040516108839190612f4b565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b606060038054610a2a90613260565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613260565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba611ccd565b8484611cd5565b6001905092915050565b610ad3611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610af16114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e906132dd565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610b65919061332c565b600d81905550600f600d541115610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906133ac565b60405180910390fd5b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906132dd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906132dd565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f50919061332c565b611cd5565b6001905092915050565b7f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea81565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff4611ccd565b73ffffffffffffffffffffffffffffffffffffffff166110126114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f906132dd565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611086919061332c565b601081905550606460105411156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906133ac565b60405180910390fd5b5050565b601260009054906101000a900460ff1681565b60105481565b6110f7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111156114cc565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906132dd565b60405180910390fd5b61117582826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661123d6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a906132dd565b60405180910390fd5b61129d600061280f565b565b6112a7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166112c56114cc565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906132dd565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161135b919061313d565b602060405180830381865afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c91906135a7565b9050600081111561142e578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113cb611ccd565b836040518363ffffffff1660e01b81526004016113e99291906135d4565b6020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613612565b505b505050565b61143b611ccd565b73ffffffffffffffffffffffffffffffffffffffff166114596114cc565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a6906132dd565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461152b90613260565b80601f016020809104026020016040519081016040528092919081815260200182805461155790613260565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006115c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906136b1565b60405180910390fd5b61169a611691611ccd565b85858403611cd5565b600191505092915050565b6116ad611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116cb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906132dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600061175261174b611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b61179d611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117bb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906132dd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611876611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118946114cc565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132dd565b60405180910390fd5b620186a060016118f8610bd9565b61190291906133cc565b61190c919061343d565b82101561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061371d565b60405180910390fd5b606461138861195b610bd9565b61196591906133cc565b61196f919061343d565b8211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613789565b60405180910390fd5b81600a8190555060019050919050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906132dd565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906132dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906132dd565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856111cf565b846121e0919061332c565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856111cf565b8461224a919061332c565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306111cf565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f00000000000000000000000078cbb97b66dce329b57c63427a8bff04cd5d6dea836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d919061332c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612792919061332c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad7919061332c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306111cf565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ddf578082015181840152602081019050612dc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0782612da5565b612e118185612db0565b9350612e21818560208601612dc1565b612e2a81612deb565b840191505092915050565b60006020820190508181036000830152612e4f8184612dfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8782612e5c565b9050919050565b612e9781612e7c565b8114612ea257600080fd5b50565b600081359050612eb481612e8e565b92915050565b6000819050919050565b612ecd81612eba565b8114612ed857600080fd5b50565b600081359050612eea81612ec4565b92915050565b60008060408385031215612f0757612f06612e57565b5b6000612f1585828601612ea5565b9250506020612f2685828601612edb565b9150509250929050565b60008115159050919050565b612f4581612f30565b82525050565b6000602082019050612f606000830184612f3c565b92915050565b60008060408385031215612f7d57612f7c612e57565b5b6000612f8b85828601612edb565b9250506020612f9c85828601612edb565b9150509250929050565b6000819050919050565b6000612fcb612fc6612fc184612e5c565b612fa6565b612e5c565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612eba565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e57565b5b600061306e84828501612ea5565b91505092915050565b60006020828403121561308d5761308c612e57565b5b600061309b84828501612edb565b91505092915050565b6000806000606084860312156130bd576130bc612e57565b5b60006130cb86828701612ea5565b93505060206130dc86828701612ea5565b92505060406130ed86828701612edb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612e7c565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f30565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612e57565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612e57565b5b60006131d685828601612ea5565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612e57565b5b600061321685828601612ea5565b925050602061322785828601612ea5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327857607f821691505b60208210810361328b5761328a613231565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c7602083612db0565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333782612eba565b915061334283612eba565b925082820190508082111561335a576133596132fd565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613396601d83612db0565b91506133a182613360565b602082019050919050565b600060208201905081810360008301526133c581613389565b9050919050565b60006133d782612eba565b91506133e283612eba565b92508282026133f081612eba565b91508282048414831517613407576134066132fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612eba565b915061345383612eba565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612db0565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612db0565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612ec4565b92915050565b6000602082840312156135bd576135bc612e57565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612e57565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612db0565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612db0565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612db0565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612db0565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612db0565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612db0565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612db0565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612db0565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612db0565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612db0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612db0565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612eba565b9150613bdd83612eba565b9250828203905081811115613bf557613bf46132fd565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612db0565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612db0565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612eba565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612e7c565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea2646970667358221220270c2a1be82a998666093d2c6000273017617925985aa444dcac0377c7b2317764736f6c63430008110033

Deployed Bytecode Sourcemap

23948:7610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8587:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29526:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24029:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7540:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29299:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30456:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9238:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7382:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10139:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24089:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24684:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31429:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29819:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24643:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24575:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30680:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31285:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7711:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2108:103;;;;;;;;;;;;;:::i;:::-;;29074:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30786:81;;;;;;;;;;;;;:::i;:::-;;1457:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24134:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6637:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24403:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24505:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10857:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8051:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24165:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24724:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30995:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30120:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31135:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24471:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8289:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24363:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24434:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2366:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24537:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24610:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29410:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6418:100;6472:13;6505:5;6498:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:100;:::o;8587:169::-;8670:4;8687:39;8696:12;:10;:12::i;:::-;8710:7;8719:6;8687:8;:39::i;:::-;8744:4;8737:11;;8587:169;;;;:::o;29526:285::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29630:7:::1;29618:9;:19;;;;29666:13;29648:15;:31;;;;29717:15;;29705:9;;:27;;;;:::i;:::-;29690:12;:42;;;;29767:2;29751:12;;:18;;29743:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29526:285:::0;;:::o;24029:51::-;;;:::o;7540:108::-;7601:7;7628:12;;7621:19;;7540:108;:::o;29299:103::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29385:9:::1;29373;;:21;;;;;;;;;;;;;;;;;;29299:103:::0;:::o;30456:216::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30580:4:::1;30572;30568:1;30552:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;30551:33;;;;:::i;:::-;30538:9;:46;;30530:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;30660:4;30648:9;:16;;;;:::i;:::-;30636:9;:28;;;;30456:216:::0;:::o;9238:492::-;9378:4;9395:36;9405:6;9413:9;9424:6;9395:9;:36::i;:::-;9444:24;9471:11;:19;9483:6;9471:19;;;;;;;;;;;;;;;:33;9491:12;:10;:12::i;:::-;9471:33;;;;;;;;;;;;;;;;9444:60;;9543:6;9523:16;:26;;9515:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9630:57;9639:6;9647:12;:10;:12::i;:::-;9680:6;9661:16;:25;9630:8;:57::i;:::-;9718:4;9711:11;;;9238:492;;;;;:::o;7382:93::-;7440:5;7465:2;7458:9;;7382:93;:::o;10139:215::-;10227:4;10244:80;10253:12;:10;:12::i;:::-;10267:7;10313:10;10276:11;:25;10288:12;:10;:12::i;:::-;10276:25;;;;;;;;;;;;;;;:34;10302:7;10276:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10244:8;:80::i;:::-;10342:4;10335:11;;10139:215;;;;:::o;24089:38::-;;;:::o;24684:33::-;;;;;;;;;;;;;:::o;31429:126::-;31495:4;31519:19;:28;31539:7;31519:28;;;;;;;;;;;;;;;;;;;;;;;;;31512:35;;31429:126;;;:::o;29819:293::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29925:7:::1;29912:10;:20;;;;29962:13;29943:16;:32;;;;30015:16;;30002:10;;:29;;;;:::i;:::-;29986:13;:45;;;;30067:3;30050:13;;:20;;30042:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29819:293:::0;;:::o;24643:34::-;;;;;;;;;;;;;:::o;24575:28::-;;;;:::o;30680:98::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30753:17:::1;30759:2;30763:6;30753:5;:17::i;:::-;30680:98:::0;;:::o;31285:136::-;31356:4;31380:24;:33;31405:7;31380:33;;;;;;;;;;;;;;;;;;;;;;;;;31373:40;;31285:136;;;:::o;7711:127::-;7785:7;7812:9;:18;7822:7;7812:18;;;;;;;;;;;;;;;;7805:25;;7711:127;;;:::o;2108:103::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2173:30:::1;2200:1;2173:18;:30::i;:::-;2108:103::o:0;29074:217::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29133:11:::1;29153:5;29133:26;;29170:15;29188:5;:15;;;29212:4;29188:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29170:48;;29243:1;29233:7;:11;29229:54;;;29246:5;:14;;;29261:12;:10;:12::i;:::-;29275:7;29246:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29229:54;29122:169;;29074:217:::0;:::o;30786:81::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30855:4:::1;30839:13;;:20;;;;;;;;;;;;;;;;;;30786:81::o:0;1457:87::-;1503:7;1530:6;;;;;;;;;;;1523:13;;1457:87;:::o;24134:24::-;;;;;;;;;;;;;:::o;6637:104::-;6693:13;6726:7;6719:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6637:104;:::o;24403:24::-;;;;:::o;24505:25::-;;;;:::o;10857:413::-;10950:4;10967:24;10994:11;:25;11006:12;:10;:12::i;:::-;10994:25;;;;;;;;;;;;;;;:34;11020:7;10994:34;;;;;;;;;;;;;;;;10967:61;;11067:15;11047:16;:35;;11039:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11160:67;11169:12;:10;:12::i;:::-;11183:7;11211:15;11192:16;:34;11160:8;:67::i;:::-;11258:4;11251:11;;;10857:413;;;;:::o;30875:112::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30964:15:::1;30947:14;;:32;;;;;;;;;;;;;;;;;;30875:112:::0;:::o;8051:175::-;8137:4;8154:42;8164:12;:10;:12::i;:::-;8178:9;8189:6;8154:9;:42::i;:::-;8214:4;8207:11;;8051:175;;;;:::o;24165:64::-;;;;;;;;;;;;;:::o;24724:25::-;;;;;;;;;;;;;:::o;30995:132::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31111:8:::1;31080:19;:28;31100:7;31080:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30995:132:::0;;:::o;30120:328::-;30201:4;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30261:6:::1;30256:1;30240:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30239:28;;;;:::i;:::-;30226:9;:41;;30218:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30351:3;30343:4;30327:13;:11;:13::i;:::-;:20;;;;:::i;:::-;30326:28;;;;:::i;:::-;30313:9;:41;;30305:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30409:9;30388:18;:30;;;;30436:4;30429:11;;30120:328:::0;;;:::o;31135:142::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31261:8:::1;31225:24;:33;31250:7;31225:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;31135:142:::0;;:::o;24471:27::-;;;;:::o;8289:151::-;8378:7;8405:11;:18;8417:5;8405:18;;;;;;;;;;;;;;;:27;8424:7;8405:27;;;;;;;;;;;;;;;;8398:34;;8289:151;;;;:::o;24363:33::-;;;;:::o;24434:30::-;;;;:::o;2366:201::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2475:1:::1;2455:22;;:8;:22;;::::0;2447:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2531:28;2550:8;2531:18;:28::i;:::-;2366:201:::0;:::o;24537:31::-;;;;:::o;24610:24::-;;;;:::o;29410:108::-;1688:12;:10;:12::i;:::-;1677:23;;:7;:5;:7::i;:::-;:23;;;1669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29503:7:::1;29485:15;;:25;;;;;;;;;;;;;;;;;;29410:108:::0;:::o;297:98::-;350:7;377:10;370:17;;297:98;:::o;14541:380::-;14694:1;14677:19;;:5;:19;;;14669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14775:1;14756:21;;:7;:21;;;14748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14859:6;14829:11;:18;14841:5;14829:18;;;;;;;;;;;;;;;:27;14848:7;14829:27;;;;;;;;;;;;;;;:36;;;;14897:7;14881:32;;14890:5;14881:32;;;14906:6;14881:32;;;;;;:::i;:::-;;;;;;;;14541:380;;;:::o;25974:2369::-;26122:1;26106:18;;:4;:18;;;26098:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26199:1;26185:16;;:2;:16;;;26177:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26268:1;26258:6;:11;26254:93;;26286:28;26302:4;26308:2;26312:1;26286:15;:28::i;:::-;26329:7;;26254:93;26359:10;26380:13;26372:21;;:4;:21;;;26359:34;;26404:11;26424:13;26418:19;;:2;:19;;;26404:33;;26455:13;;;;;;;;;;;26454:14;:44;;;;;26473:19;:25;26493:4;26473:25;;;;;;;;;;;;;;;;;;;;;;;;;26472:26;26454:44;:72;;;;;26503:19;:23;26523:2;26503:23;;;;;;;;;;;;;;;;;;;;;;;;;26502:24;26454:72;26450:123;;;26536:5;26528:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26450:123;26590:14;;;;;;;;;;;:47;;;;;26609:24;:28;26634:2;26609:28;;;;;;;;;;;;;;;;;;;;;;;;;26608:29;26590:47;:60;;;;;26642:8;;;;;;;;;;;26641:9;26590:60;26586:361;;;26671:5;26667:119;;;26731:9;;26714:13;26724:2;26714:9;:13::i;:::-;26705:6;:22;;;;:::i;:::-;:35;;26697:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26667:119;26805:5;26804:6;:17;;;;;26815:6;26814:7;26804:17;26800:136;;;26876:9;;26859:13;26869:2;26859:9;:13::i;:::-;26850:6;:22;;;;:::i;:::-;:35;;26842:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;26800:136;26586:361;26959:28;26990:24;27008:4;26990:9;:24::i;:::-;26959:55;;27025:12;27064:18;;27040:20;:42;;27025:57;;27097:7;:26;;;;;27108:15;;;;;;;;;;;27097:26;:39;;;;;27128:8;;;;;;;;;;;27127:9;27097:39;:62;;;;;27146:13;27140:19;;:2;:19;;;27097:62;:92;;;;;27164:19;:25;27184:4;27164:25;;;;;;;;;;;;;;;;;;;;;;;;;27163:26;27097:92;:120;;;;;27194:19;:23;27214:2;27194:23;;;;;;;;;;;;;;;;;;;;;;;;;27193:24;27097:120;27093:224;;;27245:4;27234:8;;:15;;;;;;;;;;;;;;;;;;27264:10;:8;:10::i;:::-;27300:5;27289:8;;:16;;;;;;;;;;;;;;;;;;27093:224;27329:12;27345:8;;;;;;;;;;;27344:9;27329:24;;27368:19;:25;27388:4;27368:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27397:19;:23;27417:2;27397:23;;;;;;;;;;;;;;;;;;;;;;;;;27368:52;27364:100;;;27447:5;27437:15;;27364:100;27476:12;27505:26;27552:7;27548:742;;;27586:13;27580:19;;:2;:19;;;:40;;;;;27619:1;27603:13;;:17;27580:40;27576:423;;;27648:34;27678:3;27648:25;27659:13;;27648:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27641:41;;27750:13;;27730:16;;27723:4;:23;;;;:::i;:::-;27722:41;;;;:::i;:::-;27701:62;;27576:423;;;27810:13;27802:21;;:4;:21;;;:41;;;;;27842:1;27827:12;;:16;27802:41;27798:201;;;27871:33;27900:3;27871:24;27882:12;;27871:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27864:40;;27971:12;;27952:15;;27945:4;:22;;;;:::i;:::-;27944:39;;;;:::i;:::-;27923:60;;27798:201;27576:423;28026:1;28019:4;:8;28015:91;;;28048:42;28064:4;28078;28085;28048:15;:42::i;:::-;28015:91;28145:1;28124:18;:22;28120:128;;;28167:65;28191:4;28198:13;28213:18;28167:15;:65::i;:::-;28120:128;28274:4;28264:14;;;;;:::i;:::-;;;27548:742;28302:33;28318:4;28324:2;28328:6;28302:15;:33::i;:::-;26087:2256;;;;;;;25974:2369;;;;:::o;12780:399::-;12883:1;12864:21;;:7;:21;;;12856:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12934:49;12963:1;12967:7;12976:6;12934:20;:49::i;:::-;13012:6;12996:12;;:22;;;;;;;:::i;:::-;;;;;;;;13051:6;13029:9;:18;13039:7;13029:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13094:7;13073:37;;13090:1;13073:37;;;13103:6;13073:37;;;;;;:::i;:::-;;;;;;;;13123:48;13151:1;13155:7;13164:6;13123:19;:48::i;:::-;12780:399;;:::o;2727:191::-;2801:16;2820:6;;;;;;;;;;;2801:25;;2846:8;2837:6;;:17;;;;;;;;;;;;;;;;;;2901:8;2870:40;;2891:8;2870:40;;;;;;;;;;;;2790:128;2727:191;:::o;11760:733::-;11918:1;11900:20;;:6;:20;;;11892:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12002:1;11981:23;;:9;:23;;;11973:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12057:47;12078:6;12086:9;12097:6;12057:20;:47::i;:::-;12117:21;12141:9;:17;12151:6;12141:17;;;;;;;;;;;;;;;;12117:41;;12194:6;12177:13;:23;;12169:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12315:6;12299:13;:22;12279:9;:17;12289:6;12279:17;;;;;;;;;;;;;;;:42;;;;12367:6;12343:9;:20;12353:9;12343:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12408:9;12391:35;;12400:6;12391:35;;;12419:6;12391:35;;;;;;:::i;:::-;;;;;;;;12439:46;12459:6;12467:9;12478:6;12439:19;:46::i;:::-;11881:612;11760:733;;;:::o;28816:213::-;28855:23;28881:24;28899:4;28881:9;:24::i;:::-;28855:50;;28939:1;28920:15;:20;28916:59;;28957:7;;;28916:59;28987:34;29005:15;28987:17;:34::i;:::-;28844:185;28816:213;:::o;19859:98::-;19917:7;19948:1;19944;:5;;;;:::i;:::-;19937:12;;19859:98;;;;:::o;20258:::-;20316:7;20347:1;20343;:5;;;;:::i;:::-;20336:12;;20258:98;;;;:::o;15521:125::-;;;;:::o;16250:124::-;;;;:::o;28351:457::-;28418:21;28456:1;28442:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28418:40;;28487:4;28469;28474:1;28469:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28513:4;;;;;;;;;;;28503;28508:1;28503:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;28530:62;28547:4;28562:15;28580:11;28530:8;:62::i;:::-;28605:15;:69;;;28689:11;28715:1;28731:4;28750:9;;;;;;;;;;;28774:15;28605:195;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28407:401;28351:457;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:86::-;6586:7;6626:4;6619:5;6615:16;6604:27;;6551:86;;;:::o;6643:112::-;6726:22;6742:5;6726:22;:::i;:::-;6721:3;6714:35;6643:112;;:::o;6761:214::-;6850:4;6888:2;6877:9;6873:18;6865:26;;6901:67;6965:1;6954:9;6950:17;6941:6;6901:67;:::i;:::-;6761:214;;;;:::o;6981:118::-;7068:24;7086:5;7068:24;:::i;:::-;7063:3;7056:37;6981:118;;:::o;7105:222::-;7198:4;7236:2;7225:9;7221:18;7213:26;;7249:71;7317:1;7306:9;7302:17;7293:6;7249:71;:::i;:::-;7105:222;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:323::-;7650:6;7699:2;7687:9;7678:7;7674:23;7670:32;7667:119;;;7705:79;;:::i;:::-;7667:119;7825:1;7850:50;7892:7;7883:6;7872:9;7868:22;7850:50;:::i;:::-;7840:60;;7796:114;7594:323;;;;:::o;7923:468::-;7988:6;7996;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8142:117;8298:2;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8269:115;7923:468;;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:180::-;8925:77;8922:1;8915:88;9022:4;9019:1;9012:15;9046:4;9043:1;9036:15;9063:320;9107:6;9144:1;9138:4;9134:12;9124:22;;9191:1;9185:4;9181:12;9212:18;9202:81;;9268:4;9260:6;9256:17;9246:27;;9202:81;9330:2;9322:6;9319:14;9299:18;9296:38;9293:84;;9349:18;;:::i;:::-;9293:84;9114:269;9063:320;;;:::o;9389:182::-;9529:34;9525:1;9517:6;9513:14;9506:58;9389:182;:::o;9577:366::-;9719:3;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9816:93;9905:3;9816:93;:::i;:::-;9934:2;9929:3;9925:12;9918:19;;9577:366;;;:::o;9949:419::-;10115:4;10153:2;10142:9;10138:18;10130:26;;10202:9;10196:4;10192:20;10188:1;10177:9;10173:17;10166:47;10230:131;10356:4;10230:131;:::i;:::-;10222:139;;9949:419;;;:::o;10374:180::-;10422:77;10419:1;10412:88;10519:4;10516:1;10509:15;10543:4;10540:1;10533:15;10560:191;10600:3;10619:20;10637:1;10619:20;:::i;:::-;10614:25;;10653:20;10671:1;10653:20;:::i;:::-;10648:25;;10696:1;10693;10689:9;10682:16;;10717:3;10714:1;10711:10;10708:36;;;10724:18;;:::i;:::-;10708:36;10560:191;;;;:::o;10757:179::-;10897:31;10893:1;10885:6;10881:14;10874:55;10757:179;:::o;10942:366::-;11084:3;11105:67;11169:2;11164:3;11105:67;:::i;:::-;11098:74;;11181:93;11270:3;11181:93;:::i;:::-;11299:2;11294:3;11290:12;11283:19;;10942:366;;;:::o;11314:419::-;11480:4;11518:2;11507:9;11503:18;11495:26;;11567:9;11561:4;11557:20;11553:1;11542:9;11538:17;11531:47;11595:131;11721:4;11595:131;:::i;:::-;11587:139;;11314:419;;;:::o;11739:410::-;11779:7;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11891:1;11888;11884:9;11913:30;11931:11;11913:30;:::i;:::-;11902:41;;12092:1;12083:7;12079:15;12076:1;12073:22;12053:1;12046:9;12026:83;12003:139;;12122:18;;:::i;:::-;12003:139;11787:362;11739:410;;;;:::o;12155:180::-;12203:77;12200:1;12193:88;12300:4;12297:1;12290:15;12324:4;12321:1;12314:15;12341:185;12381:1;12398:20;12416:1;12398:20;:::i;:::-;12393:25;;12432:20;12450:1;12432:20;:::i;:::-;12427:25;;12471:1;12461:35;;12476:18;;:::i;:::-;12461:35;12518:1;12515;12511:9;12506:14;;12341:185;;;;:::o;12532:223::-;12672:34;12668:1;12660:6;12656:14;12649:58;12741:6;12736:2;12728:6;12724:15;12717:31;12532:223;:::o;12761:366::-;12903:3;12924:67;12988:2;12983:3;12924:67;:::i;:::-;12917:74;;13000:93;13089:3;13000:93;:::i;:::-;13118:2;13113:3;13109:12;13102:19;;12761:366;;;:::o;13133:419::-;13299:4;13337:2;13326:9;13322:18;13314:26;;13386:9;13380:4;13376:20;13372:1;13361:9;13357:17;13350:47;13414:131;13540:4;13414:131;:::i;:::-;13406:139;;13133:419;;;:::o;13558:227::-;13698:34;13694:1;13686:6;13682:14;13675:58;13767:10;13762:2;13754:6;13750:15;13743:35;13558:227;:::o;13791:366::-;13933:3;13954:67;14018:2;14013:3;13954:67;:::i;:::-;13947:74;;14030:93;14119:3;14030:93;:::i;:::-;14148:2;14143:3;14139:12;14132:19;;13791:366;;;:::o;14163:419::-;14329:4;14367:2;14356:9;14352:18;14344:26;;14416:9;14410:4;14406:20;14402:1;14391:9;14387:17;14380:47;14444:131;14570:4;14444:131;:::i;:::-;14436:139;;14163:419;;;:::o;14588:143::-;14645:5;14676:6;14670:13;14661:22;;14692:33;14719:5;14692:33;:::i;:::-;14588:143;;;;:::o;14737:351::-;14807:6;14856:2;14844:9;14835:7;14831:23;14827:32;14824:119;;;14862:79;;:::i;:::-;14824:119;14982:1;15007:64;15063:7;15054:6;15043:9;15039:22;15007:64;:::i;:::-;14997:74;;14953:128;14737:351;;;;:::o;15094:332::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15266:71;15334:1;15323:9;15319:17;15310:6;15266:71;:::i;:::-;15347:72;15415:2;15404:9;15400:18;15391:6;15347:72;:::i;:::-;15094:332;;;;;:::o;15432:137::-;15486:5;15517:6;15511:13;15502:22;;15533:30;15557:5;15533:30;:::i;:::-;15432:137;;;;:::o;15575:345::-;15642:6;15691:2;15679:9;15670:7;15666:23;15662:32;15659:119;;;15697:79;;:::i;:::-;15659:119;15817:1;15842:61;15895:7;15886:6;15875:9;15871:22;15842:61;:::i;:::-;15832:71;;15788:125;15575:345;;;;:::o;15926:224::-;16066:34;16062:1;16054:6;16050:14;16043:58;16135:7;16130:2;16122:6;16118:15;16111:32;15926:224;:::o;16156:366::-;16298:3;16319:67;16383:2;16378:3;16319:67;:::i;:::-;16312:74;;16395:93;16484:3;16395:93;:::i;:::-;16513:2;16508:3;16504:12;16497:19;;16156:366;;;:::o;16528:419::-;16694:4;16732:2;16721:9;16717:18;16709:26;;16781:9;16775:4;16771:20;16767:1;16756:9;16752:17;16745:47;16809:131;16935:4;16809:131;:::i;:::-;16801:139;;16528:419;;;:::o;16953:172::-;17093:24;17089:1;17081:6;17077:14;17070:48;16953:172;:::o;17131:366::-;17273:3;17294:67;17358:2;17353:3;17294:67;:::i;:::-;17287:74;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17131:366;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:168::-;18068:20;18064:1;18056:6;18052:14;18045:44;17928:168;:::o;18102:366::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:419::-;18640:4;18678:2;18667:9;18663:18;18655:26;;18727:9;18721:4;18717:20;18713:1;18702:9;18698:17;18691:47;18755:131;18881:4;18755:131;:::i;:::-;18747:139;;18474:419;;;:::o;18899:225::-;19039:34;19035:1;19027:6;19023:14;19016:58;19108:8;19103:2;19095:6;19091:15;19084:33;18899:225;:::o;19130:366::-;19272:3;19293:67;19357:2;19352:3;19293:67;:::i;:::-;19286:74;;19369:93;19458:3;19369:93;:::i;:::-;19487:2;19482:3;19478:12;19471:19;;19130:366;;;:::o;19502:419::-;19668:4;19706:2;19695:9;19691:18;19683:26;;19755:9;19749:4;19745:20;19741:1;19730:9;19726:17;19719:47;19783:131;19909:4;19783:131;:::i;:::-;19775:139;;19502:419;;;:::o;19927:223::-;20067:34;20063:1;20055:6;20051:14;20044:58;20136:6;20131:2;20123:6;20119:15;20112:31;19927:223;:::o;20156:366::-;20298:3;20319:67;20383:2;20378:3;20319:67;:::i;:::-;20312:74;;20395:93;20484:3;20395:93;:::i;:::-;20513:2;20508:3;20504:12;20497:19;;20156:366;;;:::o;20528:419::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:221::-;21093:34;21089:1;21081:6;21077:14;21070:58;21162:4;21157:2;21149:6;21145:15;21138:29;20953:221;:::o;21180:366::-;21322:3;21343:67;21407:2;21402:3;21343:67;:::i;:::-;21336:74;;21419:93;21508:3;21419:93;:::i;:::-;21537:2;21532:3;21528:12;21521:19;;21180:366;;;:::o;21552:419::-;21718:4;21756:2;21745:9;21741:18;21733:26;;21805:9;21799:4;21795:20;21791:1;21780:9;21776:17;21769:47;21833:131;21959:4;21833:131;:::i;:::-;21825:139;;21552:419;;;:::o;21977:224::-;22117:34;22113:1;22105:6;22101:14;22094:58;22186:7;22181:2;22173:6;22169:15;22162:32;21977:224;:::o;22207:366::-;22349:3;22370:67;22434:2;22429:3;22370:67;:::i;:::-;22363:74;;22446:93;22535:3;22446:93;:::i;:::-;22564:2;22559:3;22555:12;22548:19;;22207:366;;;:::o;22579:419::-;22745:4;22783:2;22772:9;22768:18;22760:26;;22832:9;22826:4;22822:20;22818:1;22807:9;22803:17;22796:47;22860:131;22986:4;22860:131;:::i;:::-;22852:139;;22579:419;;;:::o;23004:222::-;23144:34;23140:1;23132:6;23128:14;23121:58;23213:5;23208:2;23200:6;23196:15;23189:30;23004:222;:::o;23232:366::-;23374:3;23395:67;23459:2;23454:3;23395:67;:::i;:::-;23388:74;;23471:93;23560:3;23471:93;:::i;:::-;23589:2;23584:3;23580:12;23573:19;;23232:366;;;:::o;23604:419::-;23770:4;23808:2;23797:9;23793:18;23785:26;;23857:9;23851:4;23847:20;23843:1;23832:9;23828:17;23821:47;23885:131;24011:4;23885:131;:::i;:::-;23877:139;;23604:419;;;:::o;24029:177::-;24169:29;24165:1;24157:6;24153:14;24146:53;24029:177;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:175::-;25149:27;25145:1;25137:6;25133:14;25126:51;25009:175;:::o;25190:366::-;25332:3;25353:67;25417:2;25412:3;25353:67;:::i;:::-;25346:74;;25429:93;25518:3;25429:93;:::i;:::-;25547:2;25542:3;25538:12;25531:19;;25190:366;;;:::o;25562:419::-;25728:4;25766:2;25755:9;25751:18;25743:26;;25815:9;25809:4;25805:20;25801:1;25790:9;25786:17;25779:47;25843:131;25969:4;25843:131;:::i;:::-;25835:139;;25562:419;;;:::o;25987:180::-;26127:32;26123:1;26115:6;26111:14;26104:56;25987:180;:::o;26173:366::-;26315:3;26336:67;26400:2;26395:3;26336:67;:::i;:::-;26329:74;;26412:93;26501:3;26412:93;:::i;:::-;26530:2;26525:3;26521:12;26514:19;;26173:366;;;:::o;26545:419::-;26711:4;26749:2;26738:9;26734:18;26726:26;;26798:9;26792:4;26788:20;26784:1;26773:9;26769:17;26762:47;26826:131;26952:4;26826:131;:::i;:::-;26818:139;;26545:419;;;:::o;26970:194::-;27010:4;27030:20;27048:1;27030:20;:::i;:::-;27025:25;;27064:20;27082:1;27064:20;:::i;:::-;27059:25;;27108:1;27105;27101:9;27093:17;;27132:1;27126:4;27123:11;27120:37;;;27137:18;;:::i;:::-;27120:37;26970:194;;;;:::o;27170:181::-;27310:33;27306:1;27298:6;27294:14;27287:57;27170:181;:::o;27357:366::-;27499:3;27520:67;27584:2;27579:3;27520:67;:::i;:::-;27513:74;;27596:93;27685:3;27596:93;:::i;:::-;27714:2;27709:3;27705:12;27698:19;;27357:366;;;:::o;27729:419::-;27895:4;27933:2;27922:9;27918:18;27910:26;;27982:9;27976:4;27972:20;27968:1;27957:9;27953:17;27946:47;28010:131;28136:4;28010:131;:::i;:::-;28002:139;;27729:419;;;:::o;28154:225::-;28294:34;28290:1;28282:6;28278:14;28271:58;28363:8;28358:2;28350:6;28346:15;28339:33;28154:225;:::o;28385:366::-;28527:3;28548:67;28612:2;28607:3;28548:67;:::i;:::-;28541:74;;28624:93;28713:3;28624:93;:::i;:::-;28742:2;28737:3;28733:12;28726:19;;28385:366;;;:::o;28757:419::-;28923:4;28961:2;28950:9;28946:18;28938:26;;29010:9;29004:4;29000:20;28996:1;28985:9;28981:17;28974:47;29038:131;29164:4;29038:131;:::i;:::-;29030:139;;28757:419;;;:::o;29182:180::-;29230:77;29227:1;29220:88;29327:4;29324:1;29317:15;29351:4;29348:1;29341:15;29368:180;29416:77;29413:1;29406:88;29513:4;29510:1;29503:15;29537:4;29534:1;29527:15;29554:85;29599:7;29628:5;29617:16;;29554:85;;;:::o;29645:158::-;29703:9;29736:61;29754:42;29763:32;29789:5;29763:32;:::i;:::-;29754:42;:::i;:::-;29736:61;:::i;:::-;29723:74;;29645:158;;;:::o;29809:147::-;29904:45;29943:5;29904:45;:::i;:::-;29899:3;29892:58;29809:147;;:::o;29962:114::-;30029:6;30063:5;30057:12;30047:22;;29962:114;;;:::o;30082:184::-;30181:11;30215:6;30210:3;30203:19;30255:4;30250:3;30246:14;30231:29;;30082:184;;;;:::o;30272:132::-;30339:4;30362:3;30354:11;;30392:4;30387:3;30383:14;30375:22;;30272:132;;;:::o;30410:108::-;30487:24;30505:5;30487:24;:::i;:::-;30482:3;30475:37;30410:108;;:::o;30524:179::-;30593:10;30614:46;30656:3;30648:6;30614:46;:::i;:::-;30692:4;30687:3;30683:14;30669:28;;30524:179;;;;:::o;30709:113::-;30779:4;30811;30806:3;30802:14;30794:22;;30709:113;;;:::o;30858:732::-;30977:3;31006:54;31054:5;31006:54;:::i;:::-;31076:86;31155:6;31150:3;31076:86;:::i;:::-;31069:93;;31186:56;31236:5;31186:56;:::i;:::-;31265:7;31296:1;31281:284;31306:6;31303:1;31300:13;31281:284;;;31382:6;31376:13;31409:63;31468:3;31453:13;31409:63;:::i;:::-;31402:70;;31495:60;31548:6;31495:60;:::i;:::-;31485:70;;31341:224;31328:1;31325;31321:9;31316:14;;31281:284;;;31285:14;31581:3;31574:10;;30982:608;;;30858:732;;;;:::o;31596:831::-;31859:4;31897:3;31886:9;31882:19;31874:27;;31911:71;31979:1;31968:9;31964:17;31955:6;31911:71;:::i;:::-;31992:80;32068:2;32057:9;32053:18;32044:6;31992:80;:::i;:::-;32119:9;32113:4;32109:20;32104:2;32093:9;32089:18;32082:48;32147:108;32250:4;32241:6;32147:108;:::i;:::-;32139:116;;32265:72;32333:2;32322:9;32318:18;32309:6;32265:72;:::i;:::-;32347:73;32415:3;32404:9;32400:19;32391:6;32347:73;:::i;:::-;31596:831;;;;;;;;:::o

Swarm Source

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