```\nfunction eject(\n    uint256 shares,\n    address receiver,\n    address owner\n) public returns (uint256 assets, uint256 excessBal, bool isExcessPTs) {\n\n    // rest of code\n\n    //@audit call of interest\n    (excessBal, isExcessPTs) = _exitAndCombine(shares);\n\n    _burn(owner, shares); // Burn after percent ownership is determined in _exitAndCombine.\n\n    if (isExcessPTs) {\n        pt.transfer(receiver, excessBal);\n    } else {\n        yt.transfer(receiver, excessBal);\n    }\n\n    //@audit entire asset (adapter.target) balance transferred to caller, which includes collected YT yield and combined\n    asset.transfer(receiver, assets = asset.balanceOf(address(this)));\n\n    emit Ejected(msg.sender, receiver, owner, assets, shares,\n        isExcessPTs ? excessBal : 0,\n        isExcessPTs ? 0 : excessBal\n    );\n}\n\nfunction _exitAndCombine(uint256 shares) internal returns (uint256, bool) {\n    uint256 supply = totalSupply; // Save extra SLOAD.\n\n    uint256 lpBal      = shares.mulDivDown(space.balanceOf(address(this)), supply);\n    uint256 totalPTBal = pt.balanceOf(address(this));\n    uint256 ptShare    = shares.mulDivDown(totalPTBal, supply);\n\n    // rest of code\n\n    uint256 ytBal = shares.mulDivDown(yt.balanceOf(address(this)), supply);\n    ptShare += pt.balanceOf(address(this)) - totalPTBal;\n\n    unchecked {\n        // Safety: an inequality check is done before subtraction.\n        if (ptShare > ytBal) {\n\n            //@audit call of interest\n            divider.combine(address(adapter), maturity, ytBal);\n            return (ptShare - ytBal, true);\n        } else { // Set excess PTs to false if the balances are exactly equal.\n            divider.combine(address(adapter), maturity, ptShare);\n            return (ytBal - ptShare, false);\n        }\n    }\n}\n```\n