code: func outof(args ...interface{}) (interface{}, error) {
  	toret := "outof("
  	if len(args) < 2 {
  		return nil, fmt.Errorf("Expected at least two arguments to NOutOf. Given %d", len(args))
  	}
  
  	arg0 := args[0]
  	// govaluate treats all numbers as float64 only. But and/or may pass int/string. Allowing int/string for flexibility of caller
  	if n, ok := arg0.(float64); ok {
  		toret += strconv.Itoa(int(n))
  	} else if n, ok := arg0.(int); ok {
  		toret += strconv.Itoa(n)
  	} else if n, ok := arg0.(string); ok {
  		toret += n
  	} else {
  		return nil, fmt.Errorf("Unexpected type %s", reflect.TypeOf(arg0))
  	}
  
  	for _, arg := range args[1:] {
  		toret += ", "
  		switch t := arg.(type) {
  		case string:
  			if regex.MatchString(t) {
  				toret += "'" + t + "'"
  			} else {
  				toret += t
  			}
  		default:
  			return nil, fmt.Errorf("Unexpected type %s", reflect.TypeOf(arg))
  		}
  	}
  	return toret + ")", nil
  }
docs: // a stub function - it returns the same string as it's passed.
  // This will be evaluated by second/third passes to convert to a proto policy