ETH Price: $2,473.26 (-7.93%)
Gas: 0.89 Gwei

Token

Mini Million (MMM)
 

Overview

Max Total Supply

500,000 MMM

Holders

112

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
405.394987427980787812 MMM

Value
$0.00
0x2889adfca13755dfde397a5a608405dd345423e1
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:
MMM

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-14
*/

// https://t.me/MiniMillionTokenHolders

// File: @openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function allPairs(uint) external view returns (address lpPair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.8.0;

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

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isBlacklisted;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    uint256 private startingSupply = 500_000;
    uint256 private _total = startingSupply * 10**18;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public burnAddress = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public dexRouter;
    address private lpPair;

    // Max TX amount is 1% of the total supply.
    uint256 private maxTxPercent = 1; // Less fields to edit
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_total * maxTxPercent) / maxTxDivisor;
    uint256 private _previousMaxTxAmount = _maxTxAmount;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's
    // Maximum wallet size is 2% of the total supply.
    uint256 private maxWalletPercent = 2; // Less fields to edit
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_total * maxWalletPercent) / maxWalletDivisor;
    uint256 private _previousMaxWalletSize = _maxWalletSize;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor; // Actual amount for UI's

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 public snipeBlockAmt;
    uint256 public snipersCaught = 0;

    event SniperCaught(address sniperAddress);


    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut 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_, uint256 initialSupply, address owner, uint256 _snipeBlockAmt) {
        _name = name_;
        _symbol = symbol_;
        _liquidityHolders[msg.sender] = true;
        snipeBlockAmt = _snipeBlockAmt;

        IUniswapV2Router02 _dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(_dexRouter.factory())
            .createPair(address(this), _dexRouter.WETH());

        _totalSupply += initialSupply;
        _balances[owner] += initialSupply;
        emit Transfer(address(0), owner, initialSupply);
    }

    /**
     * @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");
        _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != burnAddress
            && to != address(0);
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _hasLiqBeenAdded = true;
            _liqAddBlock = block.number;
        }
    }

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

        _beforeTokenTransfer(sender, recipient);

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

        emit Transfer(sender, recipient, 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));

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

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

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

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

    function isBlacklisted(address account) public view returns (bool) {
        return _isBlacklisted[account];
    }

    function setBlacklist(address account, bool enabled) external onlyOwner() {
        require(_isBlacklisted[account] != enabled);
        _isBlacklisted[account] = enabled;
    }

    function setSniperProtectionEnabled(bool enabled) external onlyOwner() {
        require(enabled != sniperProtection, "Already set.");
        sniperProtection = enabled;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address sender, address recipient) internal virtual { 
        // Failsafe, disable the whole system if needed.
        if (sniperProtection){
            // If sender is a sniper address, reject the transfer.
            if (isBlacklisted(sender) || isBlacklisted(recipient)) {
                revert("Sniper rejected.");
            }

            // Check if this is the liquidity adding tx to startup.
            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(sender, recipient);
                    if (!_hasLiqBeenAdded && _hasLimits(sender, recipient)) {
                        revert("Only owner can transfer at this time.");
                    }
            } else {
                if (_liqAddBlock > 0 
                    && sender == lpPair 
                    && _hasLimits(sender, recipient)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isBlacklisted[recipient] = true;
                        snipersCaught ++;
                        emit SniperCaught(recipient);
                    }
                }
            }
        }
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 10000); // Cannot set lower than 0.01%
        _maxTxAmount = _total.mul(percent).div(
            divisor // Division by divisor, makes it mutable.
        );
        maxTxAmountUI = startingSupply.mul(percent).div(divisor);
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 1000); // Cannot set lower than 0.1%
        _maxWalletSize = _total.mul(percent).div(
            divisor // Division by divisor, makes it mutable.
        );
        maxWalletSizeUI = startingSupply.mul(percent).div(divisor);
    }
}


// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol

pragma solidity ^0.8.0;


/**
 * @dev {ERC20} token, including:
 *
 *  - Preminted initial supply
 *  - Ability for holders to burn (destroy) their tokens
 *  - No access control mechanism (for minting/pausing) and hence no governance
 *
 * This contract uses {ERC20Burnable} to include burn capabilities - head to
 * its documentation for details.
 *
 * _Available since v3.4._
 */
contract ERC20PresetFixedSupply is ERC20Burnable {
    /**
     * @dev Mints `initialSupply` amount of token and transfers them to `owner`.
     *
     * See {ERC20-constructor}.
     */
    constructor(
        string memory name,
        string memory symbol,
        uint256 initialSupply,
        address owner,
        uint256 snipeBlockAmt
    ) ERC20(name, symbol, initialSupply, owner, snipeBlockAmt) {}
}

// File: contracts/million.sol

// Million token

pragma solidity ^0.8.0;


contract MMM is ERC20PresetFixedSupply {
    string private _name = "Mini Million";
    string private _symbol = "MMM";
    uint256 private initialSupply = 500_000;

    uint256 private _decMul = 18;
    uint256 _tTotal = initialSupply * 10 ** _decMul;

    constructor() ERC20PresetFixedSupply(_name, _symbol, _tTotal, msg.sender, 2) {
    }
}

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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","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":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlockAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","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":[{"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"}]

