ETH Price: $2,446.48 (+0.73%)
 

Overview

Max Total Supply

1,000,000,000 RESET

Holders

425 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 RESET

Value
$0.00
0x304ca9cfcf1564716d9d0afadb091a5566ce8338
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RESET

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-05-05
*/

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

/**
 *Submitted for verification at Etherscan.io on 2022-04-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-14
*/

// SPDX-License-Identifier: MIT
// 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;
    }
}

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

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

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

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

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

pragma solidity ^0.8.7;

contract RESET is ERC20, Ownable {
    /* Token Tax */
    uint32 public _taxPercision = 100000;
    address[] public _taxRecipients;
    uint16 public _taxTotal;
    bool public _taxActive;
    bool public _txnLimitActive;

    uint _holdingCapPercent = 1;

    mapping(address => uint16) public _taxRecipientAmounts;
    mapping(address => bool) private _isTaxRecipient;
    mapping(address => bool) public _whitelisted;

    /* Events */
    event UpdateTaxPercentage(address indexed wallet, uint16 _newTaxAmount);
    event AddTaxRecipient(address indexed wallet, uint16 _taxAmount);
    event RemoveFromWhitelist(address indexed wallet);
    event RemoveTaxRecipient(address indexed wallet);
    event AddToWhitelist(address indexed wallet);
    event ToggleTax(bool _active);
    event ToggleTxnLimit(bool _active);

    uint256 private _totalSupply;

    /**
     * @dev Constructor.
     */
    constructor() ERC20('MetaReset', 'RESET') payable {
      _totalSupply = 1000000000 * (10**18);

      _mint(msg.sender, _totalSupply);
    }


    /**
      * @notice overrides ERC20 transferFrom function to introduce tax functionality
      * @param from address amount is coming from
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");
        if(_taxActive && !_whitelisted[from] && !_whitelisted[to]) {
          uint256 tax = amount *_taxTotal / _taxPercision;
          amount = amount - tax;
          _transfer(from, address(this), tax);
        }
        _transfer(from, to, amount);
        return true;
    }


    /**
      * @notice : overrides ERC20 transfer function to introduce tax functionality
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
      address owner = _msgSender();
      require(balanceOf(owner) >= amount, "ERC20: transfer amount exceeds balance");
      require(!_txnLimitActive || balanceOf(to)+ amount <= ((_totalSupply * _holdingCapPercent) / 100), "Max holding cap breached.");
      if(_taxActive && !_whitelisted[owner] && !_whitelisted[to]) {
        uint256 tax = amount*_taxTotal/_taxPercision;
        amount = amount - tax;
        _transfer(owner, address(this), tax);
      }
      _transfer(owner, to, amount);
      return true;
    }

    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of lowest token units to be burned.
     */
    function burn(uint256 value) public {
      _burn(msg.sender, value);
    }

    /* ADMIN Functions */
    /**
       * @notice : toggles the tax on or off
    */
    function toggleTax() external onlyOwner {
      _taxActive = !_taxActive;
      emit ToggleTax(_taxActive);
    }
    /**
       * @notice : toggles the txn limit on or off
    */
    function toggleTxnLimit() external onlyOwner {
      _txnLimitActive = !_txnLimitActive;
      emit ToggleTxnLimit(_txnLimitActive);
    }

    /**
      * @notice : adds address with tax amount to taxable addresses list
      * @param wallet address to add
      * @param _tax tax amount this address receives
    */
    function addTaxRecipient(address wallet, uint16 _tax) external onlyOwner {
      require(_taxRecipients.length < 100, "Reached maximum number of tax addresses");
      require(wallet != address(0), "Cannot add 0 address");
      require(!_isTaxRecipient[wallet], "Recipient already added");
      require(_tax > 0 && _tax + _taxTotal <= _taxPercision/10, "Total tax amount must be between 0 and 10%");

      _isTaxRecipient[wallet] = true;
      _taxRecipients.push(wallet);
      _taxRecipientAmounts[wallet] = _tax;
      _taxTotal = _taxTotal + _tax;
      emit AddTaxRecipient(wallet, _tax);
    }

    /**
      * @notice : updates address tax amount
      * @param wallet address to update
      * @param newTax new tax amount
     */
    function updateTaxPercentage(address wallet, uint16 newTax) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Not a tax address");

      uint16 currentTax = _taxRecipientAmounts[wallet];
      require(currentTax != newTax, "Tax already this amount for this address");

      if(currentTax < newTax) {
        uint16 diff = newTax - currentTax;
        require(_taxTotal + diff <= 10000, "Tax amount too high for current tax rate");
        _taxTotal = _taxTotal + diff;
      } else {
        uint16 diff = currentTax - newTax;
        _taxTotal = _taxTotal - diff;
      }
      _taxRecipientAmounts[wallet] = newTax;
      emit UpdateTaxPercentage(wallet, newTax);
    }

    /**
      * @notice : remove address from taxed list
      * @param wallet address to remove
     */
    function removeTaxRecipient(address wallet) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Recipient has not been added");
      uint16 _tax = _taxRecipientAmounts[wallet];

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        if(_taxRecipients[i] == wallet) {
          _taxTotal = _taxTotal - _tax;
          _taxRecipientAmounts[wallet] = 0;
          _taxRecipients[i] = _taxRecipients[_taxRecipients.length - 1];
          _isTaxRecipient[wallet] = false;
          _taxRecipients.pop();
          emit RemoveTaxRecipient(wallet);

          break;
        }
      }
    }

    /**
    * @notice : add address to tax whitelist
    * @param wallet address to add to whitelist
    */
    function addToWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(!_whitelisted[wallet], "Address already added");
      _whitelisted[wallet] = true;

      emit AddToWhitelist(wallet);
    }

    /**
    * @notice : add address to whitelist (non taxed)
    * @param wallet address to remove from whitelist
    */
    function removeFromWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(_whitelisted[wallet], "Address not added");
      _whitelisted[wallet] = false;

      emit RemoveFromWhitelist(wallet);
    }

    /**
    * @notice : resets tax settings to initial state
    */
    function taxReset() external onlyOwner {
      _taxActive = false;
      _taxTotal = 0;

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        _taxRecipientAmounts[_taxRecipients[i]] = 0;
        _isTaxRecipient[_taxRecipients[i]] = false;
      }

      delete _taxRecipients;
    }

    /**
      * @notice : withdraws taxable amount to tax recipients
     */
    function distributeTaxes() external onlyOwner {
      require(balanceOf(address(this)) > 0, "Nothing to withdraw");
      uint256 taxableAmount = balanceOf(address(this));
      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        address taxAddress = _taxRecipients[i];
        if(i == _taxRecipients.length - 1) {
           _transfer(address(this), taxAddress, balanceOf(address(this)));
        } else {
          uint256 amount = taxableAmount * _taxRecipientAmounts[taxAddress]/_taxTotal;
          _transfer(address(this), taxAddress, amount);
        }
      }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_taxAmount","type":"uint16"}],"name":"AddTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"AddToWhitelist","type":"event"},{"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":"wallet","type":"address"}],"name":"RemoveFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"RemoveTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_active","type":"bool"}],"name":"ToggleTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_active","type":"bool"}],"name":"ToggleTxnLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_newTaxAmount","type":"uint16"}],"name":"UpdateTaxPercentage","type":"event"},{"inputs":[],"name":"_taxActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxPercision","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_taxRecipientAmounts","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_taxRecipients","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTotal","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_txnLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"addTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint16","name":"newTax","type":"uint16"}],"name":"updateTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052620186a0600560146101000a81548163ffffffff021916908363ffffffff16021790555060016008556040518060400160405280600981526020017f4d657461526573657400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f52455345540000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b19291906200036b565b508060049080519060200190620000ca9291906200036b565b505050620000ed620000e16200011a60201b60201c565b6200012260201b60201c565b6b033b2e3c9fd0803ce8000000600c819055506200011433600c54620001e860201b60201c565b620005c7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200025b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002529062000453565b60405180910390fd5b6200026f600083836200036160201b60201c565b8060026000828254620002839190620004a3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002da9190620004a3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000341919062000475565b60405180910390a36200035d600083836200036660201b60201c565b5050565b505050565b505050565b82805462000379906200050a565b90600052602060002090601f0160209004810192826200039d5760008555620003e9565b82601f10620003b857805160ff1916838001178555620003e9565b82800160010185558215620003e9579182015b82811115620003e8578251825591602001919060010190620003cb565b5b509050620003f89190620003fc565b5090565b5b8082111562000417576000816000905550600101620003fd565b5090565b60006200042a601f8362000492565b915062000437826200059e565b602082019050919050565b6200044d8162000500565b82525050565b600060208201905081810360008301526200046e816200041b565b9050919050565b60006020820190506200048c600083018462000442565b92915050565b600082825260208201905092915050565b6000620004b08262000500565b9150620004bd8362000500565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004f557620004f462000540565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200052357607f821691505b602082108114156200053a57620005396200056f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61417180620005d76000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063619f28ed1161010f578063a457c2d7116100a2578063dd62ed3e11610071578063dd62ed3e14610547578063e43252d714610577578063f2fde38b14610593578063fb369eb0146105af576101e4565b8063a457c2d7146104ab578063a9059cbb146104db578063bb47cc0c1461050b578063d641eb2214610529576101e4565b80638ab1d681116100de5780638ab1d681146104495780638da5cb5b14610465578063909656521461048357806395d89b411461048d576101e4565b8063619f28ed146103e957806370a0823114610405578063715018a61461043557806371fc737c1461043f576101e4565b80632354ee03116101875780633a5fcb63116101565780633a5fcb631461036357806342966c68146103935780634be31778146103af57806354f12265146103cd576101e4565b80632354ee03146102b557806323b872dd146102e5578063313ce567146103155780633950935114610333576101e4565b8063095ea7b3116101c3578063095ea7b31461024157806310bf60291461027157806310f6da921461027b57806318160ddd14610297576101e4565b80629b380d146101e957806301c4b316146101f357806306fdde0314610223575b600080fd5b6101f16105cd565b005b61020d60048036038101906102089190612e53565b6106bb565b60405161021a91906133b6565b60405180910390f35b61022b6106db565b60405161023891906133d1565b60405180910390f35b61025b60048036038101906102569190612f53565b61076d565b60405161026891906133b6565b60405180910390f35b610279610790565b005b61029560048036038101906102909190612e53565b61087e565b005b61029f610d11565b6040516102ac919061370e565b60405180910390f35b6102cf60048036038101906102ca9190612f93565b610d1b565b6040516102dc919061339b565b60405180910390f35b6102ff60048036038101906102fa9190612ec0565b610d5a565b60405161030c91906133b6565b60405180910390f35b61031d610ef7565b60405161032a9190613744565b60405180910390f35b61034d60048036038101906103489190612f53565b610f00565b60405161035a91906133b6565b60405180910390f35b61037d60048036038101906103789190612e53565b610faa565b60405161038a91906136f3565b60405180910390f35b6103ad60048036038101906103a89190612f93565b610fcb565b005b6103b7610fd8565b6040516103c49190613729565b60405180910390f35b6103e760048036038101906103e29190612f13565b610fee565b005b61040360048036038101906103fe9190612f13565b6113bc565b005b61041f600480360381019061041a9190612e53565b6117b2565b60405161042c919061370e565b60405180910390f35b61043d6117fa565b005b610447611882565b005b610463600480360381019061045e9190612e53565b611a88565b005b61046d611c9e565b60405161047a919061339b565b60405180910390f35b61048b611cc8565b005b610495611ee9565b6040516104a291906133d1565b60405180910390f35b6104c560048036038101906104c09190612f53565b611f7b565b6040516104d291906133b6565b60405180910390f35b6104f560048036038101906104f09190612f53565b612065565b60405161050291906133b6565b60405180910390f35b61051361227f565b60405161052091906136f3565b60405180910390f35b610531612293565b60405161053e91906133b6565b60405180910390f35b610561600480360381019061055c9190612e80565b6122a6565b60405161056e919061370e565b60405180910390f35b610591600480360381019061058c9190612e53565b61232d565b005b6105ad60048036038101906105a89190612e53565b612544565b005b6105b761263c565b6040516105c491906133b6565b60405180910390f35b6105d561264f565b73ffffffffffffffffffffffffffffffffffffffff166105f3611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090613613565b60405180910390fd5b600760039054906101000a900460ff1615600760036101000a81548160ff0219169083151502179055507f9d71536007d8e69880bcc33d1aa24f576bfa71e6c583cbe58bcc9876f6108559600760039054906101000a900460ff166040516106b191906133b6565b60405180910390a1565b600b6020528060005260406000206000915054906101000a900460ff1681565b6060600380546106ea906139d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610716906139d3565b80156107635780601f1061073857610100808354040283529160200191610763565b820191906000526020600020905b81548152906001019060200180831161074657829003601f168201915b5050505050905090565b60008061077861264f565b9050610785818585612657565b600191505092915050565b61079861264f565b73ffffffffffffffffffffffffffffffffffffffff166107b6611c9e565b73ffffffffffffffffffffffffffffffffffffffff161461080c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080390613613565b60405180910390fd5b600760029054906101000a900460ff1615600760026101000a81548160ff0219169083151502179055507fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864600760029054906101000a900460ff1660405161087491906133b6565b60405180910390a1565b61088661264f565b73ffffffffffffffffffffffffffffffffffffffff166108a4611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190613553565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed906135d3565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff16905060005b6006805490508160ff161015610d0c578273ffffffffffffffffffffffffffffffffffffffff1660068260ff1681548110610a8957610a88613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cf95781600760009054906101000a900461ffff16610aec91906138c5565b600760006101000a81548161ffff021916908361ffff1602179055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060066001600680549050610b7791906138f9565b81548110610b8857610b87613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068260ff1681548110610bca57610bc9613aeb565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610c7c57610c7b613abc565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558273ffffffffffffffffffffffffffffffffffffffff167f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f360405160405180910390a2610d0c565b8080610d0490613a05565b915050610a4b565b505050565b6000600254905090565b60068181548110610d2b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610d6561264f565b9050610d72858285612822565b82610d7c866117b2565b1015610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490613513565b60405180910390fd5b600760029054906101000a900460ff168015610e235750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610e795750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610ee0576000600560149054906101000a900463ffffffff1663ffffffff16600760009054906101000a900461ffff1661ffff1685610eb9919061386b565b610ec39190613809565b90508084610ed191906138f9565b9350610ede8630836128ae565b505b610eeb8585856128ae565b60019150509392505050565b60006012905090565b600080610f0b61264f565b9050610f9f818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f9a91906137b3565b612657565b600191505092915050565b60096020528060005260406000206000915054906101000a900461ffff1681565b610fd53382612b2f565b50565b600560149054906101000a900463ffffffff1681565b610ff661264f565b73ffffffffffffffffffffffffffffffffffffffff16611014611c9e565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190613553565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906135b3565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1690508161ffff168161ffff161415611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613633565b60405180910390fd5b8161ffff168161ffff1610156112c5576000818361122191906138c5565b905061271081600760009054906101000a900461ffff16611242919061377b565b61ffff161115611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906134d3565b60405180910390fd5b80600760009054906101000a900461ffff166112a3919061377b565b600760006101000a81548161ffff021916908361ffff1602179055505061130f565b600082826112d391906138c5565b905080600760009054906101000a900461ffff166112f191906138c5565b600760006101000a81548161ffff021916908361ffff160217905550505b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d836040516113af91906136f3565b60405180910390a2505050565b6113c461264f565b73ffffffffffffffffffffffffffffffffffffffff166113e2611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613613565b60405180910390fd5b606460068054905010611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613553565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613533565b60405180910390fd5b60008161ffff161180156115d45750600a600560149054906101000a900463ffffffff166115ab919061383a565b63ffffffff16600760009054906101000a900461ffff16826115cd919061377b565b61ffff1611155b611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90613593565b60405180910390fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080600760009054906101000a900461ffff16611744919061377b565b600760006101000a81548161ffff021916908361ffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c25826040516117a691906136f3565b60405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180261264f565b73ffffffffffffffffffffffffffffffffffffffff16611820611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613613565b60405180910390fd5b6118806000612d06565b565b61188a61264f565b73ffffffffffffffffffffffffffffffffffffffff166118a8611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613613565b60405180910390fd5b6000611909306117b2565b11611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090613433565b60405180910390fd5b6000611954306117b2565b905060005b6006805490508160ff161015611a8457600060068260ff168154811061198257611981613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060016006805490506119c191906138f9565b8260ff1614156119e3576119de30826119d9306117b2565b6128ae565b611a70565b6000600760009054906101000a900461ffff1661ffff16600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1685611a57919061386b565b611a619190613809565b9050611a6e3083836128ae565b505b508080611a7c90613a05565b915050611959565b5050565b611a9061264f565b73ffffffffffffffffffffffffffffffffffffffff16611aae611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b906136d3565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906135f3565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c260405160405180910390a250565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cd061264f565b73ffffffffffffffffffffffffffffffffffffffff16611cee611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90613613565b60405180910390fd5b6000600760026101000a81548160ff0219169083151502179055506000600760006101000a81548161ffff021916908361ffff16021790555060005b6006805490508160ff161015611ed85760006009600060068460ff1681548110611dad57611dac613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506000600a600060068460ff1681548110611e4957611e48613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ed090613a05565b915050611d80565b5060066000611ee79190612dd6565b565b606060048054611ef8906139d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f24906139d3565b8015611f715780601f10611f4657610100808354040283529160200191611f71565b820191906000526020600020905b815481529060010190602001808311611f5457829003601f168201915b5050505050905090565b600080611f8661264f565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906136b3565b60405180910390fd5b6120598286868403612657565b60019250505092915050565b60008061207061264f565b90508261207c826117b2565b10156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490613513565b60405180910390fd5b600760039054906101000a900460ff16158061210757506064600854600c546120e6919061386b565b6120f09190613809565b836120fa866117b2565b61210491906137b3565b11155b612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906134b3565b60405180910390fd5b600760029054906101000a900460ff1680156121ac5750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122025750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612269576000600560149054906101000a900463ffffffff1663ffffffff16600760009054906101000a900461ffff1661ffff1685612242919061386b565b61224c9190613809565b9050808461225a91906138f9565b93506122678230836128ae565b505b6122748185856128ae565b600191505092915050565b600760009054906101000a900461ffff1681565b600760039054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61233561264f565b73ffffffffffffffffffffffffffffffffffffffff16612353611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906136d3565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90613573565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c760405160405180910390a250565b61254c61264f565b73ffffffffffffffffffffffffffffffffffffffff1661256a611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262790613473565b60405180910390fd5b61263981612d06565b50565b600760029054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90613693565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90613493565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612815919061370e565b60405180910390a3505050565b600061282e84846122a6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128a8578181101561289a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612891906134f3565b60405180910390fd5b6128a78484848403612657565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590613673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906133f3565b60405180910390fd5b612999838383612dcc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1690613513565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab291906137b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b16919061370e565b60405180910390a3612b29848484612dd1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9690613653565b60405180910390fd5b612bab82600083612dcc565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613413565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612c8891906138f9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ced919061370e565b60405180910390a3612d0183600084612dd1565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5080546000825590600052602060002090810190612df49190612df7565b50565b5b80821115612e10576000816000905550600101612df8565b5090565b600081359050612e23816140f6565b92915050565b600081359050612e388161410d565b92915050565b600081359050612e4d81614124565b92915050565b600060208284031215612e6957612e68613b1a565b5b6000612e7784828501612e14565b91505092915050565b60008060408385031215612e9757612e96613b1a565b5b6000612ea585828601612e14565b9250506020612eb685828601612e14565b9150509250929050565b600080600060608486031215612ed957612ed8613b1a565b5b6000612ee786828701612e14565b9350506020612ef886828701612e14565b9250506040612f0986828701612e3e565b9150509250925092565b60008060408385031215612f2a57612f29613b1a565b5b6000612f3885828601612e14565b9250506020612f4985828601612e29565b9150509250929050565b60008060408385031215612f6a57612f69613b1a565b5b6000612f7885828601612e14565b9250506020612f8985828601612e3e565b9150509250929050565b600060208284031215612fa957612fa8613b1a565b5b6000612fb784828501612e3e565b91505092915050565b612fc98161392d565b82525050565b612fd88161393f565b82525050565b6000612fe98261375f565b612ff3818561376a565b93506130038185602086016139a0565b61300c81613b1f565b840191505092915050565b600061302460238361376a565b915061302f82613b30565b604082019050919050565b600061304760228361376a565b915061305282613b7f565b604082019050919050565b600061306a60138361376a565b915061307582613bce565b602082019050919050565b600061308d60278361376a565b915061309882613bf7565b604082019050919050565b60006130b060268361376a565b91506130bb82613c46565b604082019050919050565b60006130d360228361376a565b91506130de82613c95565b604082019050919050565b60006130f660198361376a565b915061310182613ce4565b602082019050919050565b600061311960288361376a565b915061312482613d0d565b604082019050919050565b600061313c601d8361376a565b915061314782613d5c565b602082019050919050565b600061315f60268361376a565b915061316a82613d85565b604082019050919050565b600061318260178361376a565b915061318d82613dd4565b602082019050919050565b60006131a560148361376a565b91506131b082613dfd565b602082019050919050565b60006131c860158361376a565b91506131d382613e26565b602082019050919050565b60006131eb602a8361376a565b91506131f682613e4f565b604082019050919050565b600061320e60118361376a565b915061321982613e9e565b602082019050919050565b6000613231601c8361376a565b915061323c82613ec7565b602082019050919050565b600061325460118361376a565b915061325f82613ef0565b602082019050919050565b600061327760208361376a565b915061328282613f19565b602082019050919050565b600061329a60288361376a565b91506132a582613f42565b604082019050919050565b60006132bd60218361376a565b91506132c882613f91565b604082019050919050565b60006132e060258361376a565b91506132eb82613fe0565b604082019050919050565b600061330360248361376a565b915061330e8261402f565b604082019050919050565b600061332660258361376a565b91506133318261407e565b604082019050919050565b600061334960128361376a565b9150613354826140cd565b602082019050919050565b6133688161394b565b82525050565b61337781613979565b82525050565b61338681613983565b82525050565b61339581613993565b82525050565b60006020820190506133b06000830184612fc0565b92915050565b60006020820190506133cb6000830184612fcf565b92915050565b600060208201905081810360008301526133eb8184612fde565b905092915050565b6000602082019050818103600083015261340c81613017565b9050919050565b6000602082019050818103600083015261342c8161303a565b9050919050565b6000602082019050818103600083015261344c8161305d565b9050919050565b6000602082019050818103600083015261346c81613080565b9050919050565b6000602082019050818103600083015261348c816130a3565b9050919050565b600060208201905081810360008301526134ac816130c6565b9050919050565b600060208201905081810360008301526134cc816130e9565b9050919050565b600060208201905081810360008301526134ec8161310c565b9050919050565b6000602082019050818103600083015261350c8161312f565b9050919050565b6000602082019050818103600083015261352c81613152565b9050919050565b6000602082019050818103600083015261354c81613175565b9050919050565b6000602082019050818103600083015261356c81613198565b9050919050565b6000602082019050818103600083015261358c816131bb565b9050919050565b600060208201905081810360008301526135ac816131de565b9050919050565b600060208201905081810360008301526135cc81613201565b9050919050565b600060208201905081810360008301526135ec81613224565b9050919050565b6000602082019050818103600083015261360c81613247565b9050919050565b6000602082019050818103600083015261362c8161326a565b9050919050565b6000602082019050818103600083015261364c8161328d565b9050919050565b6000602082019050818103600083015261366c816132b0565b9050919050565b6000602082019050818103600083015261368c816132d3565b9050919050565b600060208201905081810360008301526136ac816132f6565b9050919050565b600060208201905081810360008301526136cc81613319565b9050919050565b600060208201905081810360008301526136ec8161333c565b9050919050565b6000602082019050613708600083018461335f565b92915050565b6000602082019050613723600083018461336e565b92915050565b600060208201905061373e600083018461337d565b92915050565b6000602082019050613759600083018461338c565b92915050565b600081519050919050565b600082825260208201905092915050565b60006137868261394b565b91506137918361394b565b92508261ffff038211156137a8576137a7613a2f565b5b828201905092915050565b60006137be82613979565b91506137c983613979565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137fe576137fd613a2f565b5b828201905092915050565b600061381482613979565b915061381f83613979565b92508261382f5761382e613a5e565b5b828204905092915050565b600061384582613983565b915061385083613983565b9250826138605761385f613a5e565b5b828204905092915050565b600061387682613979565b915061388183613979565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ba576138b9613a2f565b5b828202905092915050565b60006138d08261394b565b91506138db8361394b565b9250828210156138ee576138ed613a2f565b5b828203905092915050565b600061390482613979565b915061390f83613979565b92508282101561392257613921613a2f565b5b828203905092915050565b600061393882613959565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156139be5780820151818401526020810190506139a3565b838111156139cd576000848401525b50505050565b600060028204905060018216806139eb57607f821691505b602082108114156139ff576139fe613a8d565b5b50919050565b6000613a1082613993565b915060ff821415613a2457613a23613a2f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f52656163686564206d6178696d756d206e756d626572206f662074617820616460008201527f6472657373657300000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820686f6c64696e67206361702062726561636865642e00000000000000600082015250565b7f54617820616d6f756e7420746f6f206869676820666f722063757272656e742060008201527f7461782072617465000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f526563697069656e7420616c7265616479206164646564000000000000000000600082015250565b7f43616e6e6f742061646420302061646472657373000000000000000000000000600082015250565b7f4164647265737320616c72656164792061646465640000000000000000000000600082015250565b7f546f74616c2074617820616d6f756e74206d757374206265206265747765656e60008201527f203020616e642031302500000000000000000000000000000000000000000000602082015250565b7f4e6f742061207461782061646472657373000000000000000000000000000000600082015250565b7f526563697069656e7420686173206e6f74206265656e20616464656400000000600082015250565b7f41646472657373206e6f74206164646564000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54617820616c7265616479207468697320616d6f756e7420666f72207468697360008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e7420757365203020616464726573730000000000000000000000000000600082015250565b6140ff8161392d565b811461410a57600080fd5b50565b6141168161394b565b811461412157600080fd5b50565b61412d81613979565b811461413857600080fd5b5056fea2646970667358221220537773258d08f459a7ba7179f096f9f6d8e9cc4f5202008fceb8498982aea1eb64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e45760003560e01c8063619f28ed1161010f578063a457c2d7116100a2578063dd62ed3e11610071578063dd62ed3e14610547578063e43252d714610577578063f2fde38b14610593578063fb369eb0146105af576101e4565b8063a457c2d7146104ab578063a9059cbb146104db578063bb47cc0c1461050b578063d641eb2214610529576101e4565b80638ab1d681116100de5780638ab1d681146104495780638da5cb5b14610465578063909656521461048357806395d89b411461048d576101e4565b8063619f28ed146103e957806370a0823114610405578063715018a61461043557806371fc737c1461043f576101e4565b80632354ee03116101875780633a5fcb63116101565780633a5fcb631461036357806342966c68146103935780634be31778146103af57806354f12265146103cd576101e4565b80632354ee03146102b557806323b872dd146102e5578063313ce567146103155780633950935114610333576101e4565b8063095ea7b3116101c3578063095ea7b31461024157806310bf60291461027157806310f6da921461027b57806318160ddd14610297576101e4565b80629b380d146101e957806301c4b316146101f357806306fdde0314610223575b600080fd5b6101f16105cd565b005b61020d60048036038101906102089190612e53565b6106bb565b60405161021a91906133b6565b60405180910390f35b61022b6106db565b60405161023891906133d1565b60405180910390f35b61025b60048036038101906102569190612f53565b61076d565b60405161026891906133b6565b60405180910390f35b610279610790565b005b61029560048036038101906102909190612e53565b61087e565b005b61029f610d11565b6040516102ac919061370e565b60405180910390f35b6102cf60048036038101906102ca9190612f93565b610d1b565b6040516102dc919061339b565b60405180910390f35b6102ff60048036038101906102fa9190612ec0565b610d5a565b60405161030c91906133b6565b60405180910390f35b61031d610ef7565b60405161032a9190613744565b60405180910390f35b61034d60048036038101906103489190612f53565b610f00565b60405161035a91906133b6565b60405180910390f35b61037d60048036038101906103789190612e53565b610faa565b60405161038a91906136f3565b60405180910390f35b6103ad60048036038101906103a89190612f93565b610fcb565b005b6103b7610fd8565b6040516103c49190613729565b60405180910390f35b6103e760048036038101906103e29190612f13565b610fee565b005b61040360048036038101906103fe9190612f13565b6113bc565b005b61041f600480360381019061041a9190612e53565b6117b2565b60405161042c919061370e565b60405180910390f35b61043d6117fa565b005b610447611882565b005b610463600480360381019061045e9190612e53565b611a88565b005b61046d611c9e565b60405161047a919061339b565b60405180910390f35b61048b611cc8565b005b610495611ee9565b6040516104a291906133d1565b60405180910390f35b6104c560048036038101906104c09190612f53565b611f7b565b6040516104d291906133b6565b60405180910390f35b6104f560048036038101906104f09190612f53565b612065565b60405161050291906133b6565b60405180910390f35b61051361227f565b60405161052091906136f3565b60405180910390f35b610531612293565b60405161053e91906133b6565b60405180910390f35b610561600480360381019061055c9190612e80565b6122a6565b60405161056e919061370e565b60405180910390f35b610591600480360381019061058c9190612e53565b61232d565b005b6105ad60048036038101906105a89190612e53565b612544565b005b6105b761263c565b6040516105c491906133b6565b60405180910390f35b6105d561264f565b73ffffffffffffffffffffffffffffffffffffffff166105f3611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090613613565b60405180910390fd5b600760039054906101000a900460ff1615600760036101000a81548160ff0219169083151502179055507f9d71536007d8e69880bcc33d1aa24f576bfa71e6c583cbe58bcc9876f6108559600760039054906101000a900460ff166040516106b191906133b6565b60405180910390a1565b600b6020528060005260406000206000915054906101000a900460ff1681565b6060600380546106ea906139d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610716906139d3565b80156107635780601f1061073857610100808354040283529160200191610763565b820191906000526020600020905b81548152906001019060200180831161074657829003601f168201915b5050505050905090565b60008061077861264f565b9050610785818585612657565b600191505092915050565b61079861264f565b73ffffffffffffffffffffffffffffffffffffffff166107b6611c9e565b73ffffffffffffffffffffffffffffffffffffffff161461080c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080390613613565b60405180910390fd5b600760029054906101000a900460ff1615600760026101000a81548160ff0219169083151502179055507fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864600760029054906101000a900460ff1660405161087491906133b6565b60405180910390a1565b61088661264f565b73ffffffffffffffffffffffffffffffffffffffff166108a4611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190613553565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed906135d3565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff16905060005b6006805490508160ff161015610d0c578273ffffffffffffffffffffffffffffffffffffffff1660068260ff1681548110610a8957610a88613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cf95781600760009054906101000a900461ffff16610aec91906138c5565b600760006101000a81548161ffff021916908361ffff1602179055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060066001600680549050610b7791906138f9565b81548110610b8857610b87613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068260ff1681548110610bca57610bc9613aeb565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610c7c57610c7b613abc565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558273ffffffffffffffffffffffffffffffffffffffff167f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f360405160405180910390a2610d0c565b8080610d0490613a05565b915050610a4b565b505050565b6000600254905090565b60068181548110610d2b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610d6561264f565b9050610d72858285612822565b82610d7c866117b2565b1015610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490613513565b60405180910390fd5b600760029054906101000a900460ff168015610e235750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610e795750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610ee0576000600560149054906101000a900463ffffffff1663ffffffff16600760009054906101000a900461ffff1661ffff1685610eb9919061386b565b610ec39190613809565b90508084610ed191906138f9565b9350610ede8630836128ae565b505b610eeb8585856128ae565b60019150509392505050565b60006012905090565b600080610f0b61264f565b9050610f9f818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f9a91906137b3565b612657565b600191505092915050565b60096020528060005260406000206000915054906101000a900461ffff1681565b610fd53382612b2f565b50565b600560149054906101000a900463ffffffff1681565b610ff661264f565b73ffffffffffffffffffffffffffffffffffffffff16611014611c9e565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190613553565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906135b3565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1690508161ffff168161ffff161415611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613633565b60405180910390fd5b8161ffff168161ffff1610156112c5576000818361122191906138c5565b905061271081600760009054906101000a900461ffff16611242919061377b565b61ffff161115611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906134d3565b60405180910390fd5b80600760009054906101000a900461ffff166112a3919061377b565b600760006101000a81548161ffff021916908361ffff1602179055505061130f565b600082826112d391906138c5565b905080600760009054906101000a900461ffff166112f191906138c5565b600760006101000a81548161ffff021916908361ffff160217905550505b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d836040516113af91906136f3565b60405180910390a2505050565b6113c461264f565b73ffffffffffffffffffffffffffffffffffffffff166113e2611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613613565b60405180910390fd5b606460068054905010611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613553565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613533565b60405180910390fd5b60008161ffff161180156115d45750600a600560149054906101000a900463ffffffff166115ab919061383a565b63ffffffff16600760009054906101000a900461ffff16826115cd919061377b565b61ffff1611155b611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90613593565b60405180910390fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080600760009054906101000a900461ffff16611744919061377b565b600760006101000a81548161ffff021916908361ffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c25826040516117a691906136f3565b60405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180261264f565b73ffffffffffffffffffffffffffffffffffffffff16611820611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613613565b60405180910390fd5b6118806000612d06565b565b61188a61264f565b73ffffffffffffffffffffffffffffffffffffffff166118a8611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613613565b60405180910390fd5b6000611909306117b2565b11611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090613433565b60405180910390fd5b6000611954306117b2565b905060005b6006805490508160ff161015611a8457600060068260ff168154811061198257611981613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060016006805490506119c191906138f9565b8260ff1614156119e3576119de30826119d9306117b2565b6128ae565b611a70565b6000600760009054906101000a900461ffff1661ffff16600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1685611a57919061386b565b611a619190613809565b9050611a6e3083836128ae565b505b508080611a7c90613a05565b915050611959565b5050565b611a9061264f565b73ffffffffffffffffffffffffffffffffffffffff16611aae611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b906136d3565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906135f3565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c260405160405180910390a250565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cd061264f565b73ffffffffffffffffffffffffffffffffffffffff16611cee611c9e565b73ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90613613565b60405180910390fd5b6000600760026101000a81548160ff0219169083151502179055506000600760006101000a81548161ffff021916908361ffff16021790555060005b6006805490508160ff161015611ed85760006009600060068460ff1681548110611dad57611dac613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506000600a600060068460ff1681548110611e4957611e48613aeb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ed090613a05565b915050611d80565b5060066000611ee79190612dd6565b565b606060048054611ef8906139d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f24906139d3565b8015611f715780601f10611f4657610100808354040283529160200191611f71565b820191906000526020600020905b815481529060010190602001808311611f5457829003601f168201915b5050505050905090565b600080611f8661264f565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561204c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612043906136b3565b60405180910390fd5b6120598286868403612657565b60019250505092915050565b60008061207061264f565b90508261207c826117b2565b10156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490613513565b60405180910390fd5b600760039054906101000a900460ff16158061210757506064600854600c546120e6919061386b565b6120f09190613809565b836120fa866117b2565b61210491906137b3565b11155b612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906134b3565b60405180910390fd5b600760029054906101000a900460ff1680156121ac5750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122025750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612269576000600560149054906101000a900463ffffffff1663ffffffff16600760009054906101000a900461ffff1661ffff1685612242919061386b565b61224c9190613809565b9050808461225a91906138f9565b93506122678230836128ae565b505b6122748185856128ae565b600191505092915050565b600760009054906101000a900461ffff1681565b600760039054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61233561264f565b73ffffffffffffffffffffffffffffffffffffffff16612353611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906136d3565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90613573565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c760405160405180910390a250565b61254c61264f565b73ffffffffffffffffffffffffffffffffffffffff1661256a611c9e565b73ffffffffffffffffffffffffffffffffffffffff16146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790613613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262790613473565b60405180910390fd5b61263981612d06565b50565b600760029054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90613693565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90613493565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612815919061370e565b60405180910390a3505050565b600061282e84846122a6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128a8578181101561289a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612891906134f3565b60405180910390fd5b6128a78484848403612657565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561291e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291590613673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906133f3565b60405180910390fd5b612999838383612dcc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1690613513565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab291906137b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b16919061370e565b60405180910390a3612b29848484612dd1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9690613653565b60405180910390fd5b612bab82600083612dcc565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613413565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612c8891906138f9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ced919061370e565b60405180910390a3612d0183600084612dd1565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5080546000825590600052602060002090810190612df49190612df7565b50565b5b80821115612e10576000816000905550600101612df8565b5090565b600081359050612e23816140f6565b92915050565b600081359050612e388161410d565b92915050565b600081359050612e4d81614124565b92915050565b600060208284031215612e6957612e68613b1a565b5b6000612e7784828501612e14565b91505092915050565b60008060408385031215612e9757612e96613b1a565b5b6000612ea585828601612e14565b9250506020612eb685828601612e14565b9150509250929050565b600080600060608486031215612ed957612ed8613b1a565b5b6000612ee786828701612e14565b9350506020612ef886828701612e14565b9250506040612f0986828701612e3e565b9150509250925092565b60008060408385031215612f2a57612f29613b1a565b5b6000612f3885828601612e14565b9250506020612f4985828601612e29565b9150509250929050565b60008060408385031215612f6a57612f69613b1a565b5b6000612f7885828601612e14565b9250506020612f8985828601612e3e565b9150509250929050565b600060208284031215612fa957612fa8613b1a565b5b6000612fb784828501612e3e565b91505092915050565b612fc98161392d565b82525050565b612fd88161393f565b82525050565b6000612fe98261375f565b612ff3818561376a565b93506130038185602086016139a0565b61300c81613b1f565b840191505092915050565b600061302460238361376a565b915061302f82613b30565b604082019050919050565b600061304760228361376a565b915061305282613b7f565b604082019050919050565b600061306a60138361376a565b915061307582613bce565b602082019050919050565b600061308d60278361376a565b915061309882613bf7565b604082019050919050565b60006130b060268361376a565b91506130bb82613c46565b604082019050919050565b60006130d360228361376a565b91506130de82613c95565b604082019050919050565b60006130f660198361376a565b915061310182613ce4565b602082019050919050565b600061311960288361376a565b915061312482613d0d565b604082019050919050565b600061313c601d8361376a565b915061314782613d5c565b602082019050919050565b600061315f60268361376a565b915061316a82613d85565b604082019050919050565b600061318260178361376a565b915061318d82613dd4565b602082019050919050565b60006131a560148361376a565b91506131b082613dfd565b602082019050919050565b60006131c860158361376a565b91506131d382613e26565b602082019050919050565b60006131eb602a8361376a565b91506131f682613e4f565b604082019050919050565b600061320e60118361376a565b915061321982613e9e565b602082019050919050565b6000613231601c8361376a565b915061323c82613ec7565b602082019050919050565b600061325460118361376a565b915061325f82613ef0565b602082019050919050565b600061327760208361376a565b915061328282613f19565b602082019050919050565b600061329a60288361376a565b91506132a582613f42565b604082019050919050565b60006132bd60218361376a565b91506132c882613f91565b604082019050919050565b60006132e060258361376a565b91506132eb82613fe0565b604082019050919050565b600061330360248361376a565b915061330e8261402f565b604082019050919050565b600061332660258361376a565b91506133318261407e565b604082019050919050565b600061334960128361376a565b9150613354826140cd565b602082019050919050565b6133688161394b565b82525050565b61337781613979565b82525050565b61338681613983565b82525050565b61339581613993565b82525050565b60006020820190506133b06000830184612fc0565b92915050565b60006020820190506133cb6000830184612fcf565b92915050565b600060208201905081810360008301526133eb8184612fde565b905092915050565b6000602082019050818103600083015261340c81613017565b9050919050565b6000602082019050818103600083015261342c8161303a565b9050919050565b6000602082019050818103600083015261344c8161305d565b9050919050565b6000602082019050818103600083015261346c81613080565b9050919050565b6000602082019050818103600083015261348c816130a3565b9050919050565b600060208201905081810360008301526134ac816130c6565b9050919050565b600060208201905081810360008301526134cc816130e9565b9050919050565b600060208201905081810360008301526134ec8161310c565b9050919050565b6000602082019050818103600083015261350c8161312f565b9050919050565b6000602082019050818103600083015261352c81613152565b9050919050565b6000602082019050818103600083015261354c81613175565b9050919050565b6000602082019050818103600083015261356c81613198565b9050919050565b6000602082019050818103600083015261358c816131bb565b9050919050565b600060208201905081810360008301526135ac816131de565b9050919050565b600060208201905081810360008301526135cc81613201565b9050919050565b600060208201905081810360008301526135ec81613224565b9050919050565b6000602082019050818103600083015261360c81613247565b9050919050565b6000602082019050818103600083015261362c8161326a565b9050919050565b6000602082019050818103600083015261364c8161328d565b9050919050565b6000602082019050818103600083015261366c816132b0565b9050919050565b6000602082019050818103600083015261368c816132d3565b9050919050565b600060208201905081810360008301526136ac816132f6565b9050919050565b600060208201905081810360008301526136cc81613319565b9050919050565b600060208201905081810360008301526136ec8161333c565b9050919050565b6000602082019050613708600083018461335f565b92915050565b6000602082019050613723600083018461336e565b92915050565b600060208201905061373e600083018461337d565b92915050565b6000602082019050613759600083018461338c565b92915050565b600081519050919050565b600082825260208201905092915050565b60006137868261394b565b91506137918361394b565b92508261ffff038211156137a8576137a7613a2f565b5b828201905092915050565b60006137be82613979565b91506137c983613979565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137fe576137fd613a2f565b5b828201905092915050565b600061381482613979565b915061381f83613979565b92508261382f5761382e613a5e565b5b828204905092915050565b600061384582613983565b915061385083613983565b9250826138605761385f613a5e565b5b828204905092915050565b600061387682613979565b915061388183613979565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ba576138b9613a2f565b5b828202905092915050565b60006138d08261394b565b91506138db8361394b565b9250828210156138ee576138ed613a2f565b5b828203905092915050565b600061390482613979565b915061390f83613979565b92508282101561392257613921613a2f565b5b828203905092915050565b600061393882613959565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156139be5780820151818401526020810190506139a3565b838111156139cd576000848401525b50505050565b600060028204905060018216806139eb57607f821691505b602082108114156139ff576139fe613a8d565b5b50919050565b6000613a1082613993565b915060ff821415613a2457613a23613a2f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f52656163686564206d6178696d756d206e756d626572206f662074617820616460008201527f6472657373657300000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820686f6c64696e67206361702062726561636865642e00000000000000600082015250565b7f54617820616d6f756e7420746f6f206869676820666f722063757272656e742060008201527f7461782072617465000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f526563697069656e7420616c7265616479206164646564000000000000000000600082015250565b7f43616e6e6f742061646420302061646472657373000000000000000000000000600082015250565b7f4164647265737320616c72656164792061646465640000000000000000000000600082015250565b7f546f74616c2074617820616d6f756e74206d757374206265206265747765656e60008201527f203020616e642031302500000000000000000000000000000000000000000000602082015250565b7f4e6f742061207461782061646472657373000000000000000000000000000000600082015250565b7f526563697069656e7420686173206e6f74206265656e20616464656400000000600082015250565b7f41646472657373206e6f74206164646564000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54617820616c7265616479207468697320616d6f756e7420666f72207468697360008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e7420757365203020616464726573730000000000000000000000000000600082015250565b6140ff8161392d565b811461410a57600080fd5b50565b6141168161394b565b811461412157600080fd5b50565b61412d81613979565b811461413857600080fd5b5056fea2646970667358221220537773258d08f459a7ba7179f096f9f6d8e9cc4f5202008fceb8498982aea1eb64736f6c63430008070033

