code: def cf_decoder(variables, attributes,
                 concat_characters=True, mask_and_scale=True,
                 decode_times=True):
      
      variables, attributes, _ = decode_cf_variables(
          variables, attributes, concat_characters, mask_and_scale, decode_times)
      return variables, attributes
docs: Decode a set of CF encoded variables and attributes.
  
      See Also, decode_cf_variable
  
      Parameters
      ----------
      variables : dict
          A dictionary mapping from variable name to xarray.Variable
      attributes : dict
          A dictionary mapping from attribute name to value
      concat_characters : bool
          Should character arrays be concatenated to strings, for
          example: ['h', 'e', 'l', 'l', 'o'] -> 'hello'
      mask_and_scale: bool
          Lazily scale (using scale_factor and add_offset) and mask
          (using _FillValue).
      decode_times : bool
          Decode cf times ('hours since 2000-01-01') to np.datetime64.
  
      Returns
      -------
      decoded_variables : dict
          A dictionary mapping from variable name to xarray.Variable objects.
      decoded_attributes : dict
          A dictionary mapping from attribute name to values.