60806040526207a120600855670de0b6b3a764000060085462000023919062000b7a565b600955737a250d5630b4cf539739df2c5dacb4c659f2488d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e556064600f55600f54600e54600954620000dd919062000b7a565b620000e99190620009aa565b601055601054601155600f54600e5460085462000107919062000b7a565b620001139190620009aa565b6012556002601355606460145560145460135460095462000135919062000b7a565b620001419190620009aa565b6015556015546016556014546013546008546200015f919062000b7a565b6200016b9190620009aa565b6017556001601860006101000a81548160ff0219169083151502179055506000601860016101000a81548160ff02191690831515021790555060006019556000601a556000601c556040518060400160405280600c81526020017f4d696e69204d696c6c696f6e0000000000000000000000000000000000000000815250601d908051906020019062000200929190620007ee565b506040518060400160405280600381526020017f4d4d4d0000000000000000000000000000000000000000000000000000000000815250601e90805190602001906200024e929190620007ee565b506207a120601f556012602055602054600a6200026c919062000a3d565b601f546200027b919062000b7a565b6021553480156200028b57600080fd5b50601d80546200029b9062000c19565b80601f0160208091040260200160405190810160405280929190818152602001828054620002c99062000c19565b80156200031a5780601f10620002ee576101008083540402835291602001916200031a565b820191906000526020600020905b815481529060010190602001808311620002fc57829003601f168201915b5050505050601e80546200032e9062000c19565b80601f01602080910402602001604051908101604052809291908181526020018280546200035c9062000c19565b8015620003ad5780601f106200038157610100808354040283529160200191620003ad565b820191906000526020600020905b8154815290600101906020018083116200038f57829003601f168201915b505050505060215433600284848484846000620003cf620007e660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350846006908051906020019062000485929190620007ee565b5083600790805190602001906200049e929190620007ee565b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601b819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200056c57600080fd5b505afa15801562000581573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005a79190620008b5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200060a57600080fd5b505afa1580156200061f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006459190620008b5565b6040518363ffffffff1660e01b81526004016200066492919062000903565b602060405180830381600087803b1580156200067f57600080fd5b505af115801562000694573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ba9190620008b5565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560008282546200070e91906200094d565b9250508190555083600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200076691906200094d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051620007cd919062000930565b60405180910390a3505050505050505050505062000d03565b600033905090565b828054620007fc9062000c19565b90600052602060002090601f0160209004810192826200082057600085556200086c565b82601f106200083b57805160ff19168380011785556200086c565b828001600101855582156200086c579182015b828111156200086b5782518255916020019190600101906200084e565b5b5090506200087b91906200087f565b5090565b5b808211156200089a57600081600090555060010162000880565b5090565b600081519050620008af8162000ce9565b92915050565b600060208284031215620008c857600080fd5b6000620008d8848285016200089e565b91505092915050565b620008ec8162000bdb565b82525050565b620008fd8162000c0f565b82525050565b60006040820190506200091a6000830185620008e1565b620009296020830184620008e1565b9392505050565b6000602082019050620009476000830184620008f2565b92915050565b60006200095a8262000c0f565b9150620009678362000c0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200099f576200099e62000c4f565b5b828201905092915050565b6000620009b78262000c0f565b9150620009c48362000c0f565b925082620009d757620009d662000c7e565b5b828204905092915050565b6000808291508390505b600185111562000a345780860481111562000a0c5762000a0b62000c4f565b5b600185161562000a1c5780820291505b808102905062000a2c8562000cdc565b9450620009ec565b94509492505050565b600062000a4a8262000c0f565b915062000a578362000c0f565b925062000a867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a8e565b905092915050565b60008262000aa0576001905062000b73565b8162000ab0576000905062000b73565b816001811462000ac9576002811462000ad45762000b0a565b600191505062000b73565b60ff84111562000ae95762000ae862000c4f565b5b8360020a91508482111562000b035762000b0262000c4f565b5b5062000b73565b5060208310610133831016604e8410600b841016171562000b445782820a90508381111562000b3e5762000b3d62000c4f565b5b62000b73565b62000b538484846001620009e2565b9250905081840481111562000b6d5762000b6c62000c4f565b5b81810290505b9392505050565b600062000b878262000c0f565b915062000b948362000c0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd05762000bcf62000c4f565b5b828202905092915050565b600062000be88262000bef565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000c3257607f821691505b6020821081141562000c495762000c4862000cad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000cf48162000bdb565b811462000d0057600080fd5b50565b6131738062000d136000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a9059cbb11610097578063e79d416011610071578063e79d4160146104f7578063f2fde38b14610515578063f6540ec714610531578063fe575a871461054f576101c4565b8063a9059cbb1461047b578063d7124d9f146104ab578063dd62ed3e146104c7576101c4565b806379cc6790116100d357806379cc6790146103f35780638da5cb5b1461040f57806395d89b411461042d578063a457c2d71461044b576101c4565b806370a082311461039b57806370d5ae05146103cb578063715018a6146103e9576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461032557806350a8e01614610341578063570ce7a61461035f578063640384091461037d576101c4565b8063313ce567146102bb57806339509351146102d95780633f3cf56c14610309576101c4565b8063153b0d1e116101a2578063153b0d1e1461023557806318160ddd1461025157806323b872dd1461026f578063260039571461029f576101c4565b806306fdde03146101c95780630758d924146101e7578063095ea7b314610205575b600080fd5b6101d161057f565b6040516101de91906125df565b60405180910390f35b6101ef610611565b6040516101fc91906125c4565b60405180910390f35b61021f600480360381019061021a91906121a7565b610637565b60405161022c91906125a9565b60405180910390f35b61024f600480360381019061024a919061216b565b610655565b005b6102596107a2565b6040516102669190612861565b60405180910390f35b6102896004803603810190610284919061211c565b6107ac565b60405161029691906125a9565b60405180910390f35b6102b960048036038101906102b49190612235565b6108ad565b005b6102c36109af565b6040516102d0919061287c565b60405180910390f35b6102f360048036038101906102ee91906121a7565b6109b8565b60405161030091906125a9565b60405180910390f35b610323600480360381019061031e9190612235565b610a64565b005b61033f600480360381019061033a919061220c565b610b66565b005b610349610b7a565b60405161035691906125a9565b60405180910390f35b610367610b8d565b6040516103749190612861565b60405180910390f35b610385610b93565b6040516103929190612861565b60405180910390f35b6103b560048036038101906103b091906120b7565b610b99565b6040516103c29190612861565b60405180910390f35b6103d3610be2565b6040516103e0919061258e565b60405180910390f35b6103f1610c08565b005b61040d600480360381019061040891906121a7565b610d5b565b005b610417610ddf565b604051610424919061258e565b60405180910390f35b610435610e08565b60405161044291906125df565b60405180910390f35b610465600480360381019061046091906121a7565b610e9a565b60405161047291906125a9565b60405180910390f35b610495600480360381019061049091906121a7565b610f8e565b6040516104a291906125a9565b60405180910390f35b6104c560048036038101906104c091906121e3565b610fac565b005b6104e160048036038101906104dc91906120e0565b6110b4565b6040516104ee9190612861565b60405180910390f35b6104ff61113b565b60405161050c9190612861565b60405180910390f35b61052f600480360381019061052a91906120b7565b611141565b005b610539611303565b6040516105469190612861565b60405180910390f35b610569600480360381019061056491906120b7565b611309565b60405161057691906125a9565b60405180910390f35b60606006805461058e90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90612a74565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061064b61064461135f565b8484611367565b6001905092915050565b61065d61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e190612781565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561074757600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600554905090565b60006107b9848484611532565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080461135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612761565b60405180910390fd5b6108a18561089061135f565b858461089c9190612994565b611367565b60019150509392505050565b6108b561135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990612781565b60405180910390fd5b6103e881111561095157600080fd5b6109788161096a8460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b6015819055506109a5816109978460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6017819055505050565b60006012905090565b6000610a5a6109c561135f565b8484600260006109d361135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5591906128b3565b611367565b6001905092915050565b610a6c61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090612781565b60405180910390fd5b612710811115610b0857600080fd5b610b2f81610b218460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b601081905550610b5c81610b4e8460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6012819055505050565b610b77610b7161135f565b826119ef565b50565b601860019054906101000a900460ff1681565b601b5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1061135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d6e83610d6961135f565b6110b4565b905081811015610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906127a1565b60405180910390fd5b610dd083610dbf61135f565b8484610dcb9190612994565b611367565b610dda83836119ef565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e1790612a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4390612a74565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b60008060026000610ea961135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612841565b60405180910390fd5b610f83610f7161135f565b858584610f7e9190612994565b611367565b600191505092915050565b6000610fa2610f9b61135f565b8484611532565b6001905092915050565b610fb461135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612781565b60405180910390fd5b601860009054906101000a900460ff1615158115151415611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612641565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b61114961135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90612661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612681565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115259190612861565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990612801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990612601565b60405180910390fd5b61161c8383611bc4565b1561166757601054811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612701565b60405180910390fd5b5b6116718383611bc4565b80156116cb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117255750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561178957600061173583610b99565b9050601554828261174691906128b3565b1115611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612721565b60405180910390fd5b505b6117938383611d05565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906126e1565b60405180910390fd5b81816118269190612994565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b891906128b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161191c9190612861565b60405180910390a350505050565b60008083141561193d576000905061199f565b6000828461194b919061293a565b905082848261195a9190612909565b1461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612741565b60405180910390fd5b809150505b92915050565b60006119e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906127e1565b60405180910390fd5b611a6a826000611d05565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612621565b60405180910390fd5b8181611afd9190612994565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160056000828254611b529190612994565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb79190612861565b60405180910390a3505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c6a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cc45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b601860009054906101000a900460ff1615611f3157611d2382611309565b80611d335750611d3281611309565b5b15611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906127c1565b60405180910390fd5b601860019054906101000a900460ff16611df957611d918282611f98565b601860019054906101000a900460ff16158015611db45750611db38282611bc4565b5b15611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906126c1565b60405180910390fd5b611f30565b6000601954118015611e585750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611e6a5750611e698282611bc4565b5b15611f2f57601b5460195443611e809190612994565b1015611f2e576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601c6000815480929190611ef190612aa6565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e581604051611f25919061258e565b60405180910390a15b5b5b5b5050565b60008083118290611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7391906125df565b60405180910390fd5b5060008385611f8b9190612909565b9050809150509392505050565b601860019054906101000a900460ff1615611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906126a1565b60405180910390fd5b611ff28282611bc4565b15801561204c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612074576001601860016101000a81548160ff021916908315150217905550436019819055505b5050565b600081359050612087816130f8565b92915050565b60008135905061209c8161310f565b92915050565b6000813590506120b181613126565b92915050565b6000602082840312156120c957600080fd5b60006120d784828501612078565b91505092915050565b600080604083850312156120f357600080fd5b600061210185828601612078565b925050602061211285828601612078565b9150509250929050565b60008060006060848603121561213157600080fd5b600061213f86828701612078565b935050602061215086828701612078565b9250506040612161868287016120a2565b9150509250925092565b6000806040838503121561217e57600080fd5b600061218c85828601612078565b925050602061219d8582860161208d565b9150509250929050565b600080604083850312156121ba57600080fd5b60006121c885828601612078565b92505060206121d9858286016120a2565b9150509250929050565b6000602082840312156121f557600080fd5b60006122038482850161208d565b91505092915050565b60006020828403121561221e57600080fd5b600061222c848285016120a2565b91505092915050565b6000806040838503121561224857600080fd5b6000612256858286016120a2565b9250506020612267858286016120a2565b9150509250929050565b61227a816129c8565b82525050565b612289816129da565b82525050565b61229881612a1d565b82525050565b60006122a982612897565b6122b381856128a2565b93506122c3818560208601612a41565b6122cc81612b7c565b840191505092915050565b60006122e46023836128a2565b91506122ef82612b8d565b604082019050919050565b60006123076022836128a2565b915061231282612bdc565b604082019050919050565b600061232a600c836128a2565b915061233582612c2b565b602082019050919050565b600061234d6026836128a2565b915061235882612c54565b604082019050919050565b60006123706022836128a2565b915061237b82612ca3565b604082019050919050565b60006123936023836128a2565b915061239e82612cf2565b604082019050919050565b60006123b66025836128a2565b91506123c182612d41565b604082019050919050565b60006123d96026836128a2565b91506123e482612d90565b604082019050919050565b60006123fc6028836128a2565b915061240782612ddf565b604082019050919050565b600061241f602a836128a2565b915061242a82612e2e565b604082019050919050565b60006124426021836128a2565b915061244d82612e7d565b604082019050919050565b60006124656028836128a2565b915061247082612ecc565b604082019050919050565b60006124886020836128a2565b915061249382612f1b565b602082019050919050565b60006124ab6024836128a2565b91506124b682612f44565b604082019050919050565b60006124ce6010836128a2565b91506124d982612f93565b602082019050919050565b60006124f16021836128a2565b91506124fc82612fbc565b604082019050919050565b60006125146025836128a2565b915061251f8261300b565b604082019050919050565b60006125376024836128a2565b91506125428261305a565b604082019050919050565b600061255a6025836128a2565b9150612565826130a9565b604082019050919050565b61257981612a06565b82525050565b61258881612a10565b82525050565b60006020820190506125a36000830184612271565b92915050565b60006020820190506125be6000830184612280565b92915050565b60006020820190506125d9600083018461228f565b92915050565b600060208201905081810360008301526125f9818461229e565b905092915050565b6000602082019050818103600083015261261a816122d7565b9050919050565b6000602082019050818103600083015261263a816122fa565b9050919050565b6000602082019050818103600083015261265a8161231d565b9050919050565b6000602082019050818103600083015261267a81612340565b9050919050565b6000602082019050818103600083015261269a81612363565b9050919050565b600060208201905081810360008301526126ba81612386565b9050919050565b600060208201905081810360008301526126da816123a9565b9050919050565b600060208201905081810360008301526126fa816123cc565b9050919050565b6000602082019050818103600083015261271a816123ef565b9050919050565b6000602082019050818103600083015261273a81612412565b9050919050565b6000602082019050818103600083015261275a81612435565b9050919050565b6000602082019050818103600083015261277a81612458565b9050919050565b6000602082019050818103600083015261279a8161247b565b9050919050565b600060208201905081810360008301526127ba8161249e565b9050919050565b600060208201905081810360008301526127da816124c1565b9050919050565b600060208201905081810360008301526127fa816124e4565b9050919050565b6000602082019050818103600083015261281a81612507565b9050919050565b6000602082019050818103600083015261283a8161252a565b9050919050565b6000602082019050818103600083015261285a8161254d565b9050919050565b60006020820190506128766000830184612570565b92915050565b6000602082019050612891600083018461257f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128be82612a06565b91506128c983612a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128fe576128fd612aef565b5b828201905092915050565b600061291482612a06565b915061291f83612a06565b92508261292f5761292e612b1e565b5b828204905092915050565b600061294582612a06565b915061295083612a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561298957612988612aef565b5b828202905092915050565b600061299f82612a06565b91506129aa83612a06565b9250828210156129bd576129bc612aef565b5b828203905092915050565b60006129d3826129e6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612a2882612a2f565b9050919050565b6000612a3a826129e6565b9050919050565b60005b83811015612a5f578082015181840152602081019050612a44565b83811115612a6e576000848401525b50505050565b60006002820490506001821680612a8c57607f821691505b60208210811415612aa057612a9f612b4d565b5b50919050565b6000612ab182612a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ae457612ae3612aef565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479207365742e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008201527f616c6c657453697a652e00000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613101816129c8565b811461310c57600080fd5b50565b613118816129da565b811461312357600080fd5b50565b61312f81612a06565b811461313a57600080fd5b5056fea2646970667358221220f2819a9281ccff48cb79a970e2cfc1255591f8ae669d65b18df69fbe1b02b2a764736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a9059cbb11610097578063e79d416011610071578063e79d4160146104f7578063f2fde38b14610515578063f6540ec714610531578063fe575a871461054f576101c4565b8063a9059cbb1461047b578063d7124d9f146104ab578063dd62ed3e146104c7576101c4565b806379cc6790116100d357806379cc6790146103f35780638da5cb5b1461040f57806395d89b411461042d578063a457c2d71461044b576101c4565b806370a082311461039b57806370d5ae05146103cb578063715018a6146103e9576101c4565b8063313ce5671161016657806342966c681161014057806342966c681461032557806350a8e01614610341578063570ce7a61461035f578063640384091461037d576101c4565b8063313ce567146102bb57806339509351146102d95780633f3cf56c14610309576101c4565b8063153b0d1e116101a2578063153b0d1e1461023557806318160ddd1461025157806323b872dd1461026f578063260039571461029f576101c4565b806306fdde03146101c95780630758d924146101e7578063095ea7b314610205575b600080fd5b6101d161057f565b6040516101de91906125df565b60405180910390f35b6101ef610611565b6040516101fc91906125c4565b60405180910390f35b61021f600480360381019061021a91906121a7565b610637565b60405161022c91906125a9565b60405180910390f35b61024f600480360381019061024a919061216b565b610655565b005b6102596107a2565b6040516102669190612861565b60405180910390f35b6102896004803603810190610284919061211c565b6107ac565b60405161029691906125a9565b60405180910390f35b6102b960048036038101906102b49190612235565b6108ad565b005b6102c36109af565b6040516102d0919061287c565b60405180910390f35b6102f360048036038101906102ee91906121a7565b6109b8565b60405161030091906125a9565b60405180910390f35b610323600480360381019061031e9190612235565b610a64565b005b61033f600480360381019061033a919061220c565b610b66565b005b610349610b7a565b60405161035691906125a9565b60405180910390f35b610367610b8d565b6040516103749190612861565b60405180910390f35b610385610b93565b6040516103929190612861565b60405180910390f35b6103b560048036038101906103b091906120b7565b610b99565b6040516103c29190612861565b60405180910390f35b6103d3610be2565b6040516103e0919061258e565b60405180910390f35b6103f1610c08565b005b61040d600480360381019061040891906121a7565b610d5b565b005b610417610ddf565b604051610424919061258e565b60405180910390f35b610435610e08565b60405161044291906125df565b60405180910390f35b610465600480360381019061046091906121a7565b610e9a565b60405161047291906125a9565b60405180910390f35b610495600480360381019061049091906121a7565b610f8e565b6040516104a291906125a9565b60405180910390f35b6104c560048036038101906104c091906121e3565b610fac565b005b6104e160048036038101906104dc91906120e0565b6110b4565b6040516104ee9190612861565b60405180910390f35b6104ff61113b565b60405161050c9190612861565b60405180910390f35b61052f600480360381019061052a91906120b7565b611141565b005b610539611303565b6040516105469190612861565b60405180910390f35b610569600480360381019061056491906120b7565b611309565b60405161057691906125a9565b60405180910390f35b60606006805461058e90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90612a74565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061064b61064461135f565b8484611367565b6001905092915050565b61065d61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e190612781565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561074757600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600554905090565b60006107b9848484611532565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061080461135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612761565b60405180910390fd5b6108a18561089061135f565b858461089c9190612994565b611367565b60019150509392505050565b6108b561135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990612781565b60405180910390fd5b6103e881111561095157600080fd5b6109788161096a8460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b6015819055506109a5816109978460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6017819055505050565b60006012905090565b6000610a5a6109c561135f565b8484600260006109d361135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5591906128b3565b611367565b6001905092915050565b610a6c61135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090612781565b60405180910390fd5b612710811115610b0857600080fd5b610b2f81610b218460095461192a90919063ffffffff16565b6119a590919063ffffffff16565b601081905550610b5c81610b4e8460085461192a90919063ffffffff16565b6119a590919063ffffffff16565b6012819055505050565b610b77610b7161135f565b826119ef565b50565b601860019054906101000a900460ff1681565b601b5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1061135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d6e83610d6961135f565b6110b4565b905081811015610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906127a1565b60405180910390fd5b610dd083610dbf61135f565b8484610dcb9190612994565b611367565b610dda83836119ef565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e1790612a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4390612a74565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b60008060026000610ea961135f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612841565b60405180910390fd5b610f83610f7161135f565b858584610f7e9190612994565b611367565b600191505092915050565b6000610fa2610f9b61135f565b8484611532565b6001905092915050565b610fb461135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612781565b60405180910390fd5b601860009054906101000a900460ff1615158115151415611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612641565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b61114961135f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612781565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90612661565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612681565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115259190612861565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990612801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990612601565b60405180910390fd5b61161c8383611bc4565b1561166757601054811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612701565b60405180910390fd5b5b6116718383611bc4565b80156116cb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117255750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561178957600061173583610b99565b9050601554828261174691906128b3565b1115611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612721565b60405180910390fd5b505b6117938383611d05565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906126e1565b60405180910390fd5b81816118269190612994565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b891906128b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161191c9190612861565b60405180910390a350505050565b60008083141561193d576000905061199f565b6000828461194b919061293a565b905082848261195a9190612909565b1461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612741565b60405180910390fd5b809150505b92915050565b60006119e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f35565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906127e1565b60405180910390fd5b611a6a826000611d05565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612621565b60405180910390fd5b8181611afd9190612994565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160056000828254611b529190612994565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb79190612861565b60405180910390a3505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c6a5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cc45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b601860009054906101000a900460ff1615611f3157611d2382611309565b80611d335750611d3281611309565b5b15611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906127c1565b60405180910390fd5b601860019054906101000a900460ff16611df957611d918282611f98565b601860019054906101000a900460ff16158015611db45750611db38282611bc4565b5b15611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906126c1565b60405180910390fd5b611f30565b6000601954118015611e585750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611e6a5750611e698282611bc4565b5b15611f2f57601b5460195443611e809190612994565b1015611f2e576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601c6000815480929190611ef190612aa6565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e581604051611f25919061258e565b60405180910390a15b5b5b5b5050565b60008083118290611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7391906125df565b60405180910390fd5b5060008385611f8b9190612909565b9050809150509392505050565b601860019054906101000a900460ff1615611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906126a1565b60405180910390fd5b611ff28282611bc4565b15801561204c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612074576001601860016101000a81548160ff021916908315150217905550436019819055505b5050565b600081359050612087816130f8565b92915050565b60008135905061209c8161310f565b92915050565b6000813590506120b181613126565b92915050565b6000602082840312156120c957600080fd5b60006120d784828501612078565b91505092915050565b600080604083850312156120f357600080fd5b600061210185828601612078565b925050602061211285828601612078565b9150509250929050565b60008060006060848603121561213157600080fd5b600061213f86828701612078565b935050602061215086828701612078565b9250506040612161868287016120a2565b9150509250925092565b6000806040838503121561217e57600080fd5b600061218c85828601612078565b925050602061219d8582860161208d565b9150509250929050565b600080604083850312156121ba57600080fd5b60006121c885828601612078565b92505060206121d9858286016120a2565b9150509250929050565b6000602082840312156121f557600080fd5b60006122038482850161208d565b91505092915050565b60006020828403121561221e57600080fd5b600061222c848285016120a2565b91505092915050565b6000806040838503121561224857600080fd5b6000612256858286016120a2565b9250506020612267858286016120a2565b9150509250929050565b61227a816129c8565b82525050565b612289816129da565b82525050565b61229881612a1d565b82525050565b60006122a982612897565b6122b381856128a2565b93506122c3818560208601612a41565b6122cc81612b7c565b840191505092915050565b60006122e46023836128a2565b91506122ef82612b8d565b604082019050919050565b60006123076022836128a2565b915061231282612bdc565b604082019050919050565b600061232a600c836128a2565b915061233582612c2b565b602082019050919050565b600061234d6026836128a2565b915061235882612c54565b604082019050919050565b60006123706022836128a2565b915061237b82612ca3565b604082019050919050565b60006123936023836128a2565b915061239e82612cf2565b604082019050919050565b60006123b66025836128a2565b91506123c182612d41565b604082019050919050565b60006123d96026836128a2565b91506123e482612d90565b604082019050919050565b60006123fc6028836128a2565b915061240782612ddf565b604082019050919050565b600061241f602a836128a2565b915061242a82612e2e565b604082019050919050565b60006124426021836128a2565b915061244d82612e7d565b604082019050919050565b60006124656028836128a2565b915061247082612ecc565b604082019050919050565b60006124886020836128a2565b915061249382612f1b565b602082019050919050565b60006124ab6024836128a2565b91506124b682612f44565b604082019050919050565b60006124ce6010836128a2565b91506124d982612f93565b602082019050919050565b60006124f16021836128a2565b91506124fc82612fbc565b604082019050919050565b60006125146025836128a2565b915061251f8261300b565b604082019050919050565b60006125376024836128a2565b91506125428261305a565b604082019050919050565b600061255a6025836128a2565b9150612565826130a9565b604082019050919050565b61257981612a06565b82525050565b61258881612a10565b82525050565b60006020820190506125a36000830184612271565b92915050565b60006020820190506125be6000830184612280565b92915050565b60006020820190506125d9600083018461228f565b92915050565b600060208201905081810360008301526125f9818461229e565b905092915050565b6000602082019050818103600083015261261a816122d7565b9050919050565b6000602082019050818103600083015261263a816122fa565b9050919050565b6000602082019050818103600083015261265a8161231d565b9050919050565b6000602082019050818103600083015261267a81612340565b9050919050565b6000602082019050818103600083015261269a81612363565b9050919050565b600060208201905081810360008301526126ba81612386565b9050919050565b600060208201905081810360008301526126da816123a9565b9050919050565b600060208201905081810360008301526126fa816123cc565b9050919050565b6000602082019050818103600083015261271a816123ef565b9050919050565b6000602082019050818103600083015261273a81612412565b9050919050565b6000602082019050818103600083015261275a81612435565b9050919050565b6000602082019050818103600083015261277a81612458565b9050919050565b6000602082019050818103600083015261279a8161247b565b9050919050565b600060208201905081810360008301526127ba8161249e565b9050919050565b600060208201905081810360008301526127da816124c1565b9050919050565b600060208201905081810360008301526127fa816124e4565b9050919050565b6000602082019050818103600083015261281a81612507565b9050919050565b6000602082019050818103600083015261283a8161252a565b9050919050565b6000602082019050818103600083015261285a8161254d565b9050919050565b60006020820190506128766000830184612570565b92915050565b6000602082019050612891600083018461257f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006128be82612a06565b91506128c983612a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128fe576128fd612aef565b5b828201905092915050565b600061291482612a06565b915061291f83612a06565b92508261292f5761292e612b1e565b5b828204905092915050565b600061294582612a06565b915061295083612a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561298957612988612aef565b5b828202905092915050565b600061299f82612a06565b91506129aa83612a06565b9250828210156129bd576129bc612aef565b5b828203905092915050565b60006129d3826129e6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612a2882612a2f565b9050919050565b6000612a3a826129e6565b9050919050565b60005b83811015612a5f578082015181840152602081019050612a44565b83811115612a6e576000848401525b50505050565b60006002820490506001821680612a8c57607f821691505b60208210811415612aa057612a9f612b4d565b5b50919050565b6000612ab182612a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ae457612ae3612aef565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479207365742e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785760008201527f616c6c657453697a652e00000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613101816129c8565b811461310c57600080fd5b50565b613118816129da565b811461312357600080fd5b50565b61312f81612a06565b811461313a57600080fd5b5056fea2646970667358221220f2819a9281ccff48cb79a970e2cfc1255591f8ae669d65b18df69fbe1b02b2a764736f6c63430008040033

