// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated via go generate.
// DO NOT UPDATE MANUALLY

/*
Command syncbased runs the Syncbase daemon, which implements the
v.io/v23/services/syncbase interfaces.

Usage:
   syncbased [flags]

The syncbased flags are:
 -cpuprofile=
   If specified, write the cpu profile to the given filename.
 -dev=false
   Whether to run in development mode; required for RPCs such as
   Service.DevModeUpdateVClock.
 -engine=
   Storage engine to use: memstore or leveldb. If empty, we use the default
   storage engine, currently leveldb.
 -initial-db=
   If specified, a new database with the given id is created when setting up a
   brand new storage instance. Permissions for the database will be the service
   permissions; additionally, the blessing specified in the database id will
   have Read, Write, and Resolve. Format must conform to
   v.io/services/syncbase.Id.String: blessing,name
 -name=
   Name to mount at.
 -root-dir=
   Root dir for data storage. If empty, we write to a fresh directory created
   using ioutil.TempDir.
 -skip-publish-in-nh=false
   Whether to skip publishing in the neighborhood.

The global flags are:
 -alsologtostderr=true
   log to standard error as well as files
 -log_backtrace_at=:0
   when logging hits line file:N, emit a stack trace
 -log_dir=
   if non-empty, write log files to this directory
 -logtostderr=false
   log to standard error instead of files
 -max_stack_buf_size=4292608
   max size in bytes of the buffer to use for logging stack traces
 -metadata=<just specify -metadata to activate>
   Displays metadata for the program and exits.
 -stderrthreshold=2
   logs at or above this threshold go to stderr
 -test.bench=
   regular expression to select benchmarks to run
 -test.benchmem=false
   print memory allocations for benchmarks
 -test.benchtime=1s
   approximate run time for each benchmark
 -test.blockprofile=
   write a goroutine blocking profile to the named file after execution
 -test.blockprofilerate=1
   if >= 0, calls runtime.SetBlockProfileRate()
 -test.count=1
   run tests and benchmarks `n` times
 -test.coverprofile=
   write a coverage profile to the named file after execution
 -test.cpu=
   comma-separated list of number of CPUs to use for each test
 -test.cpuprofile=
   write a cpu profile to the named file during execution
 -test.memprofile=
   write a memory profile to the named file after execution
 -test.memprofilerate=0
   if >=0, sets runtime.MemProfileRate
 -test.outputdir=
   directory in which to write profiles
 -test.parallel=<number of threads>
   maximum test parallelism
 -test.run=
   regular expression to select tests and examples to run
 -test.short=false
   run smaller test suite to save time
 -test.timeout=0
   if positive, sets an aggregate time limit for all tests
 -test.trace=
   write an execution trace to the named file after execution
 -test.v=false
   verbose: print additional output
 -time=false
   Dump timing information to stderr before exiting the program.
 -v=0
   log level for V logs
 -v23.credentials=
   directory to use for storing security credentials
 -v23.i18n-catalogue=
   18n catalogue files to load, comma separated
 -v23.namespace.root=[/(dev.v.io:r:vprod:service:mounttabled)@ns.dev.v.io:8101]
   local namespace root; can be repeated to provided multiple roots
 -v23.permissions.file=map[]
   specify a perms file as <name>:<permsfile>
 -v23.permissions.literal=
   explicitly specify the runtime perms as a JSON-encoded access.Permissions.
   Overrides all --v23.permissions.file flags.
 -v23.proxy=
   object name of proxy service to use to export services across network
   boundaries
 -v23.tcp.address=
   address to listen on
 -v23.tcp.protocol=wsh
   protocol to listen with
 -v23.vtrace.cache-size=1024
   The number of vtrace traces to store in memory.
 -v23.vtrace.collect-regexp=
   Spans and annotations that match this regular expression will trigger trace
   collection.
 -v23.vtrace.dump-on-shutdown=true
   If true, dump all stored traces on runtime shutdown.
 -v23.vtrace.sample-rate=0
   Rate (from 0.0 to 1.0) to sample vtrace traces.
 -v23.vtrace.v=0
   The verbosity level of the log messages to be captured in traces
 -vmodule=
   comma-separated list of globpattern=N settings for filename-filtered logging
   (without the .go suffix).  E.g. foo/bar/baz.go is matched by patterns baz or
   *az or b* but not by bar/baz or baz.go or az or b.*
 -vpath=
   comma-separated list of regexppattern=N settings for file pathname-filtered
   logging (without the .go suffix).  E.g. foo/bar/baz.go is matched by patterns
   foo/bar/baz or fo.*az or oo/ba or b.z but not by foo/bar/baz.go or fo*az
*/
package main
