code: func InitViper(v *viper.Viper, configName string) error {
  	var altPath = os.Getenv("FABRIC_CFG_PATH")
  	if altPath != "" {
  		// If the user has overridden the path with an envvar, its the only path
  		// we will consider
  
  		if !dirExists(altPath) {
  			return fmt.Errorf("FABRIC_CFG_PATH %s does not exist", altPath)
  		}
  
  		AddConfigPath(v, altPath)
  	} else {
  		// If we get here, we should use the default paths in priority order:
  		//
  		// *) CWD
  		// *) /etc/hyperledger/fabric
  
  		// CWD
  		AddConfigPath(v, "./")
  
  		// And finally, the official path
  		if dirExists(OfficialPath) {
  			AddConfigPath(v, OfficialPath)
  		}
  	}
  
  	// Now set the configuration file.
  	if v != nil {
  		v.SetConfigName(configName)
  	} else {
  		viper.SetConfigName(configName)
  	}
  
  	return nil
  }
docs: //----------------------------------------------------------------------------------
  // InitViper()
  //----------------------------------------------------------------------------------
  // Performs basic initialization of our viper-based configuration layer.
  // Primary thrust is to establish the paths that should be consulted to find
  // the configuration we need.  If v == nil, we will initialize the global
  // Viper instance
  //----------------------------------------------------------------------------------