<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _handle_missing_parameters(parameter_values, all_params, required_params, existing_stack=None):
 """Handles any missing parameters. If an existing_stack is provided, look up missing parameters there. Args: parameter_values (dict):
 key/value dictionary of stack definition parameters all_params (list):
 A list of all the parameters used by the template/blueprint. required_params (list):
 A list of all the parameters required by the template/blueprint. existing_stack (dict):
 A dict representation of the stack. If provided, will be searched for any missing parameters. Returns: list of tuples: The final list of key/value pairs returned as a list of tuples. Raises: MissingParameterException: Raised if a required parameter is still missing. """

    missing_params = list(set(all_params) - set(parameter_values.keys()))
    if existing_stack and 'Parameters' in existing_stack:
        stack_parameters = [
            p["ParameterKey"] for p in existing_stack["Parameters"]
        ]
        for p in missing_params:
            if p in stack_parameters:
                logger.debug(
                    "Using previous value for parameter %s from existing "
                    "stack",
                    p
                )
                parameter_values[p] = UsePreviousParameterValue
    final_missing = list(set(required_params) - set(parameter_values.keys()))
    if final_missing:
        raise MissingParameterException(final_missing)

    return list(parameter_values.items())