{
    "Function": "_withdrawBeaconChainETH",
    "File": "src/contracts/core/StrategyManager.sol",
    "Parent Contracts": [
        "src/contracts/core/StrategyManagerStorage.sol",
        "src/contracts/interfaces/IStrategyManager.sol",
        "src/contracts/permissions/Pausable.sol",
        "src/contracts/interfaces/IPausable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"
    ],
    "High-Level Calls": [
        "IEigenPodManager"
    ],
    "Internal Calls": [],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function _withdrawBeaconChainETH(address staker, address recipient, uint256 amount) internal {\n        uint256 amountToDecrement = beaconChainETHSharesToDecrementOnWithdrawal[staker];\n        if (amountToDecrement != 0) {\n            if (amount > amountToDecrement) {\n                beaconChainETHSharesToDecrementOnWithdrawal[staker] = 0;\n                // decrease `amount` appropriately, so less is sent at the end\n                amount -= amountToDecrement;\n            } else {\n                beaconChainETHSharesToDecrementOnWithdrawal[staker] = (amountToDecrement - amount);\n                // rather than setting `amount` to 0, just return early\n                return;\n            }\n        }\n        // withdraw the beaconChainETH to the recipient\n        eigenPodManager.withdrawRestakedBeaconChainETH(staker, recipient, amount);\n    }"
}