def merge(base: Dict[Any, Any], extension: Dict[Any, Any]) -> Dict[Any, Any]:
    '''Merge extension into base recursively.

    **Argumetnts**

    :``base``:      dictionary to overlay values onto
    :``extension``: dictionary to overlay with

    **Return Value(s)**

    Resulting dictionary from overlaying extension on base.

    '''

    _ = copy.deepcopy(base)

    for key, value in extension.items():
        if isinstance(value, Dict) and key in _:
            _[key] = merge(_[key], value)
        else:
            _[key] = value

    return _
Merge extension into base recursively.

    **Argumetnts**

    :``base``:      dictionary to overlay values onto
    :``extension``: dictionary to overlay with

    **Return Value(s)**

    Resulting dictionary from overlaying extension on base.