Therefore, in the `undeploy` process, `deltaCollateralAmount` is in 18-decimal format. It is directly packed into `data` and passed to `_repayAndWithdraw` during the callback.  

As a result, the `_withdraw` functions in `StrategyLeverageAAVEv3` and `StrategyLeverageMorphoBlue` should convert the input `amount` from 18-decimal format to the token's actual decimal format. Otherwise, the wrong amount will be withdrawn.

3. In the `_undeploy` process, `deltaDebt` and fees should be converted from 18-decimal format to the `debtToken`'s actual decimal format.

4. The `_convertToCollateral` and `_convertToDebt` functions expect the `amount` parameter to be in 18-decimal format, as required for calculations by `_toDebt` and `_toCollateral` using the oracle. However, before proceeding with the swap, the amount needs to be converted to the respective token's actual decimal format.
Additionally, `_convertToCollateral` receives the token's original decimal `amount` during the deploy process, leading to incorrect calculations by the oracle.
```solidity
    /**
     * @dev Internal function to convert the specified amount from Debt Token to the underlying collateral asset cbETH, wstETH, rETH.
     *
     * This function is virtual and intended to be overridden in derived contracts for customized implementation.
     *
     * @param amount The amount to convert from debtToken.
     * @return uint256 The converted amount in the underlying collateral.
     */
    function _convertToCollateral(uint256 amount) internal virtual returns (uint256) {
        uint256 amountOutMinimum = 0;

        if (getMaxSlippage() > 0) {
            uint256 wsthETHAmount = _toCollateral(
                IOracle.PriceOptions({maxAge: getPriceMaxAge(), maxConf: getPriceMaxConf()}),
                amount,
                false
            );
            amountOutMinimum = (wsthETHAmount * (PERCENTAGE_PRECISION - getMaxSlippage())) / PERCENTAGE_PRECISION;
        }
        // 1. Swap Debt Token -> Collateral Token
        (, uint256 amountOut) = swap(
            ISwapHandler.SwapParams(
                _debtToken, // Asset In
                _collateralToken, // Asset Out
                ISwapHandler.SwapType.EXACT_INPUT, // Swap Mode
                amount, // Amount In
                amountOutMinimum, // Amount Out
                bytes("") // User Payload
            )
        );
        return amountOut;
    }

    /**
     * @dev Internal function to convert the specified amount to Debt Token from the underlying collateral.
     *
     * This function is virtual and intended to be overridden in derived contracts for customized implementation.
     *
     * @param amount The amount to convert to Debt Token.
     * @return uint256 The converted amount in Debt Token.
     */
    function _convertToDebt(uint256 amount) internal virtual returns (uint256) {
        uint256 amountOutMinimum = 0;
        if (getMaxSlippage() > 0) {
            uint256 ethAmount = _toDebt(
                IOracle.PriceOptions({maxAge: getPriceMaxAge(), maxConf: getPriceMaxConf()}),
                amount,
                false
            );
            amountOutMinimum = (ethAmount * (PERCENTAGE_PRECISION - getMaxSlippage())) / PERCENTAGE_PRECISION;
        }
        // 1.Swap Colalteral -> Debt Token
        (, uint256 amountOut) = swap(
            ISwapHandler.SwapParams(
                _collateralToken, // Asset In
                _debtToken, // Asset Out
                ISwapHandler.SwapType.EXACT_INPUT, // Swap Mode
                amount, // Amount In
                amountOutMinimum, // Amount Out
                bytes("") // User Payload
            )
        );
        return amountOut;
    }