Deployed Bytecode Sourcemap

19925:7737:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23151:141;;;:::i;:::-;;20314:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9103:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11454:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22960:116;;;:::i;:::-;;25126:681;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10223:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20029:31;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21253:571;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10065:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12939:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20198:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22785:77;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19986:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24247:762;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23483:613;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10394:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2737:103;;;:::i;:::-;;27067:592;;;:::i;:::-;;26325:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2086:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26675:304;;;:::i;:::-;;9322:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13682:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22023:620;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20067:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20126:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10983:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2995:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20097:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23151:141;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23224:15:::1;;;;;;;;;;;23223:16;23205:15;;:34;;;;;;;;;;;;;;;;;;23253:31;23268:15;;;;;;;;;;;23253:31;;;;;;:::i;:::-;;;;;;;;23151:141::o:0;20314:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;9103:100::-;9157:13;9190:5;9183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9103:100;:::o;11454:201::-;11537:4;11554:13;11570:12;:10;:12::i;:::-;11554:28;;11593:32;11602:5;11609:7;11618:6;11593:8;:32::i;:::-;11643:4;11636:11;;;11454:201;;;;:::o;22960:116::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23023:10:::1;;;;;;;;;;;23022:11;23009:10;;:24;;;;;;;;;;;;;;;;;;23047:21;23057:10;;;;;;;;;;;23047:21;;;;;;:::i;:::-;;;;;;;;22960:116::o:0;25126:681::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25224:1:::1;25206:20;;:6;:20;;;;25198:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;25268:15;:23;25284:6;25268:23;;;;;;;;;;;;;;;;;;;;;;;;;25260:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25333:11;25347:20;:28;25368:6;25347:28;;;;;;;;;;;;;;;;;;;;;;;;;25333:42;;25390:7;25386:414;25407:14;:21;;;;25403:1;:25;;;25386:414;;;25470:6;25449:27;;:14;25464:1;25449:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;25446:345;;;25515:4;25503:9;;;;;;;;;;;:16;;;;:::i;:::-;25491:9;;:28;;;;;;;;;;;;;;;;;;25563:1;25532:20;:28;25553:6;25532:28;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25597:14;25636:1;25612:14;:21;;;;:25;;;;:::i;:::-;25597:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25577:14;25592:1;25577:17;;;;;;;;;;:::i;:::-;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;25677:5;25651:15;:23;25667:6;25651:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25695:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;25752:6;25733:26;;;;;;;;;;;;25774:5;;25446:345;25430:3;;;;;:::i;:::-;;;;25386:414;;;;25189:618;25126:681:::0;:::o;10223:108::-;10284:7;10311:12;;10304:19;;10223:108;:::o;20029:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21253:571::-;21350:4;21367:15;21385:12;:10;:12::i;:::-;21367:30;;21408:38;21424:4;21430:7;21439:6;21408:15;:38::i;:::-;21484:6;21465:15;21475:4;21465:9;:15::i;:::-;:25;;21457:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21547:10;;;;;;;;;;;:33;;;;;21562:12;:18;21575:4;21562:18;;;;;;;;;;;;;;;;;;;;;;;;;21561:19;21547:33;:54;;;;;21585:12;:16;21598:2;21585:16;;;;;;;;;;;;;;;;;;;;;;;;;21584:17;21547:54;21544:213;;;21616:11;21650:13;;;;;;;;;;;21630:33;;21638:9;;;;;;;;;;;21630:17;;:6;:17;;;;:::i;:::-;:33;;;;:::i;:::-;21616:47;;21694:3;21685:6;:12;;;;:::i;:::-;21676:21;;21710:35;21720:4;21734;21741:3;21710:9;:35::i;:::-;21603:154;21544:213;21767:27;21777:4;21783:2;21787:6;21767:9;:27::i;:::-;21812:4;21805:11;;;21253:571;;;;;:::o;10065:93::-;10123:5;10148:2;10141:9;;10065:93;:::o;12939:240::-;13027:4;13044:13;13060:12;:10;:12::i;:::-;13044:28;;13083:66;13092:5;13099:7;13138:10;13108:11;:18;13120:5;13108:18;;;;;;;;;;;;;;;:27;13127:7;13108:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;13083:8;:66::i;:::-;13167:4;13160:11;;;12939:240;;;;:::o;20198:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;22785:77::-;22830:24;22836:10;22848:5;22830;:24::i;:::-;22785:77;:::o;19986:36::-;;;;;;;;;;;;;:::o;24247:762::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24361:1:::1;24343:20;;:6;:20;;;;24335:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;24405:15;:23;24421:6;24405:23;;;;;;;;;;;;;;;;;;;;;;;;;24397:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;24461:17;24481:20;:28;24502:6;24481:28;;;;;;;;;;;;;;;;;;;;;;;;;24461:48;;24540:6;24526:20;;:10;:20;;;;24518:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24618:6;24605:19;;:10;:19;;;24602:305;;;24637:11;24660:10;24651:6;:19;;;;:::i;:::-;24637:33;;24709:5;24701:4;24689:9;;;;;;;;;;;:16;;;;:::i;:::-;:25;;;;24681:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24794:4;24782:9;;;;;;;;;;;:16;;;;:::i;:::-;24770:9;;:28;;;;;;;;;;;;;;;;;;24626:182;24602:305;;;24825:11;24852:6;24839:10;:19;;;;:::i;:::-;24825:33;;24893:4;24881:9;;;;;;;;;;;:16;;;;:::i;:::-;24869:9;;:28;;;;;;;;;;;;;;;;;;24814:93;24602:305;24946:6;24915:20;:28;24936:6;24915:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;24986:6;24966:35;;;24994:6;24966:35;;;;;;:::i;:::-;;;;;;;;24326:683;24247:762:::0;;:::o;23483:613::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23597:3:::1;23573:14;:21;;;;:27;23565:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23679:1;23661:20;;:6;:20;;;;23653:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;23724:15;:23;23740:6;23724:23;;;;;;;;;;;;;;;;;;;;;;;;;23723:24;23715:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23799:1;23792:4;:8;;;:48;;;;;23838:2;23824:13;;;;;;;;;;;:16;;;;:::i;:::-;23804:36;;23811:9;;;;;;;;;;;23804:4;:16;;;;:::i;:::-;:36;;;;23792:48;23784:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23924:4;23898:15;:23;23914:6;23898:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23937:14;23957:6;23937:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24004:4;23973:20;:28;23994:6;23973:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24041:4;24029:9;;;;;;;;;;;:16;;;;:::i;:::-;24017:9;;:28;;;;;;;;;;;;;;;;;;24075:6;24059:29;;;24083:4;24059:29;;;;;;:::i;:::-;;;;;;;;23483:613:::0;;:::o;10394:127::-;10468:7;10495:9;:18;10505:7;10495:18;;;;;;;;;;;;;;;;10488:25;;10394:127;;;:::o;2737:103::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2802:30:::1;2829:1;2802:18;:30::i;:::-;2737:103::o:0;27067:592::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27157:1:::1;27130:24;27148:4;27130:9;:24::i;:::-;:28;27122:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27191:21;27215:24;27233:4;27215:9;:24::i;:::-;27191:48;;27252:7;27248:404;27269:14;:21;;;;27265:1;:25;;;27248:404;;;27308:18;27329:14;27344:1;27329:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27308:38;;27389:1;27365:14;:21;;;;:25;;;;:::i;:::-;27360:1;:30;;;27357:286;;;27406:62;27424:4;27431:10;27443:24;27461:4;27443:9;:24::i;:::-;27406:9;:62::i;:::-;27357:286;;;27499:14;27565:9;;;;;;;;;;;27516:58;;27532:20;:32;27553:10;27532:32;;;;;;;;;;;;;;;;;;;;;;;;;27516:48;;:13;:48;;;;:::i;:::-;:58;;;;:::i;:::-;27499:75;;27587:44;27605:4;27612:10;27624:6;27587:9;:44::i;:::-;27486:157;27357:286;27297:355;27292:3;;;;;:::i;:::-;;;;27248:404;;;;27113:546;27067:592::o:0;26325:271::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26424:1:::1;26406:20;;:6;:20;;;;26398:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;26466:12;:20;26479:6;26466:20;;;;;;;;;;;;;;;;;;;;;;;;;26458:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26540:5;26517:12;:20;26530:6;26517:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26581:6;26561:27;;;;;;;;;;;;26325:271:::0;:::o;2086:87::-;2132:7;2159:6;;;;;;;;;;;2152:13;;2086:87;:::o;26675:304::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26736:5:::1;26723:10;;:18;;;;;;;;;;;;;;;;;;26762:1;26750:9;;:13;;;;;;;;;;;;;;;;;;26778:7;26774:166;26795:14;:21;;;;26791:1;:25;;;26774:166;;;26876:1;26834:20;:39;26855:14;26870:1;26855:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26834:39;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;26925:5;26888:15;:34;26904:14;26919:1;26904:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26888:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;26818:3;;;;;:::i;:::-;;;;26774:166;;;;26957:14;;26950:21;;;;:::i;:::-;26675:304::o:0;9322:104::-;9378:13;9411:7;9404:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9322:104;:::o;13682:438::-;13775:4;13792:13;13808:12;:10;:12::i;:::-;13792:28;;13831:24;13858:11;:18;13870:5;13858:18;;;;;;;;;;;;;;;:27;13877:7;13858:27;;;;;;;;;;;;;;;;13831:54;;13924:15;13904:16;:35;;13896:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14017:60;14026:5;14033:7;14061:15;14042:16;:34;14017:8;:60::i;:::-;14108:4;14101:11;;;;13682:438;;;;:::o;22023:620::-;22102:4;22117:13;22133:12;:10;:12::i;:::-;22117:28;;22182:6;22162:16;22172:5;22162:9;:16::i;:::-;:26;;22154:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22249:15;;;;;;;;;;;22248:16;:88;;;;22332:3;22310:18;;22295:12;;:33;;;;:::i;:::-;22294:41;;;;:::i;:::-;22283:6;22268:13;22278:2;22268:9;:13::i;:::-;:21;;;;:::i;:::-;:68;;22248:88;22240:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;22378:10;;;;;;;;;;;:34;;;;;22393:12;:19;22406:5;22393:19;;;;;;;;;;;;;;;;;;;;;;;;;22392:20;22378:34;:55;;;;;22417:12;:16;22430:2;22417:16;;;;;;;;;;;;;;;;;;;;;;;;;22416:17;22378:55;22375:204;;;22446:11;22477:13;;;;;;;;;;;22460:30;;22467:9;;;;;;;;;;;22460:16;;:6;:16;;;;:::i;:::-;:30;;;;:::i;:::-;22446:44;;22519:3;22510:6;:12;;;;:::i;:::-;22501:21;;22533:36;22543:5;22558:4;22565:3;22533:9;:36::i;:::-;22435:144;22375:204;22587:28;22597:5;22604:2;22608:6;22587:9;:28::i;:::-;22631:4;22624:11;;;22023:620;;;;:::o;20067:23::-;;;;;;;;;;;;;:::o;20126:27::-;;;;;;;;;;;;;:::o;10983:151::-;11072:7;11099:11;:18;11111:5;11099:18;;;;;;;;;;;;;;;:27;11118:7;11099:27;;;;;;;;;;;;;;;;11092:34;;10983:151;;;;:::o;25927:265::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26021:1:::1;26003:20;;:6;:20;;;;25995:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:12;:20;26077:6;26064:20;;;;;;;;;;;;;;;;;;;;;;;;;26063:21;26055:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26142:4;26119:12;:20;26132:6;26119:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26177:6;26162:22;;;;;;;;;;;;25927:265:::0;:::o;2995:201::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3104:1:::1;3084:22;;:8;:22;;;;3076:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3160:28;3179:8;3160:18;:28::i;:::-;2995:201:::0;:::o;20097:22::-;;;;;;;;;;;;;:::o;869:98::-;922:7;949:10;942:17;;869:98;:::o;17318:380::-;17471:1;17454:19;;:5;:19;;;;17446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17552:1;17533:21;;:7;:21;;;;17525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17636:6;17606:11;:18;17618:5;17606:18;;;;;;;;;;;;;;;:27;17625:7;17606:27;;;;;;;;;;;;;;;:36;;;;17674:7;17658:32;;17667:5;17658:32;;;17683:6;17658:32;;;;;;:::i;:::-;;;;;;;;17318:380;;;:::o;17985:453::-;18120:24;18147:25;18157:5;18164:7;18147:9;:25::i;:::-;18120:52;;18207:17;18187:16;:37;18183:248;;18269:6;18249:16;:26;;18241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18353:51;18362:5;18369:7;18397:6;18378:16;:25;18353:8;:51::i;:::-;18183:248;18109:329;17985:453;;;:::o;14599:671::-;14746:1;14730:18;;:4;:18;;;;14722:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14823:1;14809:16;;:2;:16;;;;14801:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14878:38;14899:4;14905:2;14909:6;14878:20;:38::i;:::-;14929:19;14951:9;:15;14961:4;14951:15;;;;;;;;;;;;;;;;14929:37;;15000:6;14985:11;:21;;14977:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15117:6;15103:11;:20;15085:9;:15;15095:4;15085:15;;;;;;;;;;;;;;;:38;;;;15162:6;15145:9;:13;15155:2;15145:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15201:2;15186:26;;15195:4;15186:26;;;15205:6;15186:26;;;;;;:::i;:::-;;;;;;;;15225:37;15245:4;15251:2;15255:6;15225:19;:37::i;:::-;14711:559;14599:671;;;:::o;16289:591::-;16392:1;16373:21;;:7;:21;;;;16365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16445:49;16466:7;16483:1;16487:6;16445:20;:49::i;:::-;16507:22;16532:9;:18;16542:7;16532:18;;;;;;;;;;;;;;;;16507:43;;16587:6;16569:14;:24;;16561:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16706:6;16689:14;:23;16668:9;:18;16678:7;16668:18;;;;;;;;;;;;;;;:44;;;;16750:6;16734:12;;:22;;;;;;;:::i;:::-;;;;;;;;16800:1;16774:37;;16783:7;16774:37;;;16804:6;16774:37;;;;;;:::i;:::-;;;;;;;;16824:48;16844:7;16861:1;16865:6;16824:19;:48::i;:::-;16354:526;16289:591;;:::o;3356:191::-;3430:16;3449:6;;;;;;;;;;;3430:25;;3475:8;3466:6;;:17;;;;;;;;;;;;;;;;;;3530:8;3499:40;;3520:8;3499:40;;;;;;;;;;;;3419:128;3356:191;:::o;19038:125::-;;;;:::o;19767:124::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:137::-;197:5;235:6;222:20;213:29;;251:32;277:5;251:32;:::i;:::-;152:137;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;295:139;;;;:::o;440:329::-;499:6;548:2;536:9;527:7;523:23;519:32;516:119;;;554:79;;:::i;:::-;516:119;674:1;699:53;744:7;735:6;724:9;720:22;699:53;:::i;:::-;689:63;;645:117;440:329;;;;:::o;775:474::-;843:6;851;900:2;888:9;879:7;875:23;871:32;868:119;;;906:79;;:::i;:::-;868:119;1026:1;1051:53;1096:7;1087:6;1076:9;1072:22;1051:53;:::i;:::-;1041:63;;997:117;1153:2;1179:53;1224:7;1215:6;1204:9;1200:22;1179:53;:::i;:::-;1169:63;;1124:118;775:474;;;;;:::o;1255:619::-;1332:6;1340;1348;1397:2;1385:9;1376:7;1372:23;1368:32;1365:119;;;1403:79;;:::i;:::-;1365:119;1523:1;1548:53;1593:7;1584:6;1573:9;1569:22;1548:53;:::i;:::-;1538:63;;1494:117;1650:2;1676:53;1721:7;1712:6;1701:9;1697:22;1676:53;:::i;:::-;1666:63;;1621:118;1778:2;1804:53;1849:7;1840:6;1829:9;1825:22;1804:53;:::i;:::-;1794:63;;1749:118;1255:619;;;;;:::o;1880:472::-;1947:6;1955;2004:2;1992:9;1983:7;1979:23;1975:32;1972:119;;;2010:79;;:::i;:::-;1972:119;2130:1;2155:53;2200:7;2191:6;2180:9;2176:22;2155:53;:::i;:::-;2145:63;;2101:117;2257:2;2283:52;2327:7;2318:6;2307:9;2303:22;2283:52;:::i;:::-;2273:62;;2228:117;1880:472;;;;;:::o;2358:474::-;2426:6;2434;2483:2;2471:9;2462:7;2458:23;2454:32;2451:119;;;2489:79;;:::i;:::-;2451:119;2609:1;2634:53;2679:7;2670:6;2659:9;2655:22;2634:53;:::i;:::-;2624:63;;2580:117;2736:2;2762:53;2807:7;2798:6;2787:9;2783:22;2762:53;:::i;:::-;2752:63;;2707:118;2358:474;;;;;:::o;2838:329::-;2897:6;2946:2;2934:9;2925:7;2921:23;2917:32;2914:119;;;2952:79;;:::i;:::-;2914:119;3072:1;3097:53;3142:7;3133:6;3122:9;3118:22;3097:53;:::i;:::-;3087:63;;3043:117;2838:329;;;;:::o;3173:118::-;3260:24;3278:5;3260:24;:::i;:::-;3255:3;3248:37;3173:118;;:::o;3297:109::-;3378:21;3393:5;3378:21;:::i;:::-;3373:3;3366:34;3297:109;;:::o;3412:364::-;3500:3;3528:39;3561:5;3528:39;:::i;:::-;3583:71;3647:6;3642:3;3583:71;:::i;:::-;3576:78;;3663:52;3708:6;3703:3;3696:4;3689:5;3685:16;3663:52;:::i;:::-;3740:29;3762:6;3740:29;:::i;:::-;3735:3;3731:39;3724:46;;3504:272;3412:364;;;;:::o;3782:366::-;3924:3;3945:67;4009:2;4004:3;3945:67;:::i;:::-;3938:74;;4021:93;4110:3;4021:93;:::i;:::-;4139:2;4134:3;4130:12;4123:19;;3782:366;;;:::o;4154:::-;4296:3;4317:67;4381:2;4376:3;4317:67;:::i;:::-;4310:74;;4393:93;4482:3;4393:93;:::i;:::-;4511:2;4506:3;4502:12;4495:19;;4154:366;;;:::o;4526:::-;4668:3;4689:67;4753:2;4748:3;4689:67;:::i;:::-;4682:74;;4765:93;4854:3;4765:93;:::i;:::-;4883:2;4878:3;4874:12;4867:19;;4526:366;;;:::o;4898:::-;5040:3;5061:67;5125:2;5120:3;5061:67;:::i;:::-;5054:74;;5137:93;5226:3;5137:93;:::i;:::-;5255:2;5250:3;5246:12;5239:19;;4898:366;;;:::o;5270:::-;5412:3;5433:67;5497:2;5492:3;5433:67;:::i;:::-;5426:74;;5509:93;5598:3;5509:93;:::i;:::-;5627:2;5622:3;5618:12;5611:19;;5270:366;;;:::o;5642:::-;5784:3;5805:67;5869:2;5864:3;5805:67;:::i;:::-;5798:74;;5881:93;5970:3;5881:93;:::i;:::-;5999:2;5994:3;5990:12;5983:19;;5642:366;;;:::o;6014:::-;6156:3;6177:67;6241:2;6236:3;6177:67;:::i;:::-;6170:74;;6253:93;6342:3;6253:93;:::i;:::-;6371:2;6366:3;6362:12;6355:19;;6014:366;;;:::o;6386:::-;6528:3;6549:67;6613:2;6608:3;6549:67;:::i;:::-;6542:74;;6625:93;6714:3;6625:93;:::i;:::-;6743:2;6738:3;6734:12;6727:19;;6386:366;;;:::o;6758:::-;6900:3;6921:67;6985:2;6980:3;6921:67;:::i;:::-;6914:74;;6997:93;7086:3;6997:93;:::i;:::-;7115:2;7110:3;7106:12;7099:19;;6758:366;;;:::o;7130:::-;7272:3;7293:67;7357:2;7352:3;7293:67;:::i;:::-;7286:74;;7369:93;7458:3;7369:93;:::i;:::-;7487:2;7482:3;7478:12;7471:19;;7130:366;;;:::o;7502:::-;7644:3;7665:67;7729:2;7724:3;7665:67;:::i;:::-;7658:74;;7741:93;7830:3;7741:93;:::i;:::-;7859:2;7854:3;7850:12;7843:19;;7502:366;;;:::o;7874:::-;8016:3;8037:67;8101:2;8096:3;8037:67;:::i;:::-;8030:74;;8113:93;8202:3;8113:93;:::i;:::-;8231:2;8226:3;8222:12;8215:19;;7874:366;;;:::o;8246:::-;8388:3;8409:67;8473:2;8468:3;8409:67;:::i;:::-;8402:74;;8485:93;8574:3;8485:93;:::i;:::-;8603:2;8598:3;8594:12;8587:19;;8246:366;;;:::o;8618:::-;8760:3;8781:67;8845:2;8840:3;8781:67;:::i;:::-;8774:74;;8857:93;8946:3;8857:93;:::i;:::-;8975:2;8970:3;8966:12;8959:19;;8618:366;;;:::o;8990:::-;9132:3;9153:67;9217:2;9212:3;9153:67;:::i;:::-;9146:74;;9229:93;9318:3;9229:93;:::i;:::-;9347:2;9342:3;9338:12;9331:19;;8990:366;;;:::o;9362:::-;9504:3;9525:67;9589:2;9584:3;9525:67;:::i;:::-;9518:74;;9601:93;9690:3;9601:93;:::i;:::-;9719:2;9714:3;9710:12;9703:19;;9362:366;;;:::o;9734:::-;9876:3;9897:67;9961:2;9956:3;9897:67;:::i;:::-;9890:74;;9973:93;10062:3;9973:93;:::i;:::-;10091:2;10086:3;10082:12;10075:19;;9734:366;;;:::o;10106:::-;10248:3;10269:67;10333:2;10328:3;10269:67;:::i;:::-;10262:74;;10345:93;10434:3;10345:93;:::i;:::-;10463:2;10458:3;10454:12;10447:19;;10106:366;;;:::o;10478:::-;10620:3;10641:67;10705:2;10700:3;10641:67;:::i;:::-;10634:74;;10717:93;10806:3;10717:93;:::i;:::-;10835:2;10830:3;10826:12;10819:19;;10478:366;;;:::o;10850:::-;10992:3;11013:67;11077:2;11072:3;11013:67;:::i;:::-;11006:74;;11089:93;11178:3;11089:93;:::i;:::-;11207:2;11202:3;11198:12;11191:19;;10850:366;;;:::o;11222:::-;11364:3;11385:67;11449:2;11444:3;11385:67;:::i;:::-;11378:74;;11461:93;11550:3;11461:93;:::i;:::-;11579:2;11574:3;11570:12;11563:19;;11222:366;;;:::o;11594:::-;11736:3;11757:67;11821:2;11816:3;11757:67;:::i;:::-;11750:74;;11833:93;11922:3;11833:93;:::i;:::-;11951:2;11946:3;11942:12;11935:19;;11594:366;;;:::o;11966:::-;12108:3;12129:67;12193:2;12188:3;12129:67;:::i;:::-;12122:74;;12205:93;12294:3;12205:93;:::i;:::-;12323:2;12318:3;12314:12;12307:19;;11966:366;;;:::o;12338:::-;12480:3;12501:67;12565:2;12560:3;12501:67;:::i;:::-;12494:74;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12338:366;;;:::o;12710:115::-;12795:23;12812:5;12795:23;:::i;:::-;12790:3;12783:36;12710:115;;:::o;12831:118::-;12918:24;12936:5;12918:24;:::i;:::-;12913:3;12906:37;12831:118;;:::o;12955:115::-;13040:23;13057:5;13040:23;:::i;:::-;13035:3;13028:36;12955:115;;:::o;13076:112::-;13159:22;13175:5;13159:22;:::i;:::-;13154:3;13147:35;13076:112;;:::o;13194:222::-;13287:4;13325:2;13314:9;13310:18;13302:26;;13338:71;13406:1;13395:9;13391:17;13382:6;13338:71;:::i;:::-;13194:222;;;;:::o;13422:210::-;13509:4;13547:2;13536:9;13532:18;13524:26;;13560:65;13622:1;13611:9;13607:17;13598:6;13560:65;:::i;:::-;13422:210;;;;:::o;13638:313::-;13751:4;13789:2;13778:9;13774:18;13766:26;;13838:9;13832:4;13828:20;13824:1;13813:9;13809:17;13802:47;13866:78;13939:4;13930:6;13866:78;:::i;:::-;13858:86;;13638:313;;;;:::o;13957:419::-;14123:4;14161:2;14150:9;14146:18;14138:26;;14210:9;14204:4;14200:20;14196:1;14185:9;14181:17;14174:47;14238:131;14364:4;14238:131;:::i;:::-;14230:139;;13957:419;;;:::o;14382:::-;14548:4;14586:2;14575:9;14571:18;14563:26;;14635:9;14629:4;14625:20;14621:1;14610:9;14606:17;14599:47;14663:131;14789:4;14663:131;:::i;:::-;14655:139;;14382:419;;;:::o;14807:::-;14973:4;15011:2;15000:9;14996:18;14988:26;;15060:9;15054:4;15050:20;15046:1;15035:9;15031:17;15024:47;15088:131;15214:4;15088:131;:::i;:::-;15080:139;;14807:419;;;:::o;15232:::-;15398:4;15436:2;15425:9;15421:18;15413:26;;15485:9;15479:4;15475:20;15471:1;15460:9;15456:17;15449:47;15513:131;15639:4;15513:131;:::i;:::-;15505:139;;15232:419;;;:::o;15657:::-;15823:4;15861:2;15850:9;15846:18;15838:26;;15910:9;15904:4;15900:20;15896:1;15885:9;15881:17;15874:47;15938:131;16064:4;15938:131;:::i;:::-;15930:139;;15657:419;;;:::o;16082:::-;16248:4;16286:2;16275:9;16271:18;16263:26;;16335:9;16329:4;16325:20;16321:1;16310:9;16306:17;16299:47;16363:131;16489:4;16363:131;:::i;:::-;16355:139;;16082:419;;;:::o;16507:::-;16673:4;16711:2;16700:9;16696:18;16688:26;;16760:9;16754:4;16750:20;16746:1;16735:9;16731:17;16724:47;16788:131;16914:4;16788:131;:::i;:::-;16780:139;;16507:419;;;:::o;16932:::-;17098:4;17136:2;17125:9;17121:18;17113:26;;17185:9;17179:4;17175:20;17171:1;17160:9;17156:17;17149:47;17213:131;17339:4;17213:131;:::i;:::-;17205:139;;16932:419;;;:::o;17357:::-;17523:4;17561:2;17550:9;17546:18;17538:26;;17610:9;17604:4;17600:20;17596:1;17585:9;17581:17;17574:47;17638:131;17764:4;17638:131;:::i;:::-;17630:139;;17357:419;;;:::o;17782:::-;17948:4;17986:2;17975:9;17971:18;17963:26;;18035:9;18029:4;18025:20;18021:1;18010:9;18006:17;17999:47;18063:131;18189:4;18063:131;:::i;:::-;18055:139;;17782:419;;;:::o;18207:::-;18373:4;18411:2;18400:9;18396:18;18388:26;;18460:9;18454:4;18450:20;18446:1;18435:9;18431:17;18424:47;18488:131;18614:4;18488:131;:::i;:::-;18480:139;;18207:419;;;:::o;18632:::-;18798:4;18836:2;18825:9;18821:18;18813:26;;18885:9;18879:4;18875:20;18871:1;18860:9;18856:17;18849:47;18913:131;19039:4;18913:131;:::i;:::-;18905:139;;18632:419;;;:::o;19057:::-;19223:4;19261:2;19250:9;19246:18;19238:26;;19310:9;19304:4;19300:20;19296:1;19285:9;19281:17;19274:47;19338:131;19464:4;19338:131;:::i;:::-;19330:139;;19057:419;;;:::o;19482:::-;19648:4;19686:2;19675:9;19671:18;19663:26;;19735:9;19729:4;19725:20;19721:1;19710:9;19706:17;19699:47;19763:131;19889:4;19763:131;:::i;:::-;19755:139;;19482:419;;;:::o;19907:::-;20073:4;20111:2;20100:9;20096:18;20088:26;;20160:9;20154:4;20150:20;20146:1;20135:9;20131:17;20124:47;20188:131;20314:4;20188:131;:::i;:::-;20180:139;;19907:419;;;:::o;20332:::-;20498:4;20536:2;20525:9;20521:18;20513:26;;20585:9;20579:4;20575:20;20571:1;20560:9;20556:17;20549:47;20613:131;20739:4;20613:131;:::i;:::-;20605:139;;20332:419;;;:::o;20757:::-;20923:4;20961:2;20950:9;20946:18;20938:26;;21010:9;21004:4;21000:20;20996:1;20985:9;20981:17;20974:47;21038:131;21164:4;21038:131;:::i;:::-;21030:139;;20757:419;;;:::o;21182:::-;21348:4;21386:2;21375:9;21371:18;21363:26;;21435:9;21429:4;21425:20;21421:1;21410:9;21406:17;21399:47;21463:131;21589:4;21463:131;:::i;:::-;21455:139;;21182:419;;;:::o;21607:::-;21773:4;21811:2;21800:9;21796:18;21788:26;;21860:9;21854:4;21850:20;21846:1;21835:9;21831:17;21824:47;21888:131;22014:4;21888:131;:::i;:::-;21880:139;;21607:419;;;:::o;22032:::-;22198:4;22236:2;22225:9;22221:18;22213:26;;22285:9;22279:4;22275:20;22271:1;22260:9;22256:17;22249:47;22313:131;22439:4;22313:131;:::i;:::-;22305:139;;22032:419;;;:::o;22457:::-;22623:4;22661:2;22650:9;22646:18;22638:26;;22710:9;22704:4;22700:20;22696:1;22685:9;22681:17;22674:47;22738:131;22864:4;22738:131;:::i;:::-;22730:139;;22457:419;;;:::o;22882:::-;23048:4;23086:2;23075:9;23071:18;23063:26;;23135:9;23129:4;23125:20;23121:1;23110:9;23106:17;23099:47;23163:131;23289:4;23163:131;:::i;:::-;23155:139;;22882:419;;;:::o;23307:::-;23473:4;23511:2;23500:9;23496:18;23488:26;;23560:9;23554:4;23550:20;23546:1;23535:9;23531:17;23524:47;23588:131;23714:4;23588:131;:::i;:::-;23580:139;;23307:419;;;:::o;23732:::-;23898:4;23936:2;23925:9;23921:18;23913:26;;23985:9;23979:4;23975:20;23971:1;23960:9;23956:17;23949:47;24013:131;24139:4;24013:131;:::i;:::-;24005:139;;23732:419;;;:::o;24157:218::-;24248:4;24286:2;24275:9;24271:18;24263:26;;24299:69;24365:1;24354:9;24350:17;24341:6;24299:69;:::i;:::-;24157:218;;;;:::o;24381:222::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24525:71;24593:1;24582:9;24578:17;24569:6;24525:71;:::i;:::-;24381:222;;;;:::o;24609:218::-;24700:4;24738:2;24727:9;24723:18;24715:26;;24751:69;24817:1;24806:9;24802:17;24793:6;24751:69;:::i;:::-;24609:218;;;;:::o;24833:214::-;24922:4;24960:2;24949:9;24945:18;24937:26;;24973:67;25037:1;25026:9;25022:17;25013:6;24973:67;:::i;:::-;24833:214;;;;:::o;25134:99::-;25186:6;25220:5;25214:12;25204:22;;25134:99;;;:::o;25239:169::-;25323:11;25357:6;25352:3;25345:19;25397:4;25392:3;25388:14;25373:29;;25239:169;;;;:::o;25414:242::-;25453:3;25472:19;25489:1;25472:19;:::i;:::-;25467:24;;25505:19;25522:1;25505:19;:::i;:::-;25500:24;;25598:1;25590:6;25586:14;25583:1;25580:21;25577:47;;;25604:18;;:::i;:::-;25577:47;25648:1;25645;25641:9;25634:16;;25414:242;;;;:::o;25662:305::-;25702:3;25721:20;25739:1;25721:20;:::i;:::-;25716:25;;25755:20;25773:1;25755:20;:::i;:::-;25750:25;;25909:1;25841:66;25837:74;25834:1;25831:81;25828:107;;;25915:18;;:::i;:::-;25828:107;25959:1;25956;25952:9;25945:16;;25662:305;;;;:::o;25973:185::-;26013:1;26030:20;26048:1;26030:20;:::i;:::-;26025:25;;26064:20;26082:1;26064:20;:::i;:::-;26059:25;;26103:1;26093:35;;26108:18;;:::i;:::-;26093:35;26150:1;26147;26143:9;26138:14;;25973:185;;;;:::o;26164:182::-;26203:1;26220:19;26237:1;26220:19;:::i;:::-;26215:24;;26253:19;26270:1;26253:19;:::i;:::-;26248:24;;26291:1;26281:35;;26296:18;;:::i;:::-;26281:35;26338:1;26335;26331:9;26326:14;;26164:182;;;;:::o;26352:348::-;26392:7;26415:20;26433:1;26415:20;:::i;:::-;26410:25;;26449:20;26467:1;26449:20;:::i;:::-;26444:25;;26637:1;26569:66;26565:74;26562:1;26559:81;26554:1;26547:9;26540:17;26536:105;26533:131;;;26644:18;;:::i;:::-;26533:131;26692:1;26689;26685:9;26674:20;;26352:348;;;;:::o;26706:188::-;26745:4;26765:19;26782:1;26765:19;:::i;:::-;26760:24;;26798:19;26815:1;26798:19;:::i;:::-;26793:24;;26836:1;26833;26830:8;26827:34;;;26841:18;;:::i;:::-;26827:34;26886:1;26883;26879:9;26871:17;;26706:188;;;;:::o;26900:191::-;26940:4;26960:20;26978:1;26960:20;:::i;:::-;26955:25;;26994:20;27012:1;26994:20;:::i;:::-;26989:25;;27033:1;27030;27027:8;27024:34;;;27038:18;;:::i;:::-;27024:34;27083:1;27080;27076:9;27068:17;;26900:191;;;;:::o;27097:96::-;27134:7;27163:24;27181:5;27163:24;:::i;:::-;27152:35;;27097:96;;;:::o;27199:90::-;27233:7;27276:5;27269:13;27262:21;27251:32;;27199:90;;;:::o;27295:89::-;27331:7;27371:6;27364:5;27360:18;27349:29;;27295:89;;;:::o;27390:126::-;27427:7;27467:42;27460:5;27456:54;27445:65;;27390:126;;;:::o;27522:77::-;27559:7;27588:5;27577:16;;27522:77;;;:::o;27605:93::-;27641:7;27681:10;27674:5;27670:22;27659:33;;27605:93;;;:::o;27704:86::-;27739:7;27779:4;27772:5;27768:16;27757:27;;27704:86;;;:::o;27796:307::-;27864:1;27874:113;27888:6;27885:1;27882:13;27874:113;;;27973:1;27968:3;27964:11;27958:18;27954:1;27949:3;27945:11;27938:39;27910:2;27907:1;27903:10;27898:15;;27874:113;;;28005:6;28002:1;27999:13;27996:101;;;28085:1;28076:6;28071:3;28067:16;28060:27;27996:101;27845:258;27796:307;;;:::o;28109:320::-;28153:6;28190:1;28184:4;28180:12;28170:22;;28237:1;28231:4;28227:12;28258:18;28248:81;;28314:4;28306:6;28302:17;28292:27;;28248:81;28376:2;28368:6;28365:14;28345:18;28342:38;28339:84;;;28395:18;;:::i;:::-;28339:84;28160:269;28109:320;;;:::o;28435:167::-;28472:3;28495:22;28511:5;28495:22;:::i;:::-;28486:31;;28539:4;28532:5;28529:15;28526:41;;;28547:18;;:::i;:::-;28526:41;28594:1;28587:5;28583:13;28576:20;;28435:167;;;:::o;28608:180::-;28656:77;28653:1;28646:88;28753:4;28750:1;28743:15;28777:4;28774:1;28767:15;28794:180;28842:77;28839:1;28832:88;28939:4;28936:1;28929:15;28963:4;28960:1;28953:15;28980:180;29028:77;29025:1;29018:88;29125:4;29122:1;29115:15;29149:4;29146:1;29139:15;29166:180;29214:77;29211:1;29204:88;29311:4;29308:1;29301:15;29335:4;29332:1;29325:15;29352:180;29400:77;29397:1;29390:88;29497:4;29494:1;29487:15;29521:4;29518:1;29511:15;29661:117;29770:1;29767;29760:12;29784:102;29825:6;29876:2;29872:7;29867:2;29860:5;29856:14;29852:28;29842:38;;29784:102;;;:::o;29892:222::-;30032:34;30028:1;30020:6;30016:14;30009:58;30101:5;30096:2;30088:6;30084:15;30077:30;29892:222;:::o;30120:221::-;30260:34;30256:1;30248:6;30244:14;30237:58;30329:4;30324:2;30316:6;30312:15;30305:29;30120:221;:::o;30347:169::-;30487:21;30483:1;30475:6;30471:14;30464:45;30347:169;:::o;30522:226::-;30662:34;30658:1;30650:6;30646:14;30639:58;30731:9;30726:2;30718:6;30714:15;30707:34;30522:226;:::o;30754:225::-;30894:34;30890:1;30882:6;30878:14;30871:58;30963:8;30958:2;30950:6;30946:15;30939:33;30754:225;:::o;30985:221::-;31125:34;31121:1;31113:6;31109:14;31102:58;31194:4;31189:2;31181:6;31177:15;31170:29;30985:221;:::o;31212:175::-;31352:27;31348:1;31340:6;31336:14;31329:51;31212:175;:::o;31393:227::-;31533:34;31529:1;31521:6;31517:14;31510:58;31602:10;31597:2;31589:6;31585:15;31578:35;31393:227;:::o;31626:179::-;31766:31;31762:1;31754:6;31750:14;31743:55;31626:179;:::o;31811:225::-;31951:34;31947:1;31939:6;31935:14;31928:58;32020:8;32015:2;32007:6;32003:15;31996:33;31811:225;:::o;32042:173::-;32182:25;32178:1;32170:6;32166:14;32159:49;32042:173;:::o;32221:170::-;32361:22;32357:1;32349:6;32345:14;32338:46;32221:170;:::o;32397:171::-;32537:23;32533:1;32525:6;32521:14;32514:47;32397:171;:::o;32574:229::-;32714:34;32710:1;32702:6;32698:14;32691:58;32783:12;32778:2;32770:6;32766:15;32759:37;32574:229;:::o;32809:167::-;32949:19;32945:1;32937:6;32933:14;32926:43;32809:167;:::o;32982:178::-;33122:30;33118:1;33110:6;33106:14;33099:54;32982:178;:::o;33166:167::-;33306:19;33302:1;33294:6;33290:14;33283:43;33166:167;:::o;33339:182::-;33479:34;33475:1;33467:6;33463:14;33456:58;33339:182;:::o;33527:227::-;33667:34;33663:1;33655:6;33651:14;33644:58;33736:10;33731:2;33723:6;33719:15;33712:35;33527:227;:::o;33760:220::-;33900:34;33896:1;33888:6;33884:14;33877:58;33969:3;33964:2;33956:6;33952:15;33945:28;33760:220;:::o;33986:224::-;34126:34;34122:1;34114:6;34110:14;34103:58;34195:7;34190:2;34182:6;34178:15;34171:32;33986:224;:::o;34216:223::-;34356:34;34352:1;34344:6;34340:14;34333:58;34425:6;34420:2;34412:6;34408:15;34401:31;34216:223;:::o;34445:224::-;34585:34;34581:1;34573:6;34569:14;34562:58;34654:7;34649:2;34641:6;34637:15;34630:32;34445:224;:::o;34675:168::-;34815:20;34811:1;34803:6;34799:14;34792:44;34675:168;:::o;34849:122::-;34922:24;34940:5;34922:24;:::i;:::-;34915:5;34912:35;34902:63;;34961:1;34958;34951:12;34902:63;34849:122;:::o;34977:120::-;35049:23;35066:5;35049:23;:::i;:::-;35042:5;35039:34;35029:62;;35087:1;35084;35077:12;35029:62;34977:120;:::o;35103:122::-;35176:24;35194:5;35176:24;:::i;:::-;35169:5;35166:35;35156:63;;35215:1;35212;35205:12;35156:63;35103:122;:::o

Swarm Source

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