<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def configuration_callback(cmd_name, option_name, config_file_name, saved_callback, provider, implicit, ctx, param, value):
 """ Callback for reading the config file. Also takes care of calling user specified custom callback afterwards. cmd_name : str The command name. This is used to determine the configuration directory. option_name : str The name of the option. This is used for error messages. config_file_name : str The name of the configuration file. saved_callback: callable User-specified callback to be called later. provider : callable A callable that parses the configuration file and returns a dictionary of the configuration parameters. Will be called as `provider(file_path, cmd_name)`. Default: `configobj_provider()` implicit : bool Whether a implicit value should be applied if no configuration option value was provided. Default: `False` ctx : object Click context. """

    ctx.default_map = ctx.default_map or {}
    cmd_name = cmd_name or ctx.info_name

    if implicit:
        default_value = os.path.join(
            click.get_app_dir(cmd_name), config_file_name)
        param.default = default_value
        value = value or default_value

    if value:
        try:
            config = provider(value, cmd_name)
        except Exception as e:
            raise click.BadOptionUsage(option_name,
                "Error reading configuration file: {}".format(e), ctx)
        ctx.default_map.update(config)

    return saved_callback(ctx, param, value) if saved_callback else value