S Price: $0.736187 (+9.39%)

Token

FastMoon (FMOON)

Overview

Max Total Supply

10,000,000 FMOON

Holders

8

Total Transfers

-

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FastMoon

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-02-18
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
// File: browser/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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
// File: browser/Address.sol

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// File: browser/SafeMath.sol

pragma solidity ^0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// fastmoon: DeFi token with 2% reflect redistribution tax






pragma solidity ^0.8.0;

contract FastMoon is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 10 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'FastMoon';
    string private _symbol = 'FMOON';
    uint8 private _decimals = 9;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(2).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052662386f26fc100006000196200001b9190620003dd565b6000196200002a919062000362565b6006556040518060400160405280600881526020017f466173744d6f6f6e000000000000000000000000000000000000000000000000815250600890805190602001906200007a92919062000284565b506040518060400160405280600581526020017f464d4f4f4e00000000000000000000000000000000000000000000000000000081525060099080519060200190620000c892919062000284565b506009600a60006101000a81548160ff021916908360ff160217905550348015620000f257600080fd5b506000620001056200027c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001ba6200027c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002086200027c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc100006040516200026e919062000345565b60405180910390a3620004a2565b600033905090565b8280546200029290620003a7565b90600052602060002090601f016020900481019282620002b6576000855562000302565b82601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b6200033f816200039d565b82525050565b60006020820190506200035c600083018462000334565b92915050565b60006200036f826200039d565b91506200037c836200039d565b92508282101562000392576200039162000415565b5b828203905092915050565b6000819050919050565b60006002820490506001821680620003c057607f821691505b60208210811415620003d757620003d662000473565b5b50919050565b6000620003ea826200039d565b9150620003f7836200039d565b9250826200040a576200040962000444565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61360f80620004b26000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610366578063cba0e99614610396578063dd62ed3e146103c6578063f2cc0c18146103f6578063f2fde38b14610412578063f84354f11461042e57610137565b806370a08231146102c0578063715018a6146102f05780638da5cb5b146102fa57806395d89b4114610318578063a457c2d71461033657610137565b806323b872dd116100ff57806323b872dd146101e25780632d83811914610212578063313ce5671461024257806339509351146102605780634549b0391461029057610137565b8063053ab1821461013c57806306fdde0314610158578063095ea7b31461017657806313114a9d146101a657806318160ddd146101c4575b600080fd5b61015660048036038101906101519190612bbd565b61044a565b005b6101606105c4565b60405161016d91906130bd565b60405180910390f35b610190600480360381019061018b9190612b81565b610656565b60405161019d91906130a2565b60405180910390f35b6101ae610674565b6040516101bb919061323f565b60405180910390f35b6101cc61067e565b6040516101d9919061323f565b60405180910390f35b6101fc60048036038101906101f79190612b32565b61068d565b60405161020991906130a2565b60405180910390f35b61022c60048036038101906102279190612bbd565b610766565b604051610239919061323f565b60405180910390f35b61024a6107d4565b604051610257919061325a565b60405180910390f35b61027a60048036038101906102759190612b81565b6107eb565b60405161028791906130a2565b60405180910390f35b6102aa60048036038101906102a59190612be6565b61089e565b6040516102b7919061323f565b60405180910390f35b6102da60048036038101906102d59190612acd565b610925565b6040516102e7919061323f565b60405180910390f35b6102f8610a10565b005b610302610b4a565b60405161030f9190613087565b60405180910390f35b610320610b73565b60405161032d91906130bd565b60405180910390f35b610350600480360381019061034b9190612b81565b610c05565b60405161035d91906130a2565b60405180910390f35b610380600480360381019061037b9190612b81565b610cd2565b60405161038d91906130a2565b60405180910390f35b6103b060048036038101906103ab9190612acd565b610cf0565b6040516103bd91906130a2565b60405180910390f35b6103e060048036038101906103db9190612af6565b610d46565b6040516103ed919061323f565b60405180910390f35b610410600480360381019061040b9190612acd565b610dcd565b005b61042c60048036038101906104279190612acd565b611068565b005b61044860048036038101906104439190612acd565b611211565b005b60006104546115df565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156104e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104da9061321f565b60405180910390fd5b60006104ee836115e7565b50505050905061054681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061059e8160065461163f90919063ffffffff16565b6006819055506105b98360075461165590919063ffffffff16565b600781905550505050565b6060600880546105d39061342e565b80601f01602080910402602001604051908101604052809291908181526020018280546105ff9061342e565b801561064c5780601f106106215761010080835404028352916020019161064c565b820191906000526020600020905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b600061066a6106636115df565b848461166b565b6001905092915050565b6000600754905090565b6000662386f26fc10000905090565b600061069a848484611836565b61075b846106a66115df565b6107568560405180606001604052806028815260200161358d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070c6115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d9092919063ffffffff16565b61166b565b600190509392505050565b60006006548211156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a4906130ff565b60405180910390fd5b60006107b7611ca2565b90506107cc8184611ccd90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006108946107f86115df565b8461088f85600360006108096115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b61166b565b6001905092915050565b6000662386f26fc100008311156108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e19061317f565b60405180910390fd5b816109095760006108fa846115e7565b5050505090508091505061091f565b6000610914846115e7565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109c057600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a0b565b610a08600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b90505b919050565b610a186115df565b73ffffffffffffffffffffffffffffffffffffffff16610a36610b4a565b73ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a839061319f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610b829061342e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae9061342e565b8015610bfb5780601f10610bd057610100808354040283529160200191610bfb565b820191906000526020600020905b815481529060010190602001808311610bde57829003601f168201915b5050505050905090565b6000610cc8610c126115df565b84610cc3856040518060600160405280602581526020016135b56025913960036000610c3c6115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d9092919063ffffffff16565b61166b565b6001905092915050565b6000610ce6610cdf6115df565b8484611836565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dd56115df565b73ffffffffffffffffffffffffffffffffffffffff16610df3610b4a565b73ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061319f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd9061315f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610faa57610f66600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110706115df565b73ffffffffffffffffffffffffffffffffffffffff1661108e610b4a565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db9061319f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b9061311f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112196115df565b73ffffffffffffffffffffffffffffffffffffffff16611237610b4a565b73ffffffffffffffffffffffffffffffffffffffff161461128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112849061319f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113109061315f565b60405180910390fd5b60005b6005805490508110156115db578173ffffffffffffffffffffffffffffffffffffffff166005828154811061137a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115c857600560016005805490506113d59190613372565b8154811061140c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611471577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061158e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115db565b80806115d390613460565b91505061131c565b5050565b600033905090565b60008060008060008060006115fb88611ce3565b915091506000611609611ca2565b9050600080600061161b8c8686611d35565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000818361164d9190613372565b905092915050565b600081836116639190613291565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d2906131ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117429061313f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611829919061323f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906130df565b60405180910390fd5b60008111611959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611950906131bf565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119fc5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a1157611a0c838383611d93565b611c48565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ab45750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ac957611ac4838383611fe6565b611c47565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b6d5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8257611b7d838383612239565b611c46565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c245750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c3957611c348383836123f7565b611c45565b611c44838383612239565b5b5b5b5b505050565b6000838311158290611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c91906130bd565b60405180910390fd5b5082840390509392505050565b6000806000611caf6126df565b91509150611cc68183611ccd90919063ffffffff16565b9250505090565b60008183611cdb91906132e7565b905092915050565b6000806000611d0f6064611d01600287612a3e90919063ffffffff16565b611ccd90919063ffffffff16565b90506000611d26828661163f90919063ffffffff16565b90508082935093505050915091565b600080600080611d4e8588612a3e90919063ffffffff16565b90506000611d658688612a3e90919063ffffffff16565b90506000611d7c828461163f90919063ffffffff16565b905082818395509550955050505093509350939050565b6000806000806000611da4866115e7565b94509450945094509450611e0086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f2a84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f778382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fd4919061323f565b60405180910390a35050505050505050565b6000806000806000611ff7866115e7565b9450945094509450945061205385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120e882600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061217d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ca8382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612227919061323f565b60405180910390a35050505050505050565b600080600080600061224a866115e7565b945094509450945094506122a685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061233b84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123888382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e5919061323f565b60405180910390a35050505050505050565b6000806000806000612408866115e7565b9450945094509450945061246486600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124f985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258e82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061262384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126708382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cd919061323f565b60405180910390a35050505050505050565b600080600060065490506000662386f26fc10000905060005b6005805490508110156129f757826001600060058481548110612744577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061285857508160026000600584815481106127f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561287457600654662386f26fc1000094509450505050612a3a565b61292a60016000600584815481106128b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461163f90919063ffffffff16565b92506129e2600260006005848154811061296d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361163f90919063ffffffff16565b915080806129ef90613460565b9150506126f8565b50612a14662386f26fc10000600654611ccd90919063ffffffff16565b821015612a3157600654662386f26fc10000935093505050612a3a565b81819350935050505b9091565b60008183612a4c9190613318565b905092915050565b612a698260065461163f90919063ffffffff16565b600681905550612a848160075461165590919063ffffffff16565b6007819055505050565b600081359050612a9d81613547565b92915050565b600081359050612ab28161355e565b92915050565b600081359050612ac781613575565b92915050565b600060208284031215612adf57600080fd5b6000612aed84828501612a8e565b91505092915050565b60008060408385031215612b0957600080fd5b6000612b1785828601612a8e565b9250506020612b2885828601612a8e565b9150509250929050565b600080600060608486031215612b4757600080fd5b6000612b5586828701612a8e565b9350506020612b6686828701612a8e565b9250506040612b7786828701612ab8565b9150509250925092565b60008060408385031215612b9457600080fd5b6000612ba285828601612a8e565b9250506020612bb385828601612ab8565b9150509250929050565b600060208284031215612bcf57600080fd5b6000612bdd84828501612ab8565b91505092915050565b60008060408385031215612bf957600080fd5b6000612c0785828601612ab8565b9250506020612c1885828601612aa3565b9150509250929050565b612c2b816133a6565b82525050565b612c3a816133b8565b82525050565b6000612c4b82613275565b612c558185613280565b9350612c658185602086016133fb565b612c6e81613536565b840191505092915050565b6000612c86602383613280565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cec602a83613280565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d52602683613280565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612db8602283613280565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e1e601b83613280565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000612e5e601f83613280565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000612e9e602083613280565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612ede602983613280565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f44602583613280565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faa602483613280565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613010602c83613280565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b613072816133e4565b82525050565b613081816133ee565b82525050565b600060208201905061309c6000830184612c22565b92915050565b60006020820190506130b76000830184612c31565b92915050565b600060208201905081810360008301526130d78184612c40565b905092915050565b600060208201905081810360008301526130f881612c79565b9050919050565b6000602082019050818103600083015261311881612cdf565b9050919050565b6000602082019050818103600083015261313881612d45565b9050919050565b6000602082019050818103600083015261315881612dab565b9050919050565b6000602082019050818103600083015261317881612e11565b9050919050565b6000602082019050818103600083015261319881612e51565b9050919050565b600060208201905081810360008301526131b881612e91565b9050919050565b600060208201905081810360008301526131d881612ed1565b9050919050565b600060208201905081810360008301526131f881612f37565b9050919050565b6000602082019050818103600083015261321881612f9d565b9050919050565b6000602082019050818103600083015261323881613003565b9050919050565b60006020820190506132546000830184613069565b92915050565b600060208201905061326f6000830184613078565b92915050565b600081519050919050565b600082825260208201905092915050565b600061329c826133e4565b91506132a7836133e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132dc576132db6134a9565b5b828201905092915050565b60006132f2826133e4565b91506132fd836133e4565b92508261330d5761330c6134d8565b5b828204905092915050565b6000613323826133e4565b915061332e836133e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613367576133666134a9565b5b828202905092915050565b600061337d826133e4565b9150613388836133e4565b92508282101561339b5761339a6134a9565b5b828203905092915050565b60006133b1826133c4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156134195780820151818401526020810190506133fe565b83811115613428576000848401525b50505050565b6000600282049050600182168061344657607f821691505b6020821081141561345a57613459613507565b5b50919050565b600061346b826133e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561349e5761349d6134a9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613550816133a6565b811461355b57600080fd5b50565b613567816133b8565b811461357257600080fd5b50565b61357e816133e4565b811461358957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e79490ceab5ba1a496c76c0c4edaa10a7ec7fd44209e78183bcc78597eb2fffb64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610366578063cba0e99614610396578063dd62ed3e146103c6578063f2cc0c18146103f6578063f2fde38b14610412578063f84354f11461042e57610137565b806370a08231146102c0578063715018a6146102f05780638da5cb5b146102fa57806395d89b4114610318578063a457c2d71461033657610137565b806323b872dd116100ff57806323b872dd146101e25780632d83811914610212578063313ce5671461024257806339509351146102605780634549b0391461029057610137565b8063053ab1821461013c57806306fdde0314610158578063095ea7b31461017657806313114a9d146101a657806318160ddd146101c4575b600080fd5b61015660048036038101906101519190612bbd565b61044a565b005b6101606105c4565b60405161016d91906130bd565b60405180910390f35b610190600480360381019061018b9190612b81565b610656565b60405161019d91906130a2565b60405180910390f35b6101ae610674565b6040516101bb919061323f565b60405180910390f35b6101cc61067e565b6040516101d9919061323f565b60405180910390f35b6101fc60048036038101906101f79190612b32565b61068d565b60405161020991906130a2565b60405180910390f35b61022c60048036038101906102279190612bbd565b610766565b604051610239919061323f565b60405180910390f35b61024a6107d4565b604051610257919061325a565b60405180910390f35b61027a60048036038101906102759190612b81565b6107eb565b60405161028791906130a2565b60405180910390f35b6102aa60048036038101906102a59190612be6565b61089e565b6040516102b7919061323f565b60405180910390f35b6102da60048036038101906102d59190612acd565b610925565b6040516102e7919061323f565b60405180910390f35b6102f8610a10565b005b610302610b4a565b60405161030f9190613087565b60405180910390f35b610320610b73565b60405161032d91906130bd565b60405180910390f35b610350600480360381019061034b9190612b81565b610c05565b60405161035d91906130a2565b60405180910390f35b610380600480360381019061037b9190612b81565b610cd2565b60405161038d91906130a2565b60405180910390f35b6103b060048036038101906103ab9190612acd565b610cf0565b6040516103bd91906130a2565b60405180910390f35b6103e060048036038101906103db9190612af6565b610d46565b6040516103ed919061323f565b60405180910390f35b610410600480360381019061040b9190612acd565b610dcd565b005b61042c60048036038101906104279190612acd565b611068565b005b61044860048036038101906104439190612acd565b611211565b005b60006104546115df565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156104e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104da9061321f565b60405180910390fd5b60006104ee836115e7565b50505050905061054681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061059e8160065461163f90919063ffffffff16565b6006819055506105b98360075461165590919063ffffffff16565b600781905550505050565b6060600880546105d39061342e565b80601f01602080910402602001604051908101604052809291908181526020018280546105ff9061342e565b801561064c5780601f106106215761010080835404028352916020019161064c565b820191906000526020600020905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b600061066a6106636115df565b848461166b565b6001905092915050565b6000600754905090565b6000662386f26fc10000905090565b600061069a848484611836565b61075b846106a66115df565b6107568560405180606001604052806028815260200161358d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070c6115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d9092919063ffffffff16565b61166b565b600190509392505050565b60006006548211156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a4906130ff565b60405180910390fd5b60006107b7611ca2565b90506107cc8184611ccd90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006108946107f86115df565b8461088f85600360006108096115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b61166b565b6001905092915050565b6000662386f26fc100008311156108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e19061317f565b60405180910390fd5b816109095760006108fa846115e7565b5050505090508091505061091f565b6000610914846115e7565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109c057600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a0b565b610a08600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b90505b919050565b610a186115df565b73ffffffffffffffffffffffffffffffffffffffff16610a36610b4a565b73ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a839061319f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610b829061342e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae9061342e565b8015610bfb5780601f10610bd057610100808354040283529160200191610bfb565b820191906000526020600020905b815481529060010190602001808311610bde57829003601f168201915b5050505050905090565b6000610cc8610c126115df565b84610cc3856040518060600160405280602581526020016135b56025913960036000610c3c6115df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d9092919063ffffffff16565b61166b565b6001905092915050565b6000610ce6610cdf6115df565b8484611836565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dd56115df565b73ffffffffffffffffffffffffffffffffffffffff16610df3610b4a565b73ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061319f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd9061315f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610faa57610f66600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110706115df565b73ffffffffffffffffffffffffffffffffffffffff1661108e610b4a565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db9061319f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b9061311f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112196115df565b73ffffffffffffffffffffffffffffffffffffffff16611237610b4a565b73ffffffffffffffffffffffffffffffffffffffff161461128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112849061319f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113109061315f565b60405180910390fd5b60005b6005805490508110156115db578173ffffffffffffffffffffffffffffffffffffffff166005828154811061137a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115c857600560016005805490506113d59190613372565b8154811061140c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611471577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061158e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115db565b80806115d390613460565b91505061131c565b5050565b600033905090565b60008060008060008060006115fb88611ce3565b915091506000611609611ca2565b9050600080600061161b8c8686611d35565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000818361164d9190613372565b905092915050565b600081836116639190613291565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d2906131ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117429061313f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611829919061323f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906130df565b60405180910390fd5b60008111611959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611950906131bf565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119fc5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a1157611a0c838383611d93565b611c48565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ab45750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ac957611ac4838383611fe6565b611c47565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b6d5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8257611b7d838383612239565b611c46565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c245750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c3957611c348383836123f7565b611c45565b611c44838383612239565b5b5b5b5b505050565b6000838311158290611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c91906130bd565b60405180910390fd5b5082840390509392505050565b6000806000611caf6126df565b91509150611cc68183611ccd90919063ffffffff16565b9250505090565b60008183611cdb91906132e7565b905092915050565b6000806000611d0f6064611d01600287612a3e90919063ffffffff16565b611ccd90919063ffffffff16565b90506000611d26828661163f90919063ffffffff16565b90508082935093505050915091565b600080600080611d4e8588612a3e90919063ffffffff16565b90506000611d658688612a3e90919063ffffffff16565b90506000611d7c828461163f90919063ffffffff16565b905082818395509550955050505093509350939050565b6000806000806000611da4866115e7565b94509450945094509450611e0086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f2a84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f778382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fd4919061323f565b60405180910390a35050505050505050565b6000806000806000611ff7866115e7565b9450945094509450945061205385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120e882600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061217d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ca8382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612227919061323f565b60405180910390a35050505050505050565b600080600080600061224a866115e7565b945094509450945094506122a685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061233b84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123888382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e5919061323f565b60405180910390a35050505050505050565b6000806000806000612408866115e7565b9450945094509450945061246486600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124f985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258e82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061262384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126708382612a54565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126cd919061323f565b60405180910390a35050505050505050565b600080600060065490506000662386f26fc10000905060005b6005805490508110156129f757826001600060058481548110612744577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061285857508160026000600584815481106127f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561287457600654662386f26fc1000094509450505050612a3a565b61292a60016000600584815481106128b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461163f90919063ffffffff16565b92506129e2600260006005848154811061296d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361163f90919063ffffffff16565b915080806129ef90613460565b9150506126f8565b50612a14662386f26fc10000600654611ccd90919063ffffffff16565b821015612a3157600654662386f26fc10000935093505050612a3a565b81819350935050505b9091565b60008183612a4c9190613318565b905092915050565b612a698260065461163f90919063ffffffff16565b600681905550612a848160075461165590919063ffffffff16565b6007819055505050565b600081359050612a9d81613547565b92915050565b600081359050612ab28161355e565b92915050565b600081359050612ac781613575565b92915050565b600060208284031215612adf57600080fd5b6000612aed84828501612a8e565b91505092915050565b60008060408385031215612b0957600080fd5b6000612b1785828601612a8e565b9250506020612b2885828601612a8e565b9150509250929050565b600080600060608486031215612b4757600080fd5b6000612b5586828701612a8e565b9350506020612b6686828701612a8e565b9250506040612b7786828701612ab8565b9150509250925092565b60008060408385031215612b9457600080fd5b6000612ba285828601612a8e565b9250506020612bb385828601612ab8565b9150509250929050565b600060208284031215612bcf57600080fd5b6000612bdd84828501612ab8565b91505092915050565b60008060408385031215612bf957600080fd5b6000612c0785828601612ab8565b9250506020612c1885828601612aa3565b9150509250929050565b612c2b816133a6565b82525050565b612c3a816133b8565b82525050565b6000612c4b82613275565b612c558185613280565b9350612c658185602086016133fb565b612c6e81613536565b840191505092915050565b6000612c86602383613280565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cec602a83613280565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d52602683613280565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612db8602283613280565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e1e601b83613280565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000612e5e601f83613280565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000612e9e602083613280565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612ede602983613280565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f44602583613280565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faa602483613280565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613010602c83613280565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b613072816133e4565b82525050565b613081816133ee565b82525050565b600060208201905061309c6000830184612c22565b92915050565b60006020820190506130b76000830184612c31565b92915050565b600060208201905081810360008301526130d78184612c40565b905092915050565b600060208201905081810360008301526130f881612c79565b9050919050565b6000602082019050818103600083015261311881612cdf565b9050919050565b6000602082019050818103600083015261313881612d45565b9050919050565b6000602082019050818103600083015261315881612dab565b9050919050565b6000602082019050818103600083015261317881612e11565b9050919050565b6000602082019050818103600083015261319881612e51565b9050919050565b600060208201905081810360008301526131b881612e91565b9050919050565b600060208201905081810360008301526131d881612ed1565b9050919050565b600060208201905081810360008301526131f881612f37565b9050919050565b6000602082019050818103600083015261321881612f9d565b9050919050565b6000602082019050818103600083015261323881613003565b9050919050565b60006020820190506132546000830184613069565b92915050565b600060208201905061326f6000830184613078565b92915050565b600081519050919050565b600082825260208201905092915050565b600061329c826133e4565b91506132a7836133e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132dc576132db6134a9565b5b828201905092915050565b60006132f2826133e4565b91506132fd836133e4565b92508261330d5761330c6134d8565b5b828204905092915050565b6000613323826133e4565b915061332e836133e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613367576133666134a9565b5b828202905092915050565b600061337d826133e4565b9150613388836133e4565b92508282101561339b5761339a6134a9565b5b828203905092915050565b60006133b1826133c4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156134195780820151818401526020810190506133fe565b83811115613428576000848401525b50505050565b6000600282049050600182168061344657607f821691505b6020821081141561345a57613459613507565b5b50919050565b600061346b826133e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561349e5761349d6134a9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613550816133a6565b811461355b57600080fd5b50565b613567816133b8565b811461357257600080fd5b50565b61357e816133e4565b811461358957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e79490ceab5ba1a496c76c0c4edaa10a7ec7fd44209e78183bcc78597eb2fffb64736f6c63430008000033