Deployed Bytecode Sourcemap

35902:354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22214:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20028:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24381:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30787:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23334:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33314:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23176:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25863:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32960:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34159:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20976:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21097:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20387:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23505:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19948:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17604:148;;;:::i;:::-;;34569:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17390:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22433:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26581:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23845:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30975:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24083:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21132:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17760:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20811:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30663:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22214:100;22268:13;22301:5;22294:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22214:100;:::o;20028:35::-;;;;;;;;;;;;;:::o;24381:169::-;24464:4;24481:39;24490:12;:10;:12::i;:::-;24504:7;24513:6;24481:8;:39::i;:::-;24538:4;24531:11;;24381:169;;;;:::o;30787:180::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30907:7:::1;30880:34;;:14;:23;30895:7;30880:23;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;30872:43;;;::::0;::::1;;30952:7;30926:14;:23;30941:7;30926:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30787:180:::0;;:::o;23334:108::-;23395:7;23422:12;;23415:19;;23334:108;:::o;25032:422::-;25138:4;25155:36;25165:6;25173:9;25184:6;25155:9;:36::i;:::-;25204:24;25231:11;:19;25243:6;25231:19;;;;;;;;;;;;;;;:33;25251:12;:10;:12::i;:::-;25231:33;;;;;;;;;;;;;;;;25204:60;;25303:6;25283:16;:26;;25275:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25365:57;25374:6;25382:12;:10;:12::i;:::-;25415:6;25396:16;:25;;;;:::i;:::-;25365:8;:57::i;:::-;25442:4;25435:11;;;25032:422;;;;;:::o;33314:349::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33425:4:::1;33414:7;:15;;33406:24;;;::::0;::::1;;33488:98;33526:7;33488:19;33499:7;33488:6;;:10;;:19;;;;:::i;:::-;:23;;:98;;;;:::i;:::-;33471:14;:115;;;;33615:40;33647:7;33615:27;33634:7;33615:14;;:18;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;33597:15;:58;;;;33314:349:::0;;:::o;23176:93::-;23234:5;23259:2;23252:9;;23176:93;:::o;25863:215::-;25951:4;25968:80;25977:12;:10;:12::i;:::-;25991:7;26037:10;26000:11;:25;26012:12;:10;:12::i;:::-;26000:25;;;;;;;;;;;;;;;:34;26026:7;26000:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;25968:8;:80::i;:::-;26066:4;26059:11;;25863:215;;;;:::o;32960:346::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33070:5:::1;33059:7;:16;;33051:25;;;::::0;::::1;;33133:98;33171:7;33133:19;33144:7;33133:6;;:10;;:19;;;;:::i;:::-;:23;;:98;;;;:::i;:::-;33118:12;:113;;;;33258:40;33290:7;33258:27;33277:7;33258:14;;:18;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;33242:13;:56;;;;32960:346:::0;;:::o;34159:91::-;34215:27;34221:12;:10;:12::i;:::-;34235:6;34215:5;:27::i;:::-;34159:91;:::o;20976:36::-;;;;;;;;;;;;;:::o;21097:28::-;;;;:::o;20387:77::-;;;;:::o;23505:127::-;23579:7;23606:9;:18;23616:7;23606:18;;;;;;;;;;;;;;;;23599:25;;23505:127;;;:::o;19948:71::-;;;;;;;;;;;;;:::o;17604:148::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17711:1:::1;17674:40;;17695:6;::::0;::::1;;;;;;;;17674:40;;;;;;;;;;;;17742:1;17725:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17604:148::o:0;34569:332::-;34646:24;34673:32;34683:7;34692:12;:10;:12::i;:::-;34673:9;:32::i;:::-;34646:59;;34744:6;34724:16;:26;;34716:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34802:58;34811:7;34820:12;:10;:12::i;:::-;34853:6;34834:16;:25;;;;:::i;:::-;34802:8;:58::i;:::-;34871:22;34877:7;34886:6;34871:5;:22::i;:::-;34569:332;;;:::o;17390:79::-;17428:7;17455:6;;;;;;;;;;;17448:13;;17390:79;:::o;22433:104::-;22489:13;22522:7;22515:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22433:104;:::o;26581:377::-;26674:4;26691:24;26718:11;:25;26730:12;:10;:12::i;:::-;26718:25;;;;;;;;;;;;;;;:34;26744:7;26718:34;;;;;;;;;;;;;;;;26691:61;;26791:15;26771:16;:35;;26763:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26859:67;26868:12;:10;:12::i;:::-;26882:7;26910:15;26891:16;:34;;;;:::i;:::-;26859:8;:67::i;:::-;26946:4;26939:11;;;26581:377;;;;:::o;23845:175::-;23931:4;23948:42;23958:12;:10;:12::i;:::-;23972:9;23983:6;23948:9;:42::i;:::-;24008:4;24001:11;;23845:175;;;;:::o;30975:179::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31076:16:::1;;;;;;;;;;;31065:27;;:7;:27;;;;31057:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:7;31120:16;;:26;;;;;;;;;;;;;;;;;;30975:179:::0;:::o;24083:151::-;24172:7;24199:11;:18;24211:5;24199:18;;;;;;;;;;;;;;;:27;24218:7;24199:27;;;;;;;;;;;;;;;;24192:34;;24083:151;;;;:::o;21132:32::-;;;;:::o;17760:254::-;17527:12;:10;:12::i;:::-;17517:22;;:6;;;;;;;;;;:22;;;17509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17869:1:::1;17849:22;;:8;:22;;;;17841:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17969:8;17940:38;;17961:6;::::0;::::1;;;;;;;;17940:38;;;;;;;;;;;;17998:8;17989:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17760:254:::0;:::o;20811:87::-;;;;:::o;30663:116::-;30724:4;30748:14;:23;30763:7;30748:23;;;;;;;;;;;;;;;;;;;;;;;;;30741:30;;30663:116;;;:::o;698:98::-;751:7;778:10;771:17;;698:98;:::o;30309:346::-;30428:1;30411:19;;:5;:19;;;;30403:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30509:1;30490:21;;:7;:21;;;;30482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30593:6;30563:11;:18;30575:5;30563:18;;;;;;;;;;;;;;;:27;30582:7;30563:27;;;;;;;;;;;;;;;:36;;;;30631:7;30615:32;;30624:5;30615:32;;;30640:6;30615:32;;;;;;:::i;:::-;;;;;;;;30309:346;;;:::o;27985:1067::-;28109:1;28091:20;;:6;:20;;;;28083:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:1;28172:23;;:9;:23;;;;28164:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28249:29;28260:6;28268:9;28249:10;:29::i;:::-;28246:122;;;28311:12;;28301:6;:22;;28293:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28246:122;28382:29;28393:6;28401:9;28382:10;:29::i;:::-;:73;;;;;28441:14;;;;;;;;;;;28428:27;;:9;:27;;;;28382:73;:110;;;;;28486:6;;;;;;;;;;;28473:19;;:9;:19;;;;28382:110;28379:328;;;28519:32;28554:20;28564:9;28554;:20::i;:::-;28519:55;;28634:14;;28624:6;28597:24;:33;;;;:::i;:::-;:51;;28589:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;28379:328;;28719:39;28740:6;28748:9;28719:20;:39::i;:::-;28771:21;28795:9;:17;28805:6;28795:17;;;;;;;;;;;;;;;;28771:41;;28848:6;28831:13;:23;;28823:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:6;28928:13;:22;;;;:::i;:::-;28908:9;:17;28918:6;28908:17;;;;;;;;;;;;;;;:42;;;;28985:6;28961:9;:20;28971:9;28961:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;29026:9;29009:35;;29018:6;29009:35;;;29037:6;29009:35;;;;;;:::i;:::-;;;;;;;;27985:1067;;;;:::o;2663:471::-;2721:7;2971:1;2966;:6;2962:47;;;2996:1;2989:8;;;;2962:47;3021:9;3037:1;3033;:5;;;;:::i;:::-;3021:17;;3066:1;3061;3057;:5;;;;:::i;:::-;:10;3049:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3125:1;3118:8;;;2663:471;;;;;:::o;3610:132::-;3668:7;3695:39;3699:1;3702;3695:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3688:46;;3610:132;;;;:::o;29385:486::-;29488:1;29469:21;;:7;:21;;;;29461:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29541:41;29562:7;29579:1;29541:20;:41::i;:::-;29595:22;29620:9;:18;29630:7;29620:18;;;;;;;;;;;;;;;;29595:43;;29675:6;29657:14;:24;;29649:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29769:6;29752:14;:23;;;;:::i;:::-;29731:9;:18;29741:7;29731:18;;;;;;;;;;;;;;;:44;;;;29802:6;29786:12;;:22;;;;;;;:::i;:::-;;;;;;;;29852:1;29826:37;;29835:7;29826:37;;;29856:6;29826:37;;;;;;:::i;:::-;;;;;;;;29385:486;;;:::o;26966:230::-;27034:4;27059:17;:21;27077:2;27059:21;;;;;;;;;;;;;;;;;;;;;;;;;27058:22;:63;;;;;27098:17;:23;27116:4;27098:23;;;;;;;;;;;;;;;;;;;;;;;;;27097:24;27058:63;:97;;;;;27144:11;;;;;;;;;;;27138:17;;:2;:17;;;;27058:97;:130;;;;;27186:1;27172:16;;:2;:16;;;;27058:130;27051:137;;26966:230;;;;:::o;31757:1195::-;31913:16;;;;;;;;;;;31909:1036;;;32017:21;32031:6;32017:13;:21::i;:::-;:49;;;;32042:24;32056:9;32042:13;:24::i;:::-;32017:49;32013:116;;;32087:26;;;;;;;;;;:::i;:::-;;;;;;;;32013:116;32219:16;;;;;;;;;;;32214:720;;32256:37;32275:6;32283:9;32256:18;:37::i;:::-;32321:16;;;;;;;;;;;32320:17;:50;;;;;32341:29;32352:6;32360:9;32341:10;:29::i;:::-;32320:50;32316:154;;;32399:47;;;;;;;;;;:::i;:::-;;;;;;;;32316:154;32214:720;;;32529:1;32514:12;;:16;:58;;;;;32566:6;;;;;;;;;;;32556:16;;:6;:16;;;32514:58;:113;;;;;32598:29;32609:6;32617:9;32598:10;:29::i;:::-;32514:113;32510:409;;;32704:13;;32689:12;;32674;:27;;;;:::i;:::-;:43;32670:230;;;32774:4;32746:14;:25;32761:9;32746:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32805:13;;:16;;;;;;;;;:::i;:::-;;;;;;32853:23;32866:9;32853:23;;;;;;:::i;:::-;;;;;;;;32670:230;32510:409;32214:720;31909:1036;31757:1195;;:::o;4238:278::-;4324:7;4356:1;4352;:5;4359:12;4344:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4383:9;4399:1;4395;:5;;;;:::i;:::-;4383:17;;4507:1;4500:8;;;4238:278;;;;;:::o;27204:291::-;27286:16;;;;;;;;;;;27285:17;27277:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27358:20;27369:4;27375:2;27358:10;:20::i;:::-;27357:21;:37;;;;;27388:6;;;;;;;;;;;27382:12;;:2;:12;;;27357:37;27353:135;;;27430:4;27411:16;;:23;;;;;;;;;;;;;;;;;;27464:12;27449;:27;;;;27353:135;27204:291;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;772:6;780;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;1194:6;1202;1210;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:401::-;1740:6;1748;1797:2;1785:9;1776:7;1772:23;1768:32;1765:2;;;1813:1;1810;1803:12;1765:2;1856:1;1881:53;1926:7;1917:6;1906:9;1902:22;1881:53;:::i;:::-;1871:63;;1827:117;1983:2;2009:50;2051:7;2042:6;2031:9;2027:22;2009:50;:::i;:::-;1999:60;;1954:115;1755:321;;;;;:::o;2082:407::-;2150:6;2158;2207:2;2195:9;2186:7;2182:23;2178:32;2175:2;;;2223:1;2220;2213:12;2175:2;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2393:2;2419:53;2464:7;2455:6;2444:9;2440:22;2419:53;:::i;:::-;2409:63;;2364:118;2165:324;;;;;:::o;2495:256::-;2551:6;2600:2;2588:9;2579:7;2575:23;2571:32;2568:2;;;2616:1;2613;2606:12;2568:2;2659:1;2684:50;2726:7;2717:6;2706:9;2702:22;2684:50;:::i;:::-;2674:60;;2630:114;2558:193;;;;:::o;2757:262::-;2816:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:2;;;2881:1;2878;2871:12;2833:2;2924:1;2949:53;2994:7;2985:6;2974:9;2970:22;2949:53;:::i;:::-;2939:63;;2895:117;2823:196;;;;:::o;3025:407::-;3093:6;3101;3150:2;3138:9;3129:7;3125:23;3121:32;3118:2;;;3166:1;3163;3156:12;3118:2;3209:1;3234:53;3279:7;3270:6;3259:9;3255:22;3234:53;:::i;:::-;3224:63;;3180:117;3336:2;3362:53;3407:7;3398:6;3387:9;3383:22;3362:53;:::i;:::-;3352:63;;3307:118;3108:324;;;;;:::o;3438:118::-;3525:24;3543:5;3525:24;:::i;:::-;3520:3;3513:37;3503:53;;:::o;3562:109::-;3643:21;3658:5;3643:21;:::i;:::-;3638:3;3631:34;3621:50;;:::o;3677:183::-;3790:63;3847:5;3790:63;:::i;:::-;3785:3;3778:76;3768:92;;:::o;3866:364::-;3954:3;3982:39;4015:5;3982:39;:::i;:::-;4037:71;4101:6;4096:3;4037:71;:::i;:::-;4030:78;;4117:52;4162:6;4157:3;4150:4;4143:5;4139:16;4117:52;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3958:272;;;;;:::o;4236:366::-;4378:3;4399:67;4463:2;4458:3;4399:67;:::i;:::-;4392:74;;4475:93;4564:3;4475:93;:::i;:::-;4593:2;4588:3;4584:12;4577:19;;4382:220;;;:::o;4608:366::-;4750:3;4771:67;4835:2;4830:3;4771:67;:::i;:::-;4764:74;;4847:93;4936:3;4847:93;:::i;:::-;4965:2;4960:3;4956:12;4949:19;;4754:220;;;:::o;4980:366::-;5122:3;5143:67;5207:2;5202:3;5143:67;:::i;:::-;5136:74;;5219:93;5308:3;5219:93;:::i;:::-;5337:2;5332:3;5328:12;5321:19;;5126:220;;;:::o;5352:366::-;5494:3;5515:67;5579:2;5574:3;5515:67;:::i;:::-;5508:74;;5591:93;5680:3;5591:93;:::i;:::-;5709:2;5704:3;5700:12;5693:19;;5498:220;;;:::o;5724:366::-;5866:3;5887:67;5951:2;5946:3;5887:67;:::i;:::-;5880:74;;5963:93;6052:3;5963:93;:::i;:::-;6081:2;6076:3;6072:12;6065:19;;5870:220;;;:::o;6096:366::-;6238:3;6259:67;6323:2;6318:3;6259:67;:::i;:::-;6252:74;;6335:93;6424:3;6335:93;:::i;:::-;6453:2;6448:3;6444:12;6437:19;;6242:220;;;:::o;6468:366::-;6610:3;6631:67;6695:2;6690:3;6631:67;:::i;:::-;6624:74;;6707:93;6796:3;6707:93;:::i;:::-;6825:2;6820:3;6816:12;6809:19;;6614:220;;;:::o;6840:366::-;6982:3;7003:67;7067:2;7062:3;7003:67;:::i;:::-;6996:74;;7079:93;7168:3;7079:93;:::i;:::-;7197:2;7192:3;7188:12;7181:19;;6986:220;;;:::o;7212:366::-;7354:3;7375:67;7439:2;7434:3;7375:67;:::i;:::-;7368:74;;7451:93;7540:3;7451:93;:::i;:::-;7569:2;7564:3;7560:12;7553:19;;7358:220;;;:::o;7584:366::-;7726:3;7747:67;7811:2;7806:3;7747:67;:::i;:::-;7740:74;;7823:93;7912:3;7823:93;:::i;:::-;7941:2;7936:3;7932:12;7925:19;;7730:220;;;:::o;7956:366::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;8102:220;;;:::o;8328:366::-;8470:3;8491:67;8555:2;8550:3;8491:67;:::i;:::-;8484:74;;8567:93;8656:3;8567:93;:::i;:::-;8685:2;8680:3;8676:12;8669:19;;8474:220;;;:::o;8700:366::-;8842:3;8863:67;8927:2;8922:3;8863:67;:::i;:::-;8856:74;;8939:93;9028:3;8939:93;:::i;:::-;9057:2;9052:3;9048:12;9041:19;;8846:220;;;:::o;9072:366::-;9214:3;9235:67;9299:2;9294:3;9235:67;:::i;:::-;9228:74;;9311:93;9400:3;9311:93;:::i;:::-;9429:2;9424:3;9420:12;9413:19;;9218:220;;;:::o;9444:366::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9590:220;;;:::o;9816:366::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9962:220;;;:::o;10188:366::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10334:220;;;:::o;10560:366::-;10702:3;10723:67;10787:2;10782:3;10723:67;:::i;:::-;10716:74;;10799:93;10888:3;10799:93;:::i;:::-;10917:2;10912:3;10908:12;10901:19;;10706:220;;;:::o;10932:366::-;11074:3;11095:67;11159:2;11154:3;11095:67;:::i;:::-;11088:74;;11171:93;11260:3;11171:93;:::i;:::-;11289:2;11284:3;11280:12;11273:19;;11078:220;;;:::o;11304:118::-;11391:24;11409:5;11391:24;:::i;:::-;11386:3;11379:37;11369:53;;:::o;11428:112::-;11511:22;11527:5;11511:22;:::i;:::-;11506:3;11499:35;11489:51;;:::o;11546:222::-;11639:4;11677:2;11666:9;11662:18;11654:26;;11690:71;11758:1;11747:9;11743:17;11734:6;11690:71;:::i;:::-;11644:124;;;;:::o;11774:210::-;11861:4;11899:2;11888:9;11884:18;11876:26;;11912:65;11974:1;11963:9;11959:17;11950:6;11912:65;:::i;:::-;11866:118;;;;:::o;11990:274::-;12109:4;12147:2;12136:9;12132:18;12124:26;;12160:97;12254:1;12243:9;12239:17;12230:6;12160:97;:::i;:::-;12114:150;;;;:::o;12270:313::-;12383:4;12421:2;12410:9;12406:18;12398:26;;12470:9;12464:4;12460:20;12456:1;12445:9;12441:17;12434:47;12498:78;12571:4;12562:6;12498:78;:::i;:::-;12490:86;;12388:195;;;;:::o;12589:419::-;12755:4;12793:2;12782:9;12778:18;12770:26;;12842:9;12836:4;12832:20;12828:1;12817:9;12813:17;12806:47;12870:131;12996:4;12870:131;:::i;:::-;12862:139;;12760:248;;;:::o;13014:419::-;13180:4;13218:2;13207:9;13203:18;13195:26;;13267:9;13261:4;13257:20;13253:1;13242:9;13238:17;13231:47;13295:131;13421:4;13295:131;:::i;:::-;13287:139;;13185:248;;;:::o;13439:419::-;13605:4;13643:2;13632:9;13628:18;13620:26;;13692:9;13686:4;13682:20;13678:1;13667:9;13663:17;13656:47;13720:131;13846:4;13720:131;:::i;:::-;13712:139;;13610:248;;;:::o;13864:419::-;14030:4;14068:2;14057:9;14053:18;14045:26;;14117:9;14111:4;14107:20;14103:1;14092:9;14088:17;14081:47;14145:131;14271:4;14145:131;:::i;:::-;14137:139;;14035:248;;;:::o;14289:419::-;14455:4;14493:2;14482:9;14478:18;14470:26;;14542:9;14536:4;14532:20;14528:1;14517:9;14513:17;14506:47;14570:131;14696:4;14570:131;:::i;:::-;14562:139;;14460:248;;;:::o;14714:419::-;14880:4;14918:2;14907:9;14903:18;14895:26;;14967:9;14961:4;14957:20;14953:1;14942:9;14938:17;14931:47;14995:131;15121:4;14995:131;:::i;:::-;14987:139;;14885:248;;;:::o;15139:419::-;15305:4;15343:2;15332:9;15328:18;15320:26;;15392:9;15386:4;15382:20;15378:1;15367:9;15363:17;15356:47;15420:131;15546:4;15420:131;:::i;:::-;15412:139;;15310:248;;;:::o;15564:419::-;15730:4;15768:2;15757:9;15753:18;15745:26;;15817:9;15811:4;15807:20;15803:1;15792:9;15788:17;15781:47;15845:131;15971:4;15845:131;:::i;:::-;15837:139;;15735:248;;;:::o;15989:419::-;16155:4;16193:2;16182:9;16178:18;16170:26;;16242:9;16236:4;16232:20;16228:1;16217:9;16213:17;16206:47;16270:131;16396:4;16270:131;:::i;:::-;16262:139;;16160:248;;;:::o;16414:419::-;16580:4;16618:2;16607:9;16603:18;16595:26;;16667:9;16661:4;16657:20;16653:1;16642:9;16638:17;16631:47;16695:131;16821:4;16695:131;:::i;:::-;16687:139;;16585:248;;;:::o;16839:419::-;17005:4;17043:2;17032:9;17028:18;17020:26;;17092:9;17086:4;17082:20;17078:1;17067:9;17063:17;17056:47;17120:131;17246:4;17120:131;:::i;:::-;17112:139;;17010:248;;;:::o;17264:419::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17517:9;17511:4;17507:20;17503:1;17492:9;17488:17;17481:47;17545:131;17671:4;17545:131;:::i;:::-;17537:139;;17435:248;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17860:248;;;:::o;18114:419::-;18280:4;18318:2;18307:9;18303:18;18295:26;;18367:9;18361:4;18357:20;18353:1;18342:9;18338:17;18331:47;18395:131;18521:4;18395:131;:::i;:::-;18387:139;;18285:248;;;:::o;18539:419::-;18705:4;18743:2;18732:9;18728:18;18720:26;;18792:9;18786:4;18782:20;18778:1;18767:9;18763:17;18756:47;18820:131;18946:4;18820:131;:::i;:::-;18812:139;;18710:248;;;:::o;18964:419::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;19135:248;;;:::o;19389:419::-;19555:4;19593:2;19582:9;19578:18;19570:26;;19642:9;19636:4;19632:20;19628:1;19617:9;19613:17;19606:47;19670:131;19796:4;19670:131;:::i;:::-;19662:139;;19560:248;;;:::o;19814:419::-;19980:4;20018:2;20007:9;20003:18;19995:26;;20067:9;20061:4;20057:20;20053:1;20042:9;20038:17;20031:47;20095:131;20221:4;20095:131;:::i;:::-;20087:139;;19985:248;;;:::o;20239:419::-;20405:4;20443:2;20432:9;20428:18;20420:26;;20492:9;20486:4;20482:20;20478:1;20467:9;20463:17;20456:47;20520:131;20646:4;20520:131;:::i;:::-;20512:139;;20410:248;;;:::o;20664:222::-;20757:4;20795:2;20784:9;20780:18;20772:26;;20808:71;20876:1;20865:9;20861:17;20852:6;20808:71;:::i;:::-;20762:124;;;;:::o;20892:214::-;20981:4;21019:2;21008:9;21004:18;20996:26;;21032:67;21096:1;21085:9;21081:17;21072:6;21032:67;:::i;:::-;20986:120;;;;:::o;21112:99::-;21164:6;21198:5;21192:12;21182:22;;21171:40;;;:::o;21217:169::-;21301:11;21335:6;21330:3;21323:19;21375:4;21370:3;21366:14;21351:29;;21313:73;;;;:::o;21392:305::-;21432:3;21451:20;21469:1;21451:20;:::i;:::-;21446:25;;21485:20;21503:1;21485:20;:::i;:::-;21480:25;;21639:1;21571:66;21567:74;21564:1;21561:81;21558:2;;;21645:18;;:::i;:::-;21558:2;21689:1;21686;21682:9;21675:16;;21436:261;;;;:::o;21703:185::-;21743:1;21760:20;21778:1;21760:20;:::i;:::-;21755:25;;21794:20;21812:1;21794:20;:::i;:::-;21789:25;;21833:1;21823:2;;21838:18;;:::i;:::-;21823:2;21880:1;21877;21873:9;21868:14;;21745:143;;;;:::o;21894:348::-;21934:7;21957:20;21975:1;21957:20;:::i;:::-;21952:25;;21991:20;22009:1;21991:20;:::i;:::-;21986:25;;22179:1;22111:66;22107:74;22104:1;22101:81;22096:1;22089:9;22082:17;22078:105;22075:2;;;22186:18;;:::i;:::-;22075:2;22234:1;22231;22227:9;22216:20;;21942:300;;;;:::o;22248:191::-;22288:4;22308:20;22326:1;22308:20;:::i;:::-;22303:25;;22342:20;22360:1;22342:20;:::i;:::-;22337:25;;22381:1;22378;22375:8;22372:2;;;22386:18;;:::i;:::-;22372:2;22431:1;22428;22424:9;22416:17;;22293:146;;;;:::o;22445:96::-;22482:7;22511:24;22529:5;22511:24;:::i;:::-;22500:35;;22490:51;;;:::o;22547:90::-;22581:7;22624:5;22617:13;22610:21;22599:32;;22589:48;;;:::o;22643:126::-;22680:7;22720:42;22713:5;22709:54;22698:65;;22688:81;;;:::o;22775:77::-;22812:7;22841:5;22830:16;;22820:32;;;:::o;22858:86::-;22893:7;22933:4;22926:5;22922:16;22911:27;;22901:43;;;:::o;22950:178::-;23026:9;23059:63;23116:5;23059:63;:::i;:::-;23046:76;;23036:92;;;:::o;23134:139::-;23210:9;23243:24;23261:5;23243:24;:::i;:::-;23230:37;;23220:53;;;:::o;23279:307::-;23347:1;23357:113;23371:6;23368:1;23365:13;23357:113;;;23456:1;23451:3;23447:11;23441:18;23437:1;23432:3;23428:11;23421:39;23393:2;23390:1;23386:10;23381:15;;23357:113;;;23488:6;23485:1;23482:13;23479:2;;;23568:1;23559:6;23554:3;23550:16;23543:27;23479:2;23328:258;;;;:::o;23592:320::-;23636:6;23673:1;23667:4;23663:12;23653:22;;23720:1;23714:4;23710:12;23741:18;23731:2;;23797:4;23789:6;23785:17;23775:27;;23731:2;23859;23851:6;23848:14;23828:18;23825:38;23822:2;;;23878:18;;:::i;:::-;23822:2;23643:269;;;;:::o;23918:233::-;23957:3;23980:24;23998:5;23980:24;:::i;:::-;23971:33;;24026:66;24019:5;24016:77;24013:2;;;24096:18;;:::i;:::-;24013:2;24143:1;24136:5;24132:13;24125:20;;23961:190;;;:::o;24157:180::-;24205:77;24202:1;24195:88;24302:4;24299:1;24292:15;24326:4;24323:1;24316:15;24343:180;24391:77;24388:1;24381:88;24488:4;24485:1;24478:15;24512:4;24509:1;24502:15;24529:180;24577:77;24574:1;24567:88;24674:4;24671:1;24664:15;24698:4;24695:1;24688:15;24715:102;24756:6;24807:2;24803:7;24798:2;24791:5;24787:14;24783:28;24773:38;;24763:54;;;:::o;24823:222::-;24963:34;24959:1;24951:6;24947:14;24940:58;25032:5;25027:2;25019:6;25015:15;25008:30;24929:116;:::o;25051:221::-;25191:34;25187:1;25179:6;25175:14;25168:58;25260:4;25255:2;25247:6;25243:15;25236:29;25157:115;:::o;25278:162::-;25418:14;25414:1;25406:6;25402:14;25395:38;25384:56;:::o;25446:225::-;25586:34;25582:1;25574:6;25570:14;25563:58;25655:8;25650:2;25642:6;25638:15;25631:33;25552:119;:::o;25677:221::-;25817:34;25813:1;25805:6;25801:14;25794:58;25886:4;25881:2;25873:6;25869:15;25862:29;25783:115;:::o;25904:222::-;26044:34;26040:1;26032:6;26028:14;26021:58;26113:5;26108:2;26100:6;26096:15;26089:30;26010:116;:::o;26132:224::-;26272:34;26268:1;26260:6;26256:14;26249:58;26341:7;26336:2;26328:6;26324:15;26317:32;26238:118;:::o;26362:225::-;26502:34;26498:1;26490:6;26486:14;26479:58;26571:8;26566:2;26558:6;26554:15;26547:33;26468:119;:::o;26593:227::-;26733:34;26729:1;26721:6;26717:14;26710:58;26802:10;26797:2;26789:6;26785:15;26778:35;26699:121;:::o;26826:229::-;26966:34;26962:1;26954:6;26950:14;26943:58;27035:12;27030:2;27022:6;27018:15;27011:37;26932:123;:::o;27061:220::-;27201:34;27197:1;27189:6;27185:14;27178:58;27270:3;27265:2;27257:6;27253:15;27246:28;27167:114;:::o;27287:227::-;27427:34;27423:1;27415:6;27411:14;27404:58;27496:10;27491:2;27483:6;27479:15;27472:35;27393:121;:::o;27520:182::-;27660:34;27656:1;27648:6;27644:14;27637:58;27626:76;:::o;27708:223::-;27848:34;27844:1;27836:6;27832:14;27825:58;27917:6;27912:2;27904:6;27900:15;27893:31;27814:117;:::o;27937:166::-;28077:18;28073:1;28065:6;28061:14;28054:42;28043:60;:::o;28109:220::-;28249:34;28245:1;28237:6;28233:14;28226:58;28318:3;28313:2;28305:6;28301:15;28294:28;28215:114;:::o;28335:224::-;28475:34;28471:1;28463:6;28459:14;28452:58;28544:7;28539:2;28531:6;28527:15;28520:32;28441:118;:::o;28565:223::-;28705:34;28701:1;28693:6;28689:14;28682:58;28774:6;28769:2;28761:6;28757:15;28750:31;28671:117;:::o;28794:224::-;28934:34;28930:1;28922:6;28918:14;28911:58;29003:7;28998:2;28990:6;28986:15;28979:32;28900:118;:::o;29024:122::-;29097:24;29115:5;29097:24;:::i;:::-;29090:5;29087:35;29077:2;;29136:1;29133;29126:12;29077:2;29067:79;:::o;29152:116::-;29222:21;29237:5;29222:21;:::i;:::-;29215:5;29212:32;29202:2;;29258:1;29255;29248:12;29202:2;29192:76;:::o;29274:122::-;29347:24;29365:5;29347:24;:::i;:::-;29340:5;29337:35;29327:2;;29386:1;29383;29376:12;29327:2;29317:79;:::o

Swarm Source

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