ETH Price: $3,250.49 (+4.35%)
Gas: 2 Gwei

Token

Honey (HONEY)
 

Overview

Max Total Supply

5,605,431.42 HONEY

Holders

103

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 2 Decimals)

Balance
188.6 HONEY

Value
$0.00
0xfc7f6864173580e4542d4e68d4a447f98dcd4103
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Honey Foundation aims to push back the limitations of DeFi through the use of Non-Fungible assets. HONEY is the reward and native asset of this new DeFi ecosystem built around NFTs.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
honeyToken

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-13
*/

/**
* This is the official smart contract of the HONEY ERC20 token.
* by Tom Pandolfi
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;


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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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);
            }
        }
    }
}

/**
 * @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.
 */
contract Ownable is Context {
    address public _owner;

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


    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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;
    }
}

contract honeyToken is Context, IERC20, Ownable { //Customizable at deployment
    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;
    mapping (address => bool) private _isCharity;
    address[] private _excluded;

    string  private _NAME;
    string  private _SYMBOL;
    uint256   private _DECIMALS;
	address public FeeAddress;

    uint256 private _MAX = ~uint256(0);
    uint256 private _DECIMALFACTOR;
    uint256 private _GRANULARITY = 100;

    uint256 private _tTotal;
    uint256 private _rTotal;

    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tCharityTotal;

    uint256 public     _TAX_FEE;
    uint256 public    _BURN_FEE;
    uint256 public _CHARITY_FEE;

    // Track original fees to bypass fees for charity account
    uint256 private ORIG_TAX_FEE;
    uint256 private ORIG_BURN_FEE;
    uint256 private ORIG_CHARITY_FEE;

    constructor (string memory _name, string memory _symbol, uint256 _decimals, uint256 _supply, uint256 _txFee,uint256 _burnFee,uint256 _charityFee,address _FeeAddress,address tokenOwner) {
		_NAME = _name;
		_SYMBOL = _symbol;
		_DECIMALS = _decimals;
		_DECIMALFACTOR = 10 ** uint256(_DECIMALS);
		_tTotal =_supply * _DECIMALFACTOR;
		_rTotal = (_MAX - (_MAX % _tTotal));
		_TAX_FEE = _txFee* 100;
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
		_isCharity[_FeeAddress] = true;
		FeeAddress = _FeeAddress;
		_owner = tokenOwner;
        _rOwned[tokenOwner] = _rTotal;

        emit Transfer(address(0),tokenOwner, _tTotal);
    }

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

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

    function decimals() public view returns (uint256) {
        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, "TOKEN20: 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, "TOKEN20: decreased allowance below zero"));
        return true;
    }

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

    function isCharity(address account) public view returns (bool) {
        return _isCharity[account];
    }

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

    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function totalCharity() public view returns (uint256) {
        return _tCharityTotal;
    }

    function deliver(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 setAsCharityAccount(address account) external onlyOwner() {
        require(!_isCharity[account], "Account is already charity account");
        _isCharity[account] = true;
		FeeAddress = account;
    }

	function burn(uint256 _value) public{
		_burn(msg.sender, _value);
	}

	function updateFee(uint256 _txFee,uint256 _burnFee,uint256 _charityFee) onlyOwner() public{
        _TAX_FEE = _txFee* 100;
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
	}


	function _burn(address _who, uint256 _value) internal {
		require(_value <= _rOwned[_who]);
		_rOwned[_who] = _rOwned[_who].sub(_value);
		_tTotal = _tTotal.sub(_value);
		emit Transfer(_who, address(0), _value);
	}

    function mint(address account, uint256 amount) onlyOwner() public {

        _tTotal = _tTotal.add(amount);
        _rOwned[account] = _rOwned[account].add(amount);
        emit Transfer(address(0), account, amount);
    }



    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "TOKEN20: approve from the zero address");
        require(spender != address(0), "TOKEN20: 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), "TOKEN20: transfer from the zero address");
        require(recipient != address(0), "TOKEN20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // Remove fees for transfers to and from charity account or to excluded account
        bool takeFee = true;
        if (_isCharity[sender] || _isCharity[recipient] || _isExcluded[recipient]) {
            takeFee = false;
        }

        if (!takeFee) removeAllFee();


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

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _standardTransferContent(sender, recipient, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _standardTransferContent(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _excludedFromTransferContent(address sender, address recipient, uint256 tTransferAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }


    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _excludedToTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _bothTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 rCharity, uint256 tFee, uint256 tBurn, uint256 tCharity) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn).sub(rCharity);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tCharityTotal = _tCharityTotal.add(tCharity);
        _tTotal = _tTotal.sub(tBurn);
		emit Transfer(address(this), address(0), tBurn);
    }


    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tFee, uint256 tBurn, uint256 tCharity) = _getTBasics(tAmount, _TAX_FEE, _BURN_FEE, _CHARITY_FEE);
        uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tBurn, tCharity);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate);
        uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tBurn, tCharity, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn, tCharity);
    }

    function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 burnFee, uint256 charityFee) private view returns (uint256, uint256, uint256) {
        uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
        uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100);
        uint256 tCharity = ((tAmount.mul(charityFee)).div(_GRANULARITY)).div(100);
        return (tFee, tBurn, tCharity);
    }

    function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) private pure returns (uint256) {
        return tAmount.sub(tFee).sub(tBurn).sub(tCharity);
    }

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

    function _getRTransferAmount(uint256 rAmount, uint256 rFee, uint256 tBurn, uint256 tCharity, uint256 currentRate) private pure returns (uint256) {
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rCharity);
        return rTransferAmount;
    }

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

    function _sendToCharity(uint256 tCharity, address sender) private {
        uint256 currentRate = _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[FeeAddress] = _rOwned[FeeAddress].add(rCharity);
        _tOwned[FeeAddress] = _tOwned[FeeAddress].add(tCharity);
        emit Transfer(sender, FeeAddress, tCharity);
    }

    function removeAllFee() private {
        if(_TAX_FEE == 0 && _BURN_FEE == 0 && _CHARITY_FEE == 0) return;

        ORIG_TAX_FEE = _TAX_FEE;
        ORIG_BURN_FEE = _BURN_FEE;
        ORIG_CHARITY_FEE = _CHARITY_FEE;

        _TAX_FEE = 0; // Initial value: 3%
        _BURN_FEE = 0; // Initial value: 3%
        _CHARITY_FEE = 0; // Initial value: 4%
    }

    function restoreAllFee() private {
        _TAX_FEE = ORIG_TAX_FEE;
        _BURN_FEE = ORIG_BURN_FEE;
        _CHARITY_FEE = ORIG_CHARITY_FEE;
    }

    function _getTaxFee() private view returns(uint256) {
        return _TAX_FEE;
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"address","name":"_FeeAddress","type":"address"},{"internalType":"address","name":"tokenOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BURN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_CHARITY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"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":"isCharity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsCharityAccount","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":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","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"},{"inputs":[{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600019600b556064600d553480156200001c57600080fd5b50604051620054bb380380620054bb833981810160405281019062000042919062000411565b88600790805190602001906200005a929190620002c1565b50876008908051906020019062000073929190620002c1565b5086600981905550600954600a6200008c919062000604565b600c81905550600c5486620000a2919062000741565b600e81905550600e54600b54620000ba9190620008bd565b600b54620000c99190620007a2565b600f81905550606485620000de919062000741565b601381905550606484620000f3919062000741565b60148190555060648362000108919062000741565b6015819055506013546016819055506014546017819055506015546018819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f54600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620002aa91906200052d565b60405180910390a350505050505050505062000a03565b828054620002cf9062000851565b90600052602060002090601f016020900481019282620002f357600085556200033f565b82601f106200030e57805160ff19168380011785556200033f565b828001600101855582156200033f579182015b828111156200033e57825182559160200191906001019062000321565b5b5090506200034e919062000352565b5090565b5b808211156200036d57600081600090555060010162000353565b5090565b600062000388620003828462000573565b6200054a565b905082815260208101848484011115620003a157600080fd5b620003ae8482856200081b565b509392505050565b600081519050620003c781620009cf565b92915050565b600082601f830112620003df57600080fd5b8151620003f184826020860162000371565b91505092915050565b6000815190506200040b81620009e9565b92915050565b60008060008060008060008060006101208a8c0312156200043157600080fd5b60008a015167ffffffffffffffff8111156200044c57600080fd5b6200045a8c828d01620003cd565b99505060208a015167ffffffffffffffff8111156200047857600080fd5b620004868c828d01620003cd565b9850506040620004998c828d01620003fa565b9750506060620004ac8c828d01620003fa565b9650506080620004bf8c828d01620003fa565b95505060a0620004d28c828d01620003fa565b94505060c0620004e58c828d01620003fa565b93505060e0620004f88c828d01620003b6565b9250506101006200050c8c828d01620003b6565b9150509295985092959850929598565b620005278162000811565b82525050565b60006020820190506200054460008301846200051c565b92915050565b60006200055662000569565b905062000564828262000887565b919050565b6000604051905090565b600067ffffffffffffffff82111562000591576200059062000982565b5b6200059c82620009b1565b9050602081019050919050565b6000808291508390505b6001851115620005fb57808604811115620005d357620005d2620008f5565b5b6001851615620005e35780820291505b8081029050620005f385620009c2565b9450620005b3565b94509492505050565b6000620006118262000811565b91506200061e8362000811565b92506200064d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000655565b905092915050565b6000826200066757600190506200073a565b816200067757600090506200073a565b81600181146200069057600281146200069b57620006d1565b60019150506200073a565b60ff841115620006b057620006af620008f5565b5b8360020a915084821115620006ca57620006c9620008f5565b5b506200073a565b5060208310610133831016604e8410600b84101617156200070b5782820a905083811115620007055762000704620008f5565b5b6200073a565b6200071a8484846001620005a9565b92509050818404811115620007345762000733620008f5565b5b81810290505b9392505050565b60006200074e8262000811565b91506200075b8362000811565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007975762000796620008f5565b5b828202905092915050565b6000620007af8262000811565b9150620007bc8362000811565b925082821015620007d257620007d1620008f5565b5b828203905092915050565b6000620007ea82620007f1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200083b5780820151818401526020810190506200081e565b838111156200084b576000848401525b50505050565b600060028204905060018216806200086a57607f821691505b6020821081141562000881576200088062000953565b5b50919050565b6200089282620009b1565b810181811067ffffffffffffffff82111715620008b457620008b362000982565b5b80604052505050565b6000620008ca8262000811565b9150620008d78362000811565b925082620008ea57620008e962000924565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b620009da81620007dd565b8114620009e657600080fd5b50565b620009f48162000811565b811462000a0057600080fd5b50565b614aa88062000a136000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806377ef79931161011a578063b5862428116100ad578063e81ffbef1161007c578063e81ffbef146105e0578063f2cc0c1814610610578063f2fde38b1461062c578063f84354f114610648578063fc061a4f14610664576101fb565b8063b586242814610544578063cba0e99614610562578063d608b3b214610592578063dd62ed3e146105b0576101fb565b8063a457c2d7116100e9578063a457c2d7146104a8578063a9059cbb146104d8578063ae9dd5e014610508578063b2bdfa7b14610526576101fb565b806377ef7993146104305780637b7e8bac1461044e5780638da5cb5b1461046c57806395d89b411461048a576101fb565b80633bd5d173116101925780634549b039116101615780634549b039146103aa578063457bdf6c146103da57806370a08231146103f6578063715018a614610426576101fb565b80633bd5d173146103385780633c9f861d1461035457806340c10f191461037257806342966c681461038e576101fb565b806323b872dd116101ce57806323b872dd1461028a5780632d838119146102ba578063313ce567146102ea5780633950935114610308576101fb565b806306fdde0314610200578063095ea7b31461021e57806313114a9d1461024e57806318160ddd1461026c575b600080fd5b610208610680565b6040516102159190614160565b60405180910390f35b61023860048036038101906102339190613dea565b610712565b6040516102459190614145565b60405180910390f35b610256610730565b6040516102639190614342565b60405180910390f35b61027461073a565b6040516102819190614342565b60405180910390f35b6102a4600480360381019061029f9190613d9b565b610744565b6040516102b19190614145565b60405180910390f35b6102d460048036038101906102cf9190613e26565b61081d565b6040516102e19190614342565b60405180910390f35b6102f261088b565b6040516102ff9190614342565b60405180910390f35b610322600480360381019061031d9190613dea565b610895565b60405161032f9190614145565b60405180910390f35b610352600480360381019061034d9190613e26565b610948565b005b61035c610ac4565b6040516103699190614342565b60405180910390f35b61038c60048036038101906103879190613dea565b610ace565b005b6103a860048036038101906103a39190613e26565b610c7d565b005b6103c460048036038101906103bf9190613e4f565b610c8a565b6040516103d19190614342565b60405180910390f35b6103f460048036038101906103ef9190613d36565b610d10565b005b610410600480360381019061040b9190613d36565b610ece565b60405161041d9190614342565b60405180910390f35b61042e610fb9565b005b61043861110c565b6040516104459190614342565b60405180910390f35b610456611112565b604051610463919061412a565b60405180910390f35b610474611138565b604051610481919061412a565b60405180910390f35b610492611161565b60405161049f9190614160565b60405180910390f35b6104c260048036038101906104bd9190613dea565b6111f3565b6040516104cf9190614145565b60405180910390f35b6104f260048036038101906104ed9190613dea565b6112c0565b6040516104ff9190614145565b60405180910390f35b6105106112de565b60405161051d9190614342565b60405180910390f35b61052e6112e4565b60405161053b919061412a565b60405180910390f35b61054c611308565b6040516105599190614342565b60405180910390f35b61057c60048036038101906105779190613d36565b61130e565b6040516105899190614145565b60405180910390f35b61059a611364565b6040516105a79190614342565b60405180910390f35b6105ca60048036038101906105c59190613d5f565b61136e565b6040516105d79190614342565b60405180910390f35b6105fa60048036038101906105f59190613d36565b6113f5565b6040516106079190614145565b60405180910390f35b61062a60048036038101906106259190613d36565b61144b565b005b61064660048036038101906106419190613d36565b6116ff565b005b610662600480360381019061065d9190613d36565b6118c1565b005b61067e60048036038101906106799190613e8b565b611ca8565b005b60606007805461068f90614509565b80601f01602080910402602001604051908101604052809291908181526020018280546106bb90614509565b80156107085780601f106106dd57610100808354040283529160200191610708565b820191906000526020600020905b8154815290600101906020018083116106eb57829003601f168201915b5050505050905090565b600061072661071f611d96565b8484611d9e565b6001905092915050565b6000601054905090565b6000600e54905090565b6000610751848484611f69565b6108128461075d611d96565b61080d856040518060600160405280602a8152602001614a49602a9139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c3611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a29092919063ffffffff16565b611d9e565b600190509392505050565b6000600f54821115610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b906141c2565b60405180910390fd5b600061086e612506565b9050610883818461253190919063ffffffff16565b915050919050565b6000600954905090565b600061093e6108a2611d96565b8461093985600360006108b3611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b611d9e565b6001905092915050565b6000610952611d96565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890614322565b60405180910390fd5b60006109ec836125d9565b5050505050509050610a4681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a9e81600f5461266790919063ffffffff16565b600f81905550610ab98360105461257b90919063ffffffff16565b601081905550505050565b6000601154905090565b610ad6611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a906142a2565b60405180910390fd5b610b7881600e5461257b90919063ffffffff16565b600e81905550610bd081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c719190614342565b60405180910390a35050565b610c8733826126b1565b50565b6000600e54831115610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614262565b60405180910390fd5b81610cf2576000610ce1846125d9565b505050505050905080915050610d0a565b6000610cfd846125d9565b5050505050915050809150505b92915050565b610d18611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906142a2565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990614242565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f6957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610fb4565b610fb1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d565b90505b919050565b610fc1611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606008805461117090614509565b80601f016020809104026020016040519081016040528092919081815260200182805461119c90614509565b80156111e95780601f106111be576101008083540402835291602001916111e9565b820191906000526020600020905b8154815290600101906020018083116111cc57829003601f168201915b5050505050905090565b60006112b6611200611d96565b846112b185604051806060016040528060278152602001614a22602791396003600061122a611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a29092919063ffffffff16565b611d9e565b6001905092915050565b60006112d46112cd611d96565b8484611f69565b6001905092915050565b60155481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601254905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611453611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906142a2565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614222565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611641576115fd600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611707611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb906141e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118c9611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d906142a2565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614222565b60405180910390fd5b60005b600680549050811015611ca4578173ffffffffffffffffffffffffffffffffffffffff1660068281548110611a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c915760066001600680549050611a9e919061445a565b81548110611ad5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611b3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ca4565b8080611c9c9061453b565b9150506119e5565b5050565b611cb0611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d34906142a2565b60405180910390fd5b606483611d4a9190614400565b601381905550606482611d5d9190614400565b601481905550606481611d709190614400565b601581905550601354601681905550601454601781905550601554601881905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614302565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906142e2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f5c9190614342565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd0906141a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614182565b60405180910390fd5b6000811161208c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612083906142c2565b60405180910390fd5b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121335750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121875750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561219157600090505b8061219f5761219e612817565b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122425750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225757612252848484612879565b61248e565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122fa5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561230f5761230a84848461296e565b61248d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123b35750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c8576123c3848484612a63565b61248c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561247f5761247a848484612b57565b61248b565b61248a848484612a63565b5b5b5b5b8061249c5761249b612c4d565b5b50505050565b60008383111582906124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e19190614160565b60405180910390fd5b50600083856124f9919061445a565b9050809150509392505050565b6000806000612513612c6a565b9150915061252a818361253190919063ffffffff16565b9250505090565b600061257383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fb5565b905092915050565b600080828461258a9190614379565b9050838110156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c690614202565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806125fa8b601354601454601554613018565b925092509250600061260e8c8585856130ec565b9050600061261a612506565b905060008061262a8f888561312f565b91509150600061263d8383898988613170565b9050828183878b8b8b9e509e509e509e509e509e509e505050505050505050919395979092949650565b60006126a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124a2565b905092915050565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156126fd57600080fd5b61274f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a781600e5461266790919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161280b9190614342565b60405180910390a35050565b600060135414801561282b57506000601454145b801561283957506000601554145b1561284357612877565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b6000612883612506565b90506000806000806000806000612899896125d9565b965096509650965096509650965060006128bc89846131e990919063ffffffff16565b905060006128d38a846131e990919063ffffffff16565b90506128e28d8d8d8c8c613264565b6128ec838e61342a565b6128fa87838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516129579190614342565b60405180910390a350505050505050505050505050565b6000612978612506565b9050600080600080600080600061298e896125d9565b965096509650965096509650965060006129b189846131e990919063ffffffff16565b905060006129c88a846131e990919063ffffffff16565b90506129d78d8d888c8c6137a5565b6129e1838e61342a565b6129ef87838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612a4c9190614342565b60405180910390a350505050505050505050505050565b6000612a6d612506565b90506000806000806000806000612a83896125d9565b96509650965096509650965096506000612aa689846131e990919063ffffffff16565b90506000612abd8a846131e990919063ffffffff16565b9050612acb8d8d8b8b61396b565b612ad5838e61342a565b612ae387838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612b409190614342565b60405180910390a350505050505050505050505050565b6000612b61612506565b90506000806000806000806000612b77896125d9565b96509650965096509650965096506000612b9a89846131e990919063ffffffff16565b90506000612bb18a846131e990919063ffffffff16565b9050612bc18d8d8d8c8a8d613a9b565b612bcb838e61342a565b612bd987838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612c369190614342565b60405180910390a350505050505050505050505050565b601654601381905550601754601481905550601854601581905550565b6000806000600f5490506000600e54905060005b600680549050811015612f7857826001600060068481548110612cca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612dde5750816002600060068481548110612d76577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612df557600f54600e5494509450505050612fb1565b612eab6001600060068481548110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461266790919063ffffffff16565b9250612f636002600060068481548110612eee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361266790919063ffffffff16565b91508080612f709061453b565b915050612c7e565b50612f90600e54600f5461253190919063ffffffff16565b821015612fa857600f54600e54935093505050612fb1565b81819350935050505b9091565b60008083118290612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff39190614160565b60405180910390fd5b506000838561300b91906143cf565b9050809150509392505050565b600080600080613058606461304a600d5461303c8b8d6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b905060006130966064613088600d5461307a8b8e6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b905060006130d460646130c6600d546130b88b8f6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b90508282829550955095505050509450945094915050565b60006131258261311785613109888a61266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b9050949350505050565b600080600061314784876131e990919063ffffffff16565b9050600061315e85876131e990919063ffffffff16565b90508181935093505050935093915050565b60008061318683866131e990919063ffffffff16565b9050600061319d84866131e990919063ffffffff16565b905060006131d8826131ca856131bc8c8e61266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b905080935050505095945050505050565b6000808314156131fc576000905061325e565b6000828461320a9190614400565b905082848261321991906143cf565b14613259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325090614282565b60405180910390fd5b809150505b92915050565b6132b683600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334b82600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e081600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000613434612506565b9050600061344b82856131e990919063ffffffff16565b90506134c18160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359a8460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161367e9190614342565b60405180910390a350505050565b6136c5846136b7876136a98a600f5461266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b600f819055506136e08360105461257b90919063ffffffff16565b6010819055506136fb8260115461257b90919063ffffffff16565b6011819055506137168160125461257b90919063ffffffff16565b60128190555061373182600e5461266790919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137959190614342565b60405180910390a3505050505050565b6137f782600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388c83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6139bd82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5281600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b613aed84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8283600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c1782600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cac81600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b600081359050613d06816149dc565b92915050565b600081359050613d1b816149f3565b92915050565b600081359050613d3081614a0a565b92915050565b600060208284031215613d4857600080fd5b6000613d5684828501613cf7565b91505092915050565b60008060408385031215613d7257600080fd5b6000613d8085828601613cf7565b9250506020613d9185828601613cf7565b9150509250929050565b600080600060608486031215613db057600080fd5b6000613dbe86828701613cf7565b9350506020613dcf86828701613cf7565b9250506040613de086828701613d21565b9150509250925092565b60008060408385031215613dfd57600080fd5b6000613e0b85828601613cf7565b9250506020613e1c85828601613d21565b9150509250929050565b600060208284031215613e3857600080fd5b6000613e4684828501613d21565b91505092915050565b60008060408385031215613e6257600080fd5b6000613e7085828601613d21565b9250506020613e8185828601613d0c565b9150509250929050565b600080600060608486031215613ea057600080fd5b6000613eae86828701613d21565b9350506020613ebf86828701613d21565b9250506040613ed086828701613d21565b9150509250925092565b613ee38161448e565b82525050565b613ef2816144a0565b82525050565b6000613f038261435d565b613f0d8185614368565b9350613f1d8185602086016144d6565b613f2681614611565b840191505092915050565b6000613f3e602583614368565b9150613f4982614622565b604082019050919050565b6000613f61602783614368565b9150613f6c82614671565b604082019050919050565b6000613f84602a83614368565b9150613f8f826146c0565b604082019050919050565b6000613fa7602683614368565b9150613fb28261470f565b604082019050919050565b6000613fca601b83614368565b9150613fd58261475e565b602082019050919050565b6000613fed601b83614368565b9150613ff882614787565b602082019050919050565b6000614010602283614368565b915061401b826147b0565b604082019050919050565b6000614033601f83614368565b915061403e826147ff565b602082019050919050565b6000614056602183614368565b915061406182614828565b604082019050919050565b6000614079602083614368565b915061408482614877565b602082019050919050565b600061409c602983614368565b91506140a7826148a0565b604082019050919050565b60006140bf602483614368565b91506140ca826148ef565b604082019050919050565b60006140e2602683614368565b91506140ed8261493e565b604082019050919050565b6000614105602c83614368565b91506141108261498d565b604082019050919050565b614124816144cc565b82525050565b600060208201905061413f6000830184613eda565b92915050565b600060208201905061415a6000830184613ee9565b92915050565b6000602082019050818103600083015261417a8184613ef8565b905092915050565b6000602082019050818103600083015261419b81613f31565b9050919050565b600060208201905081810360008301526141bb81613f54565b9050919050565b600060208201905081810360008301526141db81613f77565b9050919050565b600060208201905081810360008301526141fb81613f9a565b9050919050565b6000602082019050818103600083015261421b81613fbd565b9050919050565b6000602082019050818103600083015261423b81613fe0565b9050919050565b6000602082019050818103600083015261425b81614003565b9050919050565b6000602082019050818103600083015261427b81614026565b9050919050565b6000602082019050818103600083015261429b81614049565b9050919050565b600060208201905081810360008301526142bb8161406c565b9050919050565b600060208201905081810360008301526142db8161408f565b9050919050565b600060208201905081810360008301526142fb816140b2565b9050919050565b6000602082019050818103600083015261431b816140d5565b9050919050565b6000602082019050818103600083015261433b816140f8565b9050919050565b6000602082019050614357600083018461411b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000614384826144cc565b915061438f836144cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c4576143c3614584565b5b828201905092915050565b60006143da826144cc565b91506143e5836144cc565b9250826143f5576143f46145b3565b5b828204905092915050565b600061440b826144cc565b9150614416836144cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561444f5761444e614584565b5b828202905092915050565b6000614465826144cc565b9150614470836144cc565b92508282101561448357614482614584565b5b828203905092915050565b6000614499826144ac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156144f45780820151818401526020810190506144d9565b83811115614503576000848401525b50505050565b6000600282049050600182168061452157607f821691505b60208210811415614535576145346145e2565b5b50919050565b6000614546826144cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561457957614578614584565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f544f4b454e32303a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c72656164792063686172697479206163636f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6149e58161448e565b81146149f057600080fd5b50565b6149fc816144a0565b8114614a0757600080fd5b50565b614a13816144cc565b8114614a1e57600080fd5b5056fe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098a11189ca5f97a354e410b022046536908f446fe9c650967be875ec79e03dda64736f6c6343000802003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed8740000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed8740000000000000000000000000000000000000000000000000000000000000005486f6e65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005484f4e4559000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c806377ef79931161011a578063b5862428116100ad578063e81ffbef1161007c578063e81ffbef146105e0578063f2cc0c1814610610578063f2fde38b1461062c578063f84354f114610648578063fc061a4f14610664576101fb565b8063b586242814610544578063cba0e99614610562578063d608b3b214610592578063dd62ed3e146105b0576101fb565b8063a457c2d7116100e9578063a457c2d7146104a8578063a9059cbb146104d8578063ae9dd5e014610508578063b2bdfa7b14610526576101fb565b806377ef7993146104305780637b7e8bac1461044e5780638da5cb5b1461046c57806395d89b411461048a576101fb565b80633bd5d173116101925780634549b039116101615780634549b039146103aa578063457bdf6c146103da57806370a08231146103f6578063715018a614610426576101fb565b80633bd5d173146103385780633c9f861d1461035457806340c10f191461037257806342966c681461038e576101fb565b806323b872dd116101ce57806323b872dd1461028a5780632d838119146102ba578063313ce567146102ea5780633950935114610308576101fb565b806306fdde0314610200578063095ea7b31461021e57806313114a9d1461024e57806318160ddd1461026c575b600080fd5b610208610680565b6040516102159190614160565b60405180910390f35b61023860048036038101906102339190613dea565b610712565b6040516102459190614145565b60405180910390f35b610256610730565b6040516102639190614342565b60405180910390f35b61027461073a565b6040516102819190614342565b60405180910390f35b6102a4600480360381019061029f9190613d9b565b610744565b6040516102b19190614145565b60405180910390f35b6102d460048036038101906102cf9190613e26565b61081d565b6040516102e19190614342565b60405180910390f35b6102f261088b565b6040516102ff9190614342565b60405180910390f35b610322600480360381019061031d9190613dea565b610895565b60405161032f9190614145565b60405180910390f35b610352600480360381019061034d9190613e26565b610948565b005b61035c610ac4565b6040516103699190614342565b60405180910390f35b61038c60048036038101906103879190613dea565b610ace565b005b6103a860048036038101906103a39190613e26565b610c7d565b005b6103c460048036038101906103bf9190613e4f565b610c8a565b6040516103d19190614342565b60405180910390f35b6103f460048036038101906103ef9190613d36565b610d10565b005b610410600480360381019061040b9190613d36565b610ece565b60405161041d9190614342565b60405180910390f35b61042e610fb9565b005b61043861110c565b6040516104459190614342565b60405180910390f35b610456611112565b604051610463919061412a565b60405180910390f35b610474611138565b604051610481919061412a565b60405180910390f35b610492611161565b60405161049f9190614160565b60405180910390f35b6104c260048036038101906104bd9190613dea565b6111f3565b6040516104cf9190614145565b60405180910390f35b6104f260048036038101906104ed9190613dea565b6112c0565b6040516104ff9190614145565b60405180910390f35b6105106112de565b60405161051d9190614342565b60405180910390f35b61052e6112e4565b60405161053b919061412a565b60405180910390f35b61054c611308565b6040516105599190614342565b60405180910390f35b61057c60048036038101906105779190613d36565b61130e565b6040516105899190614145565b60405180910390f35b61059a611364565b6040516105a79190614342565b60405180910390f35b6105ca60048036038101906105c59190613d5f565b61136e565b6040516105d79190614342565b60405180910390f35b6105fa60048036038101906105f59190613d36565b6113f5565b6040516106079190614145565b60405180910390f35b61062a60048036038101906106259190613d36565b61144b565b005b61064660048036038101906106419190613d36565b6116ff565b005b610662600480360381019061065d9190613d36565b6118c1565b005b61067e60048036038101906106799190613e8b565b611ca8565b005b60606007805461068f90614509565b80601f01602080910402602001604051908101604052809291908181526020018280546106bb90614509565b80156107085780601f106106dd57610100808354040283529160200191610708565b820191906000526020600020905b8154815290600101906020018083116106eb57829003601f168201915b5050505050905090565b600061072661071f611d96565b8484611d9e565b6001905092915050565b6000601054905090565b6000600e54905090565b6000610751848484611f69565b6108128461075d611d96565b61080d856040518060600160405280602a8152602001614a49602a9139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c3611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a29092919063ffffffff16565b611d9e565b600190509392505050565b6000600f54821115610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b906141c2565b60405180910390fd5b600061086e612506565b9050610883818461253190919063ffffffff16565b915050919050565b6000600954905090565b600061093e6108a2611d96565b8461093985600360006108b3611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b611d9e565b6001905092915050565b6000610952611d96565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890614322565b60405180910390fd5b60006109ec836125d9565b5050505050509050610a4681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a9e81600f5461266790919063ffffffff16565b600f81905550610ab98360105461257b90919063ffffffff16565b601081905550505050565b6000601154905090565b610ad6611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a906142a2565b60405180910390fd5b610b7881600e5461257b90919063ffffffff16565b600e81905550610bd081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c719190614342565b60405180910390a35050565b610c8733826126b1565b50565b6000600e54831115610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614262565b60405180910390fd5b81610cf2576000610ce1846125d9565b505050505050905080915050610d0a565b6000610cfd846125d9565b5050505050915050809150505b92915050565b610d18611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906142a2565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990614242565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f6957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610fb4565b610fb1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d565b90505b919050565b610fc1611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606008805461117090614509565b80601f016020809104026020016040519081016040528092919081815260200182805461119c90614509565b80156111e95780601f106111be576101008083540402835291602001916111e9565b820191906000526020600020905b8154815290600101906020018083116111cc57829003601f168201915b5050505050905090565b60006112b6611200611d96565b846112b185604051806060016040528060278152602001614a22602791396003600061122a611d96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a29092919063ffffffff16565b611d9e565b6001905092915050565b60006112d46112cd611d96565b8484611f69565b6001905092915050565b60155481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601254905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611453611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906142a2565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614222565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611641576115fd600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611707611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb906141e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118c9611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d906142a2565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990614222565b60405180910390fd5b60005b600680549050811015611ca4578173ffffffffffffffffffffffffffffffffffffffff1660068281548110611a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c915760066001600680549050611a9e919061445a565b81548110611ad5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611b3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ca4565b8080611c9c9061453b565b9150506119e5565b5050565b611cb0611d96565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d34906142a2565b60405180910390fd5b606483611d4a9190614400565b601381905550606482611d5d9190614400565b601481905550606481611d709190614400565b601581905550601354601681905550601454601781905550601554601881905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614302565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906142e2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f5c9190614342565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd0906141a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614182565b60405180910390fd5b6000811161208c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612083906142c2565b60405180910390fd5b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121335750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121875750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561219157600090505b8061219f5761219e612817565b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122425750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225757612252848484612879565b61248e565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122fa5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561230f5761230a84848461296e565b61248d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123b35750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c8576123c3848484612a63565b61248c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561247f5761247a848484612b57565b61248b565b61248a848484612a63565b5b5b5b5b8061249c5761249b612c4d565b5b50505050565b60008383111582906124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e19190614160565b60405180910390fd5b50600083856124f9919061445a565b9050809150509392505050565b6000806000612513612c6a565b9150915061252a818361253190919063ffffffff16565b9250505090565b600061257383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fb5565b905092915050565b600080828461258a9190614379565b9050838110156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c690614202565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806125fa8b601354601454601554613018565b925092509250600061260e8c8585856130ec565b9050600061261a612506565b905060008061262a8f888561312f565b91509150600061263d8383898988613170565b9050828183878b8b8b9e509e509e509e509e509e509e505050505050505050919395979092949650565b60006126a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124a2565b905092915050565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156126fd57600080fd5b61274f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a781600e5461266790919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161280b9190614342565b60405180910390a35050565b600060135414801561282b57506000601454145b801561283957506000601554145b1561284357612877565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b6000612883612506565b90506000806000806000806000612899896125d9565b965096509650965096509650965060006128bc89846131e990919063ffffffff16565b905060006128d38a846131e990919063ffffffff16565b90506128e28d8d8d8c8c613264565b6128ec838e61342a565b6128fa87838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516129579190614342565b60405180910390a350505050505050505050505050565b6000612978612506565b9050600080600080600080600061298e896125d9565b965096509650965096509650965060006129b189846131e990919063ffffffff16565b905060006129c88a846131e990919063ffffffff16565b90506129d78d8d888c8c6137a5565b6129e1838e61342a565b6129ef87838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612a4c9190614342565b60405180910390a350505050505050505050505050565b6000612a6d612506565b90506000806000806000806000612a83896125d9565b96509650965096509650965096506000612aa689846131e990919063ffffffff16565b90506000612abd8a846131e990919063ffffffff16565b9050612acb8d8d8b8b61396b565b612ad5838e61342a565b612ae387838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612b409190614342565b60405180910390a350505050505050505050505050565b6000612b61612506565b90506000806000806000806000612b77896125d9565b96509650965096509650965096506000612b9a89846131e990919063ffffffff16565b90506000612bb18a846131e990919063ffffffff16565b9050612bc18d8d8d8c8a8d613a9b565b612bcb838e61342a565b612bd987838388888861368c565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612c369190614342565b60405180910390a350505050505050505050505050565b601654601381905550601754601481905550601854601581905550565b6000806000600f5490506000600e54905060005b600680549050811015612f7857826001600060068481548110612cca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612dde5750816002600060068481548110612d76577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612df557600f54600e5494509450505050612fb1565b612eab6001600060068481548110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461266790919063ffffffff16565b9250612f636002600060068481548110612eee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361266790919063ffffffff16565b91508080612f709061453b565b915050612c7e565b50612f90600e54600f5461253190919063ffffffff16565b821015612fa857600f54600e54935093505050612fb1565b81819350935050505b9091565b60008083118290612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff39190614160565b60405180910390fd5b506000838561300b91906143cf565b9050809150509392505050565b600080600080613058606461304a600d5461303c8b8d6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b905060006130966064613088600d5461307a8b8e6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b905060006130d460646130c6600d546130b88b8f6131e990919063ffffffff16565b61253190919063ffffffff16565b61253190919063ffffffff16565b90508282829550955095505050509450945094915050565b60006131258261311785613109888a61266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b9050949350505050565b600080600061314784876131e990919063ffffffff16565b9050600061315e85876131e990919063ffffffff16565b90508181935093505050935093915050565b60008061318683866131e990919063ffffffff16565b9050600061319d84866131e990919063ffffffff16565b905060006131d8826131ca856131bc8c8e61266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b905080935050505095945050505050565b6000808314156131fc576000905061325e565b6000828461320a9190614400565b905082848261321991906143cf565b14613259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325090614282565b60405180910390fd5b809150505b92915050565b6132b683600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334b82600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e081600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000613434612506565b9050600061344b82856131e990919063ffffffff16565b90506134c18160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359a8460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161367e9190614342565b60405180910390a350505050565b6136c5846136b7876136a98a600f5461266790919063ffffffff16565b61266790919063ffffffff16565b61266790919063ffffffff16565b600f819055506136e08360105461257b90919063ffffffff16565b6010819055506136fb8260115461257b90919063ffffffff16565b6011819055506137168160125461257b90919063ffffffff16565b60128190555061373182600e5461266790919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137959190614342565b60405180910390a3505050505050565b6137f782600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388c83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6139bd82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5281600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b613aed84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b8283600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266790919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c1782600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cac81600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257b90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b600081359050613d06816149dc565b92915050565b600081359050613d1b816149f3565b92915050565b600081359050613d3081614a0a565b92915050565b600060208284031215613d4857600080fd5b6000613d5684828501613cf7565b91505092915050565b60008060408385031215613d7257600080fd5b6000613d8085828601613cf7565b9250506020613d9185828601613cf7565b9150509250929050565b600080600060608486031215613db057600080fd5b6000613dbe86828701613cf7565b9350506020613dcf86828701613cf7565b9250506040613de086828701613d21565b9150509250925092565b60008060408385031215613dfd57600080fd5b6000613e0b85828601613cf7565b9250506020613e1c85828601613d21565b9150509250929050565b600060208284031215613e3857600080fd5b6000613e4684828501613d21565b91505092915050565b60008060408385031215613e6257600080fd5b6000613e7085828601613d21565b9250506020613e8185828601613d0c565b9150509250929050565b600080600060608486031215613ea057600080fd5b6000613eae86828701613d21565b9350506020613ebf86828701613d21565b9250506040613ed086828701613d21565b9150509250925092565b613ee38161448e565b82525050565b613ef2816144a0565b82525050565b6000613f038261435d565b613f0d8185614368565b9350613f1d8185602086016144d6565b613f2681614611565b840191505092915050565b6000613f3e602583614368565b9150613f4982614622565b604082019050919050565b6000613f61602783614368565b9150613f6c82614671565b604082019050919050565b6000613f84602a83614368565b9150613f8f826146c0565b604082019050919050565b6000613fa7602683614368565b9150613fb28261470f565b604082019050919050565b6000613fca601b83614368565b9150613fd58261475e565b602082019050919050565b6000613fed601b83614368565b9150613ff882614787565b602082019050919050565b6000614010602283614368565b915061401b826147b0565b604082019050919050565b6000614033601f83614368565b915061403e826147ff565b602082019050919050565b6000614056602183614368565b915061406182614828565b604082019050919050565b6000614079602083614368565b915061408482614877565b602082019050919050565b600061409c602983614368565b91506140a7826148a0565b604082019050919050565b60006140bf602483614368565b91506140ca826148ef565b604082019050919050565b60006140e2602683614368565b91506140ed8261493e565b604082019050919050565b6000614105602c83614368565b91506141108261498d565b604082019050919050565b614124816144cc565b82525050565b600060208201905061413f6000830184613eda565b92915050565b600060208201905061415a6000830184613ee9565b92915050565b6000602082019050818103600083015261417a8184613ef8565b905092915050565b6000602082019050818103600083015261419b81613f31565b9050919050565b600060208201905081810360008301526141bb81613f54565b9050919050565b600060208201905081810360008301526141db81613f77565b9050919050565b600060208201905081810360008301526141fb81613f9a565b9050919050565b6000602082019050818103600083015261421b81613fbd565b9050919050565b6000602082019050818103600083015261423b81613fe0565b9050919050565b6000602082019050818103600083015261425b81614003565b9050919050565b6000602082019050818103600083015261427b81614026565b9050919050565b6000602082019050818103600083015261429b81614049565b9050919050565b600060208201905081810360008301526142bb8161406c565b9050919050565b600060208201905081810360008301526142db8161408f565b9050919050565b600060208201905081810360008301526142fb816140b2565b9050919050565b6000602082019050818103600083015261431b816140d5565b9050919050565b6000602082019050818103600083015261433b816140f8565b9050919050565b6000602082019050614357600083018461411b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000614384826144cc565b915061438f836144cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c4576143c3614584565b5b828201905092915050565b60006143da826144cc565b91506143e5836144cc565b9250826143f5576143f46145b3565b5b828204905092915050565b600061440b826144cc565b9150614416836144cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561444f5761444e614584565b5b828202905092915050565b6000614465826144cc565b9150614470836144cc565b92508282101561448357614482614584565b5b828203905092915050565b6000614499826144ac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156144f45780820151818401526020810190506144d9565b83811115614503576000848401525b50505050565b6000600282049050600182168061452157607f821691505b60208210811415614535576145346145e2565b5b50919050565b6000614546826144cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561457957614578614584565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f544f4b454e32303a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c72656164792063686172697479206163636f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6149e58161448e565b81146149f057600080fd5b50565b6149fc816144a0565b8114614a0757600080fd5b50565b614a13816144cc565b8114614a1e57600080fd5b5056fe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098a11189ca5f97a354e410b022046536908f446fe9c650967be875ec79e03dda64736f6c63430008020033

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

00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed8740000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed8740000000000000000000000000000000000000000000000000000000000000005486f6e65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005484f4e4559000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Honey
Arg [1] : _symbol (string): HONEY
Arg [2] : _decimals (uint256): 2
Arg [3] : _supply (uint256): 10000000
Arg [4] : _txFee (uint256): 0
Arg [5] : _burnFee (uint256): 0
Arg [6] : _charityFee (uint256): 0
Arg [7] : _FeeAddress (address): 0x6ce53Bf5BbdFC61091A9af296FA20BB23abED874
Arg [8] : tokenOwner (address): 0x6ce53Bf5BbdFC61091A9af296FA20BB23abED874

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [3] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed874
Arg [8] : 0000000000000000000000006ce53bf5bbdfc61091a9af296fa20bb23abed874
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 486f6e6579000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [12] : 484f4e4559000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

16662:17201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18594:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19508:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20739:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18873:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19677:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21864:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18780:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20000:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21032:378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20834:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23777:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23171:71;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21418:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22951:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18976:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16108:148;;;:::i;:::-;;17578:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17221:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15466:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18685:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20226:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19182:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17612:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15269:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17544:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20505:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20930:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19357:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20623:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22125:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16411:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22465:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23247:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18594:83;18631:13;18664:5;18657:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18594:83;:::o;19508:161::-;19583:4;19600:39;19609:12;:10;:12::i;:::-;19623:7;19632:6;19600:8;:39::i;:::-;19657:4;19650:11;;19508:161;;;;:::o;20739:87::-;20781:7;20808:10;;20801:17;;20739:87;:::o;18873:95::-;18926:7;18953;;18946:14;;18873:95;:::o;19677:315::-;19775:4;19792:36;19802:6;19810:9;19821:6;19792:9;:36::i;:::-;19839:123;19848:6;19856:12;:10;:12::i;:::-;19870:91;19908:6;19870:91;;;;;;;;;;;;;;;;;:11;:19;19882:6;19870:19;;;;;;;;;;;;;;;:33;19890:12;:10;:12::i;:::-;19870:33;;;;;;;;;;;;;;;;:37;;:91;;;;;:::i;:::-;19839:8;:123::i;:::-;19980:4;19973:11;;19677:315;;;;;:::o;21864:253::-;21930:7;21969;;21958;:18;;21950:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22034:19;22057:10;:8;:10::i;:::-;22034:33;;22085:24;22097:11;22085:7;:11;;:24;;;;:::i;:::-;22078:31;;;21864:253;;;:::o;18780:85::-;18821:7;18848:9;;18841:16;;18780:85;:::o;20000:218::-;20088:4;20105:83;20114:12;:10;:12::i;:::-;20128:7;20137:50;20176:10;20137:11;:25;20149:12;:10;:12::i;:::-;20137:25;;;;;;;;;;;;;;;:34;20163:7;20137:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20105:8;:83::i;:::-;20206:4;20199:11;;20000:218;;;;:::o;21032:378::-;21084:14;21101:12;:10;:12::i;:::-;21084:29;;21133:11;:19;21145:6;21133:19;;;;;;;;;;;;;;;;;;;;;;;;;21132:20;21124:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21213:15;21238:19;21249:7;21238:10;:19::i;:::-;21212:45;;;;;;;;21286:28;21306:7;21286;:15;21294:6;21286:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21268:7;:15;21276:6;21268:15;;;;;;;;;;;;;;;:46;;;;21335:20;21347:7;21335;;:11;;:20;;;;:::i;:::-;21325:7;:30;;;;21379:23;21394:7;21379:10;;:14;;:23;;;;:::i;:::-;21366:10;:36;;;;21032:378;;;:::o;20834:88::-;20876:7;20903:11;;20896:18;;20834:88;:::o;23777:227::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23866:19:::1;23878:6;23866:7;;:11;;:19;;;;:::i;:::-;23856:7;:29;;;;23915:28;23936:6;23915:7;:16;23923:7;23915:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;23896:7;:16;23904:7;23896:16;;;;;;;;;;;;;;;:47;;;;23980:7;23959:37;;23976:1;23959:37;;;23989:6;23959:37;;;;;;:::i;:::-;;;;;;;;23777:227:::0;;:::o;23171:71::-;23212:25;23218:10;23230:6;23212:5;:25::i;:::-;23171:71;:::o;21418:438::-;21508:7;21547;;21536;:18;;21528:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21606:17;21601:248;;21641:15;21666:19;21677:7;21666:10;:19::i;:::-;21640:45;;;;;;;;21707:7;21700:14;;;;;21601:248;21749:23;21781:19;21792:7;21781:10;:19::i;:::-;21747:53;;;;;;;;21822:15;21815:22;;;21418:438;;;;;:::o;22951:215::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23038:10:::1;:19;23049:7;23038:19;;;;;;;;;;;;;;;;;;;;;;;;;23037:20;23029:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23129:4;23107:10;:19;23118:7;23107:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;23151:7;23138:10;;:20;;;;;;;;;;;;;;;;;;22951:215:::0;:::o;18976:198::-;19042:7;19066:11;:20;19078:7;19066:20;;;;;;;;;;;;;;;;;;;;;;;;;19062:49;;;19095:7;:16;19103:7;19095:16;;;;;;;;;;;;;;;;19088:23;;;;19062:49;19129:37;19149:7;:16;19157:7;19149:16;;;;;;;;;;;;;;;;19129:19;:37::i;:::-;19122:44;;18976:198;;;;:::o;16108:148::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16215:1:::1;16178:40;;16199:6;::::0;::::1;;;;;;;;16178:40;;;;;;;;;;;;16246:1;16229:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16108:148::o:0;17578:27::-;;;;:::o;17221:25::-;;;;;;;;;;;;;:::o;15466:79::-;15504:7;15531:6;;;;;;;;;;;15524:13;;15466:79;:::o;18685:87::-;18724:13;18757:7;18750:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18685:87;:::o;20226:271::-;20319:4;20336:131;20345:12;:10;:12::i;:::-;20359:7;20368:98;20407:15;20368:98;;;;;;;;;;;;;;;;;:11;:25;20380:12;:10;:12::i;:::-;20368:25;;;;;;;;;;;;;;;:34;20394:7;20368:34;;;;;;;;;;;;;;;;:38;;:98;;;;;:::i;:::-;20336:8;:131::i;:::-;20485:4;20478:11;;20226:271;;;;:::o;19182:167::-;19260:4;19277:42;19287:12;:10;:12::i;:::-;19301:9;19312:6;19277:9;:42::i;:::-;19337:4;19330:11;;19182:167;;;;:::o;17612:27::-;;;;:::o;15269:21::-;;;;;;;;;;;;:::o;17544:27::-;;;;:::o;20505:110::-;20563:4;20587:11;:20;20599:7;20587:20;;;;;;;;;;;;;;;;;;;;;;;;;20580:27;;20505:110;;;:::o;20930:94::-;20975:7;21002:14;;20995:21;;20930:94;:::o;19357:143::-;19438:7;19465:11;:18;19477:5;19465:18;;;;;;;;;;;;;;;:27;19484:7;19465:27;;;;;;;;;;;;;;;;19458:34;;19357:143;;;;:::o;20623:108::-;20680:4;20704:10;:19;20715:7;20704:19;;;;;;;;;;;;;;;;;;;;;;;;;20697:26;;20623:108;;;:::o;22125:332::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22207:11:::1;:20;22219:7;22207:20;;;;;;;;;;;;;;;;;;;;;;;;;22206:21;22198:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22292:1;22273:7;:16;22281:7;22273:16;;;;;;;;;;;;;;;;:20;22270:108;;;22329:37;22349:7;:16;22357:7;22349:16;;;;;;;;;;;;;;;;22329:19;:37::i;:::-;22310:7;:16;22318:7;22310:16;;;;;;;;;;;;;;;:56;;;;22270:108;22411:4;22388:11;:20;22400:7;22388:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22426:9;22441:7;22426:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22125:332:::0;:::o;16411:244::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16520:1:::1;16500:22;;:8;:22;;;;16492:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16610:8;16581:38;;16602:6;::::0;::::1;;;;;;;;16581:38;;;;;;;;;;;;16639:8;16630:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16411:244:::0;:::o;22465:478::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22546:11:::1;:20;22558:7;22546:20;;;;;;;;;;;;;;;;;;;;;;;;;22538:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22614:9;22609:327;22633:9;:16;;;;22629:1;:20;22609:327;;;22691:7;22675:23;;:9;22685:1;22675:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22671:254;;;22734:9;22763:1;22744:9;:16;;;;:20;;;;:::i;:::-;22734:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22719:9;22729:1;22719:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22803:1;22784:7;:16;22792:7;22784:16;;;;;;;;;;;;;;;:20;;;;22846:5;22823:11;:20;22835:7;22823:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22870:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22904:5;;22671:254;22651:3;;;;;:::i;:::-;;;;22609:327;;;;22465:478:::0;:::o;23247:295::-;15688:12;:10;:12::i;:::-;15678:22;;:6;;;;;;;;;;:22;;;15670:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23367:3:::1;23359:6;:11;;;;:::i;:::-;23348:8;:22;;;;23404:3;23393:8;:14;;;;:::i;:::-;23381:9;:26;;;;23440:3;23427:11;:16;;;;:::i;:::-;23412:12;:31;;;;23463:8;;23448:12;:23;;;;23492:9;;23476:13;:25;;;;23525:12;;23506:16;:31;;;;23247:295:::0;;;:::o;192:115::-;245:15;288:10;273:26;;192:115;:::o;24016:341::-;24126:1;24109:19;;:5;:19;;;;24101:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24209:1;24190:21;;:7;:21;;;;24182:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24295:6;24265:11;:18;24277:5;24265:18;;;;;;;;;;;;;;;:27;24284:7;24265:27;;;;;;;;;;;;;;;:36;;;;24333:7;24317:32;;24326:5;24317:32;;;24342:6;24317:32;;;;;;:::i;:::-;;;;;;;;24016:341;;;:::o;24365:1270::-;24480:1;24462:20;;:6;:20;;;;24454:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24566:1;24545:23;;:9;:23;;;;24537:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24638:1;24629:6;:10;24621:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:12;24802:4;24787:19;;24821:10;:18;24832:6;24821:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;24843:10;:21;24854:9;24843:21;;;;;;;;;;;;;;;;;;;;;;;;;24821:43;:69;;;;24868:11;:22;24880:9;24868:22;;;;;;;;;;;;;;;;;;;;;;;;;24821:69;24817:117;;;24917:5;24907:15;;24817:117;24951:7;24946:28;;24960:14;:12;:14::i;:::-;24946:28;24993:11;:19;25005:6;24993:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25017:11;:22;25029:9;25017:22;;;;;;;;;;;;;;;;;;;;;;;;;25016:23;24993:46;24989:597;;;25056:48;25078:6;25086:9;25097:6;25056:21;:48::i;:::-;24989:597;;;25127:11;:19;25139:6;25127:19;;;;;;;;;;;;;;;;;;;;;;;;;25126:20;:46;;;;;25150:11;:22;25162:9;25150:22;;;;;;;;;;;;;;;;;;;;;;;;;25126:46;25122:464;;;25189:46;25209:6;25217:9;25228:6;25189:19;:46::i;:::-;25122:464;;;25258:11;:19;25270:6;25258:19;;;;;;;;;;;;;;;;;;;;;;;;;25257:20;:47;;;;;25282:11;:22;25294:9;25282:22;;;;;;;;;;;;;;;;;;;;;;;;;25281:23;25257:47;25253:333;;;25321:44;25339:6;25347:9;25358:6;25321:17;:44::i;:::-;25253:333;;;25387:11;:19;25399:6;25387:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25410:11;:22;25422:9;25410:22;;;;;;;;;;;;;;;;;;;;;;;;;25387:45;25383:203;;;25449:48;25471:6;25479:9;25490:6;25449:21;:48::i;:::-;25383:203;;;25530:44;25548:6;25556:9;25567:6;25530:17;:44::i;:::-;25383:203;25253:333;25122:464;24989:597;25603:7;25598:29;;25612:15;:13;:15::i;:::-;25598:29;24365:1270;;;;:::o;5011:192::-;5097:7;5130:1;5125;:6;;5133:12;5117:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5157:9;5173:1;5169;:5;;;;:::i;:::-;5157:17;;5194:1;5187:8;;;5011:192;;;;;:::o;32134:163::-;32175:7;32196:15;32213;32232:19;:17;:19::i;:::-;32195:56;;;;32269:20;32281:7;32269;:11;;:20;;;;:::i;:::-;32262:27;;;;32134:163;:::o;6409:132::-;6467:7;6494:39;6498:1;6501;6494:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6487:46;;6409:132;;;;:::o;4108:181::-;4166:7;4186:9;4202:1;4198;:5;;;;:::i;:::-;4186:17;;4227:1;4222;:6;;4214:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4280:1;4273:8;;;4108:181;;;;:::o;30201:652::-;30260:7;30269;30278;30287;30296;30305;30314;30335:12;30349:13;30364:16;30384:55;30396:7;30405:8;;30415:9;;30426:12;;30384:11;:55::i;:::-;30334:105;;;;;;30450:23;30476:50;30495:7;30504:4;30510:5;30517:8;30476:18;:50::i;:::-;30450:76;;30537:19;30560:10;:8;:10::i;:::-;30537:33;;30582:15;30599:12;30615:39;30627:7;30636:4;30642:11;30615;:39::i;:::-;30581:73;;;;30665:23;30691:64;30711:7;30720:4;30726:5;30733:8;30743:11;30691:19;:64::i;:::-;30665:90;;30774:7;30783:15;30800:4;30806:15;30823:4;30829:5;30836:8;30766:79;;;;;;;;;;;;;;;;;;;;;;30201:652;;;;;;;;;:::o;4572:136::-;4630:7;4657:43;4661:1;4664;4657:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4650:50;;4572:136;;;;:::o;23549:220::-;23626:7;:13;23634:4;23626:13;;;;;;;;;;;;;;;;23616:6;:23;;23608:32;;;;;;23661:25;23679:6;23661:7;:13;23669:4;23661:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;23645:7;:13;23653:4;23645:13;;;;;;;;;;;;;;;:41;;;;23701:19;23713:6;23701:7;;:11;;:19;;;;:::i;:::-;23691:7;:29;;;;23753:1;23730:34;;23739:4;23730:34;;;23757:6;23730:34;;;;;;:::i;:::-;;;;;;;;23549:220;;:::o;33234:367::-;33292:1;33280:8;;:13;:31;;;;;33310:1;33297:9;;:14;33280:31;:52;;;;;33331:1;33315:12;;:17;33280:52;33277:64;;;33334:7;;33277:64;33368:8;;33353:12;:23;;;;33403:9;;33387:13;:25;;;;33442:12;;33423:16;:31;;;;33478:1;33467:8;:12;;;;33523:1;33511:9;:13;;;;33571:1;33556:12;:16;;;;33234:367;:::o;27622:671::-;27724:19;27747:10;:8;:10::i;:::-;27724:33;;27769:15;27786:23;27811:12;27825:23;27850:12;27864:13;27879:16;27899:19;27910:7;27899:10;:19::i;:::-;27768:150;;;;;;;;;;;;;;27929:13;27946:22;27956:11;27946:5;:9;;:22;;;;:::i;:::-;27929:39;;27979:16;27998:25;28011:11;27998:8;:12;;:25;;;;:::i;:::-;27979:44;;28034:80;28061:6;28069:9;28080:7;28089;28098:15;28034:26;:80::i;:::-;28125:32;28140:8;28150:6;28125:14;:32::i;:::-;28168:57;28180:4;28186:5;28193:8;28203:4;28209:5;28216:8;28168:11;:57::i;:::-;28258:9;28241:44;;28250:6;28241:44;;;28269:15;28241:44;;;;;;:::i;:::-;;;;;;;;27622:671;;;;;;;;;;;;;:::o;26570:679::-;26670:19;26693:10;:8;:10::i;:::-;26670:33;;26715:15;26732:23;26757:12;26771:23;26796:12;26810:13;26825:16;26845:19;26856:7;26845:10;:19::i;:::-;26714:150;;;;;;;;;;;;;;26875:13;26892:22;26902:11;26892:5;:9;;:22;;;;:::i;:::-;26875:39;;26925:16;26944:25;26957:11;26944:8;:12;;:25;;;;:::i;:::-;26925:44;;26980:90;27009:6;27017:9;27028:15;27045:7;27054:15;26980:28;:90::i;:::-;27081:32;27096:8;27106:6;27081:14;:32::i;:::-;27124:57;27136:4;27142:5;27149:8;27159:4;27165:5;27172:8;27124:11;:57::i;:::-;27214:9;27197:44;;27206:6;27197:44;;;27225:15;27197:44;;;;;;:::i;:::-;;;;;;;;26570:679;;;;;;;;;;;;;:::o;25643:656::-;25741:19;25764:10;:8;:10::i;:::-;25741:33;;25786:15;25803:23;25828:12;25842:23;25867:12;25881:13;25896:16;25916:19;25927:7;25916:10;:19::i;:::-;25785:150;;;;;;;;;;;;;;25946:13;25963:22;25973:11;25963:5;:9;;:22;;;;:::i;:::-;25946:39;;25996:16;26015:25;26028:11;26015:8;:12;;:25;;;;:::i;:::-;25996:44;;26051:69;26076:6;26084:9;26095:7;26104:15;26051:24;:69::i;:::-;26131:32;26146:8;26156:6;26131:14;:32::i;:::-;26174:57;26186:4;26192:5;26199:8;26209:4;26215:5;26222:8;26174:11;:57::i;:::-;26264:9;26247:44;;26256:6;26247:44;;;26275:15;26247:44;;;;;;:::i;:::-;;;;;;;;25643:656;;;;;;;;;;;;;:::o;28640:682::-;28742:19;28765:10;:8;:10::i;:::-;28742:33;;28787:15;28804:23;28829:12;28843:23;28868:12;28882:13;28897:16;28917:19;28928:7;28917:10;:19::i;:::-;28786:150;;;;;;;;;;;;;;28947:13;28964:22;28974:11;28964:5;:9;;:22;;;;:::i;:::-;28947:39;;28997:16;29016:25;29029:11;29016:8;:12;;:25;;;;:::i;:::-;28997:44;;29052:91;29073:6;29081:9;29092:7;29101;29110:15;29127;29052:20;:91::i;:::-;29154:32;29169:8;29179:6;29154:14;:32::i;:::-;29197:57;29209:4;29215:5;29222:8;29232:4;29238:5;29245:8;29197:11;:57::i;:::-;29287:9;29270:44;;29279:6;29270:44;;;29298:15;29270:44;;;;;;:::i;:::-;;;;;;;;28640:682;;;;;;;;;;;;;:::o;33609:153::-;33664:12;;33653:8;:23;;;;33699:13;;33687:9;:25;;;;33738:16;;33723:12;:31;;;;33609:153::o;32305:555::-;32355:7;32364;32384:15;32402:7;;32384:25;;32420:15;32438:7;;32420:25;;32461:9;32456:289;32480:9;:16;;;;32476:1;:20;32456:289;;;32546:7;32522;:21;32530:9;32540:1;32530:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32522:21;;;;;;;;;;;;;;;;:31;:66;;;;32581:7;32557;:21;32565:9;32575:1;32565:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32557:21;;;;;;;;;;;;;;;;:31;32522:66;32518:97;;;32598:7;;32607;;32590:25;;;;;;;;;32518:97;32640:34;32652:7;:21;32660:9;32670:1;32660:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32652:21;;;;;;;;;;;;;;;;32640:7;:11;;:34;;;;:::i;:::-;32630:44;;32699:34;32711:7;:21;32719:9;32729:1;32719:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32711:21;;;;;;;;;;;;;;;;32699:7;:11;;:34;;;;:::i;:::-;32689:44;;32498:3;;;;;:::i;:::-;;;;32456:289;;;;32769:20;32781:7;;32769;;:11;;:20;;;;:::i;:::-;32759:7;:30;32755:61;;;32799:7;;32808;;32791:25;;;;;;;;32755:61;32835:7;32844;32827:25;;;;;;32305:555;;;:::o;7037:278::-;7123:7;7155:1;7151;:5;7158:12;7143:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7182:9;7198:1;7194;:5;;;;:::i;:::-;7182:17;;7306:1;7299:8;;;7037:278;;;;;:::o;30861:427::-;30974:7;30983;30992;31012:12;31027:50;31073:3;31028:39;31054:12;;31029:19;31041:6;31029:7;:11;;:19;;;;:::i;:::-;31028:25;;:39;;;;:::i;:::-;31027:45;;:50;;;;:::i;:::-;31012:65;;31088:13;31104:51;31151:3;31105:40;31132:12;;31106:20;31118:7;31106;:11;;:20;;;;:::i;:::-;31105:26;;:40;;;;:::i;:::-;31104:46;;:51;;;;:::i;:::-;31088:67;;31166:16;31185:54;31235:3;31186:43;31216:12;;31187:23;31199:10;31187:7;:11;;:23;;;;:::i;:::-;31186:29;;:43;;;;:::i;:::-;31185:49;;:54;;;;:::i;:::-;31166:73;;31258:4;31264:5;31271:8;31250:30;;;;;;;;;30861:427;;;;;;;;:::o;31296:191::-;31410:7;31437:42;31470:8;31437:28;31459:5;31437:17;31449:4;31437:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;31430:49;;31296:191;;;;;;:::o;31495:254::-;31590:7;31599;31619:15;31637:24;31649:11;31637:7;:11;;:24;;;;:::i;:::-;31619:42;;31672:12;31687:21;31696:11;31687:4;:8;;:21;;;;:::i;:::-;31672:36;;31727:7;31736:4;31719:22;;;;;;31495:254;;;;;;:::o;31757:369::-;31893:7;31913:13;31929:22;31939:11;31929:5;:9;;:22;;;;:::i;:::-;31913:38;;31962:16;31981:25;31994:11;31981:8;:12;;:25;;;;:::i;:::-;31962:44;;32017:23;32043:42;32076:8;32043:28;32065:5;32043:17;32055:4;32043:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;32017:68;;32103:15;32096:22;;;;;31757:369;;;;;;;:::o;5462:471::-;5520:7;5770:1;5765;:6;5761:47;;;5795:1;5788:8;;;;5761:47;5820:9;5836:1;5832;:5;;;;:::i;:::-;5820:17;;5865:1;5860;5856;:5;;;;:::i;:::-;:10;5848:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5924:1;5917:8;;;5462:471;;;;;:::o;28301:331::-;28468:28;28488:7;28468;:15;28476:6;28468:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28450:7;:15;28458:6;28450:15;;;;;;;;;;;;;;;:46;;;;28525:28;28545:7;28525;:15;28533:6;28525:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28507:7;:15;28515:6;28507:15;;;;;;;;;;;;;;;:46;;;;28585:39;28608:15;28585:7;:18;28593:9;28585:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28564:7;:18;28572:9;28564:18;;;;;;;;;;;;;;;:60;;;;28301:331;;;;;:::o;32868:358::-;32945:19;32967:10;:8;:10::i;:::-;32945:32;;32988:16;33007:25;33020:11;33007:8;:12;;:25;;;;:::i;:::-;32988:44;;33065:33;33089:8;33065:7;:19;33073:10;;;;;;;;;;;33065:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;33043:7;:19;33051:10;;;;;;;;;;;33043:19;;;;;;;;;;;;;;;:55;;;;33131:33;33155:8;33131:7;:19;33139:10;;;;;;;;;;;33131:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;33109:7;:19;33117:10;;;;;;;;;;;33109:19;;;;;;;;;;;;;;;:55;;;;33197:10;;;;;;;;;;;33180:38;;33189:6;33180:38;;;33209:8;33180:38;;;;;;:::i;:::-;;;;;;;;32868:358;;;;:::o;29759:432::-;29903:42;29936:8;29903:28;29925:5;29903:17;29915:4;29903:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;29893:7;:52;;;;29969:20;29984:4;29969:10;;:14;;:20;;;;:::i;:::-;29956:10;:33;;;;30014:22;30030:5;30014:11;;:15;;:22;;;;:::i;:::-;30000:11;:36;;;;30064:28;30083:8;30064:14;;:18;;:28;;;;:::i;:::-;30047:14;:45;;;;30113:18;30125:5;30113:7;;:11;;:18;;;;:::i;:::-;30103:7;:28;;;;30173:1;30141:42;;30158:4;30141:42;;;30177:5;30141:42;;;;;;:::i;:::-;;;;;;;;29759:432;;;;;;:::o;27257:355::-;27434:28;27454:7;27434;:15;27442:6;27434:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27416:7;:15;27424:6;27416:15;;;;;;;;;;;;;;;:46;;;;27494:39;27517:15;27494:7;:18;27502:9;27494:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27473:7;:18;27481:9;27473:18;;;;;;;;;;;;;;;:60;;;;27565:39;27588:15;27565:7;:18;27573:9;27565:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27544:7;:18;27552:9;27544:18;;;;;;;;;;;;;;;:60;;;;27257:355;;;;;:::o;26307:255::-;26455:28;26475:7;26455;:15;26463:6;26455:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26437:7;:15;26445:6;26437:15;;;;;;;;;;;;;;;:46;;;;26515:39;26538:15;26515:7;:18;26523:9;26515:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26494:7;:18;26502:9;26494:18;;;;;;;;;;;;;;;:60;;;;26307:255;;;;:::o;29330:421::-;29516:28;29536:7;29516;:15;29524:6;29516:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29498:7;:15;29506:6;29498:15;;;;;;;;;;;;;;;:46;;;;29573:28;29593:7;29573;:15;29581:6;29573:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29555:7;:15;29563:6;29555:15;;;;;;;;;;;;;;;:46;;;;29633:39;29656:15;29633:7;:18;29641:9;29633:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29612:7;:18;29620:9;29612:18;;;;;;;;;;;;;;;:60;;;;29704:39;29727:15;29704:7;:18;29712:9;29704:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29683:7;:18;29691:9;29683:18;;;;;;;;;;;;;;;:60;;;;29330:421;;;;;;:::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:552::-;;;;2905:2;2893:9;2884:7;2880:23;2876:32;2873:2;;;2921:1;2918;2911:12;2873:2;2964:1;2989:53;3034:7;3025:6;3014:9;3010:22;2989:53;:::i;:::-;2979:63;;2935:117;3091:2;3117:53;3162:7;3153:6;3142:9;3138:22;3117:53;:::i;:::-;3107:63;;3062:118;3219:2;3245:53;3290:7;3281:6;3270:9;3266:22;3245:53;:::i;:::-;3235:63;;3190:118;2863:452;;;;;:::o;3321:118::-;3408:24;3426:5;3408:24;:::i;:::-;3403:3;3396:37;3386:53;;:::o;3445:109::-;3526:21;3541:5;3526:21;:::i;:::-;3521:3;3514:34;3504:50;;:::o;3560:364::-;;3676:39;3709:5;3676:39;:::i;:::-;3731:71;3795:6;3790:3;3731:71;:::i;:::-;3724:78;;3811:52;3856:6;3851:3;3844:4;3837:5;3833:16;3811:52;:::i;:::-;3888:29;3910:6;3888:29;:::i;:::-;3883:3;3879:39;3872:46;;3652:272;;;;;:::o;3930:366::-;;4093:67;4157:2;4152:3;4093:67;:::i;:::-;4086:74;;4169:93;4258:3;4169:93;:::i;:::-;4287:2;4282:3;4278:12;4271:19;;4076:220;;;:::o;4302:366::-;;4465:67;4529:2;4524:3;4465:67;:::i;:::-;4458:74;;4541:93;4630:3;4541:93;:::i;:::-;4659:2;4654:3;4650:12;4643:19;;4448:220;;;:::o;4674:366::-;;4837:67;4901:2;4896:3;4837:67;:::i;:::-;4830:74;;4913:93;5002:3;4913:93;:::i;:::-;5031:2;5026:3;5022:12;5015:19;;4820:220;;;:::o;5046:366::-;;5209:67;5273:2;5268:3;5209:67;:::i;:::-;5202:74;;5285:93;5374:3;5285:93;:::i;:::-;5403:2;5398:3;5394:12;5387:19;;5192:220;;;:::o;5418:366::-;;5581:67;5645:2;5640:3;5581:67;:::i;:::-;5574:74;;5657:93;5746:3;5657:93;:::i;:::-;5775:2;5770:3;5766:12;5759:19;;5564:220;;;:::o;5790:366::-;;5953:67;6017:2;6012:3;5953:67;:::i;:::-;5946:74;;6029:93;6118:3;6029:93;:::i;:::-;6147:2;6142:3;6138:12;6131:19;;5936:220;;;:::o;6162:366::-;;6325:67;6389:2;6384:3;6325:67;:::i;:::-;6318:74;;6401:93;6490:3;6401:93;:::i;:::-;6519:2;6514:3;6510:12;6503:19;;6308:220;;;:::o;6534:366::-;;6697:67;6761:2;6756:3;6697:67;:::i;:::-;6690:74;;6773:93;6862:3;6773:93;:::i;:::-;6891:2;6886:3;6882:12;6875:19;;6680:220;;;:::o;6906:366::-;;7069:67;7133:2;7128:3;7069:67;:::i;:::-;7062:74;;7145:93;7234:3;7145:93;:::i;:::-;7263:2;7258:3;7254:12;7247:19;;7052:220;;;:::o;7278:366::-;;7441:67;7505:2;7500:3;7441:67;:::i;:::-;7434:74;;7517:93;7606:3;7517:93;:::i;:::-;7635:2;7630:3;7626:12;7619:19;;7424:220;;;:::o;7650:366::-;;7813:67;7877:2;7872:3;7813:67;:::i;:::-;7806:74;;7889:93;7978:3;7889:93;:::i;:::-;8007:2;8002:3;7998:12;7991:19;;7796:220;;;:::o;8022:366::-;;8185:67;8249:2;8244:3;8185:67;:::i;:::-;8178:74;;8261:93;8350:3;8261:93;:::i;:::-;8379:2;8374:3;8370:12;8363:19;;8168:220;;;:::o;8394:366::-;;8557:67;8621:2;8616:3;8557:67;:::i;:::-;8550:74;;8633:93;8722:3;8633:93;:::i;:::-;8751:2;8746:3;8742:12;8735:19;;8540:220;;;:::o;8766:366::-;;8929:67;8993:2;8988:3;8929:67;:::i;:::-;8922:74;;9005:93;9094:3;9005:93;:::i;:::-;9123:2;9118:3;9114:12;9107:19;;8912:220;;;:::o;9138:118::-;9225:24;9243:5;9225:24;:::i;:::-;9220:3;9213:37;9203:53;;:::o;9262:222::-;;9393:2;9382:9;9378:18;9370:26;;9406:71;9474:1;9463:9;9459:17;9450:6;9406:71;:::i;:::-;9360:124;;;;:::o;9490:210::-;;9615:2;9604:9;9600:18;9592:26;;9628:65;9690:1;9679:9;9675:17;9666:6;9628:65;:::i;:::-;9582:118;;;;:::o;9706:313::-;;9857:2;9846:9;9842:18;9834:26;;9906:9;9900:4;9896:20;9892:1;9881:9;9877:17;9870:47;9934:78;10007:4;9998:6;9934:78;:::i;:::-;9926:86;;9824:195;;;;:::o;10025:419::-;;10229:2;10218:9;10214:18;10206:26;;10278:9;10272:4;10268:20;10264:1;10253:9;10249:17;10242:47;10306:131;10432:4;10306:131;:::i;:::-;10298:139;;10196:248;;;:::o;10450:419::-;;10654:2;10643:9;10639:18;10631:26;;10703:9;10697:4;10693:20;10689:1;10678:9;10674:17;10667:47;10731:131;10857:4;10731:131;:::i;:::-;10723:139;;10621:248;;;:::o;10875:419::-;;11079:2;11068:9;11064:18;11056:26;;11128:9;11122:4;11118:20;11114:1;11103:9;11099:17;11092:47;11156:131;11282:4;11156:131;:::i;:::-;11148:139;;11046:248;;;:::o;11300:419::-;;11504:2;11493:9;11489:18;11481:26;;11553:9;11547:4;11543:20;11539:1;11528:9;11524:17;11517:47;11581:131;11707:4;11581:131;:::i;:::-;11573:139;;11471:248;;;:::o;11725:419::-;;11929:2;11918:9;11914:18;11906:26;;11978:9;11972:4;11968:20;11964:1;11953:9;11949:17;11942:47;12006:131;12132:4;12006:131;:::i;:::-;11998:139;;11896:248;;;:::o;12150:419::-;;12354:2;12343:9;12339:18;12331:26;;12403:9;12397:4;12393:20;12389:1;12378:9;12374:17;12367:47;12431:131;12557:4;12431:131;:::i;:::-;12423:139;;12321:248;;;:::o;12575:419::-;;12779:2;12768:9;12764:18;12756:26;;12828:9;12822:4;12818:20;12814:1;12803:9;12799:17;12792:47;12856:131;12982:4;12856:131;:::i;:::-;12848:139;;12746:248;;;:::o;13000:419::-;;13204:2;13193:9;13189:18;13181:26;;13253:9;13247:4;13243:20;13239:1;13228:9;13224:17;13217:47;13281:131;13407:4;13281:131;:::i;:::-;13273:139;;13171:248;;;:::o;13425:419::-;;13629:2;13618:9;13614:18;13606:26;;13678:9;13672:4;13668:20;13664:1;13653:9;13649:17;13642:47;13706:131;13832:4;13706:131;:::i;:::-;13698:139;;13596:248;;;:::o;13850:419::-;;14054:2;14043:9;14039:18;14031:26;;14103:9;14097:4;14093:20;14089:1;14078:9;14074:17;14067:47;14131:131;14257:4;14131:131;:::i;:::-;14123:139;;14021:248;;;:::o;14275:419::-;;14479:2;14468:9;14464:18;14456:26;;14528:9;14522:4;14518:20;14514:1;14503:9;14499:17;14492:47;14556:131;14682:4;14556:131;:::i;:::-;14548:139;;14446:248;;;:::o;14700:419::-;;14904:2;14893:9;14889:18;14881:26;;14953:9;14947:4;14943:20;14939:1;14928:9;14924:17;14917:47;14981:131;15107:4;14981:131;:::i;:::-;14973:139;;14871:248;;;:::o;15125:419::-;;15329:2;15318:9;15314:18;15306:26;;15378:9;15372:4;15368:20;15364:1;15353:9;15349:17;15342:47;15406:131;15532:4;15406:131;:::i;:::-;15398:139;;15296:248;;;:::o;15550:419::-;;15754:2;15743:9;15739:18;15731:26;;15803:9;15797:4;15793:20;15789:1;15778:9;15774:17;15767:47;15831:131;15957:4;15831:131;:::i;:::-;15823:139;;15721:248;;;:::o;15975:222::-;;16106:2;16095:9;16091:18;16083:26;;16119:71;16187:1;16176:9;16172:17;16163:6;16119:71;:::i;:::-;16073:124;;;;:::o;16203:99::-;;16289:5;16283:12;16273:22;;16262:40;;;:::o;16308:169::-;;16426:6;16421:3;16414:19;16466:4;16461:3;16457:14;16442:29;;16404:73;;;;:::o;16483:305::-;;16542:20;16560:1;16542:20;:::i;:::-;16537:25;;16576:20;16594:1;16576:20;:::i;:::-;16571:25;;16730:1;16662:66;16658:74;16655:1;16652:81;16649:2;;;16736:18;;:::i;:::-;16649:2;16780:1;16777;16773:9;16766:16;;16527:261;;;;:::o;16794:185::-;;16851:20;16869:1;16851:20;:::i;:::-;16846:25;;16885:20;16903:1;16885:20;:::i;:::-;16880:25;;16924:1;16914:2;;16929:18;;:::i;:::-;16914:2;16971:1;16968;16964:9;16959:14;;16836:143;;;;:::o;16985:348::-;;17048:20;17066:1;17048:20;:::i;:::-;17043:25;;17082:20;17100:1;17082:20;:::i;:::-;17077:25;;17270:1;17202:66;17198:74;17195:1;17192:81;17187:1;17180:9;17173:17;17169:105;17166:2;;;17277:18;;:::i;:::-;17166:2;17325:1;17322;17318:9;17307:20;;17033:300;;;;:::o;17339:191::-;;17399:20;17417:1;17399:20;:::i;:::-;17394:25;;17433:20;17451:1;17433:20;:::i;:::-;17428:25;;17472:1;17469;17466:8;17463:2;;;17477:18;;:::i;:::-;17463:2;17522:1;17519;17515:9;17507:17;;17384:146;;;;:::o;17536:96::-;;17602:24;17620:5;17602:24;:::i;:::-;17591:35;;17581:51;;;:::o;17638:90::-;;17715:5;17708:13;17701:21;17690:32;;17680:48;;;:::o;17734:126::-;;17811:42;17804:5;17800:54;17789:65;;17779:81;;;:::o;17866:77::-;;17932:5;17921:16;;17911:32;;;:::o;17949:307::-;18017:1;18027:113;18041:6;18038:1;18035:13;18027:113;;;18126:1;18121:3;18117:11;18111:18;18107:1;18102:3;18098:11;18091:39;18063:2;18060:1;18056:10;18051:15;;18027:113;;;18158:6;18155:1;18152:13;18149:2;;;18238:1;18229:6;18224:3;18220:16;18213:27;18149:2;17998:258;;;;:::o;18262:320::-;;18343:1;18337:4;18333:12;18323:22;;18390:1;18384:4;18380:12;18411:18;18401:2;;18467:4;18459:6;18455:17;18445:27;;18401:2;18529;18521:6;18518:14;18498:18;18495:38;18492:2;;;18548:18;;:::i;:::-;18492:2;18313:269;;;;:::o;18588:233::-;;18650:24;18668:5;18650:24;:::i;:::-;18641:33;;18696:66;18689:5;18686:77;18683:2;;;18766:18;;:::i;:::-;18683:2;18813:1;18806:5;18802:13;18795:20;;18631:190;;;:::o;18827:180::-;18875:77;18872:1;18865:88;18972:4;18969:1;18962:15;18996:4;18993:1;18986:15;19013:180;19061:77;19058:1;19051:88;19158:4;19155:1;19148:15;19182:4;19179:1;19172:15;19199:180;19247:77;19244:1;19237:88;19344:4;19341:1;19334:15;19368:4;19365:1;19358:15;19385:102;;19477:2;19473:7;19468:2;19461:5;19457:14;19453:28;19443:38;;19433:54;;;:::o;19493:224::-;19633:34;19629:1;19621:6;19617:14;19610:58;19702:7;19697:2;19689:6;19685:15;19678:32;19599:118;:::o;19723:226::-;19863:34;19859:1;19851:6;19847:14;19840:58;19932:9;19927:2;19919:6;19915:15;19908:34;19829:120;:::o;19955:229::-;20095:34;20091:1;20083:6;20079:14;20072:58;20164:12;20159:2;20151:6;20147:15;20140:37;20061:123;:::o;20190:225::-;20330:34;20326:1;20318:6;20314:14;20307:58;20399:8;20394:2;20386:6;20382:15;20375:33;20296:119;:::o;20421:177::-;20561:29;20557:1;20549:6;20545:14;20538:53;20527:71;:::o;20604:177::-;20744:29;20740:1;20732:6;20728:14;20721:53;20710:71;:::o;20787:221::-;20927:34;20923:1;20915:6;20911:14;20904:58;20996:4;20991:2;20983:6;20979:15;20972:29;20893:115;:::o;21014:181::-;21154:33;21150:1;21142:6;21138:14;21131:57;21120:75;:::o;21201:220::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:3;21405:2;21397:6;21393:15;21386:28;21307:114;:::o;21427:182::-;21567:34;21563:1;21555:6;21551:14;21544:58;21533:76;:::o;21615:228::-;21755:34;21751:1;21743:6;21739:14;21732:58;21824:11;21819:2;21811:6;21807:15;21800:36;21721:122;:::o;21849:223::-;21989:34;21985:1;21977:6;21973:14;21966:58;22058:6;22053:2;22045:6;22041:15;22034:31;21955:117;:::o;22078:225::-;22218:34;22214:1;22206:6;22202:14;22195:58;22287:8;22282:2;22274:6;22270:15;22263:33;22184:119;:::o;22309:231::-;22449:34;22445:1;22437:6;22433:14;22426:58;22518:14;22513:2;22505:6;22501:15;22494:39;22415:125;:::o;22546:122::-;22619:24;22637:5;22619:24;:::i;:::-;22612:5;22609:35;22599:2;;22658:1;22655;22648:12;22599:2;22589:79;:::o;22674:116::-;22744:21;22759:5;22744:21;:::i;:::-;22737:5;22734:32;22724:2;;22780:1;22777;22770:12;22724:2;22714:76;:::o;22796:122::-;22869:24;22887:5;22869:24;:::i;:::-;22862:5;22859:35;22849:2;;22908:1;22905;22898:12;22849:2;22839:79;:::o

Swarm Source

ipfs://98a11189ca5f97a354e410b022046536908f446fe9c650967be875ec79e03dda
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.