```\nFile: BridgeRouterFacet.sol\n    function withdraw(address bridge, uint88 zethAmount)\n        external\n        nonReentrant\n        onlyValidBridge(bridge)\n    {\n        if (zethAmount == 0) revert Errors.ParameterIsZero();\n        uint88 fee;\n        uint256 withdrawalFee = bridge.withdrawalFee();\n        uint256 vault;\n        if (bridge == rethBridge || bridge == stethBridge) {\n            vault = Vault.CARBON;\n        } else {\n            vault = s.bridge[bridge].vault;\n        }\n        if (withdrawalFee > 0) {\n            fee = zethAmount.mulU88(withdrawalFee);\n            zethAmount -= fee;\n            s.vaultUser[vault][address(this)].ethEscrowed += fee;\n        }\n        uint88 ethAmount = _ethConversion(vault, zethAmount);\n        vault.removeZeth(zethAmount, fee);\n        IBridge(bridge).withdraw(msg.sender, ethAmount);\n        emit Events.Withdraw(bridge, msg.sender, zethAmount, fee);\n    }\n// rest of code\n    function _ethConversion(uint256 vault, uint88 amount) private view returns (uint88) {\n        uint256 zethTotalNew = vault.getZethTotal();\n        uint88 zethTotal = s.vault[vault].zethTotal;\n        if (zethTotalNew >= zethTotal) {\n            // when yield is positive 1 zeth = 1 eth\n            return amount;\n        } else {\n            // negative yield means 1 zeth < 1 eth\n            return amount.mulU88(zethTotalNew).divU88(zethTotal);\n        }\n    }\n```\n