code: def from_config_specs(cls, config_specs, prepare=True):
          
          bangrc = parse_bangrc()
          config_dir = bangrc.get(A.CONFIG_DIR, DEFAULT_CONFIG_DIR)
          config_paths = [
                  resolve_config_spec(cs, config_dir) for cs in config_specs
                  ]
          config = cls()
          config.update(bangrc)
          if config_paths:
              config.filepath = config_paths[0]
          for c in config_paths:
              with open(c) as f:
                  deep_merge_dicts(config, yaml.safe_load(f))
          if prepare:
              config.prepare()
          return config
docs: Alternate constructor that merges config attributes from
          ``$HOME/.bangrc`` and :attr:`config_specs` into a single
          :class:`Config` object.
  
          The first (and potentially *only* spec) in :attr:`config_specs` should
          be main configuration file for the stack to be deployed.  The returned
          object's :attr:`filepath` will be set to the absolute path of the first
          config file.
  
          If multiple config specs are supplied, their values are merged together
          in the order specified in :attr:`config_specs` - That is, later values
          override earlier values.
  
          :param config_specs:  List of config specs.
          :type config_specs:  :class:`list` of :class:`str`
  
          :param bool prepare:  Flag to control whether or not :meth:`prepare` is
              called automatically before returning the object.
  
          :rtype:  :class:`Config`