MEDIUM severity: The vulnerability lies in the claim functions of the smart contract, specifically in the `_claimDepo. The vulnerability lies in the claim functions of the smart contract, specifically in the `_claimDeposit` and `_claimRedeem` functions. These functions fail to validate whether the epoch for the request has been settled before processing the claim. This lack of validation can lead to a loss of funds...

Vulnerable code:
```\nfunction _claimDeposit(\n    address owner,\n    address receiver\n)\n    internal\n    returns (uint256 shares)\n{\n    shares = previewClaimDeposit(owner);\n\n    uint256 lastRequestId = lastDepositRequestId[owner];\n    uint256 assets = epochs[lastRequestId].depositRequestBalance[owner];\n    epochs[lastRequestId].depositRequestBalance[owner] = 0;\n    _update(address(claimableSilo), receiver, shares);\n    emit ClaimDeposit(lastRequestId, owner, receiver, assets, shares);\n}\n\nfunction previewClaimDeposit(address owner) public view returns (uint256) {\n    uint256 lastRequestId = lastDepositRequestId[owner];\n    uint256 assets = epochs[lastRequestId].depositRequestBalance[owner];\n    return _convertToShares(assets, lastRequestId, Math.Rounding.Floor);\n}\n\nfunction _convertToShares(\n    uint256 assets,\n    uint256 requestId,\n    Math.Rounding rounding\n)\n    internal\n    view\n    returns (uint256)\n{\n    if (isCurrentEpoch(requestId)) {\n        return 0;\n    }\n    uint256 totalAssets = epochs[requestId].totalAssetsSnapshotForDeposit + 1;\n    uint256 totalSupply = epochs[requestId].totalSupplySnapshotForDeposit + 1;\n\n    return assets.mulDiv(totalSupply, totalAssets, rounding);\n}\n```\n```\nfunction _claimRedeem(\n    address owner,\n    address receiver\n)\n    internal\n    whenNotPaused\n    returns (uint256 assets)\n{\n    assets = previewClaimRedeem(owner);\n    uint256 lastRequestId = lastRedeemRequestId[owner];\n    uint256 shares = epochs[lastRequestId].redeemRequestBalance[owner];\n    epochs[lastRequestId].redeemRequestBalance[owner] = 0;\n    _asset.safeTransferFrom(address(claimableSilo), address(this), assets);\n    _asset.transfer(receiver, assets);\n    emit ClaimRedeem(lastRequestId, owner, receiver, assets, shares);\n}\n\nfunction previewClaimRedeem(address owner) public view returns (uint256) {\n    uint256 lastRequestId = lastRedeemRequestId[owner];\n    uint256 shares = epochs[lastRequestId].redeemRequestBalance[owner];\n    return _convertToAssets(shares, lastRequestId, Math.Rounding.Floor);\n}\n\nfunction _convertToAssets(\n    uint256 shares,\n    uint256 requestId,\n    Math.Rounding rounding\n)\n    internal\n    view\n    returns (uint256)\n{\n    if (isCurrentEpoch(requestId)) {\n        return 0;\n    }\n    uint256 totalAssets = epochs[requestId].totalAssetsSnapshotForRedeem + 1;\n    uint256 totalSupply = epochs[requestId].totalSupplySnapshotForRedeem + 1;\n\n    return shares.mulDiv(totalAssets, totalSupply, rounding);\n}\n```\n```\nfunction test_ClaimSameEpochLossOfFunds_Scenario_A() public {\n    asset.mint(alice, 1_000e18);\n\n    vm.prank(alice);\n    vault.deposit(500e18, alice);\n\n    vm.prank(owner);\n    vault.close();\n\n    vm.prank(alice);\n    vault.requestDeposit(500e18, alice, alice, "");\n\n    assertEq(vault.pendingDepositRequest(alice), 500e18);\n\n    vm.prank(alice);\n    vault.claimDeposit(alice);\n\n    assertEq(vault.pendingDepositRequest(alice), 0);\n}\n```\n```\nfunction test_ClaimSameEpochLossOfFunds_Scenario_B() public {\n    asset.mint(alice, 1_000e18);\n\n    vm.prank(alice);\n    vault.deposit(500e18, alice);\n\n    vm.prank(owner);\n    vault.close();\n\n    vm.prank(alice);\n    vault.requestDeposit(500e18, alice, alice, "");\n\n    assertEq(vault.pendingDepositRequest(alice), 500e18);\n\n    vm.prank(bob);\n    vault.claimAndRequestDeposit(0, alice, "");\n\n    assertEq(vault.pendingDepositRequest(alice), 0);\n}\n```