If token does not oversell, users cannot claim tax refund on their tax free allocation.
Users may not be able to claim tax refund\\nWithin TokenSale, upon depositing users, users have to pay tax. Then, users can receive a tax-free allocation - meaning they'll be refunded the tax they've paid on part of their deposit.\\nThe problem is that due to a unnecessary require check, users cannot claim their tax refund, unless the token has oversold.\\n```\\n function claim() external {\\n        checkingEpoch();\\n        require(\\n            uint8(epoch) > 1 && !admin.blockClaim(address(this)),\\n            "TokenSale: Not time or not allowed"\\n        );\\n\\n        Staked storage s = stakes[msg.sender];\\n        require(s.amount != 0, "TokenSale: No Deposit"); \\n        require(!s.claimed, "TokenSale: Already Claimed");\\n\\n        uint256 left;\\n        (s.share, left) = _claim(s);\\n        require(left > 0, "TokenSale: Nothing to claim");  // @audit - problematic line \\n        uint256 refundTaxAmount;\\n        if (s.taxAmount > 0) {\\n            uint256 tax = userTaxRate(s.amount, msg.sender);\\n            uint256 taxFreeAllc = _maxTaxfreeAllocation(msg.sender) * PCT_BASE;\\n            if (taxFreeAllc >= s.share) {\\n                refundTaxAmount = s.taxAmount;\\n            } else {\\n                refundTaxAmount = (left * tax) / POINT_BASE; // tax refund is on the wrong amount \\n            }\\n            usdc.safeTransferFrom(marketingWallet, msg.sender, refundTaxAmount);\\n        }\\n        s.claimed = true;\\n        usdc.safeTransfer(msg.sender, left);\\n        emit Claim(msg.sender, left);\\n    }\\n```\\n\\n```\\n    function _claim(Staked memory _s) internal view returns (uint120, uint256) {\\n        uint256 left;\\n        if (state.totalPrivateSold > (state.totalSupplyInValue)) {\\n            uint256 rate = (state.totalSupplyInValue * PCT_BASE) /\\n                state.totalPrivateSold;\\n            _s.share = uint120((uint256(_s.amount) * rate) / PCT_BASE);\\n            left = uint256(_s.amount) - uint256(_s.share);\\n        } else {\\n            _s.share = uint120(_s.amount);\\n        }\\n\\n        return (_s.share, left);\\n    }\\n```\\n\\n`left` only has value if the token has oversold. Meaning that even if the user has an infinite tax free allocation, if the token has not oversold, they won't be able to claim a tax refund.
Remove the require check
loss of funds
```\\n function claim() external {\\n        checkingEpoch();\\n        require(\\n            uint8(epoch) > 1 && !admin.blockClaim(address(this)),\\n            "TokenSale: Not time or not allowed"\\n        );\\n\\n        Staked storage s = stakes[msg.sender];\\n        require(s.amount != 0, "TokenSale: No Deposit"); \\n        require(!s.claimed, "TokenSale: Already Claimed");\\n\\n        uint256 left;\\n        (s.share, left) = _claim(s);\\n        require(left > 0, "TokenSale: Nothing to claim");  // @audit - problematic line \\n        uint256 refundTaxAmount;\\n        if (s.taxAmount > 0) {\\n            uint256 tax = userTaxRate(s.amount, msg.sender);\\n            uint256 taxFreeAllc = _maxTaxfreeAllocation(msg.sender) * PCT_BASE;\\n            if (taxFreeAllc >= s.share) {\\n                refundTaxAmount = s.taxAmount;\\n            } else {\\n                refundTaxAmount = (left * tax) / POINT_BASE; // tax refund is on the wrong amount \\n            }\\n            usdc.safeTransferFrom(marketingWallet, msg.sender, refundTaxAmount);\\n        }\\n        s.claimed = true;\\n        usdc.safeTransfer(msg.sender, left);\\n        emit Claim(msg.sender, left);\\n    }\\n```\\n