ETH Price: $3,346.46 (-0.61%)
Gas: 5 Gwei

Token

ERC20 ***
 

Overview

Max Total Supply

100 ERC20 ***

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
majinnnnnnnnn.eth
Balance
0.000000000000000109 ERC20 ***

Value
$0.00
0x1e04ac66a73e8b45a2002dd9fde1dc6e51028374
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:
TOP100

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-14
*/

pragma solidity 0.8.0;
// SPDX-License-Identifier: MIT

/*
https://x.com/top100tokeneth
https://t.me/top100tokenportal
https://top100eth.com
*/

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

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

    /**
     /* Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     /* 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:
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     /* Moves `amount` tokens from `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

 /* Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     /* Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     /* Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     /* Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     /* See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     /* 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     /* 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     /* 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

    /**
     /* Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

 /* 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 {
    /**
     /* Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     /* 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 {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

 /* Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     /* Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     /* Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface IUniswapV2ERC20 {
    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;
}

contract TOP100 is ERC20Burnable, Ownable {
    uint256 private constant TOTAL_SUPPLY = 100e18;
    address public marketingWallet;
    uint256 public maxPercentToSwap = 5;
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isTradingEnabled;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account);
    event FeesUpdated(uint256 sellFee, uint256 buyFee);
    event MarketingWalletChanged(address marketingWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    uint256 public sellFee;
    uint256 public buyFee;
    
    bool public isBotProtectionDisabledPermanently;
    uint256 public maxTxAmount;
    uint256 public maxHolding;
    bool public buyCooldownEnabled = true;
    uint256 public buyCooldown = 30;
    mapping(address => bool) public isExempt;
    mapping(address => uint256) public lastBuy;

    constructor (address operator) ERC20("BTCETHBNBXRPSTETHDOGEADASOLTRXDOTMATICSHIBLTCTONWBTCUNIBCHAVAXLINKXLMLEOXMROKBETCATOMHBARFILICPAPTLDOMNTCROQNTARBVETNEARMKROPRETHGRTAAVEALGOXDCKASSTXSANDFRAXEOSSNXWBTEGLDIMXAXSXTZAPETHETABSVFTMMANAINJBGBRNDRFLEXNEOPEPERLBKAVAFLOWGALAXRDXECGTKCSCHZRPLCRVKLAYCETHMIOTAPAXGXAUTFXSFRXETHLUNCTKXMINASUIBTTCSPRGMXRUNEHTDYDXCFXTWTCOMPDASHNXMBONENEXO", "TOP100")
    {
        _mint(owner(), TOTAL_SUPPLY);

        swapTokensAtAmount = TOTAL_SUPPLY / 1000;
        maxHolding = TOTAL_SUPPLY / 50;
        maxTxAmount = TOTAL_SUPPLY / 50;
        marketingWallet = operator;

        sellFee = 20;
        buyFee = 10;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;

        
        isExempt[address(uniswapV2Router)] = true;
        isExempt[owner()] = true;
    }

    receive() external payable {
    }

    function hundred() public onlyOwner {
        require(isTradingEnabled == false, "Trading is already open!");
        isTradingEnabled = true;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function sendETH(address payable recipient, uint256 amount) internal {
        recipient.call{gas : 2300, value : amount}("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    
    function excludeFromFees(address account) external onlyOwner {
        require(!_isExcludedFromFees[account], "Account is already the value of true");
        _isExcludedFromFees[account] = true;

        emit ExcludeFromFees(account);
    }

    function includeInFees(address account) external onlyOwner {
        require(_isExcludedFromFees[account], "Account already included");
        _isExcludedFromFees[account] = false;
    }

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

    function updateFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner {
        require(_sellFee <= 20, "Fees must be less than 20");
        require(_buyFee <= 20, "Fees must be less than 20%");
        sellFee = _sellFee;
        buyFee = _buyFee;

        emit FeesUpdated(sellFee, buyFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "same wallet");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

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

        if (!swapping) {
            _check(from, to, amount);
        }

        uint _buyFee = buyFee;
        uint _sellFee = sellFee;

        if (!isExempt[from] && !isExempt[to]) {
            require(isTradingEnabled, "Trade is not open");
        }

        if (amount == 0) {
            return;
        }

        bool takeFee = !swapping;

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

        uint256 toSwap = balanceOf(address(this));

        bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee;
        if (canSwap &&
            !swapping) {
            swapping = true;
            uint256 pairBalance = balanceOf(uniswapV2Pair);
            if (toSwap > pairBalance * maxPercentToSwap / 100) {
                toSwap = pairBalance * maxPercentToSwap / 100;
            }
            swapAndSendMarketing(toSwap);
            swapping = false;
        }

        if (takeFee && to == uniswapV2Pair && _sellFee > 0) {
            uint256 fees = (amount * _sellFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }
        else if (takeFee && from == uniswapV2Pair && _buyFee > 0) {
            uint256 fees = (amount * _buyFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }

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

    function swapAndSendMarketing(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp) {}
        catch {
        }

        uint256 newBalance = address(this).balance;
        sendETH(payable(marketingWallet), newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount > 0);
        swapTokensAtAmount = newAmount;
    }

    function setMaxPercentToSwap(uint256 newAmount) external onlyOwner {
        require(newAmount > 1, "too low");
        require(newAmount <= 10, "too high");
        maxPercentToSwap = newAmount;
    }

    function _check(
        address from,
        address to,
        uint256 amount
    ) internal {
        
        if (!isBotProtectionDisabledPermanently) {
            
            if (!isSpecialAddresses(from, to) && !isExempt[to]) {

                _checkBuyCooldown(from, to);
                _checkMaxTxAmount(to, amount);
                
                _checkMaxHoldingLimit(to, amount);
            }
        }

    }

    function _checkBuyCooldown(address from, address to) internal {
        if (buyCooldownEnabled && from == uniswapV2Pair) {
            require(block.timestamp - lastBuy[tx.origin] >= buyCooldown, "buy cooldown");
            lastBuy[tx.origin] = block.timestamp;
        }

    }

    function _checkMaxTxAmount(address to, uint256 amount) internal view {
        require(amount <= maxTxAmount, "Amount exceeds max");

    }

    function _checkMaxHoldingLimit(address to, uint256 amount) internal view {
        if (to == uniswapV2Pair) {
            return;
        }

        require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max");

    }

    function isSpecialAddresses(address from, address to) view public returns (bool){
        
        return (from == owner() || to == owner() || from == address(this) || to == address(this));
    }

    function disableBotProtectionPermanently() external onlyOwner {
        isBotProtectionDisabledPermanently = true;
    }

    function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner {
        maxTxAmount = maxTxAmount_;
    }


    function setMaxHolding(uint256 maxHolding_) external onlyOwner {
        maxHolding = maxHolding_;
    }

    function setExempt(address who, bool status) public onlyOwner {
        isExempt[who] = status;
    }

    function setBuyCooldownStatus(bool status) external onlyOwner {
        buyCooldownEnabled = status;
    }

    function setBuyCooldown(uint256 buyCooldown_) external onlyOwner {
        buyCooldown = buyCooldown_;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","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":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hundred","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBotProtectionDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecialAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyCooldown_","type":"uint256"}],"name":"setBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setBuyCooldownStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHolding_","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxPercentToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260056007556001601360006101000a81548160ff021916908315150217905550601e6014553480156200003657600080fd5b50604051620057a6380380620057a683398181016040528101906200005c919062000d3e565b60405180610180016040528061015681526020016200565061015691396040518060400160405280600681526020017f544f5031303000000000000000000000000000000000000000000000000000008152508160039080519060200190620000c792919062000c77565b508060049080519060200190620000e092919062000c77565b50505062000103620000f7620006f260201b60201c565b620006fa60201b60201c565b6200012d62000117620007c060201b60201c565b68056bc75e2d63100000620007ea60201b60201c565b6103e868056bc75e2d6310000062000146919062001046565b600a81905550603268056bc75e2d6310000062000164919062001046565b601281905550603268056bc75e2d6310000062000182919062001046565b60118190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014600e81905550600a600f819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023b57600080fd5b505afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000276919062000d3e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d957600080fd5b505afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000d3e565b6040518363ffffffff1660e01b81526004016200033392919062000f06565b602060405180830381600087803b1580156200034e57600080fd5b505af115801562000363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000389919062000d3e565b905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200046230600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200096360201b60201c565b6200047581600162000b3660201b60201c565b6001600c60006200048b620007c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600062000698620007c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505062001199565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200085d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008549062000f99565b60405180910390fd5b620008716000838362000c6d60201b60201c565b806002600082825462000885919062000fe9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008dc919062000fe9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000943919062000fbb565b60405180910390a36200095f6000838362000c7260201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cd9062000f77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a409062000f33565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b29919062000fbb565b60405180910390a3505050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc39062000f55565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b82805462000c8590620010bc565b90600052602060002090601f01602090048101928262000ca9576000855562000cf5565b82601f1062000cc457805160ff191683800117855562000cf5565b8280016001018555821562000cf5579182015b8281111562000cf457825182559160200191906001019062000cd7565b5b50905062000d04919062000d08565b5090565b5b8082111562000d2357600081600090555060010162000d09565b5090565b60008151905062000d38816200117f565b92915050565b60006020828403121562000d5157600080fd5b600062000d618482850162000d27565b91505092915050565b62000d75816200107e565b82525050565b600062000d8a60228362000fd8565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000df260388362000fd8565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b600062000e5a60248362000fd8565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000ec2601f8362000fd8565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000f0081620010b2565b82525050565b600060408201905062000f1d600083018562000d6a565b62000f2c602083018462000d6a565b9392505050565b6000602082019050818103600083015262000f4e8162000d7b565b9050919050565b6000602082019050818103600083015262000f708162000de3565b9050919050565b6000602082019050818103600083015262000f928162000e4b565b9050919050565b6000602082019050818103600083015262000fb48162000eb3565b9050919050565b600060208201905062000fd2600083018462000ef5565b92915050565b600082825260208201905092915050565b600062000ff682620010b2565b91506200100383620010b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200103b576200103a620010f2565b5b828201905092915050565b60006200105382620010b2565b91506200106083620010b2565b92508262001073576200107262001121565b5b828204905092915050565b60006200108b8262001092565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620010d557607f821691505b60208210811415620010ec57620010eb62001150565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200118a816200107e565b81146200119657600080fd5b50565b6144a780620011a96000396000f3fe6080604052600436106102b25760003560e01c806375f0a87411610175578063afa4f3b2116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063afa4f3b214610920578063b62496f514610949578063bb85c6d114610986578063c1adf7bc146109af578063c29632bd146109ec578063dd62ed3e14610a15576102b9565b80639bc7c8c01161012e5780639bc7c8c0146107ec5780639c7d15a2146108155780639fde54f514610840578063a457c2d714610869578063a9059cbb146108a6578063ad5dff73146108e3576102b9565b806375f0a874146106ee57806379cc6790146107195780638c0b5e22146107425780638da5cb5b1461076d57806395d89b41146107985780639a7a23d6146107c3576102b9565b806342966c6811610219578063617fe0ed116101d2578063617fe0ed146105f25780636457c4c31461061d5780636db7943714610646578063704fbfe51461066f57806370a082311461069a578063715018a6146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e5780635bff9a27146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b8063064a59d0146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806316a2f82a1461037c57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e09190613cd8565b60405180910390f35b3480156102f557600080fd5b506102fe610b88565b60405161030b9190613d0e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906131c3565b610c1a565b6040516103489190613cd8565b60405180910390f35b34801561035d57600080fd5b50610366610c3d565b6040516103739190613cf3565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906130aa565b610c63565b005b3480156103b157600080fd5b506103ba610d52565b6040516103c79190614070565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613251565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613138565b610df5565b60405161042d9190613cd8565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b6040516104589190614070565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b604051610483919061410e565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae9190614070565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906131c3565b610e39565b6040516104eb9190613cd8565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613251565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613cd8565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a9190614070565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b6040516105959190613c94565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906130aa565b610ec3565b6040516105d29190613cd8565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b005b3480156105fe57600080fd5b50610607610f94565b6040516106149190613cd8565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906131ff565b610fa7565b005b34801561065257600080fd5b5061066d600480360381019061066891906132a3565b610fcc565b005b34801561067b57600080fd5b506106846110ab565b6040516106919190614070565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906130aa565b6110b1565b6040516106ce9190614070565b60405180910390f35b3480156106e357600080fd5b506106ec6110f9565b005b3480156106fa57600080fd5b5061070361110d565b6040516107109190613c94565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906131c3565b611133565b005b34801561074e57600080fd5b50610757611153565b6040516107649190614070565b60405180910390f35b34801561077957600080fd5b50610782611159565b60405161078f9190613c94565b60405180910390f35b3480156107a457600080fd5b506107ad611183565b6040516107ba9190613d0e565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613187565b611215565b005b3480156107f857600080fd5b50610813600480360381019061080e9190613251565b6112bc565b005b34801561082157600080fd5b5061082a6112ce565b6040516108379190614070565b60405180910390f35b34801561084c57600080fd5b5061086760048036038101906108629190613187565b6112d4565b005b34801561087557600080fd5b50610890600480360381019061088b91906131c3565b611337565b60405161089d9190613cd8565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906131c3565b6113ae565b6040516108da9190613cd8565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906130aa565b6113d1565b6040516109179190613cd8565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613251565b6113f1565b005b34801561095557600080fd5b50610970600480360381019061096b91906130aa565b611410565b60405161097d9190613cd8565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906130aa565b611430565b005b3480156109bb57600080fd5b506109d660048036038101906109d191906130aa565b611566565b6040516109e39190614070565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613251565b61157e565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906130fc565b611590565b604051610a499190614070565b60405180910390f35b348015610a5e57600080fd5b50610a67611617565b604051610a749190614070565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906130fc565b61161d565b604051610ab19190613cd8565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906130aa565b611706565b005b348015610aef57600080fd5b50610af8611839565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613251565b61185e565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906130aa565b611870565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906130aa565b6118f4565b005b600b60009054906101000a900460ff1681565b606060038054610b979061435c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc39061435c565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905090565b600080610c25611b12565b9050610c32818585611b1a565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c6b611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613f30565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d64611ce5565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613fd0565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613ed0565b60405180910390fd5b8060078190555050565b600080610e00611b12565b9050610e0d858285611d63565b610e18858585611def565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611b12565b9050610e65818585610e568589611590565b610e609190614189565b611b1a565b600191505092915050565b610e81610e7b611b12565b82612374565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f21611ce5565b60001515600b60009054906101000a900460ff16151514610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90613e50565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b601360009054906101000a900460ff1681565b610faf611ce5565b80601360006101000a81548160ff02191690831515021790555050565b610fd4611ce5565b6014821115611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90613f50565b60405180910390fd5b601481111561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613e10565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f5460405161109f9291906140e5565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611101611ce5565b61110b600061254b565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111458261113f611b12565b83611d63565b61114f8282612374565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111929061435c565b80601f01602080910402602001604051908101604052809291908181526020018280546111be9061435c565b801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b5050505050905090565b61121d611ce5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590613e70565b60405180910390fd5b6112b88282612611565b5050565b6112c4611ce5565b8060128190555050565b60075481565b6112dc611ce5565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611342611b12565b905060006113508286611590565b905083811015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614050565b60405180910390fd5b6113a28286868403611b1a565b60019250505092915050565b6000806113b9611b12565b90506113c6818585611def565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b6113f9611ce5565b6000811161140657600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611438611ce5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614030565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161155b9190613c94565b60405180910390a150565b60166020528060005260406000206000915090505481565b611586611ce5565b8060148190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611627611159565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806116925750611663611159565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fe57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170e611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613e90565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b611841611ce5565b6001601060006101000a81548160ff021916908315150217905550565b611866611ce5565b8060118190555050565b611878611ce5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d90565b60405180910390fd5b6118f18161254b565b50565b6118fc611ce5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613ff0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ec573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e6573d6000803e3d6000fd5b50611b0f565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2c9190613c94565b60206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061327a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ab9929190613caf565b602060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613228565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613db0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd89190614070565b60405180910390a3505050565b611ced611b12565b73ffffffffffffffffffffffffffffffffffffffff16611d0b611159565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613f10565b60405180910390fd5b565b6000611d6f8484611590565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de95781811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613df0565b60405180910390fd5b611de88484848403611b1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613fb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613d50565b60405180910390fd5b600960149054906101000a900460ff16611eef57611eee838383612745565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ff657600b60009054906101000a900460ff16611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d30565b60405180910390fd5b5b600083141561200657505061236f565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120bc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120c657600090505b60006120d1306110b1565b90506000600a5482101580156120e75750600082115b801561213d5750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121465750825b90508080156121625750600960149054906101000a900460ff16155b15612215576001600960146101000a81548160ff02191690831515021790555060006121af600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110b1565b90506064600754826121c19190614210565b6121cb91906141df565b8311156121ef576064600754826121e29190614210565b6121ec91906141df565b92505b6121f8836127e4565b6000600960146101000a81548160ff021916908315150217905550505b82801561226f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b801561227b5750600084115b156122bb576000606485886122909190614210565b61229a91906141df565b905080876122a8919061426a565b96506122b5893083612ae9565b5061235e565b8280156123155750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156123215750600085115b1561235d576000606486886123369190614210565b61234091906141df565b9050808761234e919061426a565b965061235b893083612ae9565b505b5b612369888888612ae9565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613f70565b60405180910390fd5b6123f082600083612d6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613d70565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124cd919061426a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125329190614070565b60405180910390a361254683600084612d6f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613dd0565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127df57612763838361161d565b1580156127ba5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127de576127c98383612d74565b6127d38282612eba565b6127dd8282612f03565b5b5b505050565b6000600267ffffffffffffffff811115612827577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128555781602001602082028036833780820191505090505b5090503081600081518110612893577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d91906130d3565b816001815181106129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a4595949392919061408b565b600060405180830381600087803b158015612a5f57600080fd5b505af1925050508015612a70575060015b612a7957612a7a565b5b6000479050612aab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fbb565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612adc9291906140e5565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090613fb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613d50565b60405180910390fd5b612bd4838383612d6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190613e30565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ced9190614189565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d519190614070565b60405180910390a3612d64848484612d6f565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612ddd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612eb657601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612e30919061426a565b1015612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890613f90565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613ef0565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e57612fb7565b60125481612f6b846110b1565b612f759190614189565b1115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613eb0565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fe290613c7f565b600060405180830381858888f193505050503d8060008114613020576040519150601f19603f3d011682016040523d82523d6000602084013e613025565b606091505b5050505050565b60008135905061303b8161442c565b92915050565b6000815190506130508161442c565b92915050565b60008135905061306581614443565b92915050565b60008151905061307a81614443565b92915050565b60008135905061308f8161445a565b92915050565b6000815190506130a48161445a565b92915050565b6000602082840312156130bc57600080fd5b60006130ca8482850161302c565b91505092915050565b6000602082840312156130e557600080fd5b60006130f384828501613041565b91505092915050565b6000806040838503121561310f57600080fd5b600061311d8582860161302c565b925050602061312e8582860161302c565b9150509250929050565b60008060006060848603121561314d57600080fd5b600061315b8682870161302c565b935050602061316c8682870161302c565b925050604061317d86828701613080565b9150509250925092565b6000806040838503121561319a57600080fd5b60006131a88582860161302c565b92505060206131b985828601613056565b9150509250929050565b600080604083850312156131d657600080fd5b60006131e48582860161302c565b92505060206131f585828601613080565b9150509250929050565b60006020828403121561321157600080fd5b600061321f84828501613056565b91505092915050565b60006020828403121561323a57600080fd5b60006132488482850161306b565b91505092915050565b60006020828403121561326357600080fd5b600061327184828501613080565b91505092915050565b60006020828403121561328c57600080fd5b600061329a84828501613095565b91505092915050565b600080604083850312156132b657600080fd5b60006132c485828601613080565b92505060206132d585828601613080565b9150509250929050565b60006132eb83836132f7565b60208301905092915050565b6133008161429e565b82525050565b61330f8161429e565b82525050565b600061332082614139565b61332a818561415c565b935061333583614129565b8060005b8381101561336657815161334d88826132df565b97506133588361414f565b925050600181019050613339565b5085935050505092915050565b61337c816142b0565b82525050565b61338b816142f3565b82525050565b61339a81614317565b82525050565b60006133ab82614144565b6133b58185614178565b93506133c5818560208601614329565b6133ce8161441b565b840191505092915050565b60006133e6601183614178565b91507f5472616465206973206e6f74206f70656e0000000000000000000000000000006000830152602082019050919050565b6000613426602383614178565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348c602283614178565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134f2602683614178565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613558602283614178565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135be603883614178565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b6000613624601d83614178565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613664601a83614178565b91507f46656573206d757374206265206c657373207468616e203230250000000000006000830152602082019050919050565b60006136a4602683614178565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061370a601883614178565b91507f54726164696e6720697320616c7265616479206f70656e2100000000000000006000830152602082019050919050565b600061374a604183614178565b91507f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008301527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208301527f73000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006137d6602483614178565b91507f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008301527f74727565000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061383c601883614178565b91507f4d617820686f6c64696e67206578636565646564206d617800000000000000006000830152602082019050919050565b600061387c600883614178565b91507f746f6f20686967680000000000000000000000000000000000000000000000006000830152602082019050919050565b60006138bc601283614178565b91507f416d6f756e742065786365656473206d617800000000000000000000000000006000830152602082019050919050565b60006138fc602083614178565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061393c601883614178565b91507f4163636f756e7420616c726561647920696e636c7564656400000000000000006000830152602082019050919050565b600061397c601983614178565b91507f46656573206d757374206265206c657373207468616e203230000000000000006000830152602082019050919050565b60006139bc602183614178565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a22600c83614178565b91507f62757920636f6f6c646f776e00000000000000000000000000000000000000006000830152602082019050919050565b6000613a62602583614178565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ac8600783614178565b91507f746f6f206c6f77000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613b08602083614178565b91507f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736000830152602082019050919050565b6000613b4860008361416d565b9150600082019050919050565b6000613b62602483614178565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bc8600b83614178565b91507f73616d652077616c6c65740000000000000000000000000000000000000000006000830152602082019050919050565b6000613c08602583614178565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613c6a816142dc565b82525050565b613c79816142e6565b82525050565b6000613c8a82613b3b565b9150819050919050565b6000602082019050613ca96000830184613306565b92915050565b6000604082019050613cc46000830185613306565b613cd16020830184613c61565b9392505050565b6000602082019050613ced6000830184613373565b92915050565b6000602082019050613d086000830184613382565b92915050565b60006020820190508181036000830152613d2881846133a0565b905092915050565b60006020820190508181036000830152613d49816133d9565b9050919050565b60006020820190508181036000830152613d6981613419565b9050919050565b60006020820190508181036000830152613d898161347f565b9050919050565b60006020820190508181036000830152613da9816134e5565b9050919050565b60006020820190508181036000830152613dc98161354b565b9050919050565b60006020820190508181036000830152613de9816135b1565b9050919050565b60006020820190508181036000830152613e0981613617565b9050919050565b60006020820190508181036000830152613e2981613657565b9050919050565b60006020820190508181036000830152613e4981613697565b9050919050565b60006020820190508181036000830152613e69816136fd565b9050919050565b60006020820190508181036000830152613e898161373d565b9050919050565b60006020820190508181036000830152613ea9816137c9565b9050919050565b60006020820190508181036000830152613ec98161382f565b9050919050565b60006020820190508181036000830152613ee98161386f565b9050919050565b60006020820190508181036000830152613f09816138af565b9050919050565b60006020820190508181036000830152613f29816138ef565b9050919050565b60006020820190508181036000830152613f498161392f565b9050919050565b60006020820190508181036000830152613f698161396f565b9050919050565b60006020820190508181036000830152613f89816139af565b9050919050565b60006020820190508181036000830152613fa981613a15565b9050919050565b60006020820190508181036000830152613fc981613a55565b9050919050565b60006020820190508181036000830152613fe981613abb565b9050919050565b6000602082019050818103600083015261400981613afb565b9050919050565b6000602082019050818103600083015261402981613b55565b9050919050565b6000602082019050818103600083015261404981613bbb565b9050919050565b6000602082019050818103600083015261406981613bfb565b9050919050565b60006020820190506140856000830184613c61565b92915050565b600060a0820190506140a06000830188613c61565b6140ad6020830187613391565b81810360408301526140bf8186613315565b90506140ce6060830185613306565b6140db6080830184613c61565b9695505050505050565b60006040820190506140fa6000830185613c61565b6141076020830184613c61565b9392505050565b60006020820190506141236000830184613c70565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614194826142dc565b915061419f836142dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d4576141d361438e565b5b828201905092915050565b60006141ea826142dc565b91506141f5836142dc565b925082614205576142046143bd565b5b828204905092915050565b600061421b826142dc565b9150614226836142dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561425f5761425e61438e565b5b828202905092915050565b6000614275826142dc565b9150614280836142dc565b9250828210156142935761429261438e565b5b828203905092915050565b60006142a9826142bc565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006142fe82614305565b9050919050565b6000614310826142bc565b9050919050565b6000614322826142dc565b9050919050565b60005b8381101561434757808201518184015260208101905061432c565b83811115614356576000848401525b50505050565b6000600282049050600182168061437457607f821691505b60208210811415614388576143876143ec565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6144358161429e565b811461444057600080fd5b50565b61444c816142b0565b811461445757600080fd5b50565b614463816142dc565b811461446e57600080fd5b5056fea2646970667358221220de8a8e159695ee689ad5647d51c1f7420b76eb3ddc134d6f0270c54f1603531464736f6c63430008000033425443455448424e425852505354455448444f4745414441534f4c545258444f544d41544943534849424c5443544f4e57425443554e49424348415641584c494e4b584c4d4c454f584d524f4b4245544341544f4d4842415246494c4943504150544c444f4d4e5443524f514e544152425645544e4541524d4b524f505245544847525441415645414c474f5844434b415353545853414e4446524158454f53534e5857425445474c44494d5841585358545a415045544845544142535646544d4d414e41494e4a424742524e4452464c45584e454f50455045524c424b415641464c4f5747414c4158524458454347544b435343485a52504c4352564b4c4159434554484d494f544150415847584155544658534652584554484c554e43544b584d494e4153554942545443535052474d5852554e45485444594458434658545754434f4d50444153484e584d424f4e454e45584f0000000000000000000000006ccc068d52df778e1d6aaccc7bc9e47ed23bec44

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806375f0a87411610175578063afa4f3b2116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063afa4f3b214610920578063b62496f514610949578063bb85c6d114610986578063c1adf7bc146109af578063c29632bd146109ec578063dd62ed3e14610a15576102b9565b80639bc7c8c01161012e5780639bc7c8c0146107ec5780639c7d15a2146108155780639fde54f514610840578063a457c2d714610869578063a9059cbb146108a6578063ad5dff73146108e3576102b9565b806375f0a874146106ee57806379cc6790146107195780638c0b5e22146107425780638da5cb5b1461076d57806395d89b41146107985780639a7a23d6146107c3576102b9565b806342966c6811610219578063617fe0ed116101d2578063617fe0ed146105f25780636457c4c31461061d5780636db7943714610646578063704fbfe51461066f57806370a082311461069a578063715018a6146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e5780635bff9a27146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b8063064a59d0146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806316a2f82a1461037c57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e09190613cd8565b60405180910390f35b3480156102f557600080fd5b506102fe610b88565b60405161030b9190613d0e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906131c3565b610c1a565b6040516103489190613cd8565b60405180910390f35b34801561035d57600080fd5b50610366610c3d565b6040516103739190613cf3565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906130aa565b610c63565b005b3480156103b157600080fd5b506103ba610d52565b6040516103c79190614070565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613251565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613138565b610df5565b60405161042d9190613cd8565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b6040516104589190614070565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b604051610483919061410e565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae9190614070565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906131c3565b610e39565b6040516104eb9190613cd8565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613251565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613cd8565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a9190614070565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b6040516105959190613c94565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906130aa565b610ec3565b6040516105d29190613cd8565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b005b3480156105fe57600080fd5b50610607610f94565b6040516106149190613cd8565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906131ff565b610fa7565b005b34801561065257600080fd5b5061066d600480360381019061066891906132a3565b610fcc565b005b34801561067b57600080fd5b506106846110ab565b6040516106919190614070565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906130aa565b6110b1565b6040516106ce9190614070565b60405180910390f35b3480156106e357600080fd5b506106ec6110f9565b005b3480156106fa57600080fd5b5061070361110d565b6040516107109190613c94565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906131c3565b611133565b005b34801561074e57600080fd5b50610757611153565b6040516107649190614070565b60405180910390f35b34801561077957600080fd5b50610782611159565b60405161078f9190613c94565b60405180910390f35b3480156107a457600080fd5b506107ad611183565b6040516107ba9190613d0e565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613187565b611215565b005b3480156107f857600080fd5b50610813600480360381019061080e9190613251565b6112bc565b005b34801561082157600080fd5b5061082a6112ce565b6040516108379190614070565b60405180910390f35b34801561084c57600080fd5b5061086760048036038101906108629190613187565b6112d4565b005b34801561087557600080fd5b50610890600480360381019061088b91906131c3565b611337565b60405161089d9190613cd8565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906131c3565b6113ae565b6040516108da9190613cd8565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906130aa565b6113d1565b6040516109179190613cd8565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613251565b6113f1565b005b34801561095557600080fd5b50610970600480360381019061096b91906130aa565b611410565b60405161097d9190613cd8565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906130aa565b611430565b005b3480156109bb57600080fd5b506109d660048036038101906109d191906130aa565b611566565b6040516109e39190614070565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613251565b61157e565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906130fc565b611590565b604051610a499190614070565b60405180910390f35b348015610a5e57600080fd5b50610a67611617565b604051610a749190614070565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906130fc565b61161d565b604051610ab19190613cd8565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906130aa565b611706565b005b348015610aef57600080fd5b50610af8611839565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613251565b61185e565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906130aa565b611870565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906130aa565b6118f4565b005b600b60009054906101000a900460ff1681565b606060038054610b979061435c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc39061435c565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905090565b600080610c25611b12565b9050610c32818585611b1a565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c6b611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613f30565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d64611ce5565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613fd0565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613ed0565b60405180910390fd5b8060078190555050565b600080610e00611b12565b9050610e0d858285611d63565b610e18858585611def565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611b12565b9050610e65818585610e568589611590565b610e609190614189565b611b1a565b600191505092915050565b610e81610e7b611b12565b82612374565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f21611ce5565b60001515600b60009054906101000a900460ff16151514610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90613e50565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b601360009054906101000a900460ff1681565b610faf611ce5565b80601360006101000a81548160ff02191690831515021790555050565b610fd4611ce5565b6014821115611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90613f50565b60405180910390fd5b601481111561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613e10565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f5460405161109f9291906140e5565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611101611ce5565b61110b600061254b565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111458261113f611b12565b83611d63565b61114f8282612374565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111929061435c565b80601f01602080910402602001604051908101604052809291908181526020018280546111be9061435c565b801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b5050505050905090565b61121d611ce5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590613e70565b60405180910390fd5b6112b88282612611565b5050565b6112c4611ce5565b8060128190555050565b60075481565b6112dc611ce5565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611342611b12565b905060006113508286611590565b905083811015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614050565b60405180910390fd5b6113a28286868403611b1a565b60019250505092915050565b6000806113b9611b12565b90506113c6818585611def565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b6113f9611ce5565b6000811161140657600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611438611ce5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614030565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161155b9190613c94565b60405180910390a150565b60166020528060005260406000206000915090505481565b611586611ce5565b8060148190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611627611159565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806116925750611663611159565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fe57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170e611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613e90565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b611841611ce5565b6001601060006101000a81548160ff021916908315150217905550565b611866611ce5565b8060118190555050565b611878611ce5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d90565b60405180910390fd5b6118f18161254b565b50565b6118fc611ce5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613ff0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ec573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e6573d6000803e3d6000fd5b50611b0f565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2c9190613c94565b60206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061327a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ab9929190613caf565b602060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613228565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613db0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd89190614070565b60405180910390a3505050565b611ced611b12565b73ffffffffffffffffffffffffffffffffffffffff16611d0b611159565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613f10565b60405180910390fd5b565b6000611d6f8484611590565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de95781811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613df0565b60405180910390fd5b611de88484848403611b1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613fb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613d50565b60405180910390fd5b600960149054906101000a900460ff16611eef57611eee838383612745565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ff657600b60009054906101000a900460ff16611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d30565b60405180910390fd5b5b600083141561200657505061236f565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120bc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120c657600090505b60006120d1306110b1565b90506000600a5482101580156120e75750600082115b801561213d5750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121465750825b90508080156121625750600960149054906101000a900460ff16155b15612215576001600960146101000a81548160ff02191690831515021790555060006121af600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110b1565b90506064600754826121c19190614210565b6121cb91906141df565b8311156121ef576064600754826121e29190614210565b6121ec91906141df565b92505b6121f8836127e4565b6000600960146101000a81548160ff021916908315150217905550505b82801561226f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b801561227b5750600084115b156122bb576000606485886122909190614210565b61229a91906141df565b905080876122a8919061426a565b96506122b5893083612ae9565b5061235e565b8280156123155750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156123215750600085115b1561235d576000606486886123369190614210565b61234091906141df565b9050808761234e919061426a565b965061235b893083612ae9565b505b5b612369888888612ae9565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613f70565b60405180910390fd5b6123f082600083612d6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613d70565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124cd919061426a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125329190614070565b60405180910390a361254683600084612d6f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613dd0565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127df57612763838361161d565b1580156127ba5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127de576127c98383612d74565b6127d38282612eba565b6127dd8282612f03565b5b5b505050565b6000600267ffffffffffffffff811115612827577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128555781602001602082028036833780820191505090505b5090503081600081518110612893577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d91906130d3565b816001815181106129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a4595949392919061408b565b600060405180830381600087803b158015612a5f57600080fd5b505af1925050508015612a70575060015b612a7957612a7a565b5b6000479050612aab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fbb565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612adc9291906140e5565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090613fb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613d50565b60405180910390fd5b612bd4838383612d6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190613e30565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ced9190614189565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d519190614070565b60405180910390a3612d64848484612d6f565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612ddd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612eb657601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612e30919061426a565b1015612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890613f90565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613ef0565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e57612fb7565b60125481612f6b846110b1565b612f759190614189565b1115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613eb0565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fe290613c7f565b600060405180830381858888f193505050503d8060008114613020576040519150601f19603f3d011682016040523d82523d6000602084013e613025565b606091505b5050505050565b60008135905061303b8161442c565b92915050565b6000815190506130508161442c565b92915050565b60008135905061306581614443565b92915050565b60008151905061307a81614443565b92915050565b60008135905061308f8161445a565b92915050565b6000815190506130a48161445a565b92915050565b6000602082840312156130bc57600080fd5b60006130ca8482850161302c565b91505092915050565b6000602082840312156130e557600080fd5b60006130f384828501613041565b91505092915050565b6000806040838503121561310f57600080fd5b600061311d8582860161302c565b925050602061312e8582860161302c565b9150509250929050565b60008060006060848603121561314d57600080fd5b600061315b8682870161302c565b935050602061316c8682870161302c565b925050604061317d86828701613080565b9150509250925092565b6000806040838503121561319a57600080fd5b60006131a88582860161302c565b92505060206131b985828601613056565b9150509250929050565b600080604083850312156131d657600080fd5b60006131e48582860161302c565b92505060206131f585828601613080565b9150509250929050565b60006020828403121561321157600080fd5b600061321f84828501613056565b91505092915050565b60006020828403121561323a57600080fd5b60006132488482850161306b565b91505092915050565b60006020828403121561326357600080fd5b600061327184828501613080565b91505092915050565b60006020828403121561328c57600080fd5b600061329a84828501613095565b91505092915050565b600080604083850312156132b657600080fd5b60006132c485828601613080565b92505060206132d585828601613080565b9150509250929050565b60006132eb83836132f7565b60208301905092915050565b6133008161429e565b82525050565b61330f8161429e565b82525050565b600061332082614139565b61332a818561415c565b935061333583614129565b8060005b8381101561336657815161334d88826132df565b97506133588361414f565b925050600181019050613339565b5085935050505092915050565b61337c816142b0565b82525050565b61338b816142f3565b82525050565b61339a81614317565b82525050565b60006133ab82614144565b6133b58185614178565b93506133c5818560208601614329565b6133ce8161441b565b840191505092915050565b60006133e6601183614178565b91507f5472616465206973206e6f74206f70656e0000000000000000000000000000006000830152602082019050919050565b6000613426602383614178565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348c602283614178565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134f2602683614178565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613558602283614178565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135be603883614178565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b6000613624601d83614178565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613664601a83614178565b91507f46656573206d757374206265206c657373207468616e203230250000000000006000830152602082019050919050565b60006136a4602683614178565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061370a601883614178565b91507f54726164696e6720697320616c7265616479206f70656e2100000000000000006000830152602082019050919050565b600061374a604183614178565b91507f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008301527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208301527f73000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006137d6602483614178565b91507f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008301527f74727565000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061383c601883614178565b91507f4d617820686f6c64696e67206578636565646564206d617800000000000000006000830152602082019050919050565b600061387c600883614178565b91507f746f6f20686967680000000000000000000000000000000000000000000000006000830152602082019050919050565b60006138bc601283614178565b91507f416d6f756e742065786365656473206d617800000000000000000000000000006000830152602082019050919050565b60006138fc602083614178565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061393c601883614178565b91507f4163636f756e7420616c726561647920696e636c7564656400000000000000006000830152602082019050919050565b600061397c601983614178565b91507f46656573206d757374206265206c657373207468616e203230000000000000006000830152602082019050919050565b60006139bc602183614178565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a22600c83614178565b91507f62757920636f6f6c646f776e00000000000000000000000000000000000000006000830152602082019050919050565b6000613a62602583614178565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ac8600783614178565b91507f746f6f206c6f77000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613b08602083614178565b91507f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736000830152602082019050919050565b6000613b4860008361416d565b9150600082019050919050565b6000613b62602483614178565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bc8600b83614178565b91507f73616d652077616c6c65740000000000000000000000000000000000000000006000830152602082019050919050565b6000613c08602583614178565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613c6a816142dc565b82525050565b613c79816142e6565b82525050565b6000613c8a82613b3b565b9150819050919050565b6000602082019050613ca96000830184613306565b92915050565b6000604082019050613cc46000830185613306565b613cd16020830184613c61565b9392505050565b6000602082019050613ced6000830184613373565b92915050565b6000602082019050613d086000830184613382565b92915050565b60006020820190508181036000830152613d2881846133a0565b905092915050565b60006020820190508181036000830152613d49816133d9565b9050919050565b60006020820190508181036000830152613d6981613419565b9050919050565b60006020820190508181036000830152613d898161347f565b9050919050565b60006020820190508181036000830152613da9816134e5565b9050919050565b60006020820190508181036000830152613dc98161354b565b9050919050565b60006020820190508181036000830152613de9816135b1565b9050919050565b60006020820190508181036000830152613e0981613617565b9050919050565b60006020820190508181036000830152613e2981613657565b9050919050565b60006020820190508181036000830152613e4981613697565b9050919050565b60006020820190508181036000830152613e69816136fd565b9050919050565b60006020820190508181036000830152613e898161373d565b9050919050565b60006020820190508181036000830152613ea9816137c9565b9050919050565b60006020820190508181036000830152613ec98161382f565b9050919050565b60006020820190508181036000830152613ee98161386f565b9050919050565b60006020820190508181036000830152613f09816138af565b9050919050565b60006020820190508181036000830152613f29816138ef565b9050919050565b60006020820190508181036000830152613f498161392f565b9050919050565b60006020820190508181036000830152613f698161396f565b9050919050565b60006020820190508181036000830152613f89816139af565b9050919050565b60006020820190508181036000830152613fa981613a15565b9050919050565b60006020820190508181036000830152613fc981613a55565b9050919050565b60006020820190508181036000830152613fe981613abb565b9050919050565b6000602082019050818103600083015261400981613afb565b9050919050565b6000602082019050818103600083015261402981613b55565b9050919050565b6000602082019050818103600083015261404981613bbb565b9050919050565b6000602082019050818103600083015261406981613bfb565b9050919050565b60006020820190506140856000830184613c61565b92915050565b600060a0820190506140a06000830188613c61565b6140ad6020830187613391565b81810360408301526140bf8186613315565b90506140ce6060830185613306565b6140db6080830184613c61565b9695505050505050565b60006040820190506140fa6000830185613c61565b6141076020830184613c61565b9392505050565b60006020820190506141236000830184613c70565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614194826142dc565b915061419f836142dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d4576141d361438e565b5b828201905092915050565b60006141ea826142dc565b91506141f5836142dc565b925082614205576142046143bd565b5b828204905092915050565b600061421b826142dc565b9150614226836142dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561425f5761425e61438e565b5b828202905092915050565b6000614275826142dc565b9150614280836142dc565b9250828210156142935761429261438e565b5b828203905092915050565b60006142a9826142bc565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006142fe82614305565b9050919050565b6000614310826142bc565b9050919050565b6000614322826142dc565b9050919050565b60005b8381101561434757808201518184015260208101905061432c565b83811115614356576000848401525b50505050565b6000600282049050600182168061437457607f821691505b60208210811415614388576143876143ec565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6144358161429e565b811461444057600080fd5b50565b61444c816142b0565b811461445757600080fd5b50565b614463816142dc565b811461446e57600080fd5b5056fea2646970667358221220de8a8e159695ee689ad5647d51c1f7420b76eb3ddc134d6f0270c54f1603531464736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006ccc068d52df778e1d6aaccc7bc9e47ed23bec44

-----Decoded View---------------
Arg [0] : operator (address): 0x6CcC068d52DF778E1d6Aaccc7Bc9E47ed23BEc44

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006ccc068d52df778e1d6aaccc7bc9e47ed23bec44


Deployed Bytecode Sourcemap

27350:10290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27849:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3940:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6263:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27531:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31883:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5048:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35375:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7040:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28428:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4894:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28577:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7740:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15024:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28491:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28457:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27579:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30297:151;;;;;;;;;;;;;:::i;:::-;;28609:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37411:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32215:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28653:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5215:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17297:103;;;;;;;;;;;;;:::i;:::-;;27452:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28544:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16657:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4155:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31047:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37186:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27489:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37300:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8477:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5544:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28691:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35216:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27945:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32533:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28738:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37527:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5796:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27809:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36730:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31629:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36936:122;;;;;;;;;;;;;:::i;:::-;;37066:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17551:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30456:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27849:28;;;;;;;;;;;;;:::o;3940:100::-;3994:13;4027:5;4020:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3940:100;:::o;6263:201::-;6346:4;6363:13;6379:12;:10;:12::i;:::-;6363:28;;6402:32;6411:5;6418:7;6427:6;6402:8;:32::i;:::-;6452:4;6445:11;;;6263:201;;;;:::o;27531:41::-;;;;;;;;;;;;;:::o;31883:190::-;16547:13;:11;:13::i;:::-;31961:19:::1;:28;31981:7;31961:28;;;;;;;;;;;;;;;;;;;;;;;;;31953:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:5;32029:19;:28;32049:7;32029:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31883:190:::0;:::o;5048:108::-;5109:7;5136:12;;5129:19;;5048:108;:::o;35375:205::-;16547:13;:11;:13::i;:::-;35473:1:::1;35461:9;:13;35453:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;35518:2;35505:9;:15;;35497:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35563:9;35544:16;:28;;;;35375:205:::0;:::o;7040:295::-;7171:4;7188:15;7206:12;:10;:12::i;:::-;7188:30;;7229:38;7245:4;7251:7;7260:6;7229:15;:38::i;:::-;7278:27;7288:4;7294:2;7298:6;7278:9;:27::i;:::-;7323:4;7316:11;;;7040:295;;;;;:::o;28428:22::-;;;;:::o;4894:93::-;4952:5;4977:2;4970:9;;4894:93;:::o;28577:25::-;;;;:::o;7740:238::-;7828:4;7845:13;7861:12;:10;:12::i;:::-;7845:28;;7884:64;7893:5;7900:7;7937:10;7909:25;7919:5;7926:7;7909:9;:25::i;:::-;:38;;;;:::i;:::-;7884:8;:64::i;:::-;7966:4;7959:11;;;7740:238;;;;:::o;15024:91::-;15080:27;15086:12;:10;:12::i;:::-;15100:6;15080:5;:27::i;:::-;15024:91;:::o;28491:46::-;;;;;;;;;;;;;:::o;28457:21::-;;;;:::o;27579:29::-;;;;;;;;;;;;;:::o;32081:126::-;32147:4;32171:19;:28;32191:7;32171:28;;;;;;;;;;;;;;;;;;;;;;;;;32164:35;;32081:126;;;:::o;30297:151::-;16547:13;:11;:13::i;:::-;30372:5:::1;30352:25;;:16;;;;;;;;;;;:25;;;30344:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30436:4;30417:16;;:23;;;;;;;;;;;;;;;;;;30297:151::o:0;28609:37::-;;;;;;;;;;;;;:::o;37411:108::-;16547:13;:11;:13::i;:::-;37505:6:::1;37484:18;;:27;;;;;;;;;;;;;;;;;;37411:108:::0;:::o;32215:310::-;16547:13;:11;:13::i;:::-;32320:2:::1;32308:8;:14;;32300:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32382:2;32371:7;:13;;32363:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:8;32426:7;:18;;;;32464:7;32455:6;:16;;;;32489:28;32501:7;;32510:6;;32489:28;;;;;;;:::i;:::-;;;;;;;;32215:310:::0;;:::o;28653:31::-;;;;:::o;5215:127::-;5289:7;5316:9;:18;5326:7;5316:18;;;;;;;;;;;;;;;;5309:25;;5215:127;;;:::o;17297:103::-;16547:13;:11;:13::i;:::-;17362:30:::1;17389:1;17362:18;:30::i;:::-;17297:103::o:0;27452:30::-;;;;;;;;;;;;;:::o;15430:164::-;15507:46;15523:7;15532:12;:10;:12::i;:::-;15546:6;15507:15;:46::i;:::-;15564:22;15570:7;15579:6;15564:5;:22::i;:::-;15430:164;;:::o;28544:26::-;;;;:::o;16657:87::-;16703:7;16730:6;;;;;;;;;;;16723:13;;16657:87;:::o;4155:104::-;4211:13;4244:7;4237:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:104;:::o;31047:252::-;16547:13;:11;:13::i;:::-;31154::::1;;;;;;;;;;;31146:21;;:4;:21;;;;31138:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;31250:41;31279:4;31285:5;31250:28;:41::i;:::-;31047:252:::0;;:::o;37186:106::-;16547:13;:11;:13::i;:::-;37273:11:::1;37260:10;:24;;;;37186:106:::0;:::o;27489:35::-;;;;:::o;37300:103::-;16547:13;:11;:13::i;:::-;37389:6:::1;37373:8;:13;37382:3;37373:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;37300:103:::0;;:::o;8477:436::-;8570:4;8587:13;8603:12;:10;:12::i;:::-;8587:28;;8626:24;8653:25;8663:5;8670:7;8653:9;:25::i;:::-;8626:52;;8717:15;8697:16;:35;;8689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8810:60;8819:5;8826:7;8854:15;8835:16;:34;8810:8;:60::i;:::-;8901:4;8894:11;;;;8477:436;;;;:::o;5544:193::-;5623:4;5640:13;5656:12;:10;:12::i;:::-;5640:28;;5679;5689:5;5696:2;5700:6;5679:9;:28::i;:::-;5725:4;5718:11;;;5544:193;;;;:::o;28691:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;35216:151::-;16547:13;:11;:13::i;:::-;35316:1:::1;35304:9;:13;35296:22;;;::::0;::::1;;35350:9;35329:18;:30;;;;35216:151:::0;:::o;27945:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32533:254::-;16547:13;:11;:13::i;:::-;32648:15:::1;;;;;;;;;;;32628:35;;:16;:35;;;;32620:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;32708:16;32690:15;;:34;;;;;;;;;;;;;;;;;;32740:39;32763:15;;;;;;;;;;;32740:39;;;;;;:::i;:::-;;;;;;;;32533:254:::0;:::o;28738:42::-;;;;;;;;;;;;;;;;;:::o;37527:110::-;16547:13;:11;:13::i;:::-;37617:12:::1;37603:11;:26;;;;37527:110:::0;:::o;5796:151::-;5885:7;5912:11;:18;5924:5;5912:18;;;;;;;;;;;;;;;:27;5931:7;5912:27;;;;;;;;;;;;;;;;5905:34;;5796:151;;;;:::o;27809:33::-;;;;:::o;36730:198::-;36805:4;36847:7;:5;:7::i;:::-;36839:15;;:4;:15;;;:32;;;;36864:7;:5;:7::i;:::-;36858:13;;:2;:13;;;36839:32;:57;;;;36891:4;36875:21;;:4;:21;;;36839:57;:80;;;;36914:4;36900:19;;:2;:19;;;36839:80;36831:89;;36730:198;;;;:::o;31629:246::-;16547:13;:11;:13::i;:::-;31710:19:::1;:28;31730:7;31710:28;;;;;;;;;;;;;;;;;;;;;;;;;31709:29;31701:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;31821:4;31790:19;:28;31810:7;31790:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31859:7;31843:24;;;;;;;;;;;;31629:246:::0;:::o;36936:122::-;16547:13;:11;:13::i;:::-;37046:4:::1;37009:34;;:41;;;;;;;;;;;;;;;;;;36936:122::o:0;37066:110::-;16547:13;:11;:13::i;:::-;37156:12:::1;37142:11;:26;;;;37066:110:::0;:::o;17551:201::-;16547:13;:11;:13::i;:::-;17660:1:::1;17640:22;;:8;:22;;;;17632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17716:28;17735:8;17716:18;:28::i;:::-;17551:201:::0;:::o;30456:441::-;16547:13;:11;:13::i;:::-;30552:4:::1;30535:22;;:5;:22;;;;30527:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30626:3;30609:21;;:5;:21;;;30605:126;;;30655:10;30647:28;;:51;30676:21;30647:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30713:7;;30605:126;30741:17;30768:5;30741:33;;30785:15;30803:10;:20;;;30832:4;30803:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30785:53;;30849:10;:19;;;30869:10;30881:7;30849:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16571:1;;;30456:441:::0;:::o;3262:98::-;3315:7;3342:10;3335:17;;3262:98;:::o;12086:380::-;12239:1;12222:19;;:5;:19;;;;12214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12320:1;12301:21;;:7;:21;;;;12293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12404:6;12374:11;:18;12386:5;12374:18;;;;;;;;;;;;;;;:27;12393:7;12374:27;;;;;;;;;;;;;;;:36;;;;12442:7;12426:32;;12435:5;12426:32;;;12451:6;12426:32;;;;;;:::i;:::-;;;;;;;;12086:380;;;:::o;16818:132::-;16893:12;:10;:12::i;:::-;16882:23;;:7;:5;:7::i;:::-;:23;;;16874:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16818:132::o;12753:453::-;12888:24;12915:25;12925:5;12932:7;12915:9;:25::i;:::-;12888:52;;12975:17;12955:16;:37;12951:248;;13037:6;13017:16;:26;;13009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13121:51;13130:5;13137:7;13165:6;13146:16;:25;13121:8;:51::i;:::-;12951:248;12753:453;;;;:::o;32795:1800::-;32943:1;32927:18;;:4;:18;;;;32919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33020:1;33006:16;;:2;:16;;;;32998:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33080:8;;;;;;;;;;;33075:66;;33105:24;33112:4;33118:2;33122:6;33105;:24::i;:::-;33075:66;33153:12;33168:6;;33153:21;;33185:13;33201:7;;33185:23;;33226:8;:14;33235:4;33226:14;;;;;;;;;;;;;;;;;;;;;;;;;33225:15;:32;;;;;33245:8;:12;33254:2;33245:12;;;;;;;;;;;;;;;;;;;;;;;;;33244:13;33225:32;33221:111;;;33282:16;;;;;;;;;;;33274:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;33221:111;33358:1;33348:6;:11;33344:50;;;33376:7;;;;33344:50;33406:12;33422:8;;;;;;;;;;;33421:9;33406:24;;33447:19;:25;33467:4;33447:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33476:19;:23;33496:2;33476:23;;;;;;;;;;;;;;;;;;;;;;;;;33447:52;33443:100;;;33526:5;33516:15;;33443:100;33555:14;33572:24;33590:4;33572:9;:24::i;:::-;33555:41;;33609:12;33634:18;;33624:6;:28;;:42;;;;;33665:1;33656:6;:10;33624:42;:78;;;;;33671:25;:31;33697:4;33671:31;;;;;;;;;;;;;;;;;;;;;;;;;33670:32;33624:78;:89;;;;;33706:7;33624:89;33609:104;;33728:7;:33;;;;;33753:8;;;;;;;;;;;33752:9;33728:33;33724:361;;;33789:4;33778:8;;:15;;;;;;;;;;;;;;;;;;33808:19;33830:24;33840:13;;;;;;;;;;;33830:9;:24::i;:::-;33808:46;;33915:3;33896:16;;33882:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;33873:6;:45;33869:131;;;33981:3;33962:16;;33948:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;33939:45;;33869:131;34014:28;34035:6;34014:20;:28::i;:::-;34068:5;34057:8;;:16;;;;;;;;;;;;;;;;;;33724:361;;34101:7;:30;;;;;34118:13;;;;;;;;;;;34112:19;;:2;:19;;;34101:30;:46;;;;;34146:1;34135:8;:12;34101:46;34097:445;;;34164:12;34201:3;34189:8;34180:6;:17;;;;:::i;:::-;34179:25;;;;:::i;:::-;34164:40;;34237:4;34228:6;:13;;;;:::i;:::-;34219:22;;34258:42;34274:4;34288;34295;34258:15;:42::i;:::-;34097:445;;;;34331:7;:32;;;;;34350:13;;;;;;;;;;;34342:21;;:4;:21;;;34331:32;:47;;;;;34377:1;34367:7;:11;34331:47;34327:215;;;34395:12;34431:3;34420:7;34411:6;:16;;;;:::i;:::-;34410:24;;;;:::i;:::-;34395:39;;34467:4;34458:6;:13;;;;:::i;:::-;34449:22;;34488:42;34504:4;34518;34525;34488:15;:42::i;:::-;34327:215;;34097:445;34554:33;34570:4;34576:2;34580:6;34554:15;:33::i;:::-;32795:1800;;;;;;;;;:::o;11061:591::-;11164:1;11145:21;;:7;:21;;;;11137:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11217:49;11238:7;11255:1;11259:6;11217:20;:49::i;:::-;11279:22;11304:9;:18;11314:7;11304:18;;;;;;;;;;;;;;;;11279:43;;11359:6;11341:14;:24;;11333:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11478:6;11461:14;:23;11440:9;:18;11450:7;11440:18;;;;;;;;;;;;;;;:44;;;;11522:6;11506:12;;:22;;;;;;;:::i;:::-;;;;;;;;11572:1;11546:37;;11555:7;11546:37;;;11576:6;11546:37;;;;;;:::i;:::-;;;;;;;;11596:48;11616:7;11633:1;11637:6;11596:19;:48::i;:::-;11061:591;;;:::o;17908:191::-;17982:16;18001:6;;;;;;;;;;;17982:25;;18027:8;18018:6;;:17;;;;;;;;;;;;;;;;;;18082:8;18051:40;;18072:8;18051:40;;;;;;;;;;;;17908:191;;:::o;31307:308::-;31433:5;31398:40;;:25;:31;31424:4;31398:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;31390:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;31544:5;31510:25;:31;31536:4;31510:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31601:5;31567:40;;31595:4;31567:40;;;;;;;;;;;;31307:308;;:::o;35588:446::-;35715:34;;;;;;;;;;;35710:315;;35785:28;35804:4;35810:2;35785:18;:28::i;:::-;35784:29;:46;;;;;35818:8;:12;35827:2;35818:12;;;;;;;;;;;;;;;;;;;;;;;;;35817:13;35784:46;35780:234;;;35853:27;35871:4;35877:2;35853:17;:27::i;:::-;35899:29;35917:2;35921:6;35899:17;:29::i;:::-;35965:33;35987:2;35991:6;35965:21;:33::i;:::-;35780:234;35710:315;35588:446;;;:::o;34603:605::-;34675:21;34713:1;34699:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34675:40;;34744:4;34726;34731:1;34726:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;34770:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34760:4;34765:1;34760:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;34809:15;;;;;;;;;;;:66;;;34890:11;34916:1;34933:4;34960;34980:15;34809:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34805:222;;;;;;35039:18;35060:21;35039:42;;35092:45;35108:15;;;;;;;;;;;35126:10;35092:7;:45::i;:::-;35155;35176:11;35189:10;35155:45;;;;;;;:::i;:::-;;;;;;;;34603:605;;;:::o;9379:671::-;9526:1;9510:18;;:4;:18;;;;9502:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9603:1;9589:16;;:2;:16;;;;9581:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9658:38;9679:4;9685:2;9689:6;9658:20;:38::i;:::-;9709:19;9731:9;:15;9741:4;9731:15;;;;;;;;;;;;;;;;9709:37;;9780:6;9765:11;:21;;9757:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;9897:6;9883:11;:20;9865:9;:15;9875:4;9865:15;;;;;;;;;;;;;;;:38;;;;9942:6;9925:9;:13;9935:2;9925:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;9981:2;9966:26;;9975:4;9966:26;;;9985:6;9966:26;;;;;;:::i;:::-;;;;;;;;10005:37;10025:4;10031:2;10035:6;10005:19;:37::i;:::-;9379:671;;;;:::o;13802:125::-;;;;:::o;14527:124::-;;;;:::o;36042:285::-;36119:18;;;;;;;;;;;:43;;;;;36149:13;;;;;;;;;;;36141:21;;:4;:21;;;36119:43;36115:203;;;36227:11;;36205:7;:18;36213:9;36205:18;;;;;;;;;;;;;;;;36187:15;:36;;;;:::i;:::-;:51;;36179:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36291:15;36270:7;:18;36278:9;36270:18;;;;;;;;;;;;;;;:36;;;;36115:203;36042:285;;:::o;36335:142::-;36433:11;;36423:6;:21;;36415:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;36335:142;;:::o;36485:237::-;36579:13;;;;;;;;;;;36573:19;;:2;:19;;;36569:58;;;36609:7;;36569:58;36673:10;;36663:6;36647:13;36657:2;36647:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;36639:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36485:237;;;:::o;30905:134::-;30985:9;:14;;31006:4;31020:6;30985:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30905:134;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:143::-;;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;791:80;;;;:::o;877:262::-;;985:2;973:9;964:7;960:23;956:32;953:2;;;1001:1;998;991:12;953:2;1044:1;1069:53;1114:7;1105:6;1094:9;1090:22;1069:53;:::i;:::-;1059:63;;1015:117;943:196;;;;:::o;1145:284::-;;1264:2;1252:9;1243:7;1239:23;1235:32;1232:2;;;1280:1;1277;1270:12;1232:2;1323:1;1348:64;1404:7;1395:6;1384:9;1380:22;1348:64;:::i;:::-;1338:74;;1294:128;1222:207;;;;:::o;1435:407::-;;;1560:2;1548:9;1539:7;1535:23;1531:32;1528:2;;;1576:1;1573;1566:12;1528:2;1619:1;1644:53;1689:7;1680:6;1669:9;1665:22;1644:53;:::i;:::-;1634:63;;1590:117;1746:2;1772:53;1817:7;1808:6;1797:9;1793:22;1772:53;:::i;:::-;1762:63;;1717:118;1518:324;;;;;:::o;1848:552::-;;;;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2049:1;2074:53;2119:7;2110:6;2099:9;2095:22;2074:53;:::i;:::-;2064:63;;2020:117;2176:2;2202:53;2247:7;2238:6;2227:9;2223:22;2202:53;:::i;:::-;2192:63;;2147:118;2304:2;2330:53;2375:7;2366:6;2355:9;2351:22;2330:53;:::i;:::-;2320:63;;2275:118;1948:452;;;;;:::o;2406:401::-;;;2528:2;2516:9;2507:7;2503:23;2499:32;2496:2;;;2544:1;2541;2534:12;2496:2;2587:1;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2558:117;2714:2;2740:50;2782:7;2773:6;2762:9;2758:22;2740:50;:::i;:::-;2730:60;;2685:115;2486:321;;;;;:::o;2813:407::-;;;2938:2;2926:9;2917:7;2913:23;2909:32;2906:2;;;2954:1;2951;2944:12;2906:2;2997:1;3022:53;3067:7;3058:6;3047:9;3043:22;3022:53;:::i;:::-;3012:63;;2968:117;3124:2;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3095:118;2896:324;;;;;:::o;3226:256::-;;3331:2;3319:9;3310:7;3306:23;3302:32;3299:2;;;3347:1;3344;3337:12;3299:2;3390:1;3415:50;3457:7;3448:6;3437:9;3433:22;3415:50;:::i;:::-;3405:60;;3361:114;3289:193;;;;:::o;3488:278::-;;3604:2;3592:9;3583:7;3579:23;3575:32;3572:2;;;3620:1;3617;3610:12;3572:2;3663:1;3688:61;3741:7;3732:6;3721:9;3717:22;3688:61;:::i;:::-;3678:71;;3634:125;3562:204;;;;:::o;3772:262::-;;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3896:1;3893;3886:12;3848:2;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;3838:196;;;;:::o;4040:284::-;;4159:2;4147:9;4138:7;4134:23;4130:32;4127:2;;;4175:1;4172;4165:12;4127:2;4218:1;4243:64;4299:7;4290:6;4279:9;4275:22;4243:64;:::i;:::-;4233:74;;4189:128;4117:207;;;;:::o;4330:407::-;;;4455:2;4443:9;4434:7;4430:23;4426:32;4423:2;;;4471:1;4468;4461:12;4423:2;4514:1;4539:53;4584:7;4575:6;4564:9;4560:22;4539:53;:::i;:::-;4529:63;;4485:117;4641:2;4667:53;4712:7;4703:6;4692:9;4688:22;4667:53;:::i;:::-;4657:63;;4612:118;4413:324;;;;;:::o;4743:179::-;;4833:46;4875:3;4867:6;4833:46;:::i;:::-;4911:4;4906:3;4902:14;4888:28;;4823:99;;;;:::o;4928:108::-;5005:24;5023:5;5005:24;:::i;:::-;5000:3;4993:37;4983:53;;:::o;5042:118::-;5129:24;5147:5;5129:24;:::i;:::-;5124:3;5117:37;5107:53;;:::o;5196:732::-;;5344:54;5392:5;5344:54;:::i;:::-;5414:86;5493:6;5488:3;5414:86;:::i;:::-;5407:93;;5524:56;5574:5;5524:56;:::i;:::-;5603:7;5634:1;5619:284;5644:6;5641:1;5638:13;5619:284;;;5720:6;5714:13;5747:63;5806:3;5791:13;5747:63;:::i;:::-;5740:70;;5833:60;5886:6;5833:60;:::i;:::-;5823:70;;5679:224;5666:1;5663;5659:9;5654:14;;5619:284;;;5623:14;5919:3;5912:10;;5320:608;;;;;;;:::o;5934:109::-;6015:21;6030:5;6015:21;:::i;:::-;6010:3;6003:34;5993:50;;:::o;6049:185::-;6163:64;6221:5;6163:64;:::i;:::-;6158:3;6151:77;6141:93;;:::o;6240:147::-;6335:45;6374:5;6335:45;:::i;:::-;6330:3;6323:58;6313:74;;:::o;6393:364::-;;6509:39;6542:5;6509:39;:::i;:::-;6564:71;6628:6;6623:3;6564:71;:::i;:::-;6557:78;;6644:52;6689:6;6684:3;6677:4;6670:5;6666:16;6644:52;:::i;:::-;6721:29;6743:6;6721:29;:::i;:::-;6716:3;6712:39;6705:46;;6485:272;;;;;:::o;6763:315::-;;6926:67;6990:2;6985:3;6926:67;:::i;:::-;6919:74;;7023:19;7019:1;7014:3;7010:11;7003:40;7069:2;7064:3;7060:12;7053:19;;6909:169;;;:::o;7084:367::-;;7247:67;7311:2;7306:3;7247:67;:::i;:::-;7240:74;;7344:34;7340:1;7335:3;7331:11;7324:55;7410:5;7405:2;7400:3;7396:12;7389:27;7442:2;7437:3;7433:12;7426:19;;7230:221;;;:::o;7457:366::-;;7620:67;7684:2;7679:3;7620:67;:::i;:::-;7613:74;;7717:34;7713:1;7708:3;7704:11;7697:55;7783:4;7778:2;7773:3;7769:12;7762:26;7814:2;7809:3;7805:12;7798:19;;7603:220;;;:::o;7829:370::-;;7992:67;8056:2;8051:3;7992:67;:::i;:::-;7985:74;;8089:34;8085:1;8080:3;8076:11;8069:55;8155:8;8150:2;8145:3;8141:12;8134:30;8190:2;8185:3;8181:12;8174:19;;7975:224;;;:::o;8205:366::-;;8368:67;8432:2;8427:3;8368:67;:::i;:::-;8361:74;;8465:34;8461:1;8456:3;8452:11;8445:55;8531:4;8526:2;8521:3;8517:12;8510:26;8562:2;8557:3;8553:12;8546:19;;8351:220;;;:::o;8577:388::-;;8740:67;8804:2;8799:3;8740:67;:::i;:::-;8733:74;;8837:34;8833:1;8828:3;8824:11;8817:55;8903:26;8898:2;8893:3;8889:12;8882:48;8956:2;8951:3;8947:12;8940:19;;8723:242;;;:::o;8971:327::-;;9134:67;9198:2;9193:3;9134:67;:::i;:::-;9127:74;;9231:31;9227:1;9222:3;9218:11;9211:52;9289:2;9284:3;9280:12;9273:19;;9117:181;;;:::o;9304:324::-;;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9564:28;9560:1;9555:3;9551:11;9544:49;9619:2;9614:3;9610:12;9603:19;;9450:178;;;:::o;9634:370::-;;9797:67;9861:2;9856:3;9797:67;:::i;:::-;9790:74;;9894:34;9890:1;9885:3;9881:11;9874:55;9960:8;9955:2;9950:3;9946:12;9939:30;9995:2;9990:3;9986:12;9979:19;;9780:224;;;:::o;10010:322::-;;10173:67;10237:2;10232:3;10173:67;:::i;:::-;10166:74;;10270:26;10266:1;10261:3;10257:11;10250:47;10323:2;10318:3;10314:12;10307:19;;10156:176;;;:::o;10338:431::-;;10501:67;10565:2;10560:3;10501:67;:::i;:::-;10494:74;;10598:34;10594:1;10589:3;10585:11;10578:55;10664:34;10659:2;10654:3;10650:12;10643:56;10730:3;10725:2;10720:3;10716:12;10709:25;10760:2;10755:3;10751:12;10744:19;;10484:285;;;:::o;10775:368::-;;10938:67;11002:2;10997:3;10938:67;:::i;:::-;10931:74;;11035:34;11031:1;11026:3;11022:11;11015:55;11101:6;11096:2;11091:3;11087:12;11080:28;11134:2;11129:3;11125:12;11118:19;;10921:222;;;:::o;11149:322::-;;11312:67;11376:2;11371:3;11312:67;:::i;:::-;11305:74;;11409:26;11405:1;11400:3;11396:11;11389:47;11462:2;11457:3;11453:12;11446:19;;11295:176;;;:::o;11477:305::-;;11640:66;11704:1;11699:3;11640:66;:::i;:::-;11633:73;;11736:10;11732:1;11727:3;11723:11;11716:31;11773:2;11768:3;11764:12;11757:19;;11623:159;;;:::o;11788:316::-;;11951:67;12015:2;12010:3;11951:67;:::i;:::-;11944:74;;12048:20;12044:1;12039:3;12035:11;12028:41;12095:2;12090:3;12086:12;12079:19;;11934:170;;;:::o;12110:330::-;;12273:67;12337:2;12332:3;12273:67;:::i;:::-;12266:74;;12370:34;12366:1;12361:3;12357:11;12350:55;12431:2;12426:3;12422:12;12415:19;;12256:184;;;:::o;12446:322::-;;12609:67;12673:2;12668:3;12609:67;:::i;:::-;12602:74;;12706:26;12702:1;12697:3;12693:11;12686:47;12759:2;12754:3;12750:12;12743:19;;12592:176;;;:::o;12774:323::-;;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13034:27;13030:1;13025:3;13021:11;13014:48;13088:2;13083:3;13079:12;13072:19;;12920:177;;;:::o;13103:365::-;;13266:67;13330:2;13325:3;13266:67;:::i;:::-;13259:74;;13363:34;13359:1;13354:3;13350:11;13343:55;13429:3;13424:2;13419:3;13415:12;13408:25;13459:2;13454:3;13450:12;13443:19;;13249:219;;;:::o;13474:310::-;;13637:67;13701:2;13696:3;13637:67;:::i;:::-;13630:74;;13734:14;13730:1;13725:3;13721:11;13714:35;13775:2;13770:3;13766:12;13759:19;;13620:164;;;:::o;13790:369::-;;13953:67;14017:2;14012:3;13953:67;:::i;:::-;13946:74;;14050:34;14046:1;14041:3;14037:11;14030:55;14116:7;14111:2;14106:3;14102:12;14095:29;14150:2;14145:3;14141:12;14134:19;;13936:223;;;:::o;14165:304::-;;14328:66;14392:1;14387:3;14328:66;:::i;:::-;14321:73;;14424:9;14420:1;14415:3;14411:11;14404:30;14460:2;14455:3;14451:12;14444:19;;14311:158;;;:::o;14475:330::-;;14638:67;14702:2;14697:3;14638:67;:::i;:::-;14631:74;;14735:34;14731:1;14726:3;14722:11;14715:55;14796:2;14791:3;14787:12;14780:19;;14621:184;;;:::o;14811:297::-;;14991:83;15072:1;15067:3;14991:83;:::i;:::-;14984:90;;15100:1;15095:3;15091:11;15084:18;;14974:134;;;:::o;15114:368::-;;15277:67;15341:2;15336:3;15277:67;:::i;:::-;15270:74;;15374:34;15370:1;15365:3;15361:11;15354:55;15440:6;15435:2;15430:3;15426:12;15419:28;15473:2;15468:3;15464:12;15457:19;;15260:222;;;:::o;15488:309::-;;15651:67;15715:2;15710:3;15651:67;:::i;:::-;15644:74;;15748:13;15744:1;15739:3;15735:11;15728:34;15788:2;15783:3;15779:12;15772:19;;15634:163;;;:::o;15803:369::-;;15966:67;16030:2;16025:3;15966:67;:::i;:::-;15959:74;;16063:34;16059:1;16054:3;16050:11;16043:55;16129:7;16124:2;16119:3;16115:12;16108:29;16163:2;16158:3;16154:12;16147:19;;15949:223;;;:::o;16178:118::-;16265:24;16283:5;16265:24;:::i;:::-;16260:3;16253:37;16243:53;;:::o;16302:112::-;16385:22;16401:5;16385:22;:::i;:::-;16380:3;16373:35;16363:51;;:::o;16420:379::-;;16626:147;16769:3;16626:147;:::i;:::-;16619:154;;16790:3;16783:10;;16608:191;;;:::o;16805:222::-;;16936:2;16925:9;16921:18;16913:26;;16949:71;17017:1;17006:9;17002:17;16993:6;16949:71;:::i;:::-;16903:124;;;;:::o;17033:332::-;;17192:2;17181:9;17177:18;17169:26;;17205:71;17273:1;17262:9;17258:17;17249:6;17205:71;:::i;:::-;17286:72;17354:2;17343:9;17339:18;17330:6;17286:72;:::i;:::-;17159:206;;;;;:::o;17371:210::-;;17496:2;17485:9;17481:18;17473:26;;17509:65;17571:1;17560:9;17556:17;17547:6;17509:65;:::i;:::-;17463:118;;;;:::o;17587:276::-;;17745:2;17734:9;17730:18;17722:26;;17758:98;17853:1;17842:9;17838:17;17829:6;17758:98;:::i;:::-;17712:151;;;;:::o;17869:313::-;;18020:2;18009:9;18005:18;17997:26;;18069:9;18063:4;18059:20;18055:1;18044:9;18040:17;18033:47;18097:78;18170:4;18161:6;18097:78;:::i;:::-;18089:86;;17987:195;;;;:::o;18188:419::-;;18392:2;18381:9;18377:18;18369:26;;18441:9;18435:4;18431:20;18427:1;18416:9;18412:17;18405:47;18469:131;18595:4;18469:131;:::i;:::-;18461:139;;18359:248;;;:::o;18613:419::-;;18817:2;18806:9;18802:18;18794:26;;18866:9;18860:4;18856:20;18852:1;18841:9;18837:17;18830:47;18894:131;19020:4;18894:131;:::i;:::-;18886:139;;18784:248;;;:::o;19038:419::-;;19242:2;19231:9;19227:18;19219:26;;19291:9;19285:4;19281:20;19277:1;19266:9;19262:17;19255:47;19319:131;19445:4;19319:131;:::i;:::-;19311:139;;19209:248;;;:::o;19463:419::-;;19667:2;19656:9;19652:18;19644:26;;19716:9;19710:4;19706:20;19702:1;19691:9;19687:17;19680:47;19744:131;19870:4;19744:131;:::i;:::-;19736:139;;19634:248;;;:::o;19888:419::-;;20092:2;20081:9;20077:18;20069:26;;20141:9;20135:4;20131:20;20127:1;20116:9;20112:17;20105:47;20169:131;20295:4;20169:131;:::i;:::-;20161:139;;20059:248;;;:::o;20313:419::-;;20517:2;20506:9;20502:18;20494:26;;20566:9;20560:4;20556:20;20552:1;20541:9;20537:17;20530:47;20594:131;20720:4;20594:131;:::i;:::-;20586:139;;20484:248;;;:::o;20738:419::-;;20942:2;20931:9;20927:18;20919:26;;20991:9;20985:4;20981:20;20977:1;20966:9;20962:17;20955:47;21019:131;21145:4;21019:131;:::i;:::-;21011:139;;20909:248;;;:::o;21163:419::-;;21367:2;21356:9;21352:18;21344:26;;21416:9;21410:4;21406:20;21402:1;21391:9;21387:17;21380:47;21444:131;21570:4;21444:131;:::i;:::-;21436:139;;21334:248;;;:::o;21588:419::-;;21792:2;21781:9;21777:18;21769:26;;21841:9;21835:4;21831:20;21827:1;21816:9;21812:17;21805:47;21869:131;21995:4;21869:131;:::i;:::-;21861:139;;21759:248;;;:::o;22013:419::-;;22217:2;22206:9;22202:18;22194:26;;22266:9;22260:4;22256:20;22252:1;22241:9;22237:17;22230:47;22294:131;22420:4;22294:131;:::i;:::-;22286:139;;22184:248;;;:::o;22438:419::-;;22642:2;22631:9;22627:18;22619:26;;22691:9;22685:4;22681:20;22677:1;22666:9;22662:17;22655:47;22719:131;22845:4;22719:131;:::i;:::-;22711:139;;22609:248;;;:::o;22863:419::-;;23067:2;23056:9;23052:18;23044:26;;23116:9;23110:4;23106:20;23102:1;23091:9;23087:17;23080:47;23144:131;23270:4;23144:131;:::i;:::-;23136:139;;23034:248;;;:::o;23288:419::-;;23492:2;23481:9;23477:18;23469:26;;23541:9;23535:4;23531:20;23527:1;23516:9;23512:17;23505:47;23569:131;23695:4;23569:131;:::i;:::-;23561:139;;23459:248;;;:::o;23713:419::-;;23917:2;23906:9;23902:18;23894:26;;23966:9;23960:4;23956:20;23952:1;23941:9;23937:17;23930:47;23994:131;24120:4;23994:131;:::i;:::-;23986:139;;23884:248;;;:::o;24138:419::-;;24342:2;24331:9;24327:18;24319:26;;24391:9;24385:4;24381:20;24377:1;24366:9;24362:17;24355:47;24419:131;24545:4;24419:131;:::i;:::-;24411:139;;24309:248;;;:::o;24563:419::-;;24767:2;24756:9;24752:18;24744:26;;24816:9;24810:4;24806:20;24802:1;24791:9;24787:17;24780:47;24844:131;24970:4;24844:131;:::i;:::-;24836:139;;24734:248;;;:::o;24988:419::-;;25192:2;25181:9;25177:18;25169:26;;25241:9;25235:4;25231:20;25227:1;25216:9;25212:17;25205:47;25269:131;25395:4;25269:131;:::i;:::-;25261:139;;25159:248;;;:::o;25413:419::-;;25617:2;25606:9;25602:18;25594:26;;25666:9;25660:4;25656:20;25652:1;25641:9;25637:17;25630:47;25694:131;25820:4;25694:131;:::i;:::-;25686:139;;25584:248;;;:::o;25838:419::-;;26042:2;26031:9;26027:18;26019:26;;26091:9;26085:4;26081:20;26077:1;26066:9;26062:17;26055:47;26119:131;26245:4;26119:131;:::i;:::-;26111:139;;26009:248;;;:::o;26263:419::-;;26467:2;26456:9;26452:18;26444:26;;26516:9;26510:4;26506:20;26502:1;26491:9;26487:17;26480:47;26544:131;26670:4;26544:131;:::i;:::-;26536:139;;26434:248;;;:::o;26688:419::-;;26892:2;26881:9;26877:18;26869:26;;26941:9;26935:4;26931:20;26927:1;26916:9;26912:17;26905:47;26969:131;27095:4;26969:131;:::i;:::-;26961:139;;26859:248;;;:::o;27113:419::-;;27317:2;27306:9;27302:18;27294:26;;27366:9;27360:4;27356:20;27352:1;27341:9;27337:17;27330:47;27394:131;27520:4;27394:131;:::i;:::-;27386:139;;27284:248;;;:::o;27538:419::-;;27742:2;27731:9;27727:18;27719:26;;27791:9;27785:4;27781:20;27777:1;27766:9;27762:17;27755:47;27819:131;27945:4;27819:131;:::i;:::-;27811:139;;27709:248;;;:::o;27963:419::-;;28167:2;28156:9;28152:18;28144:26;;28216:9;28210:4;28206:20;28202:1;28191:9;28187:17;28180:47;28244:131;28370:4;28244:131;:::i;:::-;28236:139;;28134:248;;;:::o;28388:419::-;;28592:2;28581:9;28577:18;28569:26;;28641:9;28635:4;28631:20;28627:1;28616:9;28612:17;28605:47;28669:131;28795:4;28669:131;:::i;:::-;28661:139;;28559:248;;;:::o;28813:419::-;;29017:2;29006:9;29002:18;28994:26;;29066:9;29060:4;29056:20;29052:1;29041:9;29037:17;29030:47;29094:131;29220:4;29094:131;:::i;:::-;29086:139;;28984:248;;;:::o;29238:222::-;;29369:2;29358:9;29354:18;29346:26;;29382:71;29450:1;29439:9;29435:17;29426:6;29382:71;:::i;:::-;29336:124;;;;:::o;29466:831::-;;29767:3;29756:9;29752:19;29744:27;;29781:71;29849:1;29838:9;29834:17;29825:6;29781:71;:::i;:::-;29862:80;29938:2;29927:9;29923:18;29914:6;29862:80;:::i;:::-;29989:9;29983:4;29979:20;29974:2;29963:9;29959:18;29952:48;30017:108;30120:4;30111:6;30017:108;:::i;:::-;30009:116;;30135:72;30203:2;30192:9;30188:18;30179:6;30135:72;:::i;:::-;30217:73;30285:3;30274:9;30270:19;30261:6;30217:73;:::i;:::-;29734:563;;;;;;;;:::o;30303:332::-;;30462:2;30451:9;30447:18;30439:26;;30475:71;30543:1;30532:9;30528:17;30519:6;30475:71;:::i;:::-;30556:72;30624:2;30613:9;30609:18;30600:6;30556:72;:::i;:::-;30429:206;;;;;:::o;30641:214::-;;30768:2;30757:9;30753:18;30745:26;;30781:67;30845:1;30834:9;30830:17;30821:6;30781:67;:::i;:::-;30735:120;;;;:::o;30861:132::-;;30951:3;30943:11;;30981:4;30976:3;30972:14;30964:22;;30933:60;;;:::o;30999:114::-;;31100:5;31094:12;31084:22;;31073:40;;;:::o;31119:99::-;;31205:5;31199:12;31189:22;;31178:40;;;:::o;31224:113::-;;31326:4;31321:3;31317:14;31309:22;;31299:38;;;:::o;31343:184::-;;31476:6;31471:3;31464:19;31516:4;31511:3;31507:14;31492:29;;31454:73;;;;:::o;31533:147::-;;31671:3;31656:18;;31646:34;;;;:::o;31686:169::-;;31804:6;31799:3;31792:19;31844:4;31839:3;31835:14;31820:29;;31782:73;;;;:::o;31861:305::-;;31920:20;31938:1;31920:20;:::i;:::-;31915:25;;31954:20;31972:1;31954:20;:::i;:::-;31949:25;;32108:1;32040:66;32036:74;32033:1;32030:81;32027:2;;;32114:18;;:::i;:::-;32027:2;32158:1;32155;32151:9;32144:16;;31905:261;;;;:::o;32172:185::-;;32229:20;32247:1;32229:20;:::i;:::-;32224:25;;32263:20;32281:1;32263:20;:::i;:::-;32258:25;;32302:1;32292:2;;32307:18;;:::i;:::-;32292:2;32349:1;32346;32342:9;32337:14;;32214:143;;;;:::o;32363:348::-;;32426:20;32444:1;32426:20;:::i;:::-;32421:25;;32460:20;32478:1;32460:20;:::i;:::-;32455:25;;32648:1;32580:66;32576:74;32573:1;32570:81;32565:1;32558:9;32551:17;32547:105;32544:2;;;32655:18;;:::i;:::-;32544:2;32703:1;32700;32696:9;32685:20;;32411:300;;;;:::o;32717:191::-;;32777:20;32795:1;32777:20;:::i;:::-;32772:25;;32811:20;32829:1;32811:20;:::i;:::-;32806:25;;32850:1;32847;32844:8;32841:2;;;32855:18;;:::i;:::-;32841:2;32900:1;32897;32893:9;32885:17;;32762:146;;;;:::o;32914:96::-;;32980:24;32998:5;32980:24;:::i;:::-;32969:35;;32959:51;;;:::o;33016:90::-;;33093:5;33086:13;33079:21;33068:32;;33058:48;;;:::o;33112:126::-;;33189:42;33182:5;33178:54;33167:65;;33157:81;;;:::o;33244:77::-;;33310:5;33299:16;;33289:32;;;:::o;33327:86::-;;33402:4;33395:5;33391:16;33380:27;;33370:43;;;:::o;33419:180::-;;33529:64;33587:5;33529:64;:::i;:::-;33516:77;;33506:93;;;:::o;33605:140::-;;33715:24;33733:5;33715:24;:::i;:::-;33702:37;;33692:53;;;:::o;33751:121::-;;33842:24;33860:5;33842:24;:::i;:::-;33829:37;;33819:53;;;:::o;33878:307::-;33946:1;33956:113;33970:6;33967:1;33964:13;33956:113;;;34055:1;34050:3;34046:11;34040:18;34036:1;34031:3;34027:11;34020:39;33992:2;33989:1;33985:10;33980:15;;33956:113;;;34087:6;34084:1;34081:13;34078:2;;;34167:1;34158:6;34153:3;34149:16;34142:27;34078:2;33927:258;;;;:::o;34191:320::-;;34272:1;34266:4;34262:12;34252:22;;34319:1;34313:4;34309:12;34340:18;34330:2;;34396:4;34388:6;34384:17;34374:27;;34330:2;34458;34450:6;34447:14;34427:18;34424:38;34421:2;;;34477:18;;:::i;:::-;34421:2;34242:269;;;;:::o;34517:180::-;34565:77;34562:1;34555:88;34662:4;34659:1;34652:15;34686:4;34683:1;34676:15;34703:180;34751:77;34748:1;34741:88;34848:4;34845:1;34838:15;34872:4;34869:1;34862:15;34889:180;34937:77;34934:1;34927:88;35034:4;35031:1;35024:15;35058:4;35055:1;35048:15;35075:102;;35167:2;35163:7;35158:2;35151:5;35147:14;35143:28;35133:38;;35123:54;;;:::o;35183:122::-;35256:24;35274:5;35256:24;:::i;:::-;35249:5;35246:35;35236:2;;35295:1;35292;35285:12;35236:2;35226:79;:::o;35311:116::-;35381:21;35396:5;35381:21;:::i;:::-;35374:5;35371:32;35361:2;;35417:1;35414;35407:12;35361:2;35351:76;:::o;35433:122::-;35506:24;35524:5;35506:24;:::i;:::-;35499:5;35496:35;35486:2;;35545:1;35542;35535:12;35486:2;35476:79;:::o

Swarm Source

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