Deployed Bytecode Sourcemap

20856:10118:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23816:376;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21698:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22610:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23721:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21975:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22779:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24642:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21884:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23100:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24200:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22078:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2669:148;;;:::i;:::-;;2018:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22284:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23603:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22459:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24903:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2972:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25243:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23816:376;23868:14;23885:12;:10;:12::i;:::-;23868:29;;23917:11;:19;23929:6;23917:19;;;;;;;;;;;;;;;;;;;;;;;;;23916:20;23908:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23997:15;24020:19;24031:7;24020:10;:19::i;:::-;23996:43;;;;;;24068:28;24088:7;24068;:15;24076:6;24068:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24050:7;:15;24058:6;24050:15;;;;;;;;;;;;;;;:46;;;;24117:20;24129:7;24117;;:11;;:20;;;;:::i;:::-;24107:7;:30;;;;24161:23;24176:7;24161:10;;:14;;:23;;;;:::i;:::-;24148:10;:36;;;;23816:376;;;:::o;21698:83::-;21735:13;21768:5;21761:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:83;:::o;22610:161::-;22685:4;22702:39;22711:12;:10;:12::i;:::-;22725:7;22734:6;22702:8;:39::i;:::-;22759:4;22752:11;;22610:161;;;;:::o;23721:87::-;23763:7;23790:10;;23783:17;;23721:87;:::o;21975:95::-;22028:7;21328:18;22048:14;;21975:95;:::o;22779:313::-;22877:4;22894:36;22904:6;22912:9;22923:6;22894:9;:36::i;:::-;22941:121;22950:6;22958:12;:10;:12::i;:::-;22972:89;23010:6;22972:89;;;;;;;;;;;;;;;;;:11;:19;22984:6;22972:19;;;;;;;;;;;;;;;:33;22992:12;:10;:12::i;:::-;22972:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22941:8;:121::i;:::-;23080:4;23073:11;;22779:313;;;;;:::o;24642:253::-;24708:7;24747;;24736;:18;;24728:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24812:19;24835:10;:8;:10::i;:::-;24812:33;;24863:24;24875:11;24863:7;:11;;:24;;;;:::i;:::-;24856:31;;;24642:253;;;:::o;21884:83::-;21925:5;21950:9;;;;;;;;;;;21943:16;;21884:83;:::o;23100:218::-;23188:4;23205:83;23214:12;:10;:12::i;:::-;23228:7;23237:50;23276:10;23237:11;:25;23249:12;:10;:12::i;:::-;23237:25;;;;;;;;;;;;;;;:34;23263:7;23237:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23205:8;:83::i;:::-;23306:4;23299:11;;23100:218;;;;:::o;24200:434::-;24290:7;21328:18;24318:7;:18;;24310:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24388:17;24383:244;;24423:15;24446:19;24457:7;24446:10;:19::i;:::-;24422:43;;;;;;24487:7;24480:14;;;;;24383:244;24529:23;24559:19;24570:7;24559:10;:19::i;:::-;24527:51;;;;;;24600:15;24593:22;;;24200:434;;;;;:::o;22078:198::-;22144:7;22168:11;:20;22180:7;22168:20;;;;;;;;;;;;;;;;;;;;;;;;;22164:49;;;22197:7;:16;22205:7;22197:16;;;;;;;;;;;;;;;;22190:23;;;;22164:49;22231:37;22251:7;:16;22259:7;22251:16;;;;;;;;;;;;;;;;22231:19;:37::i;:::-;22224:44;;22078:198;;;;:::o;2669:148::-;2249:12;:10;:12::i;:::-;2238:23;;:7;:5;:7::i;:::-;:23;;;2230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2776:1:::1;2739:40;;2760:6;::::0;::::1;;;;;;;;2739:40;;;;;;;;;;;;2807:1;2790:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2669:148::o:0;2018:87::-;2064:7;2091:6;;;;;;;;;;;2084:13;;2018:87;:::o;21789:::-;21828:13;21861:7;21854:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21789:87;:::o;23326:269::-;23419:4;23436:129;23445:12;:10;:12::i;:::-;23459:7;23468:96;23507:15;23468:96;;;;;;;;;;;;;;;;;:11;:25;23480:12;:10;:12::i;:::-;23468:25;;;;;;;;;;;;;;;:34;23494:7;23468:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23436:8;:129::i;:::-;23583:4;23576:11;;23326:269;;;;:::o;22284:167::-;22362:4;22379:42;22389:12;:10;:12::i;:::-;22403:9;22414:6;22379:9;:42::i;:::-;22439:4;22432:11;;22284:167;;;;:::o;23603:110::-;23661:4;23685:11;:20;23697:7;23685:20;;;;;;;;;;;;;;;;;;;;;;;;;23678:27;;23603:110;;;:::o;22459:143::-;22540:7;22567:11;:18;22579:5;22567:18;;;;;;;;;;;;;;;:27;22586:7;22567:27;;;;;;;;;;;;;;;;22560:34;;22459:143;;;;:::o;24903:332::-;2249:12;:10;:12::i;:::-;2238:23;;:7;:5;:7::i;:::-;:23;;;2230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24985:11:::1;:20;24997:7;24985:20;;;;;;;;;;;;;;;;;;;;;;;;;24984:21;24976:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25070:1;25051:7;:16;25059:7;25051:16;;;;;;;;;;;;;;;;:20;25048:108;;;25107:37;25127:7;:16;25135:7;25127:16;;;;;;;;;;;;;;;;25107:19;:37::i;:::-;25088:7;:16;25096:7;25088:16;;;;;;;;;;;;;;;:56;;;;25048:108;25189:4;25166:11;:20;25178:7;25166:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25204:9;25219:7;25204:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24903:332:::0;:::o;2972:244::-;2249:12;:10;:12::i;:::-;2238:23;;:7;:5;:7::i;:::-;:23;;;2230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3081:1:::1;3061:22;;:8;:22;;;;3053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3171:8;3142:38;;3163:6;::::0;::::1;;;;;;;;3142:38;;;;;;;;;;;;3200:8;3191:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2972:244:::0;:::o;25243:478::-;2249:12;:10;:12::i;:::-;2238:23;;:7;:5;:7::i;:::-;:23;;;2230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25324:11:::1;:20;25336:7;25324:20;;;;;;;;;;;;;;;;;;;;;;;;;25316:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25392:9;25387:327;25411:9;:16;;;;25407:1;:20;25387:327;;;25469:7;25453:23;;:9;25463:1;25453:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;25449:254;;;25512:9;25541:1;25522:9;:16;;;;:20;;;;:::i;:::-;25512:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25497:9;25507:1;25497:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25581:1;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;:20;;;;25624:5;25601:11;:20;25613:7;25601:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25648:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25682:5;;25449:254;25429:3;;;;;:::i;:::-;;;;25387:327;;;;25243:478:::0;:::o;605:98::-;658:7;685:10;678:17;;605:98;:::o;29246:411::-;29305:7;29314;29323;29332;29341;29362:23;29387:12;29403:20;29415:7;29403:11;:20::i;:::-;29361:62;;;;29434:19;29457:10;:8;:10::i;:::-;29434:33;;29479:15;29496:23;29521:12;29537:39;29549:7;29558:4;29564:11;29537;:39::i;:::-;29478:98;;;;;;29595:7;29604:15;29621:4;29627:15;29644:4;29587:62;;;;;;;;;;;;;;;;29246:411;;;;;;;:::o;14077:98::-;14135:7;14166:1;14162;:5;;;;:::i;:::-;14155:12;;14077:98;;;;:::o;13696:::-;13754:7;13785:1;13781;:5;;;;:::i;:::-;13774:12;;13696:98;;;;:::o;25729:337::-;25839:1;25822:19;;:5;:19;;;;25814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25920:1;25901:21;;:7;:21;;;;25893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26004:6;25974:11;:18;25986:5;25974:18;;;;;;;;;;;;;;;:27;25993:7;25974:27;;;;;;;;;;;;;;;:36;;;;26042:7;26026:32;;26035:5;26026:32;;;26051:6;26026:32;;;;;;:::i;:::-;;;;;;;;25729:337;;;:::o;26074:931::-;26189:1;26171:20;;:6;:20;;;;26163:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26273:1;26252:23;;:9;:23;;;;26244:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26343:1;26334:6;:10;26326:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26405:11;:19;26417:6;26405:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26429:11;:22;26441:9;26429:22;;;;;;;;;;;;;;;;;;;;;;;;;26428:23;26405:46;26401:597;;;26468:48;26490:6;26498:9;26509:6;26468:21;:48::i;:::-;26401:597;;;26539:11;:19;26551:6;26539:19;;;;;;;;;;;;;;;;;;;;;;;;;26538:20;:46;;;;;26562:11;:22;26574:9;26562:22;;;;;;;;;;;;;;;;;;;;;;;;;26538:46;26534:464;;;26601:46;26621:6;26629:9;26640:6;26601:19;:46::i;:::-;26534:464;;;26670:11;:19;26682:6;26670:19;;;;;;;;;;;;;;;;;;;;;;;;;26669:20;:47;;;;;26694:11;:22;26706:9;26694:22;;;;;;;;;;;;;;;;;;;;;;;;;26693:23;26669:47;26665:333;;;26733:44;26751:6;26759:9;26770:6;26733:17;:44::i;:::-;26665:333;;;26799:11;:19;26811:6;26799:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26822:11;:22;26834:9;26822:22;;;;;;;;;;;;;;;;;;;;;;;;;26799:45;26795:203;;;26861:48;26883:6;26891:9;26902:6;26861:21;:48::i;:::-;26795:203;;;26942:44;26960:6;26968:9;26979:6;26942:17;:44::i;:::-;26795:203;26665:333;26534:464;26401:597;26074:931;;;:::o;15975:206::-;16061:7;16119:1;16114;:6;;16122:12;16106:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16161:1;16157;:5;16150:12;;15975:206;;;;;:::o;30245:163::-;30286:7;30307:15;30324;30343:19;:17;:19::i;:::-;30306:56;;;;30380:20;30392:7;30380;:11;;:20;;;;:::i;:::-;30373:27;;;;30245:163;:::o;14833:98::-;14891:7;14922:1;14918;:5;;;;:::i;:::-;14911:12;;14833:98;;;;:::o;29665:230::-;29725:7;29734;29754:12;29769:23;29788:3;29769:14;29781:1;29769:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29754:38;;29803:23;29829:17;29841:4;29829:7;:11;;:17;;;;:::i;:::-;29803:43;;29865:15;29882:4;29857:30;;;;;;29665:230;;;:::o;29903:334::-;29998:7;30007;30016;30036:15;30054:24;30066:11;30054:7;:11;;:24;;;;:::i;:::-;30036:42;;30089:12;30104:21;30113:11;30104:4;:8;;:21;;;;:::i;:::-;30089:36;;30136:23;30162:17;30174:4;30162:7;:11;;:17;;;;:::i;:::-;30136:43;;30198:7;30207:15;30224:4;30190:39;;;;;;;;;29903:334;;;;;;;:::o;27992:506::-;28095:15;28112:23;28137:12;28151:23;28176:12;28192:19;28203:7;28192:10;:19::i;:::-;28094:117;;;;;;;;;;28240:28;28260:7;28240;:15;28248:6;28240:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28222:7;:15;28230:6;28222:15;;;;;;;;;;;;;;;:46;;;;28297:28;28317:7;28297;:15;28305:6;28297:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28279:7;:15;28287:6;28279:15;;;;;;;;;;;;;;;:46;;;;28357:39;28380:15;28357:7;:18;28365:9;28357:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28336:7;:18;28344:9;28336:18;;;;;;;;;;;;;;;:60;;;;28407:23;28419:4;28425;28407:11;:23::i;:::-;28463:9;28446:44;;28455:6;28446:44;;;28474:15;28446:44;;;;;;:::i;:::-;;;;;;;;27992:506;;;;;;;;:::o;27466:518::-;27567:15;27584:23;27609:12;27623:23;27648:12;27664:19;27675:7;27664:10;:19::i;:::-;27566:117;;;;;;;;;;27712:28;27732:7;27712;:15;27720:6;27712:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27694:7;:15;27702:6;27694:15;;;;;;;;;;;;;;;:46;;;;27772:39;27795:15;27772:7;:18;27780:9;27772:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27751:7;:18;27759:9;27751:18;;;;;;;;;;;;;;;:60;;;;27843:39;27866:15;27843:7;:18;27851:9;27843:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27822:7;:18;27830:9;27822:18;;;;;;;;;;;;;;;:60;;;;27893:23;27905:4;27911;27893:11;:23::i;:::-;27949:9;27932:44;;27941:6;27932:44;;;27960:15;27932:44;;;;;;:::i;:::-;;;;;;;;27466:518;;;;;;;;:::o;27013:445::-;27112:15;27129:23;27154:12;27168:23;27193:12;27209:19;27220:7;27209:10;:19::i;:::-;27111:117;;;;;;;;;;27257:28;27277:7;27257;:15;27265:6;27257:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27239:7;:15;27247:6;27239:15;;;;;;;;;;;;;;;:46;;;;27317:39;27340:15;27317:7;:18;27325:9;27317:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27296:7;:18;27304:9;27296:18;;;;;;;;;;;;;;;:60;;;;27367:23;27379:4;27385;27367:11;:23::i;:::-;27423:9;27406:44;;27415:6;27406:44;;;27434:15;27406:44;;;;;;:::i;:::-;;;;;;;;27013:445;;;;;;;;:::o;28506:577::-;28609:15;28626:23;28651:12;28665:23;28690:12;28706:19;28717:7;28706:10;:19::i;:::-;28608:117;;;;;;;;;;28754:28;28774:7;28754;:15;28762:6;28754:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28736:7;:15;28744:6;28736:15;;;;;;;;;;;;;;;:46;;;;28811:28;28831:7;28811;:15;28819:6;28811:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28793:7;:15;28801:6;28793:15;;;;;;;;;;;;;;;:46;;;;28871:39;28894:15;28871:7;:18;28879:9;28871:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28850:7;:18;28858:9;28850:18;;;;;;;;;;;;;;;:60;;;;28942:39;28965:15;28942:7;:18;28950:9;28942:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28921:7;:18;28929:9;28921:18;;;;;;;;;;;;;;;:60;;;;28992:23;29004:4;29010;28992:11;:23::i;:::-;29048:9;29031:44;;29040:6;29031:44;;;29059:15;29031:44;;;;;;:::i;:::-;;;;;;;;28506:577;;;;;;;;:::o;30416:555::-;30466:7;30475;30495:15;30513:7;;30495:25;;30531:15;21328:18;30531:25;;30572:9;30567:289;30591:9;:16;;;;30587:1;:20;30567:289;;;30657:7;30633;:21;30641:9;30651:1;30641:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30633:21;;;;;;;;;;;;;;;;:31;:66;;;;30692:7;30668;:21;30676:9;30686:1;30676:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30668:21;;;;;;;;;;;;;;;;:31;30633:66;30629:97;;;30709:7;;21328:18;30701:25;;;;;;;;;30629:97;30751:34;30763:7;:21;30771:9;30781:1;30771:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30763:21;;;;;;;;;;;;;;;;30751:7;:11;;:34;;;;:::i;:::-;30741:44;;30810:34;30822:7;:21;30830:9;30840:1;30830:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30822:21;;;;;;;;;;;;;;;;30810:7;:11;;:34;;;;:::i;:::-;30800:44;;30609:3;;;;;:::i;:::-;;;;30567:289;;;;30880:20;21328:18;30880:7;;:11;;:20;;;;:::i;:::-;30870:7;:30;30866:61;;;30910:7;;21328:18;30902:25;;;;;;;;30866:61;30946:7;30955;30938:25;;;;;;30416:555;;;:::o;14434:98::-;14492:7;14523:1;14519;:5;;;;:::i;:::-;14512:12;;14434:98;;;;:::o;29091:147::-;29169:17;29181:4;29169:7;;:11;;:17;;;;:::i;:::-;29159:7;:27;;;;29210:20;29225:4;29210:10;;:14;;:20;;;;:::i;:::-;29197:10;:33;;;;29091:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:118::-;2850:24;2868:5;2850:24;:::i;:::-;2845:3;2838:37;2828:53;;:::o;2887:109::-;2968:21;2983:5;2968:21;:::i;:::-;2963:3;2956:34;2946:50;;:::o;3002:364::-;;3118:39;3151:5;3118:39;:::i;:::-;3173:71;3237:6;3232:3;3173:71;:::i;:::-;3166:78;;3253:52;3298:6;3293:3;3286:4;3279:5;3275:16;3253:52;:::i;:::-;3330:29;3352:6;3330:29;:::i;:::-;3325:3;3321:39;3314:46;;3094:272;;;;;:::o;3372:367::-;;3535:67;3599:2;3594:3;3535:67;:::i;:::-;3528:74;;3632:34;3628:1;3623:3;3619:11;3612:55;3698:5;3693:2;3688:3;3684:12;3677:27;3730:2;3725:3;3721:12;3714:19;;3518:221;;;:::o;3745:374::-;;3908:67;3972:2;3967:3;3908:67;:::i;:::-;3901:74;;4005:34;4001:1;3996:3;3992:11;3985:55;4071:12;4066:2;4061:3;4057:12;4050:34;4110:2;4105:3;4101:12;4094:19;;3891:228;;;:::o;4125:370::-;;4288:67;4352:2;4347:3;4288:67;:::i;:::-;4281:74;;4385:34;4381:1;4376:3;4372:11;4365:55;4451:8;4446:2;4441:3;4437:12;4430:30;4486:2;4481:3;4477:12;4470:19;;4271:224;;;:::o;4501:366::-;;4664:67;4728:2;4723:3;4664:67;:::i;:::-;4657:74;;4761:34;4757:1;4752:3;4748:11;4741:55;4827:4;4822:2;4817:3;4813:12;4806:26;4858:2;4853:3;4849:12;4842:19;;4647:220;;;:::o;4873:325::-;;5036:67;5100:2;5095:3;5036:67;:::i;:::-;5029:74;;5133:29;5129:1;5124:3;5120:11;5113:50;5189:2;5184:3;5180:12;5173:19;;5019:179;;;:::o;5204:329::-;;5367:67;5431:2;5426:3;5367:67;:::i;:::-;5360:74;;5464:33;5460:1;5455:3;5451:11;5444:54;5524:2;5519:3;5515:12;5508:19;;5350:183;;;:::o;5539:330::-;;5702:67;5766:2;5761:3;5702:67;:::i;:::-;5695:74;;5799:34;5795:1;5790:3;5786:11;5779:55;5860:2;5855:3;5851:12;5844:19;;5685:184;;;:::o;5875:373::-;;6038:67;6102:2;6097:3;6038:67;:::i;:::-;6031:74;;6135:34;6131:1;6126:3;6122:11;6115:55;6201:11;6196:2;6191:3;6187:12;6180:33;6239:2;6234:3;6230:12;6223:19;;6021:227;;;:::o;6254:369::-;;6417:67;6481:2;6476:3;6417:67;:::i;:::-;6410:74;;6514:34;6510:1;6505:3;6501:11;6494:55;6580:7;6575:2;6570:3;6566:12;6559:29;6614:2;6609:3;6605:12;6598:19;;6400:223;;;:::o;6629:368::-;;6792:67;6856:2;6851:3;6792:67;:::i;:::-;6785:74;;6889:34;6885:1;6880:3;6876:11;6869:55;6955:6;6950:2;6945:3;6941:12;6934:28;6988:2;6983:3;6979:12;6972:19;;6775:222;;;:::o;7003:376::-;;7166:67;7230:2;7225:3;7166:67;:::i;:::-;7159:74;;7263:34;7259:1;7254:3;7250:11;7243:55;7329:14;7324:2;7319:3;7315:12;7308:36;7370:2;7365:3;7361:12;7354:19;;7149:230;;;:::o;7385:118::-;7472:24;7490:5;7472:24;:::i;:::-;7467:3;7460:37;7450:53;;:::o;7509:112::-;7592:22;7608:5;7592:22;:::i;:::-;7587:3;7580:35;7570:51;;:::o;7627:222::-;;7758:2;7747:9;7743:18;7735:26;;7771:71;7839:1;7828:9;7824:17;7815:6;7771:71;:::i;:::-;7725:124;;;;:::o;7855:210::-;;7980:2;7969:9;7965:18;7957:26;;7993:65;8055:1;8044:9;8040:17;8031:6;7993:65;:::i;:::-;7947:118;;;;:::o;8071:313::-;;8222:2;8211:9;8207:18;8199:26;;8271:9;8265:4;8261:20;8257:1;8246:9;8242:17;8235:47;8299:78;8372:4;8363:6;8299:78;:::i;:::-;8291:86;;8189:195;;;;:::o;8390:419::-;;8594:2;8583:9;8579:18;8571:26;;8643:9;8637:4;8633:20;8629:1;8618:9;8614:17;8607:47;8671:131;8797:4;8671:131;:::i;:::-;8663:139;;8561:248;;;:::o;8815:419::-;;9019:2;9008:9;9004:18;8996:26;;9068:9;9062:4;9058:20;9054:1;9043:9;9039:17;9032:47;9096:131;9222:4;9096:131;:::i;:::-;9088:139;;8986:248;;;:::o;9240:419::-;;9444:2;9433:9;9429:18;9421:26;;9493:9;9487:4;9483:20;9479:1;9468:9;9464:17;9457:47;9521:131;9647:4;9521:131;:::i;:::-;9513:139;;9411:248;;;:::o;9665:419::-;;9869:2;9858:9;9854:18;9846:26;;9918:9;9912:4;9908:20;9904:1;9893:9;9889:17;9882:47;9946:131;10072:4;9946:131;:::i;:::-;9938:139;;9836:248;;;:::o;10090:419::-;;10294:2;10283:9;10279:18;10271:26;;10343:9;10337:4;10333:20;10329:1;10318:9;10314:17;10307:47;10371:131;10497:4;10371:131;:::i;:::-;10363:139;;10261:248;;;:::o;10515:419::-;;10719:2;10708:9;10704:18;10696:26;;10768:9;10762:4;10758:20;10754:1;10743:9;10739:17;10732:47;10796:131;10922:4;10796:131;:::i;:::-;10788:139;;10686:248;;;:::o;10940:419::-;;11144:2;11133:9;11129:18;11121:26;;11193:9;11187:4;11183:20;11179:1;11168:9;11164:17;11157:47;11221:131;11347:4;11221:131;:::i;:::-;11213:139;;11111:248;;;:::o;11365:419::-;;11569:2;11558:9;11554:18;11546:26;;11618:9;11612:4;11608:20;11604:1;11593:9;11589:17;11582:47;11646:131;11772:4;11646:131;:::i;:::-;11638:139;;11536:248;;;:::o;11790:419::-;;11994:2;11983:9;11979:18;11971:26;;12043:9;12037:4;12033:20;12029:1;12018:9;12014:17;12007:47;12071:131;12197:4;12071:131;:::i;:::-;12063:139;;11961:248;;;:::o;12215:419::-;;12419:2;12408:9;12404:18;12396:26;;12468:9;12462:4;12458:20;12454:1;12443:9;12439:17;12432:47;12496:131;12622:4;12496:131;:::i;:::-;12488:139;;12386:248;;;:::o;12640:419::-;;12844:2;12833:9;12829:18;12821:26;;12893:9;12887:4;12883:20;12879:1;12868:9;12864:17;12857:47;12921:131;13047:4;12921:131;:::i;:::-;12913:139;;12811:248;;;:::o;13065:222::-;;13196:2;13185:9;13181:18;13173:26;;13209:71;13277:1;13266:9;13262:17;13253:6;13209:71;:::i;:::-;13163:124;;;;:::o;13293:214::-;;13420:2;13409:9;13405:18;13397:26;;13433:67;13497:1;13486:9;13482:17;13473:6;13433:67;:::i;:::-;13387:120;;;;:::o;13513:99::-;;13599:5;13593:12;13583:22;;13572:40;;;:::o;13618:169::-;;13736:6;13731:3;13724:19;13776:4;13771:3;13767:14;13752:29;;13714:73;;;;:::o;13793:305::-;;13852:20;13870:1;13852:20;:::i;:::-;13847:25;;13886:20;13904:1;13886:20;:::i;:::-;13881:25;;14040:1;13972:66;13968:74;13965:1;13962:81;13959:2;;;14046:18;;:::i;:::-;13959:2;14090:1;14087;14083:9;14076:16;;13837:261;;;;:::o;14104:185::-;;14161:20;14179:1;14161:20;:::i;:::-;14156:25;;14195:20;14213:1;14195:20;:::i;:::-;14190:25;;14234:1;14224:2;;14239:18;;:::i;:::-;14224:2;14281:1;14278;14274:9;14269:14;;14146:143;;;;:::o;14295:348::-;;14358:20;14376:1;14358:20;:::i;:::-;14353:25;;14392:20;14410:1;14392:20;:::i;:::-;14387:25;;14580:1;14512:66;14508:74;14505:1;14502:81;14497:1;14490:9;14483:17;14479:105;14476:2;;;14587:18;;:::i;:::-;14476:2;14635:1;14632;14628:9;14617:20;;14343:300;;;;:::o;14649:191::-;;14709:20;14727:1;14709:20;:::i;:::-;14704:25;;14743:20;14761:1;14743:20;:::i;:::-;14738:25;;14782:1;14779;14776:8;14773:2;;;14787:18;;:::i;:::-;14773:2;14832:1;14829;14825:9;14817:17;;14694:146;;;;:::o;14846:96::-;;14912:24;14930:5;14912:24;:::i;:::-;14901:35;;14891:51;;;:::o;14948:90::-;;15025:5;15018:13;15011:21;15000:32;;14990:48;;;:::o;15044:126::-;;15121:42;15114:5;15110:54;15099:65;;15089:81;;;:::o;15176:77::-;;15242:5;15231:16;;15221:32;;;:::o;15259:86::-;;15334:4;15327:5;15323:16;15312:27;;15302:43;;;:::o;15351:307::-;15419:1;15429:113;15443:6;15440:1;15437:13;15429:113;;;15528:1;15523:3;15519:11;15513:18;15509:1;15504:3;15500:11;15493:39;15465:2;15462:1;15458:10;15453:15;;15429:113;;;15560:6;15557:1;15554:13;15551:2;;;15640:1;15631:6;15626:3;15622:16;15615:27;15551:2;15400:258;;;;:::o;15664:320::-;;15745:1;15739:4;15735:12;15725:22;;15792:1;15786:4;15782:12;15813:18;15803:2;;15869:4;15861:6;15857:17;15847:27;;15803:2;15931;15923:6;15920:14;15900:18;15897:38;15894:2;;;15950:18;;:::i;:::-;15894:2;15715:269;;;;:::o;15990:233::-;;16052:24;16070:5;16052:24;:::i;:::-;16043:33;;16098:66;16091:5;16088:77;16085:2;;;16168:18;;:::i;:::-;16085:2;16215:1;16208:5;16204:13;16197:20;;16033:190;;;:::o;16229:180::-;16277:77;16274:1;16267:88;16374:4;16371:1;16364:15;16398:4;16395:1;16388:15;16415:180;16463:77;16460:1;16453:88;16560:4;16557:1;16550:15;16584:4;16581:1;16574:15;16601:180;16649:77;16646:1;16639:88;16746:4;16743:1;16736:15;16770:4;16767:1;16760:15;16787:102;;16879:2;16875:7;16870:2;16863:5;16859:14;16855:28;16845:38;;16835:54;;;:::o;16895:122::-;16968:24;16986:5;16968:24;:::i;:::-;16961:5;16958:35;16948:2;;17007:1;17004;16997:12;16948:2;16938:79;:::o;17023:116::-;17093:21;17108:5;17093:21;:::i;:::-;17086:5;17083:32;17073:2;;17129:1;17126;17119:12;17073:2;17063:76;:::o;17145:122::-;17218:24;17236:5;17218:24;:::i;:::-;17211:5;17208:35;17198:2;;17257:1;17254;17247:12;17198:2;17188:79;:::o

Swarm Source

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