code: func (a *ACLs) load(ctx *validation.Context, cfg []*config.Settings_SourceAcls) {
  	a.hosts = map[string]*hostACLs{}
  	for i, group := range cfg {
  		ctx.Enter("source_acls #%d", i)
  
  		if len(group.Readers) == 0 {
  			ctx.Errorf("at least 1 reader required")
  		}
  		if len(group.Hosts)+len(group.Projects) == 0 {
  			ctx.Errorf("at least 1 host or project required")
  		}
  
  		gReaders := a.loadReaders(ctx, group.Readers)
  		for _, hostURL := range group.Hosts {
  			ctx.Enter("host %q", hostURL)
  			a.loadHost(ctx, i, hostURL, gReaders)
  			ctx.Exit()
  		}
  		for _, projectURL := range group.Projects {
  			ctx.Enter("project %q", projectURL)
  			a.loadProject(ctx, i, projectURL, gReaders)
  			ctx.Exit()
  		}
  		ctx.Exit()
  	}
  }
docs: // load validates and loads ACLs from config.