ETH Price: $3,496.53 (+1.26%)

Token

Hackerlabs DAO (HLD)
 

Overview

Max Total Supply

1,000,000,000,000 HLD

Holders

553 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
74,768.773144174 HLD

Value
$0.00
0x912ad3ff222386d00e4e6bc55537e1d8cbb42994
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Hackerlabs DAO ($HLD) is one of the world’s first compounding hyper-deflationary tokens, powered by a community of builders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HackerlabsDao

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-27
*/

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)


// https://hackerlabsdao.com/
// https://t.me/HackerlabsDAO

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol

// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: contracts/HackerlabsDao.sol

pragma solidity ^0.8.0;





 interface IUniswapV2Factory {
     function createPair(address tokenA, address tokenB) external returns (address pair);
 }
 
 interface IUniswapV2Router02 {
     function swapExactTokensForETHSupportingFeeOnTransferTokens(
         uint amountIn,
         uint amountOutMin,
         address[] calldata path,
         address to,
         uint deadline
     ) external;
     function factory() external pure returns (address);
     function WETH() external pure returns (address);
     function addLiquidityETH(
         address token,
         uint amountTokenDesired,
         uint amountTokenMin,
         uint amountETHMin,
         address to,
         uint deadline
     ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
 }
 


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

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool public restrictWhales = true;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public devFee = 5;
    uint256 public daoFee = 10;
    uint256 public devFeeOnSell = 7;
    uint256 public daoFeeOnSell = 18;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver;

    IUniswapV2Router02 public router;
    address public pair;
    address payable public devWallet;
    address payable public daoWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 public swapThreshold;
    
    mapping (address => bool) private bots;

    constructor(uint256 initialSupply)  {
        _name = "Hackerlabs DAO";
        _symbol = "HLD";

        _mint(msg.sender, initialSupply);

        _maxTxAmount = initialSupply * 2 / 400;
        _walletMax = initialSupply * 8 / 400;    
        swapThreshold = initialSupply * 5 / 8000;

        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = initialSupply;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;        
    
        totalFee = devFee.add(daoFee);
        totalFeeIfSelling = devFeeOnSell.add(daoFeeOnSell);

        devWallet = payable(msg.sender);
        daoWallet = payable(msg.sender);

    }

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }


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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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;
    }

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

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

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        
        require(!bots[sender] && !bots[recipient]);

        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax, "Wallet Limit Exceeded");
        }


        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);


        emit Transfer(sender, recipient, finalAmount);
        return true;
    }    

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }    

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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);
            }
        }
    }

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

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


    receive() external payable { }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }


    function changeTxLimit(uint256 newLimit) external onlyOwner {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external onlyOwner {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function changeFees(uint256 newDevFee, uint256 newDevFeeOnSell, uint256 newDaoFee, uint256 newDaoFeeOnSell) external onlyOwner {
        devFee = newDevFee;
        daoFee = newDaoFee;
        devFeeOnSell = newDevFeeOnSell;
        daoFeeOnSell = newDaoFeeOnSell;

        totalFee = devFee.add(daoFee);
        totalFeeIfSelling = devFeeOnSell.add(daoFeeOnSell);
    }

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    } 

    function setDaoWallet(address payable newDaoWallet) external onlyOwner {
        daoWallet = payable(newDaoWallet);
    }    


    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }



    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        
        uint256 amountToSwap = _balances[address(this)];

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

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;
        uint256 devBalance = amountETH.mul(devFee).div(totalFee);
        uint256 daoBalance = amountETH.sub(devBalance);

        if(amountETH > 0){
            devWallet.transfer(devBalance);
            daoWallet.transfer(daoBalance);
        }        
    
    }

    function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }           


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"newDevFee","type":"uint256"},{"internalType":"uint256","name":"newDevFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"newDaoFee","type":"uint256"},{"internalType":"uint256","name":"newDaoFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDaoWallet","type":"address"}],"name":"setDaoWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860146101000a81548160ff0219169083151502179055506005600b55600a600c556007600d556012600e556000600f55600060105560016015806101000a81548160ff0219169083151502179055503480156200013e57600080fd5b50604051620049f9380380620049f9833981810160405281019062000164919062000c7c565b62000184620001786200090460201b60201c565b6200090c60201b60201c565b6040518060400160405280600e81526020017f4861636b65726c6162732044414f00000000000000000000000000000000000081525060049080519060200190620001d192919062000b6c565b506040518060400160405280600381526020017f484c440000000000000000000000000000000000000000000000000000000000815250600590805190602001906200021f92919062000b6c565b50620002323382620009d060201b60201c565b61019060028262000244919062000e09565b62000250919062000dd1565b60168190555061019060088262000268919062000e09565b62000274919062000dd1565b601781905550611f406005826200028c919062000e09565b62000298919062000dd1565b601881905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036a57600080fd5b505afa1580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a5919062000c4a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042957600080fd5b505afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000c4a565b306040518363ffffffff1660e01b81526004016200048492919062000cf7565b602060405180830381600087803b1580156200049f57600080fd5b505af1158015620004b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004da919062000c4a565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000851600c54600b5462000b4a60201b62001a191790919060201c565b600f8190555062000875600e54600d5462000b4a60201b62001a191790919060201c565b60108190555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000fcd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3a9062000d24565b60405180910390fd5b62000a576000838362000b6260201b60201c565b806003600082825462000a6b919062000d74565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ac3919062000d74565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2a919062000d46565b60405180910390a362000b466000838362000b6760201b60201c565b5050565b6000818362000b5a919062000d74565b905092915050565b505050565b505050565b82805462000b7a9062000ea8565b90600052602060002090601f01602090048101928262000b9e576000855562000bea565b82601f1062000bb957805160ff191683800117855562000bea565b8280016001018555821562000bea579182015b8281111562000be957825182559160200191906001019062000bcc565b5b50905062000bf9919062000bfd565b5090565b5b8082111562000c1857600081600090555060010162000bfe565b5090565b60008151905062000c2d8162000f99565b92915050565b60008151905062000c448162000fb3565b92915050565b60006020828403121562000c635762000c6262000f6b565b5b600062000c738482850162000c1c565b91505092915050565b60006020828403121562000c955762000c9462000f6b565b5b600062000ca58482850162000c33565b91505092915050565b62000cb98162000e6a565b82525050565b600062000cce601f8362000d63565b915062000cdb8262000f70565b602082019050919050565b62000cf18162000e9e565b82525050565b600060408201905062000d0e600083018562000cae565b62000d1d602083018462000cae565b9392505050565b6000602082019050818103600083015262000d3f8162000cbf565b9050919050565b600060208201905062000d5d600083018462000ce6565b92915050565b600082825260208201905092915050565b600062000d818262000e9e565b915062000d8e8362000e9e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc65762000dc562000ede565b5b828201905092915050565b600062000dde8262000e9e565b915062000deb8362000e9e565b92508262000dfe5762000dfd62000f0d565b5b828204905092915050565b600062000e168262000e9e565b915062000e238362000e9e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e5f5762000e5e62000ede565b5b828202905092915050565b600062000e778262000e7e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000ec157607f821691505b6020821081141562000ed85762000ed762000f3c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000fa48162000e6a565b811462000fb057600080fd5b50565b62000fbe8162000e9e565b811462000fca57600080fd5b50565b613a1c8062000fdd6000396000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063a8aa1b31116100b6578063d920334e1161007a578063d920334e14610945578063dd62ed3e1461096e578063e66b1d1e146109ab578063f2fde38b146109d4578063f887ea40146109fd578063fabe628314610a2857610272565b8063a8aa1b311461085e578063a9059cbb14610889578063b515566a146108c6578063ca33e64c146108ef578063ca987b0e1461091a57610272565b80638da5cb5b116101085780638da5cb5b1461074c5780638ea5220f146107775780639502c426146107a257806395d89b41146107cd578063a3a2e89e146107f8578063a457c2d71461082157610272565b8063715018a6146106795780637d1db4a5146106905780637db1342c146106bb578063807c2d9c146106e45780638b42507f1461070f57610272565b806339509351116101dd57806352e97300116101a157806352e973001461056957806364997e0114610594578063650c4226146105bd5780636827e764146105e6578063698a58971461061157806370a082311461063c57610272565b806339509351146104705780633dab5269146104ad5780633f4218e0146104d657806344de2e4c146105135780634a74bb021461053e57610272565b80631f53ac021161022f5780631f53ac021461036057806323b872dd14610389578063273123b7146103c65780632957b839146103ef5780632b112e491461041a578063313ce5671461044557610272565b80630445b6671461027757806306fdde03146102a2578063095ea7b3146102cd57806318160ddd1461030a5780631df4ccfc1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a51565b60405161029991906132c1565b60405180910390f35b3480156102ae57600080fd5b506102b7610a57565b6040516102c4919061319f565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612d6a565b610ae9565b6040516103019190613169565b60405180910390f35b34801561031657600080fd5b5061031f610b0c565b60405161032c91906132c1565b60405180910390f35b34801561034157600080fd5b5061034a610b16565b60405161035791906132c1565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190612c6a565b610b1c565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612cd7565b610bdc565b6040516103bd9190613169565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190612c10565b610c0c565b005b3480156103fb57600080fd5b50610404610ce3565b60405161041191906132c1565b60405180910390f35b34801561042657600080fd5b5061042f610ce9565b60405161043c91906132c1565b60405180910390f35b34801561045157600080fd5b5061045a610d6b565b6040516104679190613336565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612d6a565b610d74565b6040516104a49190613169565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612e20565b610e1e565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190612c10565b610ebe565b60405161050a9190613169565b60405180910390f35b34801561051f57600080fd5b50610528610ede565b6040516105359190613169565b60405180910390f35b34801561054a57600080fd5b50610553610ef1565b6040516105609190613169565b60405180910390f35b34801561057557600080fd5b5061057e610f02565b60405161058b91906132c1565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190612c6a565b610f08565b005b3480156105c957600080fd5b506105e460048036038101906105df9190612e8d565b610fc8565b005b3480156105f257600080fd5b506105fb6110a0565b60405161060891906132c1565b60405180910390f35b34801561061d57600080fd5b506106266110a6565b604051610633919061314e565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612c10565b6110cc565b60405161067091906132c1565b60405180910390f35b34801561068557600080fd5b5061068e611115565b005b34801561069c57600080fd5b506106a561119d565b6040516106b291906132c1565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190612e60565b6111a3565b005b3480156106f057600080fd5b506106f9611229565b60405161070691906132c1565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612c10565b61122f565b6040516107439190613169565b60405180910390f35b34801561075857600080fd5b5061076161124f565b60405161076e9190613133565b60405180910390f35b34801561078357600080fd5b5061078c611278565b604051610799919061314e565b60405180910390f35b3480156107ae57600080fd5b506107b761129e565b6040516107c491906132c1565b60405180910390f35b3480156107d957600080fd5b506107e26112a4565b6040516107ef919061319f565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190612d2a565b611336565b005b34801561082d57600080fd5b5061084860048036038101906108439190612d6a565b61140d565b6040516108559190613169565b60405180910390f35b34801561086a57600080fd5b506108736114f7565b6040516108809190613133565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190612d6a565b61151d565b6040516108bd9190613169565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190612daa565b611541565b005b3480156108fb57600080fd5b50610904611652565b6040516109119190613133565b60405180910390f35b34801561092657600080fd5b5061092f611678565b60405161093c91906132c1565b60405180910390f35b34801561095157600080fd5b5061096c60048036038101906109679190612e60565b61167e565b005b34801561097a57600080fd5b5061099560048036038101906109909190612c97565b611704565b6040516109a291906132c1565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190612df3565b61178b565b005b3480156109e057600080fd5b506109fb60048036038101906109f69190612c10565b611824565b005b348015610a0957600080fd5b50610a1261191c565b604051610a1f9190613184565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190612d2a565b611942565b005b60185481565b606060048054610a66906135ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a92906135ee565b8015610adf5780601f10610ab457610100808354040283529160200191610adf565b820191906000526020600020905b815481529060010190602001808311610ac257829003601f168201915b5050505050905090565b600080610af4611a2f565b9050610b01818585611a37565b600191505092915050565b6000600354905090565b600f5481565b610b24611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610b4261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613241565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610be7611a2f565b9050610bf4858285611c02565b610bff858585611c8e565b5060019150509392505050565b610c14611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610c3261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90613241565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b6000610d66610d19600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110cc565b610d58610d47600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110cc565b60035461226c90919063ffffffff16565b61226c90919063ffffffff16565b905090565b60006009905090565b600080610d7f611a2f565b9050610e13818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e0e91906133f7565b611a37565b600191505092915050565b610e26611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610e4461124f565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613241565b60405180910390fd5b816015806101000a81548160ff021916908315150217905550806018819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600860149054906101000a900460ff1681565b60158054906101000a900460ff1681565b600e5481565b610f10611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613241565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fd0611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610fee61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613241565b60405180910390fd5b83600b8190555081600c8190555082600d8190555080600e81905550611077600c54600b54611a1990919063ffffffff16565b600f81905550611094600e54600d54611a1990919063ffffffff16565b60108190555050505050565b600b5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61111d611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661113b61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613241565b60405180910390fd5b61119b6000612282565b565b60165481565b6111ab611a2f565b73ffffffffffffffffffffffffffffffffffffffff166111c961124f565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613241565b60405180910390fd5b8060178190555050565b60175481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6060600580546112b3906135ee565b80601f01602080910402602001604051908101604052809291908181526020018280546112df906135ee565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b61133e611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661135c61124f565b73ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613241565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611418611a2f565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d5906132a1565b60405180910390fd5b6114eb8286868403611a37565b60019250505092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611528611a2f565b9050611535818585611c8e565b50600191505092915050565b611549611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661156761124f565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613241565b60405180910390fd5b60005b815181101561164e576001601960008484815181106115e2576115e1613727565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061164690613651565b9150506115c0565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611686611a2f565b73ffffffffffffffffffffffffffffffffffffffff166116a461124f565b73ffffffffffffffffffffffffffffffffffffffff16146116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613241565b60405180910390fd5b8060168190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611793611a2f565b73ffffffffffffffffffffffffffffffffffffffff166117b161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613241565b60405180910390fd5b80600860146101000a81548160ff02191690831515021790555050565b61182c611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661184a61124f565b73ffffffffffffffffffffffffffffffffffffffff16146118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613241565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906131e1565b60405180910390fd5b61191981612282565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61194a611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661196861124f565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613241565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183611a2791906133f7565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90613261565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613201565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf591906132c1565b60405180910390a3505050565b6000611c0e8484611704565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c885781811015611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190613221565b60405180910390fd5b611c878484848403611a37565b5b50505050565b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d345750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611d3d57600080fd5b601560149054906101000a900460ff1615611d6457611d5d848484612346565b9050612265565b60165482111580611dbe5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df4906131c1565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e635750600860149054906101000a900460ff165b15611eff57601754611ebd83600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b1115611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613281565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611f6a5750601560149054906101000a900460ff16155b8015611f80575060158054906101000a900460ff165b8015611fcd5750601854600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15611fdb57611fda612519565b5b612064826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e09092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561214d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121575782612163565b612162858585612935565b5b90506121b781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161225791906132c1565b60405180910390a360019150505b9392505050565b6000818361227a91906134d8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123d1826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e09092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061246682600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250691906132c1565b60405180910390a3600190509392505050565b6001601560146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600267ffffffffffffffff81111561259557612594613756565b5b6040519080825280602002602001820160405280156125c35781602001602082028036833780820191505090505b50905030816000815181106125db576125da613727565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561267d57600080fd5b505afa158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b59190612c3d565b816001815181106126c9576126c8613727565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127679594939291906132dc565b600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50505050600047905060006127c9600f546127bb600b5485612add90919063ffffffff16565b612af390919063ffffffff16565b905060006127e0828461226c90919063ffffffff16565b905060008311156128be57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612853573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128bc573d6000803e3d6000fd5b505b50505050506000601560146101000a81548160ff021916908315150217905550565b6000838311158290612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f919061319f565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461299557600f54612999565b6010545b905060006129c360646129b58487612add90919063ffffffff16565b612af390919063ffffffff16565b9050612a1781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ab791906132c1565b60405180910390a3612ad2818561226c90919063ffffffff16565b925050509392505050565b60008183612aeb919061347e565b905092915050565b60008183612b01919061344d565b905092915050565b6000612b1c612b1784613376565b613351565b90508083825260208201905082856020860282011115612b3f57612b3e61378a565b5b60005b85811015612b6f5781612b558882612b79565b845260208401935060208301925050600181019050612b42565b5050509392505050565b600081359050612b888161398a565b92915050565b600081519050612b9d8161398a565b92915050565b600081359050612bb2816139a1565b92915050565b600082601f830112612bcd57612bcc613785565b5b8135612bdd848260208601612b09565b91505092915050565b600081359050612bf5816139b8565b92915050565b600081359050612c0a816139cf565b92915050565b600060208284031215612c2657612c25613794565b5b6000612c3484828501612b79565b91505092915050565b600060208284031215612c5357612c52613794565b5b6000612c6184828501612b8e565b91505092915050565b600060208284031215612c8057612c7f613794565b5b6000612c8e84828501612ba3565b91505092915050565b60008060408385031215612cae57612cad613794565b5b6000612cbc85828601612b79565b9250506020612ccd85828601612b79565b9150509250929050565b600080600060608486031215612cf057612cef613794565b5b6000612cfe86828701612b79565b9350506020612d0f86828701612b79565b9250506040612d2086828701612bfb565b9150509250925092565b60008060408385031215612d4157612d40613794565b5b6000612d4f85828601612b79565b9250506020612d6085828601612be6565b9150509250929050565b60008060408385031215612d8157612d80613794565b5b6000612d8f85828601612b79565b9250506020612da085828601612bfb565b9150509250929050565b600060208284031215612dc057612dbf613794565b5b600082013567ffffffffffffffff811115612dde57612ddd61378f565b5b612dea84828501612bb8565b91505092915050565b600060208284031215612e0957612e08613794565b5b6000612e1784828501612be6565b91505092915050565b60008060408385031215612e3757612e36613794565b5b6000612e4585828601612be6565b9250506020612e5685828601612bfb565b9150509250929050565b600060208284031215612e7657612e75613794565b5b6000612e8484828501612bfb565b91505092915050565b60008060008060808587031215612ea757612ea6613794565b5b6000612eb587828801612bfb565b9450506020612ec687828801612bfb565b9350506040612ed787828801612bfb565b9250506060612ee887828801612bfb565b91505092959194509250565b6000612f008383612f1b565b60208301905092915050565b612f158161351e565b82525050565b612f248161350c565b82525050565b612f338161350c565b82525050565b6000612f44826133b2565b612f4e81856133d5565b9350612f59836133a2565b8060005b83811015612f8a578151612f718882612ef4565b9750612f7c836133c8565b925050600181019050612f5d565b5085935050505092915050565b612fa081613530565b82525050565b612faf81613573565b82525050565b612fbe81613585565b82525050565b6000612fcf826133bd565b612fd981856133e6565b9350612fe98185602086016135bb565b612ff281613799565b840191505092915050565b600061300a6011836133e6565b9150613015826137aa565b602082019050919050565b600061302d6026836133e6565b9150613038826137d3565b604082019050919050565b60006130506022836133e6565b915061305b82613822565b604082019050919050565b6000613073601d836133e6565b915061307e82613871565b602082019050919050565b60006130966020836133e6565b91506130a18261389a565b602082019050919050565b60006130b96024836133e6565b91506130c4826138c3565b604082019050919050565b60006130dc6015836133e6565b91506130e782613912565b602082019050919050565b60006130ff6025836133e6565b915061310a8261393b565b604082019050919050565b61311e8161355c565b82525050565b61312d81613566565b82525050565b60006020820190506131486000830184612f2a565b92915050565b60006020820190506131636000830184612f0c565b92915050565b600060208201905061317e6000830184612f97565b92915050565b60006020820190506131996000830184612fa6565b92915050565b600060208201905081810360008301526131b98184612fc4565b905092915050565b600060208201905081810360008301526131da81612ffd565b9050919050565b600060208201905081810360008301526131fa81613020565b9050919050565b6000602082019050818103600083015261321a81613043565b9050919050565b6000602082019050818103600083015261323a81613066565b9050919050565b6000602082019050818103600083015261325a81613089565b9050919050565b6000602082019050818103600083015261327a816130ac565b9050919050565b6000602082019050818103600083015261329a816130cf565b9050919050565b600060208201905081810360008301526132ba816130f2565b9050919050565b60006020820190506132d66000830184613115565b92915050565b600060a0820190506132f16000830188613115565b6132fe6020830187612fb5565b81810360408301526133108186612f39565b905061331f6060830185612f2a565b61332c6080830184613115565b9695505050505050565b600060208201905061334b6000830184613124565b92915050565b600061335b61336c565b90506133678282613620565b919050565b6000604051905090565b600067ffffffffffffffff82111561339157613390613756565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134028261355c565b915061340d8361355c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134425761344161369a565b5b828201905092915050565b60006134588261355c565b91506134638361355c565b925082613473576134726136c9565b5b828204905092915050565b60006134898261355c565b91506134948361355c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134cd576134cc61369a565b5b828202905092915050565b60006134e38261355c565b91506134ee8361355c565b9250828210156135015761350061369a565b5b828203905092915050565b60006135178261353c565b9050919050565b60006135298261353c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061357e82613597565b9050919050565b60006135908261355c565b9050919050565b60006135a2826135a9565b9050919050565b60006135b48261353c565b9050919050565b60005b838110156135d95780820151818401526020810190506135be565b838111156135e8576000848401525b50505050565b6000600282049050600182168061360657607f821691505b6020821081141561361a576136196136f8565b5b50919050565b61362982613799565b810181811067ffffffffffffffff8211171561364857613647613756565b5b80604052505050565b600061365c8261355c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561368f5761368e61369a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574204c696d69742045786365656465640000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6139938161350c565b811461399e57600080fd5b50565b6139aa8161351e565b81146139b557600080fd5b50565b6139c181613530565b81146139cc57600080fd5b50565b6139d88161355c565b81146139e357600080fd5b5056fea2646970667358221220ba572489c32d0d2afd78fbb566e273b5b041e0b5b787d9d9f5762dcee5e3d1ad64736f6c6343000807003300000000000000000000000000000000000000000000003635c9adc5dea00000

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063715018a611610144578063a8aa1b31116100b6578063d920334e1161007a578063d920334e14610945578063dd62ed3e1461096e578063e66b1d1e146109ab578063f2fde38b146109d4578063f887ea40146109fd578063fabe628314610a2857610272565b8063a8aa1b311461085e578063a9059cbb14610889578063b515566a146108c6578063ca33e64c146108ef578063ca987b0e1461091a57610272565b80638da5cb5b116101085780638da5cb5b1461074c5780638ea5220f146107775780639502c426146107a257806395d89b41146107cd578063a3a2e89e146107f8578063a457c2d71461082157610272565b8063715018a6146106795780637d1db4a5146106905780637db1342c146106bb578063807c2d9c146106e45780638b42507f1461070f57610272565b806339509351116101dd57806352e97300116101a157806352e973001461056957806364997e0114610594578063650c4226146105bd5780636827e764146105e6578063698a58971461061157806370a082311461063c57610272565b806339509351146104705780633dab5269146104ad5780633f4218e0146104d657806344de2e4c146105135780634a74bb021461053e57610272565b80631f53ac021161022f5780631f53ac021461036057806323b872dd14610389578063273123b7146103c65780632957b839146103ef5780632b112e491461041a578063313ce5671461044557610272565b80630445b6671461027757806306fdde03146102a2578063095ea7b3146102cd57806318160ddd1461030a5780631df4ccfc1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a51565b60405161029991906132c1565b60405180910390f35b3480156102ae57600080fd5b506102b7610a57565b6040516102c4919061319f565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612d6a565b610ae9565b6040516103019190613169565b60405180910390f35b34801561031657600080fd5b5061031f610b0c565b60405161032c91906132c1565b60405180910390f35b34801561034157600080fd5b5061034a610b16565b60405161035791906132c1565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190612c6a565b610b1c565b005b34801561039557600080fd5b506103b060048036038101906103ab9190612cd7565b610bdc565b6040516103bd9190613169565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190612c10565b610c0c565b005b3480156103fb57600080fd5b50610404610ce3565b60405161041191906132c1565b60405180910390f35b34801561042657600080fd5b5061042f610ce9565b60405161043c91906132c1565b60405180910390f35b34801561045157600080fd5b5061045a610d6b565b6040516104679190613336565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612d6a565b610d74565b6040516104a49190613169565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612e20565b610e1e565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190612c10565b610ebe565b60405161050a9190613169565b60405180910390f35b34801561051f57600080fd5b50610528610ede565b6040516105359190613169565b60405180910390f35b34801561054a57600080fd5b50610553610ef1565b6040516105609190613169565b60405180910390f35b34801561057557600080fd5b5061057e610f02565b60405161058b91906132c1565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190612c6a565b610f08565b005b3480156105c957600080fd5b506105e460048036038101906105df9190612e8d565b610fc8565b005b3480156105f257600080fd5b506105fb6110a0565b60405161060891906132c1565b60405180910390f35b34801561061d57600080fd5b506106266110a6565b604051610633919061314e565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612c10565b6110cc565b60405161067091906132c1565b60405180910390f35b34801561068557600080fd5b5061068e611115565b005b34801561069c57600080fd5b506106a561119d565b6040516106b291906132c1565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190612e60565b6111a3565b005b3480156106f057600080fd5b506106f9611229565b60405161070691906132c1565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612c10565b61122f565b6040516107439190613169565b60405180910390f35b34801561075857600080fd5b5061076161124f565b60405161076e9190613133565b60405180910390f35b34801561078357600080fd5b5061078c611278565b604051610799919061314e565b60405180910390f35b3480156107ae57600080fd5b506107b761129e565b6040516107c491906132c1565b60405180910390f35b3480156107d957600080fd5b506107e26112a4565b6040516107ef919061319f565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190612d2a565b611336565b005b34801561082d57600080fd5b5061084860048036038101906108439190612d6a565b61140d565b6040516108559190613169565b60405180910390f35b34801561086a57600080fd5b506108736114f7565b6040516108809190613133565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190612d6a565b61151d565b6040516108bd9190613169565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190612daa565b611541565b005b3480156108fb57600080fd5b50610904611652565b6040516109119190613133565b60405180910390f35b34801561092657600080fd5b5061092f611678565b60405161093c91906132c1565b60405180910390f35b34801561095157600080fd5b5061096c60048036038101906109679190612e60565b61167e565b005b34801561097a57600080fd5b5061099560048036038101906109909190612c97565b611704565b6040516109a291906132c1565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190612df3565b61178b565b005b3480156109e057600080fd5b506109fb60048036038101906109f69190612c10565b611824565b005b348015610a0957600080fd5b50610a1261191c565b604051610a1f9190613184565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190612d2a565b611942565b005b60185481565b606060048054610a66906135ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a92906135ee565b8015610adf5780601f10610ab457610100808354040283529160200191610adf565b820191906000526020600020905b815481529060010190602001808311610ac257829003601f168201915b5050505050905090565b600080610af4611a2f565b9050610b01818585611a37565b600191505092915050565b6000600354905090565b600f5481565b610b24611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610b4261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613241565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610be7611a2f565b9050610bf4858285611c02565b610bff858585611c8e565b5060019150509392505050565b610c14611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610c3261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90613241565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b6000610d66610d19600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110cc565b610d58610d47600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110cc565b60035461226c90919063ffffffff16565b61226c90919063ffffffff16565b905090565b60006009905090565b600080610d7f611a2f565b9050610e13818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e0e91906133f7565b611a37565b600191505092915050565b610e26611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610e4461124f565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613241565b60405180910390fd5b816015806101000a81548160ff021916908315150217905550806018819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600860149054906101000a900460ff1681565b60158054906101000a900460ff1681565b600e5481565b610f10611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613241565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fd0611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610fee61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613241565b60405180910390fd5b83600b8190555081600c8190555082600d8190555080600e81905550611077600c54600b54611a1990919063ffffffff16565b600f81905550611094600e54600d54611a1990919063ffffffff16565b60108190555050505050565b600b5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61111d611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661113b61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613241565b60405180910390fd5b61119b6000612282565b565b60165481565b6111ab611a2f565b73ffffffffffffffffffffffffffffffffffffffff166111c961124f565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613241565b60405180910390fd5b8060178190555050565b60175481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6060600580546112b3906135ee565b80601f01602080910402602001604051908101604052809291908181526020018280546112df906135ee565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b61133e611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661135c61124f565b73ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613241565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611418611a2f565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d5906132a1565b60405180910390fd5b6114eb8286868403611a37565b60019250505092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611528611a2f565b9050611535818585611c8e565b50600191505092915050565b611549611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661156761124f565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613241565b60405180910390fd5b60005b815181101561164e576001601960008484815181106115e2576115e1613727565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061164690613651565b9150506115c0565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611686611a2f565b73ffffffffffffffffffffffffffffffffffffffff166116a461124f565b73ffffffffffffffffffffffffffffffffffffffff16146116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613241565b60405180910390fd5b8060168190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611793611a2f565b73ffffffffffffffffffffffffffffffffffffffff166117b161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613241565b60405180910390fd5b80600860146101000a81548160ff02191690831515021790555050565b61182c611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661184a61124f565b73ffffffffffffffffffffffffffffffffffffffff16146118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613241565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906131e1565b60405180910390fd5b61191981612282565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61194a611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661196861124f565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613241565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183611a2791906133f7565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90613261565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613201565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf591906132c1565b60405180910390a3505050565b6000611c0e8484611704565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c885781811015611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190613221565b60405180910390fd5b611c878484848403611a37565b5b50505050565b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d345750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611d3d57600080fd5b601560149054906101000a900460ff1615611d6457611d5d848484612346565b9050612265565b60165482111580611dbe5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df4906131c1565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e635750600860149054906101000a900460ff165b15611eff57601754611ebd83600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b1115611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613281565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611f6a5750601560149054906101000a900460ff16155b8015611f80575060158054906101000a900460ff165b8015611fcd5750601854600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15611fdb57611fda612519565b5b612064826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e09092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561214d5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121575782612163565b612162858585612935565b5b90506121b781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161225791906132c1565b60405180910390a360019150505b9392505050565b6000818361227a91906134d8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006123d1826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e09092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061246682600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250691906132c1565b60405180910390a3600190509392505050565b6001601560146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600267ffffffffffffffff81111561259557612594613756565b5b6040519080825280602002602001820160405280156125c35781602001602082028036833780820191505090505b50905030816000815181106125db576125da613727565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561267d57600080fd5b505afa158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b59190612c3d565b816001815181106126c9576126c8613727565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127679594939291906132dc565b600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50505050600047905060006127c9600f546127bb600b5485612add90919063ffffffff16565b612af390919063ffffffff16565b905060006127e0828461226c90919063ffffffff16565b905060008311156128be57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612853573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128bc573d6000803e3d6000fd5b505b50505050506000601560146101000a81548160ff021916908315150217905550565b6000838311158290612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f919061319f565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461299557600f54612999565b6010545b905060006129c360646129b58487612add90919063ffffffff16565b612af390919063ffffffff16565b9050612a1781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a1990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ab791906132c1565b60405180910390a3612ad2818561226c90919063ffffffff16565b925050509392505050565b60008183612aeb919061347e565b905092915050565b60008183612b01919061344d565b905092915050565b6000612b1c612b1784613376565b613351565b90508083825260208201905082856020860282011115612b3f57612b3e61378a565b5b60005b85811015612b6f5781612b558882612b79565b845260208401935060208301925050600181019050612b42565b5050509392505050565b600081359050612b888161398a565b92915050565b600081519050612b9d8161398a565b92915050565b600081359050612bb2816139a1565b92915050565b600082601f830112612bcd57612bcc613785565b5b8135612bdd848260208601612b09565b91505092915050565b600081359050612bf5816139b8565b92915050565b600081359050612c0a816139cf565b92915050565b600060208284031215612c2657612c25613794565b5b6000612c3484828501612b79565b91505092915050565b600060208284031215612c5357612c52613794565b5b6000612c6184828501612b8e565b91505092915050565b600060208284031215612c8057612c7f613794565b5b6000612c8e84828501612ba3565b91505092915050565b60008060408385031215612cae57612cad613794565b5b6000612cbc85828601612b79565b9250506020612ccd85828601612b79565b9150509250929050565b600080600060608486031215612cf057612cef613794565b5b6000612cfe86828701612b79565b9350506020612d0f86828701612b79565b9250506040612d2086828701612bfb565b9150509250925092565b60008060408385031215612d4157612d40613794565b5b6000612d4f85828601612b79565b9250506020612d6085828601612be6565b9150509250929050565b60008060408385031215612d8157612d80613794565b5b6000612d8f85828601612b79565b9250506020612da085828601612bfb565b9150509250929050565b600060208284031215612dc057612dbf613794565b5b600082013567ffffffffffffffff811115612dde57612ddd61378f565b5b612dea84828501612bb8565b91505092915050565b600060208284031215612e0957612e08613794565b5b6000612e1784828501612be6565b91505092915050565b60008060408385031215612e3757612e36613794565b5b6000612e4585828601612be6565b9250506020612e5685828601612bfb565b9150509250929050565b600060208284031215612e7657612e75613794565b5b6000612e8484828501612bfb565b91505092915050565b60008060008060808587031215612ea757612ea6613794565b5b6000612eb587828801612bfb565b9450506020612ec687828801612bfb565b9350506040612ed787828801612bfb565b9250506060612ee887828801612bfb565b91505092959194509250565b6000612f008383612f1b565b60208301905092915050565b612f158161351e565b82525050565b612f248161350c565b82525050565b612f338161350c565b82525050565b6000612f44826133b2565b612f4e81856133d5565b9350612f59836133a2565b8060005b83811015612f8a578151612f718882612ef4565b9750612f7c836133c8565b925050600181019050612f5d565b5085935050505092915050565b612fa081613530565b82525050565b612faf81613573565b82525050565b612fbe81613585565b82525050565b6000612fcf826133bd565b612fd981856133e6565b9350612fe98185602086016135bb565b612ff281613799565b840191505092915050565b600061300a6011836133e6565b9150613015826137aa565b602082019050919050565b600061302d6026836133e6565b9150613038826137d3565b604082019050919050565b60006130506022836133e6565b915061305b82613822565b604082019050919050565b6000613073601d836133e6565b915061307e82613871565b602082019050919050565b60006130966020836133e6565b91506130a18261389a565b602082019050919050565b60006130b96024836133e6565b91506130c4826138c3565b604082019050919050565b60006130dc6015836133e6565b91506130e782613912565b602082019050919050565b60006130ff6025836133e6565b915061310a8261393b565b604082019050919050565b61311e8161355c565b82525050565b61312d81613566565b82525050565b60006020820190506131486000830184612f2a565b92915050565b60006020820190506131636000830184612f0c565b92915050565b600060208201905061317e6000830184612f97565b92915050565b60006020820190506131996000830184612fa6565b92915050565b600060208201905081810360008301526131b98184612fc4565b905092915050565b600060208201905081810360008301526131da81612ffd565b9050919050565b600060208201905081810360008301526131fa81613020565b9050919050565b6000602082019050818103600083015261321a81613043565b9050919050565b6000602082019050818103600083015261323a81613066565b9050919050565b6000602082019050818103600083015261325a81613089565b9050919050565b6000602082019050818103600083015261327a816130ac565b9050919050565b6000602082019050818103600083015261329a816130cf565b9050919050565b600060208201905081810360008301526132ba816130f2565b9050919050565b60006020820190506132d66000830184613115565b92915050565b600060a0820190506132f16000830188613115565b6132fe6020830187612fb5565b81810360408301526133108186612f39565b905061331f6060830185612f2a565b61332c6080830184613115565b9695505050505050565b600060208201905061334b6000830184613124565b92915050565b600061335b61336c565b90506133678282613620565b919050565b6000604051905090565b600067ffffffffffffffff82111561339157613390613756565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134028261355c565b915061340d8361355c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134425761344161369a565b5b828201905092915050565b60006134588261355c565b91506134638361355c565b925082613473576134726136c9565b5b828204905092915050565b60006134898261355c565b91506134948361355c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134cd576134cc61369a565b5b828202905092915050565b60006134e38261355c565b91506134ee8361355c565b9250828210156135015761350061369a565b5b828203905092915050565b60006135178261353c565b9050919050565b60006135298261353c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061357e82613597565b9050919050565b60006135908261355c565b9050919050565b60006135a2826135a9565b9050919050565b60006135b48261353c565b9050919050565b60005b838110156135d95780820151818401526020810190506135be565b838111156135e8576000848401525b50505050565b6000600282049050600182168061360657607f821691505b6020821081141561361a576136196136f8565b5b50919050565b61362982613799565b810181811067ffffffffffffffff8211171561364857613647613756565b5b80604052505050565b600061365c8261355c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561368f5761368e61369a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574204c696d69742045786365656465640000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6139938161350c565b811461399e57600080fd5b50565b6139aa8161351e565b81146139b557600080fd5b50565b6139c181613530565b81146139cc57600080fd5b50565b6139d88161355c565b81146139e357600080fd5b5056fea2646970667358221220ba572489c32d0d2afd78fbb566e273b5b041e0b5b787d9d9f5762dcee5e3d1ad64736f6c63430008070033

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

00000000000000000000000000000000000000000000003635c9adc5dea00000

-----Decoded View---------------
Arg [0] : initialSupply (uint256): 1000000000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000003635c9adc5dea00000


Deployed Bytecode Sourcemap

15031:16700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16274:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17528:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19878:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18647:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15862:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29752:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20659:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31625:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15750:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18490:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21363:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15610:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15568:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16159:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15821:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29884:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29366:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15718:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16090:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18818:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13349:103;;;;;;;;;;;;;:::i;:::-;;16208:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28866:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16242:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15661:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12698:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16051:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17747:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29098:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22106:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16025:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19151:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31449:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15941:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15896;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28756:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19407:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28979:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13607:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15986:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29228:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16274:28;;;;:::o;17528:100::-;17582:13;17615:5;17608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17528:100;:::o;19878:201::-;19961:4;19978:13;19994:12;:10;:12::i;:::-;19978:28;;20017:32;20026:5;20033:7;20042:6;20017:8;:32::i;:::-;20067:4;20060:11;;;19878:201;;;;:::o;18647:108::-;18708:7;18735:12;;18728:19;;18647:108;:::o;15862:27::-;;;;:::o;29752:123::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29854:12:::1;29834:9;;:33;;;;;;;;;;;;;;;;;;29752:123:::0;:::o;20659:295::-;20790:4;20807:15;20825:12;:10;:12::i;:::-;20807:30;;20848:38;20864:4;20870:7;20879:6;20848:15;:38::i;:::-;20897:27;20907:4;20913:2;20917:6;20897:9;:27::i;:::-;;20942:4;20935:11;;;20659:295;;;;;:::o;31625:88::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31700:5:::1;31685:4;:12;31690:6;31685:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;31625:88:::0;:::o;15750:26::-;;;;:::o;28604:142::-;28657:7;28684:54;28722:15;28732:4;;;;;;;;;;;28722:9;:15::i;:::-;28684:33;28701:15;28711:4;;;;;;;;;;;28701:9;:15::i;:::-;28684:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;28677:61;;28604:142;:::o;18490:92::-;18548:5;18573:1;18566:8;;18490:92;:::o;21363:240::-;21451:4;21468:13;21484:12;:10;:12::i;:::-;21468:28;;21507:66;21516:5;21523:7;21562:10;21532:11;:18;21544:5;21532:18;;;;;;;;;;;;;;;:27;21551:7;21532:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;21507:8;:66::i;:::-;21591:4;21584:11;;;21363:240;;;;:::o;30021:199::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30155:14:::1;30130:21;::::0;:39:::1;;;;;;;;;;;;;;;;;;30196:16;30180:13;:32;;;;30021:199:::0;;:::o;15610:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;15568:33::-;;;;;;;;;;;;;:::o;16159:40::-;;;;;;;;;;;;:::o;15821:32::-;;;;:::o;29884:123::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:12:::1;29966:9;;:33;;;;;;;;;;;;;;;;;;29884:123:::0;:::o;29366:378::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29513:9:::1;29504:6;:18;;;;29542:9;29533:6;:18;;;;29577:15;29562:12;:30;;;;29618:15;29603:12;:30;;;;29657:18;29668:6;;29657;;:10;;:18;;;;:::i;:::-;29646:8;:29;;;;29706:30;29723:12;;29706;;:16;;:30;;;;:::i;:::-;29686:17;:50;;;;29366:378:::0;;;;:::o;15718:25::-;;;;:::o;16090:32::-;;;;;;;;;;;;;:::o;18818:127::-;18892:7;18919:9;:18;18929:7;18919:18;;;;;;;;;;;;;;;;18912:25;;18818:127;;;:::o;13349:103::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13414:30:::1;13441:1;13414:18;:30::i;:::-;13349:103::o:0;16208:27::-;;;;:::o;28866:105::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28955:8:::1;28941:10;:22;;;;28866:105:::0;:::o;16242:25::-;;;;:::o;15661:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12698:87::-;12744:7;12771:6;;;;;;;;;;;12764:13;;12698:87;:::o;16051:32::-;;;;;;;;;;;;;:::o;15783:31::-;;;;:::o;17747:104::-;17803:13;17836:7;17829:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17747:104;:::o;29098:122::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29206:6:::1;29184:11;:19;29196:6;29184:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29098:122:::0;;:::o;22106:438::-;22199:4;22216:13;22232:12;:10;:12::i;:::-;22216:28;;22255:24;22282:11;:18;22294:5;22282:18;;;;;;;;;;;;;;;:27;22301:7;22282:27;;;;;;;;;;;;;;;;22255:54;;22348:15;22328:16;:35;;22320:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:60;22450:5;22457:7;22485:15;22466:16;:34;22441:8;:60::i;:::-;22532:4;22525:11;;;;22106:438;;;;:::o;16025:19::-;;;;;;;;;;;;;:::o;19151:193::-;19230:4;19247:13;19263:12;:10;:12::i;:::-;19247:28;;19286;19296:5;19303:2;19307:6;19286:9;:28::i;:::-;;19332:4;19325:11;;;19151:193;;;;:::o;31449:164::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31523:6:::1;31518:88;31539:5;:12;31535:1;:16;31518:88;;;31590:4;31573;:14;31578:5;31584:1;31578:8;;;;;;;;:::i;:::-;;;;;;;;31573:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31553:3;;;;;:::i;:::-;;;;31518:88;;;;31449:164:::0;:::o;15941:36::-;;;;;;;;;;;;;:::o;15896:::-;;;;:::o;28756:102::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28842:8:::1;28827:12;:23;;;;28756:102:::0;:::o;19407:151::-;19496:7;19523:11;:18;19535:5;19523:18;;;;;;;;;;;;;;;:27;19542:7;19523:27;;;;;;;;;;;;;;;;19516:34;;19407:151;;;;:::o;28979:107::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29070:8:::1;29053:14;;:25;;;;;;;;;;;;;;;;;;28979:107:::0;:::o;13607:201::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13716:1:::1;13696:22;;:8;:22;;;;13688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13772:28;13791:8;13772:18;:28::i;:::-;13607:201:::0;:::o;15986:32::-;;;;;;;;;;;;;:::o;29228:130::-;12929:12;:10;:12::i;:::-;12918:23;;:7;:5;:7::i;:::-;:23;;;12910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29344:6:::1;29318:15;:23;29334:6;29318:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;29228:130:::0;;:::o;7475:98::-;7533:7;7564:1;7560;:5;;;;:::i;:::-;7553:12;;7475:98;;;;:::o;4401:::-;4454:7;4481:10;4474:17;;4401:98;:::o;25983:380::-;26136:1;26119:19;;:5;:19;;;;26111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26217:1;26198:21;;:7;:21;;;;26190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26301:6;26271:11;:18;26283:5;26271:18;;;;;;;;;;;;;;;:27;26290:7;26271:27;;;;;;;;;;;;;;;:36;;;;26339:7;26323:32;;26332:5;26323:32;;;26348:6;26323:32;;;;;;:::i;:::-;;;;;;;;25983:380;;;:::o;26650:453::-;26785:24;26812:25;26822:5;26829:7;26812:9;:25::i;:::-;26785:52;;26872:17;26852:16;:37;26848:248;;26934:6;26914:16;:26;;26906:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27018:51;27027:5;27034:7;27062:6;27043:16;:25;27018:8;:51::i;:::-;26848:248;26774:329;26650:453;;;:::o;22552:1037::-;22640:4;22676;:12;22681:6;22676:12;;;;;;;;;;;;;;;;;;;;;;;;;22675:13;:33;;;;;22693:4;:15;22698:9;22693:15;;;;;;;;;;;;;;;;;;;;;;;;;22692:16;22675:33;22667:42;;;;;;22725:16;;;;;;;;;;;22722:73;;;22751:41;22766:6;22774:9;22785:6;22751:14;:41::i;:::-;22744:48;;;;22722:73;22825:12;;22815:6;:22;;:49;;;;22841:15;:23;22857:6;22841:23;;;;;;;;;;;;;;;;;;;;;;;;;22815:49;22807:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22903:15;:26;22919:9;22903:26;;;;;;;;;;;;;;;;;;;;;;;;;22902:27;:45;;;;;22933:14;;;;;;;;;;;22902:45;22899:166;;;23017:10;;22981:32;23006:6;22981:9;:20;22991:9;22981:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;22973:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22899:166;23096:4;;;;;;;;;;;23082:18;;:10;:18;;;;:39;;;;;23105:16;;;;;;;;;;;23104:17;23082:39;:64;;;;;23125:21;;;;;;;;;;23082:64;:109;;;;;23178:13;;23150:9;:24;23168:4;23150:24;;;;;;;;;;;;;;;;:41;;23082:109;23079:128;;;23194:10;:8;:10::i;:::-;23079:128;23239:53;23261:6;23239:53;;;;;;;;;;;;;;;;;:9;:17;23249:6;23239:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23219:9;:17;23229:6;23219:17;;;;;;;;;;;;;;;:73;;;;23313:19;23336:11;:19;23348:6;23336:19;;;;;;;;;;;;;;;;;;;;;;;;;23335:20;:47;;;;;23360:11;:22;23372:9;23360:22;;;;;;;;;;;;;;;;;;;;;;;;;23359:23;23335:47;:93;;23422:6;23335:93;;;23385:34;23393:6;23401:9;23412:6;23385:7;:34::i;:::-;23335:93;23313:115;;23462:37;23487:11;23462:9;:20;23472:9;23462:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23439:9;:20;23449:9;23439:20;;;;;;;;;;;;;;;:60;;;;23536:9;23519:40;;23528:6;23519:40;;;23547:11;23519:40;;;;;;:::i;:::-;;;;;;;;23577:4;23570:11;;;22552:1037;;;;;;:::o;7856:98::-;7914:7;7945:1;7941;:5;;;;:::i;:::-;7934:12;;7856:98;;;;:::o;13968:191::-;14042:16;14061:6;;;;;;;;;;;14042:25;;14087:8;14078:6;;:17;;;;;;;;;;;;;;;;;;14142:8;14111:40;;14132:8;14111:40;;;;;;;;;;;;14031:128;13968:191;:::o;23601:330::-;23694:4;23731:53;23753:6;23731:53;;;;;;;;;;;;;;;;;:9;:17;23741:6;23731:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23711:9;:17;23721:6;23711:17;;;;;;;;;;;;;;;:73;;;;23818:32;23843:6;23818:9;:20;23828:9;23818:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23795:9;:20;23805:9;23795:20;;;;;;;;;;;;;;;:55;;;;23883:9;23866:35;;23875:6;23866:35;;;23894:6;23866:35;;;;;;:::i;:::-;;;;;;;;23919:4;23912:11;;23601:330;;;;;:::o;30679:762::-;17397:4;17378:16;;:23;;;;;;;;;;;;;;;;;;30741:20:::1;30764:9;:24;30782:4;30764:24;;;;;;;;;;;;;;;;30741:47;;30801:21;30839:1;30825:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30801:40;;30870:4;30852;30857:1;30852:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30896:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30886:4;30891:1;30886:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30922:6;;;;;;;;;;;:57;;;30994:12;31021:1;31037:4;31064;31084:15;30922:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31123:17;31143:21;31123:41;;31175:18;31196:35;31222:8;;31196:21;31210:6;;31196:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;31175:56;;31242:18;31263:25;31277:10;31263:9;:13;;:25;;;;:::i;:::-;31242:46;;31316:1;31304:9;:13;31301:119;;;31333:9;;;;;;;;;;;:18;;:30;31352:10;31333:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31378:9;;;;;;;;;;;:18;;:30;31397:10;31378:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31301:119;30720:721;;;;;17443:5:::0;17424:16;;:24;;;;;;;;;;;;;;;;;;30679:762::o;9754:240::-;9874:7;9932:1;9927;:6;;9935:12;9919:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9974:1;9970;:5;9963:12;;9754:240;;;;;:::o;30232:439::-;30318:7;30348:21;30380:9;30372:17;;:4;;;;;;;;;;;:17;;;:48;;30412:8;;30372:48;;;30392:17;;30372:48;30348:72;;30431:17;30451:34;30481:3;30451:25;30462:13;30451:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;30431:54;;30525:39;30554:9;30525;:24;30543:4;30525:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;30498:9;:24;30516:4;30498:24;;;;;;;;;;;;;;;:66;;;;30605:4;30580:42;;30589:6;30580:42;;;30612:9;30580:42;;;;;;:::i;:::-;;;;;;;;30642:21;30653:9;30642:6;:10;;:21;;;;:::i;:::-;30635:28;;;;30232:439;;;;;:::o;8213:98::-;8271:7;8302:1;8298;:5;;;;:::i;:::-;8291:12;;8213:98;;;;:::o;8612:::-;8670:7;8701:1;8697;:5;;;;:::i;:::-;8690:12;;8612:98;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1046:155::-;1100:5;1138:6;1125:20;1116:29;;1154:41;1189:5;1154:41;:::i;:::-;1046:155;;;;:::o;1224:370::-;1295:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:122;;1352:79;;:::i;:::-;1311:122;1469:6;1456:20;1494:94;1584:3;1576:6;1569:4;1561:6;1557:17;1494:94;:::i;:::-;1485:103;;1301:293;1224:370;;;;:::o;1600:133::-;1643:5;1681:6;1668:20;1659:29;;1697:30;1721:5;1697:30;:::i;:::-;1600:133;;;;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:351::-;2289:6;2338:2;2326:9;2317:7;2313:23;2309:32;2306:119;;;2344:79;;:::i;:::-;2306:119;2464:1;2489:64;2545:7;2536:6;2525:9;2521:22;2489:64;:::i;:::-;2479:74;;2435:128;2219:351;;;;:::o;2576:345::-;2643:6;2692:2;2680:9;2671:7;2667:23;2663:32;2660:119;;;2698:79;;:::i;:::-;2660:119;2818:1;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;2789:125;2576:345;;;;:::o;2927:474::-;2995:6;3003;3052:2;3040:9;3031:7;3027:23;3023:32;3020:119;;;3058:79;;:::i;:::-;3020:119;3178:1;3203:53;3248:7;3239:6;3228:9;3224:22;3203:53;:::i;:::-;3193:63;;3149:117;3305:2;3331:53;3376:7;3367:6;3356:9;3352:22;3331:53;:::i;:::-;3321:63;;3276:118;2927:474;;;;;:::o;3407:619::-;3484:6;3492;3500;3549:2;3537:9;3528:7;3524:23;3520:32;3517:119;;;3555:79;;:::i;:::-;3517:119;3675:1;3700:53;3745:7;3736:6;3725:9;3721:22;3700:53;:::i;:::-;3690:63;;3646:117;3802:2;3828:53;3873:7;3864:6;3853:9;3849:22;3828:53;:::i;:::-;3818:63;;3773:118;3930:2;3956:53;4001:7;3992:6;3981:9;3977:22;3956:53;:::i;:::-;3946:63;;3901:118;3407:619;;;;;:::o;4032:468::-;4097:6;4105;4154:2;4142:9;4133:7;4129:23;4125:32;4122:119;;;4160:79;;:::i;:::-;4122:119;4280:1;4305:53;4350:7;4341:6;4330:9;4326:22;4305:53;:::i;:::-;4295:63;;4251:117;4407:2;4433:50;4475:7;4466:6;4455:9;4451:22;4433:50;:::i;:::-;4423:60;;4378:115;4032:468;;;;;:::o;4506:474::-;4574:6;4582;4631:2;4619:9;4610:7;4606:23;4602:32;4599:119;;;4637:79;;:::i;:::-;4599:119;4757:1;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4728:117;4884:2;4910:53;4955:7;4946:6;4935:9;4931:22;4910:53;:::i;:::-;4900:63;;4855:118;4506:474;;;;;:::o;4986:539::-;5070:6;5119:2;5107:9;5098:7;5094:23;5090:32;5087:119;;;5125:79;;:::i;:::-;5087:119;5273:1;5262:9;5258:17;5245:31;5303:18;5295:6;5292:30;5289:117;;;5325:79;;:::i;:::-;5289:117;5430:78;5500:7;5491:6;5480:9;5476:22;5430:78;:::i;:::-;5420:88;;5216:302;4986:539;;;;:::o;5531:323::-;5587:6;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:50;5829:7;5820:6;5809:9;5805:22;5787:50;:::i;:::-;5777:60;;5733:114;5531:323;;;;:::o;5860:468::-;5925:6;5933;5982:2;5970:9;5961:7;5957:23;5953:32;5950:119;;;5988:79;;:::i;:::-;5950:119;6108:1;6133:50;6175:7;6166:6;6155:9;6151:22;6133:50;:::i;:::-;6123:60;;6079:114;6232:2;6258:53;6303:7;6294:6;6283:9;6279:22;6258:53;:::i;:::-;6248:63;;6203:118;5860:468;;;;;:::o;6334:329::-;6393:6;6442:2;6430:9;6421:7;6417:23;6413:32;6410:119;;;6448:79;;:::i;:::-;6410:119;6568:1;6593:53;6638:7;6629:6;6618:9;6614:22;6593:53;:::i;:::-;6583:63;;6539:117;6334:329;;;;:::o;6669:765::-;6755:6;6763;6771;6779;6828:3;6816:9;6807:7;6803:23;6799:33;6796:120;;;6835:79;;:::i;:::-;6796:120;6955:1;6980:53;7025:7;7016:6;7005:9;7001:22;6980:53;:::i;:::-;6970:63;;6926:117;7082:2;7108:53;7153:7;7144:6;7133:9;7129:22;7108:53;:::i;:::-;7098:63;;7053:118;7210:2;7236:53;7281:7;7272:6;7261:9;7257:22;7236:53;:::i;:::-;7226:63;;7181:118;7338:2;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7309:118;6669:765;;;;;;;:::o;7440:179::-;7509:10;7530:46;7572:3;7564:6;7530:46;:::i;:::-;7608:4;7603:3;7599:14;7585:28;;7440:179;;;;:::o;7625:142::-;7728:32;7754:5;7728:32;:::i;:::-;7723:3;7716:45;7625:142;;:::o;7773:108::-;7850:24;7868:5;7850:24;:::i;:::-;7845:3;7838:37;7773:108;;:::o;7887:118::-;7974:24;7992:5;7974:24;:::i;:::-;7969:3;7962:37;7887:118;;:::o;8041:732::-;8160:3;8189:54;8237:5;8189:54;:::i;:::-;8259:86;8338:6;8333:3;8259:86;:::i;:::-;8252:93;;8369:56;8419:5;8369:56;:::i;:::-;8448:7;8479:1;8464:284;8489:6;8486:1;8483:13;8464:284;;;8565:6;8559:13;8592:63;8651:3;8636:13;8592:63;:::i;:::-;8585:70;;8678:60;8731:6;8678:60;:::i;:::-;8668:70;;8524:224;8511:1;8508;8504:9;8499:14;;8464:284;;;8468:14;8764:3;8757:10;;8165:608;;;8041:732;;;;:::o;8779:109::-;8860:21;8875:5;8860:21;:::i;:::-;8855:3;8848:34;8779:109;;:::o;8894:183::-;9007:63;9064:5;9007:63;:::i;:::-;9002:3;8995:76;8894:183;;:::o;9083:147::-;9178:45;9217:5;9178:45;:::i;:::-;9173:3;9166:58;9083:147;;:::o;9236:364::-;9324:3;9352:39;9385:5;9352:39;:::i;:::-;9407:71;9471:6;9466:3;9407:71;:::i;:::-;9400:78;;9487:52;9532:6;9527:3;9520:4;9513:5;9509:16;9487:52;:::i;:::-;9564:29;9586:6;9564:29;:::i;:::-;9559:3;9555:39;9548:46;;9328:272;9236:364;;;;:::o;9606:366::-;9748:3;9769:67;9833:2;9828:3;9769:67;:::i;:::-;9762:74;;9845:93;9934:3;9845:93;:::i;:::-;9963:2;9958:3;9954:12;9947:19;;9606:366;;;:::o;9978:::-;10120:3;10141:67;10205:2;10200:3;10141:67;:::i;:::-;10134:74;;10217:93;10306:3;10217:93;:::i;:::-;10335:2;10330:3;10326:12;10319:19;;9978:366;;;:::o;10350:::-;10492:3;10513:67;10577:2;10572:3;10513:67;:::i;:::-;10506:74;;10589:93;10678:3;10589:93;:::i;:::-;10707:2;10702:3;10698:12;10691:19;;10350:366;;;:::o;10722:::-;10864:3;10885:67;10949:2;10944:3;10885:67;:::i;:::-;10878:74;;10961:93;11050:3;10961:93;:::i;:::-;11079:2;11074:3;11070:12;11063:19;;10722:366;;;:::o;11094:::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:::-;11608:3;11629:67;11693:2;11688:3;11629:67;:::i;:::-;11622:74;;11705:93;11794:3;11705:93;:::i;:::-;11823:2;11818:3;11814:12;11807:19;;11466:366;;;:::o;11838:::-;11980:3;12001:67;12065:2;12060:3;12001:67;:::i;:::-;11994:74;;12077:93;12166:3;12077:93;:::i;:::-;12195:2;12190:3;12186:12;12179:19;;11838:366;;;:::o;12210:::-;12352:3;12373:67;12437:2;12432:3;12373:67;:::i;:::-;12366:74;;12449:93;12538:3;12449:93;:::i;:::-;12567:2;12562:3;12558:12;12551:19;;12210:366;;;:::o;12582:118::-;12669:24;12687:5;12669:24;:::i;:::-;12664:3;12657:37;12582:118;;:::o;12706:112::-;12789:22;12805:5;12789:22;:::i;:::-;12784:3;12777:35;12706:112;;:::o;12824:222::-;12917:4;12955:2;12944:9;12940:18;12932:26;;12968:71;13036:1;13025:9;13021:17;13012:6;12968:71;:::i;:::-;12824:222;;;;:::o;13052:254::-;13161:4;13199:2;13188:9;13184:18;13176:26;;13212:87;13296:1;13285:9;13281:17;13272:6;13212:87;:::i;:::-;13052:254;;;;:::o;13312:210::-;13399:4;13437:2;13426:9;13422:18;13414:26;;13450:65;13512:1;13501:9;13497:17;13488:6;13450:65;:::i;:::-;13312:210;;;;:::o;13528:274::-;13647:4;13685:2;13674:9;13670:18;13662:26;;13698:97;13792:1;13781:9;13777:17;13768:6;13698:97;:::i;:::-;13528:274;;;;:::o;13808:313::-;13921:4;13959:2;13948:9;13944:18;13936:26;;14008:9;14002:4;13998:20;13994:1;13983:9;13979:17;13972:47;14036:78;14109:4;14100:6;14036:78;:::i;:::-;14028:86;;13808:313;;;;:::o;14127:419::-;14293:4;14331:2;14320:9;14316:18;14308:26;;14380:9;14374:4;14370:20;14366:1;14355:9;14351:17;14344:47;14408:131;14534:4;14408:131;:::i;:::-;14400:139;;14127:419;;;:::o;14552:::-;14718:4;14756:2;14745:9;14741:18;14733:26;;14805:9;14799:4;14795:20;14791:1;14780:9;14776:17;14769:47;14833:131;14959:4;14833:131;:::i;:::-;14825:139;;14552:419;;;:::o;14977:::-;15143:4;15181:2;15170:9;15166:18;15158:26;;15230:9;15224:4;15220:20;15216:1;15205:9;15201:17;15194:47;15258:131;15384:4;15258:131;:::i;:::-;15250:139;;14977:419;;;:::o;15402:::-;15568:4;15606:2;15595:9;15591:18;15583:26;;15655:9;15649:4;15645:20;15641:1;15630:9;15626:17;15619:47;15683:131;15809:4;15683:131;:::i;:::-;15675:139;;15402:419;;;:::o;15827:::-;15993:4;16031:2;16020:9;16016:18;16008:26;;16080:9;16074:4;16070:20;16066:1;16055:9;16051:17;16044:47;16108:131;16234:4;16108:131;:::i;:::-;16100:139;;15827:419;;;:::o;16252:::-;16418:4;16456:2;16445:9;16441:18;16433:26;;16505:9;16499:4;16495:20;16491:1;16480:9;16476:17;16469:47;16533:131;16659:4;16533:131;:::i;:::-;16525:139;;16252:419;;;:::o;16677:::-;16843:4;16881:2;16870:9;16866:18;16858:26;;16930:9;16924:4;16920:20;16916:1;16905:9;16901:17;16894:47;16958:131;17084:4;16958:131;:::i;:::-;16950:139;;16677:419;;;:::o;17102:::-;17268:4;17306:2;17295:9;17291:18;17283:26;;17355:9;17349:4;17345:20;17341:1;17330:9;17326:17;17319:47;17383:131;17509:4;17383:131;:::i;:::-;17375:139;;17102:419;;;:::o;17527:222::-;17620:4;17658:2;17647:9;17643:18;17635:26;;17671:71;17739:1;17728:9;17724:17;17715:6;17671:71;:::i;:::-;17527:222;;;;:::o;17755:831::-;18018:4;18056:3;18045:9;18041:19;18033:27;;18070:71;18138:1;18127:9;18123:17;18114:6;18070:71;:::i;:::-;18151:80;18227:2;18216:9;18212:18;18203:6;18151:80;:::i;:::-;18278:9;18272:4;18268:20;18263:2;18252:9;18248:18;18241:48;18306:108;18409:4;18400:6;18306:108;:::i;:::-;18298:116;;18424:72;18492:2;18481:9;18477:18;18468:6;18424:72;:::i;:::-;18506:73;18574:3;18563:9;18559:19;18550:6;18506:73;:::i;:::-;17755:831;;;;;;;;:::o;18592:214::-;18681:4;18719:2;18708:9;18704:18;18696:26;;18732:67;18796:1;18785:9;18781:17;18772:6;18732:67;:::i;:::-;18592:214;;;;:::o;18812:129::-;18846:6;18873:20;;:::i;:::-;18863:30;;18902:33;18930:4;18922:6;18902:33;:::i;:::-;18812:129;;;:::o;18947:75::-;18980:6;19013:2;19007:9;18997:19;;18947:75;:::o;19028:311::-;19105:4;19195:18;19187:6;19184:30;19181:56;;;19217:18;;:::i;:::-;19181:56;19267:4;19259:6;19255:17;19247:25;;19327:4;19321;19317:15;19309:23;;19028:311;;;:::o;19345:132::-;19412:4;19435:3;19427:11;;19465:4;19460:3;19456:14;19448:22;;19345:132;;;:::o;19483:114::-;19550:6;19584:5;19578:12;19568:22;;19483:114;;;:::o;19603:99::-;19655:6;19689:5;19683:12;19673:22;;19603:99;;;:::o;19708:113::-;19778:4;19810;19805:3;19801:14;19793:22;;19708:113;;;:::o;19827:184::-;19926:11;19960:6;19955:3;19948:19;20000:4;19995:3;19991:14;19976:29;;19827:184;;;;:::o;20017:169::-;20101:11;20135:6;20130:3;20123:19;20175:4;20170:3;20166:14;20151:29;;20017:169;;;;:::o;20192:305::-;20232:3;20251:20;20269:1;20251:20;:::i;:::-;20246:25;;20285:20;20303:1;20285:20;:::i;:::-;20280:25;;20439:1;20371:66;20367:74;20364:1;20361:81;20358:107;;;20445:18;;:::i;:::-;20358:107;20489:1;20486;20482:9;20475:16;;20192:305;;;;:::o;20503:185::-;20543:1;20560:20;20578:1;20560:20;:::i;:::-;20555:25;;20594:20;20612:1;20594:20;:::i;:::-;20589:25;;20633:1;20623:35;;20638:18;;:::i;:::-;20623:35;20680:1;20677;20673:9;20668:14;;20503:185;;;;:::o;20694:348::-;20734:7;20757:20;20775:1;20757:20;:::i;:::-;20752:25;;20791:20;20809:1;20791:20;:::i;:::-;20786:25;;20979:1;20911:66;20907:74;20904:1;20901:81;20896:1;20889:9;20882:17;20878:105;20875:131;;;20986:18;;:::i;:::-;20875:131;21034:1;21031;21027:9;21016:20;;20694:348;;;;:::o;21048:191::-;21088:4;21108:20;21126:1;21108:20;:::i;:::-;21103:25;;21142:20;21160:1;21142:20;:::i;:::-;21137:25;;21181:1;21178;21175:8;21172:34;;;21186:18;;:::i;:::-;21172:34;21231:1;21228;21224:9;21216:17;;21048:191;;;;:::o;21245:96::-;21282:7;21311:24;21329:5;21311:24;:::i;:::-;21300:35;;21245:96;;;:::o;21347:104::-;21392:7;21421:24;21439:5;21421:24;:::i;:::-;21410:35;;21347:104;;;:::o;21457:90::-;21491:7;21534:5;21527:13;21520:21;21509:32;;21457:90;;;:::o;21553:126::-;21590:7;21630:42;21623:5;21619:54;21608:65;;21553:126;;;:::o;21685:77::-;21722:7;21751:5;21740:16;;21685:77;;;:::o;21768:86::-;21803:7;21843:4;21836:5;21832:16;21821:27;;21768:86;;;:::o;21860:152::-;21936:9;21969:37;22000:5;21969:37;:::i;:::-;21956:50;;21860:152;;;:::o;22018:121::-;22076:9;22109:24;22127:5;22109:24;:::i;:::-;22096:37;;22018:121;;;:::o;22145:126::-;22195:9;22228:37;22259:5;22228:37;:::i;:::-;22215:50;;22145:126;;;:::o;22277:113::-;22327:9;22360:24;22378:5;22360:24;:::i;:::-;22347:37;;22277:113;;;:::o;22396:307::-;22464:1;22474:113;22488:6;22485:1;22482:13;22474:113;;;22573:1;22568:3;22564:11;22558:18;22554:1;22549:3;22545:11;22538:39;22510:2;22507:1;22503:10;22498:15;;22474:113;;;22605:6;22602:1;22599:13;22596:101;;;22685:1;22676:6;22671:3;22667:16;22660:27;22596:101;22445:258;22396:307;;;:::o;22709:320::-;22753:6;22790:1;22784:4;22780:12;22770:22;;22837:1;22831:4;22827:12;22858:18;22848:81;;22914:4;22906:6;22902:17;22892:27;;22848:81;22976:2;22968:6;22965:14;22945:18;22942:38;22939:84;;;22995:18;;:::i;:::-;22939:84;22760:269;22709:320;;;:::o;23035:281::-;23118:27;23140:4;23118:27;:::i;:::-;23110:6;23106:40;23248:6;23236:10;23233:22;23212:18;23200:10;23197:34;23194:62;23191:88;;;23259:18;;:::i;:::-;23191:88;23299:10;23295:2;23288:22;23078:238;23035:281;;:::o;23322:233::-;23361:3;23384:24;23402:5;23384:24;:::i;:::-;23375:33;;23430:66;23423:5;23420:77;23417:103;;;23500:18;;:::i;:::-;23417:103;23547:1;23540:5;23536:13;23529:20;;23322:233;;;:::o;23561:180::-;23609:77;23606:1;23599:88;23706:4;23703:1;23696:15;23730:4;23727:1;23720:15;23747:180;23795:77;23792:1;23785:88;23892:4;23889:1;23882:15;23916:4;23913:1;23906:15;23933:180;23981:77;23978:1;23971:88;24078:4;24075:1;24068:15;24102:4;24099:1;24092:15;24119:180;24167:77;24164:1;24157:88;24264:4;24261:1;24254:15;24288:4;24285:1;24278:15;24305:180;24353:77;24350:1;24343:88;24450:4;24447:1;24440:15;24474:4;24471:1;24464:15;24491:117;24600:1;24597;24590:12;24614:117;24723:1;24720;24713:12;24737:117;24846:1;24843;24836:12;24860:117;24969:1;24966;24959:12;24983:102;25024:6;25075:2;25071:7;25066:2;25059:5;25055:14;25051:28;25041:38;;24983:102;;;:::o;25091:167::-;25231:19;25227:1;25219:6;25215:14;25208:43;25091:167;:::o;25264:225::-;25404:34;25400:1;25392:6;25388:14;25381:58;25473:8;25468:2;25460:6;25456:15;25449:33;25264:225;:::o;25495:221::-;25635:34;25631:1;25623:6;25619:14;25612:58;25704:4;25699:2;25691:6;25687:15;25680:29;25495:221;:::o;25722:179::-;25862:31;25858:1;25850:6;25846:14;25839:55;25722:179;:::o;25907:182::-;26047:34;26043:1;26035:6;26031:14;26024:58;25907:182;:::o;26095:223::-;26235:34;26231:1;26223:6;26219:14;26212:58;26304:6;26299:2;26291:6;26287:15;26280:31;26095:223;:::o;26324:171::-;26464:23;26460:1;26452:6;26448:14;26441:47;26324:171;:::o;26501:224::-;26641:34;26637:1;26629:6;26625:14;26618:58;26710:7;26705:2;26697:6;26693:15;26686:32;26501:224;:::o;26731:122::-;26804:24;26822:5;26804:24;:::i;:::-;26797:5;26794:35;26784:63;;26843:1;26840;26833:12;26784:63;26731:122;:::o;26859:138::-;26940:32;26966:5;26940:32;:::i;:::-;26933:5;26930:43;26920:71;;26987:1;26984;26977:12;26920:71;26859:138;:::o;27003:116::-;27073:21;27088:5;27073:21;:::i;:::-;27066:5;27063:32;27053:60;;27109:1;27106;27099:12;27053:60;27003:116;:::o;27125:122::-;27198:24;27216:5;27198:24;:::i;:::-;27191:5;27188:35;27178:63;;27237:1;27234;27227:12;27178:63;27125:122;:::o

Swarm Source

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